Class SessionConfig

java.lang.Object
net.i2p.data.DataStructureImpl
net.i2p.data.i2cp.SessionConfig
All Implemented Interfaces:
Serializable, DataStructure

public class SessionConfig extends DataStructureImpl
Defines the information a client must provide to create a session
Author:
jrandom
See Also:
  • Field Details

    • PROP_OFFLINE_EXPIRATION

      public static final String PROP_OFFLINE_EXPIRATION
      Seconds since epoch, NOT ms
      Since:
      0.9.38
      See Also:
    • PROP_TRANSIENT_KEY

      public static final String PROP_TRANSIENT_KEY
      Base 64, optionally preceded by sig type and ':', default DSA-SHA1
      Since:
      0.9.38
      See Also:
    • PROP_OFFLINE_SIGNATURE

      public static final String PROP_OFFLINE_SIGNATURE
      Base 64, optionally preceded by sig type and ':', default DSA-SHA1
      Since:
      0.9.38
      See Also:
  • Constructor Details

    • SessionConfig

      public SessionConfig()
    • SessionConfig

      public SessionConfig(Destination dest)
  • Method Details

    • getDestination

      public Destination getDestination()
      Retrieve the destination for which this session is supposed to connect
      Returns:
      Destination for this session
    • getCreationDate

      public Date getCreationDate()
      Determine when this session was authorized by the destination (so we can prevent replay attacks)
      Returns:
      Date
    • setCreationDate

      public void setCreationDate(Date date)
    • getOptions

      public Properties getOptions()
      Retrieve any configuration options for the session
      Returns:
      Properties of this session
    • setOptions

      public void setOptions(Properties options)
      Configure the session with the given options; keys and values 255 bytes (not chars) max each Defaults in SessionConfig options are, in general, NOT honored. Defaults are not serialized out-of-JVM, and the router does not recognize defaults in-JVM. Client side must promote defaults to the primary map. Does NOT make a copy.
      Parameters:
      options - Properties for this session
    • getSignature

      public Signature getSignature()
    • setSignature

      public void setSignature(Signature sig)
    • setOfflineSignature

      public void setOfflineSignature(long expires, SigningPublicKey transientSPK, Signature offlineSig)
      Set the offline signing data. Does NOT validate the signature. Must be called AFTER setOptions(). Will throw ISE otherwise. Side effect - modifies options.
      Throws:
      IllegalStateException
      Since:
      0.9.38
    • getOfflineExpiration

      public long getOfflineExpiration()
      Get the offline expiration
      Returns:
      Java time (ms) or 0 if not initialized or does not have offline keys
      Since:
      0.9.38
    • getTransientSigningPublicKey

      public SigningPublicKey getTransientSigningPublicKey()
      Returns:
      null on error or if not initialized or does not have offline keys
      Since:
      0.9.38
    • getOfflineSignature

      public Signature getOfflineSignature()
      Returns:
      null on error or if not initialized or does not have offline keys
      Since:
      0.9.38
    • signSessionConfig

      public void signSessionConfig(SigningPrivateKey signingKey) throws DataFormatException
      Sign the structure using the supplied private key
      Parameters:
      signingKey - SigningPrivateKey to sign with. If offline data is set, must be with the transient key.
      Throws:
      DataFormatException
    • verifySignature

      public boolean verifySignature()
      Verify that the signature matches the destination's signing public key. Note that this also returns false if the creation date is too far in the past or future. See tooOld() and getCreationDate(). As of 0.9.38, validates the offline signature if included.
      Returns:
      true only if the signature matches
    • tooOld

      public boolean tooOld()
      Misnamed, could be too old or too far in the future.
    • readBytes

      public void readBytes(InputStream rawConfig) throws DataFormatException, IOException
      Description copied from interface: DataStructure
      Load up the current object with data from the given stream. Data loaded this way must match the I2P data structure specification. Warning - many classes will throw IllegalStateException if data is already set.
      Parameters:
      rawConfig - stream to read from
      Throws:
      DataFormatException - if the data is improperly formatted
      IOException - if there was a problem reading the stream
    • writeBytes

      public void writeBytes(OutputStream out) throws DataFormatException, IOException
      Description copied from interface: DataStructure
      Write out the data structure to the stream, using the format defined in the I2P data structure specification.
      Parameters:
      out - stream to write to
      Throws:
      DataFormatException - if the data was incomplete or not yet ready to be written
      IOException - if there was a problem writing to the stream
    • equals

      public boolean equals(Object object)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object