## net.i2p.data
Class LeaseSet

    java.lang.Object
      net.i2p.data.DataStructureImpl
          net.i2p.data.DatabaseEntry
              net.i2p.data.LeaseSet

All Implemented Interfaces:
  DataStructure

    public class LeaseSet

extends DatabaseEntry

Defines the set of leases a destination currently has. Support encryption and decryption with a supplied key. Only the gateways and tunnel IDs in the individual leases are encrypted. Encrypted leases are not indicated as such. The only way to tell a lease is encrypted is to determine that the listed gateways do not exist. Routers wishing to decrypt a leaseset must have the desthash and key in their keyring. This is required for the local router as well, since the encryption is done on the client side of I2CP, the router must decrypt it back again for local usage (but not for transmission to the floodfills) Decrypted leases are only available through the getLease() method, so that storage and network transmission via writeBytes() will output the original encrypted leases and the original leaseset signature. Revocation (zero leases) isn't used anywhere. In addition: - A revoked leaseset has an EarliestLeaseDate of -1, so it will never be stored successfully. - Revocation of an encrypted leaseset will explode. - So having an included signature at all is pointless?

Author:
  jrandom

Field Summary
`static int` `MAX_LEASES` This seems like plenty

Fields inherited from class net.i2p.data.DatabaseEntry
`_currentRoutingKey, _routingKeyGenMod, _signature, KEY_TYPE_LEASESET, KEY_TYPE_ROUTERINFO`

Constructor Summary
`LeaseSet()`

Method Summary
`void` `addLease(Lease lease)`
`void` `encrypt(SessionKey key)` Encrypt the gateway and tunnel ID of each lease, leaving the expire dates unchanged.
`boolean` `equals(Object object)`
`protected byte[]` `getBytes()` Returns the raw payload data, excluding the signature, to be signed by sign().
`long` `getDate()` A common interface to the timestamp of the two subclasses.
`Destination` `getDestination()`
`long` `getEarliestLeaseDate()` Retrieve the end date of the earliest lease include in this leaseSet.
`PublicKey` `getEncryptionKey()`
`protected KeysAndCert` `getKeysAndCert()` Get the keys and the cert Identical to getDestination() in LeaseSet, and getIdentity() in RouterInfo.
`Lease` `getLease(int index)`
`int` `getLeaseCount()`
`boolean` `getReceivedAsPublished()` If true, we received this LeaseSet by a remote peer publishing it to us, rather than by searching for it ourselves or locally creating it.
`boolean` `getReceivedAsReply()` If true, we received this LeaseSet by searching for it Default false.
`SigningPublicKey` `getSigningKey()` Deprecated. unused
`int` `getType()` Get the type of the data structure.
`int` `hashCode()` the destination has enough randomness in it to use it by itself for speed
`boolean` `isCurrent(long fudge)` Determine whether ANY lease is currently valid, at least within a given fudge factor
`void` `readBytes(InputStream in)` This does NOT validate the signature
`void` `setDestination(Destination dest)`
`void` `setEncryptionKey(PublicKey encryptionKey)`
`void` `setReceivedAsPublished(boolean received)` Default false
`void` `setReceivedAsReply()` set to true @since 0.7.14
`void` `setSigningKey(SigningPublicKey key)`
`int` `size()`
`String` `toString()`
`boolean` `verifySignature()` Verify that the signature matches the lease set's destination's signing public key.
`boolean` `verifySignature(SigningPublicKey signingKey)` Deprecated. revocation unused
`void` `writeBytes(OutputStream out)` This does NOT validate the signature

Methods inherited from class net.i2p.data.DatabaseEntry
`getHash, getRoutingKey, getSignature, getSigningPublicKey, setRoutingKey, setSignature, sign, validateRoutingKey`

Methods inherited from class net.i2p.data.DataStructureImpl
`calculateHash, fromBase64, fromByteArray, read, toBase64, toByteArray`

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Field Detail

### MAX_LEASES

    public static final int MAX_LEASES

  This seems like plenty

  See Also:
    Constant Field Values

Constructor Detail

### LeaseSet

    public LeaseSet()

Method Detail

### getDate

    public long getDate()

  Description copied from class: `DatabaseEntry`
  A common interface to the timestamp of the two subclasses. Identical to getEarliestLeaseData() in LeaseSet, and getPublished() in RouterInfo. Note that for a LeaseSet this will be in the future, and for a RouterInfo it will be in the past. Either way, it's a timestamp.

  Specified by:
    `getDate` in class `DatabaseEntry`

### getKeysAndCert

    protected KeysAndCert getKeysAndCert()

  Description copied from class: `DatabaseEntry`
  Get the keys and the cert Identical to getDestination() in LeaseSet, and getIdentity() in RouterInfo.

  Specified by:
    `getKeysAndCert` in class `DatabaseEntry`
  Returns:
    KAC or null

### getType

    public int getType()

  Description copied from class: `DatabaseEntry`
  Get the type of the data structure. This should be faster than instanceof.

  Specified by:
    `getType` in class `DatabaseEntry`
  Returns:
    KEY_TYPE_ROUTERINFO or KEY_TYPE_LEASESET

### getDestination

    public Destination getDestination()

### setDestination

    public void setDestination(Destination dest)

### getEncryptionKey

    public PublicKey getEncryptionKey()

### setEncryptionKey

    public void setEncryptionKey(PublicKey encryptionKey)

### getSigningKey

    public SigningPublicKey getSigningKey()

  Deprecated. unused

### setSigningKey

    public void setSigningKey(SigningPublicKey key)

### getReceivedAsPublished

    public boolean getReceivedAsPublished()

  If true, we received this LeaseSet by a remote peer publishing it to us, rather than by searching for it ourselves or locally creating it. Default false.

### setReceivedAsPublished

    public void setReceivedAsPublished(boolean received)

  Default false

### getReceivedAsReply

    public boolean getReceivedAsReply()

  If true, we received this LeaseSet by searching for it Default false.

  Since:
    0.7.14

### setReceivedAsReply

    public void setReceivedAsReply()

  set to true @since 0.7.14

### addLease

    public void addLease(Lease lease)

### getLeaseCount

    public int getLeaseCount()

  Returns:
    0-6 A LeaseSet with no leases is revoked.

### getLease

    public Lease getLease(int index)

### getEarliestLeaseDate

    public long getEarliestLeaseDate()

  Retrieve the end date of the earliest lease include in this leaseSet. This is the date that should be used in comparisons for leaseSet age - to determine which LeaseSet was published more recently (later earliestLeaseSetDate means it was published later)

  Returns:
    earliest end date of any lease in the set, or -1 if there are no leases

### verifySignature

    public boolean verifySignature()

  Verify that the signature matches the lease set's destination's signing public key. OR the included revocation key.

  Overrides:
    `verifySignature` in class `DatabaseEntry`
  Returns:
    true only if the signature matches

### verifySignature

    public boolean verifySignature(SigningPublicKey signingKey)

  Deprecated. revocation unused

  Verify that the signature matches the lease set's destination's signing public key. OR the specified revocation key.

  Returns:
    true only if the signature matches

### isCurrent

    public boolean isCurrent(long fudge)

  Determine whether ANY lease is currently valid, at least within a given fudge factor

  Parameters:
    `fudge` - milliseconds fudge factor to allow between the current time
  Returns:
    true if there are current leases, false otherwise

### getBytes

    protected byte[] getBytes()

  Description copied from class: `DatabaseEntry`
  Returns the raw payload data, excluding the signature, to be signed by sign(). FIXME RouterInfo throws DFE and LeaseSet returns null

  Specified by:
    `getBytes` in class `DatabaseEntry`
  Returns:
    null on error ???????????????????????

### readBytes

    public void readBytes(InputStream in)
                   throws DataFormatException,
                          IOException

  This does NOT validate the signature

  Parameters:
    `in` - 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

  This does NOT validate the signature

  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

### size

    public int size()

### equals

    public boolean equals(Object object)

  Overrides:
    `equals` in class `Object`

### hashCode

    public int hashCode()

  the destination has enough randomness in it to use it by itself for speed

  Overrides:
    `hashCode` in class `Object`

### toString

    public String toString()

  Overrides:
    `toString` in class `Object`

### encrypt

    public void encrypt(SessionKey key)

  Encrypt the gateway and tunnel ID of each lease, leaving the expire dates unchanged. This adds an extra dummy lease, because AES data must be padded to 16 bytes. The fact that it is encrypted is not stored anywhere. Must be called after all the leases are in place, but before sign().