Package net.i2p.data
Class LeaseSet2
- java.lang.Object
-
- net.i2p.data.DataStructureImpl
-
- net.i2p.data.DatabaseEntry
-
- net.i2p.data.LeaseSet
-
- net.i2p.data.LeaseSet2
-
- All Implemented Interfaces:
Serializable
,DataStructure
- Direct Known Subclasses:
EncryptedLeaseSet
,MetaLeaseSet
public class LeaseSet2 extends LeaseSet
See proposal 123- Since:
- 0.9.38
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected long
_expires
protected int
_flags
protected Signature
_offlineSignature
protected Properties
_options
protected long
_published
protected long
_transientExpires
protected SigningPublicKey
_transientSigningPublicKey
-
Fields inherited from class net.i2p.data.LeaseSet
_byteified, _checked, _destination, _encryptionKey, _lastExpiration, _leases, _receivedAsPublished, _signingKey, MAX_LEASES
-
Fields inherited from class net.i2p.data.DatabaseEntry
_signature, KEY_TYPE_ENCRYPTED_LS2, KEY_TYPE_LEASESET, KEY_TYPE_LS2, KEY_TYPE_META_LS2, KEY_TYPE_ROUTERINFO, KEY_TYPE_SERVICE_LIST, KEY_TYPE_SERVICE_RECORD
-
-
Constructor Summary
Constructors Constructor Description LeaseSet2()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addEncryptionKey(PublicKey key)
Add an encryption key.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)
Hash
getBlindedHash()
The orignal blinded hash, where this came from.protected byte[]
getBytes()
without sig!PublicKey
getEncryptionKey()
If more than one key, return the first supported one.PublicKey
getEncryptionKey(Set<EncType> supported)
If more than one key, return the first supported one.List<PublicKey>
getEncryptionKeys()
This returns all the keys.long
getExpires()
Published expiration, as received.String
getOption(String opt)
long
getPublished()
Published timestamp, as received.boolean
getReceivedAsPublished()
If true, we received this LeaseSet by a remote peer publishing it to us, AND the unpublished flag is not set.long
getTransientExpiration()
Absolute time, not time from now.SigningPublicKey
getTransientSigningKey()
int
getType()
Get the type of the data structure.int
hashCode()
the destination has enough randomness in it to use it by itself for speedboolean
isBlindedWhenPublished()
Set if the unencrypted LS, when published, will be blinded/encryptedboolean
isCurrent(long fudge)
Determine whether the leaseset is currently valid, at least within a given fudge factor.boolean
isOffline()
boolean
isUnpublished()
static Signature
offlineSign(long expires, SigningPublicKey transientSPK, SigningPrivateKey priv)
Generate a Signature to pass to setOfflineSignature()void
readBytes(InputStream in)
This does NOT validate the signatureprotected void
readHeader(InputStream in)
protected void
readOfflineBytes(InputStream in)
void
setBlindedHash(Hash bh)
Set this on creation if knownvoid
setBlindedWhenPublished()
Set if the unencrypted LS, when published, will be blinded/encryptedboolean
setOfflineSignature(long expires, SigningPublicKey transientSPK, Signature offlineSig)
Destination must be previously set.void
setOptions(Properties options)
Configure a set of options or statistics that the router can expose.void
setSigningKey(SigningPublicKey key)
The revocation key.void
setUnpublished()
void
sign(SigningPrivateKey key)
Sign the structure using the supplied signing key.int
size()
Number of bytes, NOT including signatureString
toString()
boolean
verifyOfflineSignature()
protected boolean
verifyOfflineSignature(SigningPublicKey spk)
boolean
verifySignature()
Verify with the SPK in the dest for online sigs.protected void
writeBody(OutputStream out)
Without sig.void
writeBytes(OutputStream out)
Including sig.protected void
writeBytesWithoutSig(OutputStream out)
Without sig.protected void
writeHeader(OutputStream out)
protected void
writeOfflineBytes(OutputStream out)
-
Methods inherited from class net.i2p.data.LeaseSet
getDate, getDestination, getEarliestLeaseDate, getKeysAndCert, getLatestLeaseDate, getLease, getLeaseCount, getReceivedAsReply, getReceivedBy, getSigningKey, setDestination, setEncryptionKey, setReceivedAsPublished, setReceivedAsReply, setReceivedBy, verifySignature
-
Methods inherited from class net.i2p.data.DatabaseEntry
getHash, getRoutingKey, getSignature, getSigningPublicKey, isLeaseSet, isLeaseSet, setSignature, validateRoutingKey
-
Methods inherited from class net.i2p.data.DataStructureImpl
calculateHash, fromBase64, fromByteArray, read, toBase64, toByteArray
-
-
-
-
Field Detail
-
_flags
protected int _flags
-
_published
protected long _published
-
_expires
protected long _expires
-
_transientExpires
protected long _transientExpires
-
_transientSigningPublicKey
protected SigningPublicKey _transientSigningPublicKey
-
_offlineSignature
protected Signature _offlineSignature
-
_options
protected Properties _options
-
-
Method Detail
-
getPublished
public long getPublished()
Published timestamp, as received. Different than getDate() or getEarliestLeaseDate(), which are the earliest lease expiration.- Returns:
- in ms, with 1 second resolution
- Since:
- 0.9.39
-
getExpires
public long getExpires()
Published expiration, as received. May be different than getLatestLeaseDate(), which is the latest lease expiration.- Returns:
- in ms, with 1 second resolution
- Since:
- 0.9.39
-
isUnpublished
public boolean isUnpublished()
-
setUnpublished
public void setUnpublished()
- Throws:
IllegalStateException
- if already signed
-
isBlindedWhenPublished
public boolean isBlindedWhenPublished()
Set if the unencrypted LS, when published, will be blinded/encrypted- Since:
- 0.9.42
-
setBlindedWhenPublished
public void setBlindedWhenPublished()
Set if the unencrypted LS, when published, will be blinded/encrypted- Throws:
IllegalStateException
- if already signed- Since:
- 0.9.42
-
getReceivedAsPublished
public boolean getReceivedAsPublished()
If true, we received this LeaseSet by a remote peer publishing it to us, AND the unpublished flag is not set. Default false.- Overrides:
getReceivedAsPublished
in classLeaseSet
- Since:
- 0.9.39 overridden
-
getEncryptionKey
public PublicKey getEncryptionKey()
If more than one key, return the first supported one. If none supported, return the first one.- Overrides:
getEncryptionKey
in classLeaseSet
- Since:
- 0.9.39 overridden
-
getEncryptionKey
public PublicKey getEncryptionKey(Set<EncType> supported)
If more than one key, return the first supported one. If none supported, return null.- Overrides:
getEncryptionKey
in classLeaseSet
- Parameters:
supported
- what return types are allowed- Returns:
- first supported key or null
- Since:
- 0.9.44
-
addEncryptionKey
public void addEncryptionKey(PublicKey key)
Add an encryption key. Encryption keys should be added in order of server preference, most-preferred first.
-
getEncryptionKeys
public List<PublicKey> getEncryptionKeys()
This returns all the keys. getEncryptionKey() returns the first one. Encryption keys should be in order of server preference, most-preferred first. Client behavior should be to select the first key with a supported encryption type. Clients may use other selection algorithms based on encryption support, relative performance, and other factors.- Returns:
- not a copy, do not modify, null if none
-
setOptions
public void setOptions(Properties options)
Configure a set of options or statistics that the router can expose. Makes a copy. Warning, clears all capabilities, must be called BEFORE addCapability().- Parameters:
options
- if null, clears current options- Throws:
IllegalStateException
- if LeaseSet2 is already signed
-
isOffline
public boolean isOffline()
-
getTransientSigningKey
public SigningPublicKey getTransientSigningKey()
- Returns:
- transient public key or null if not offline signed
-
getTransientExpiration
public long getTransientExpiration()
Absolute time, not time from now.- Returns:
- transient expiration time or 0 if not offline signed
- Since:
- 0.9.48
-
setOfflineSignature
public boolean setOfflineSignature(long expires, SigningPublicKey transientSPK, Signature offlineSig)
Destination must be previously set.- Parameters:
expires
- absolute mstransientSPK
- the key that will sign the leasesetofflineSig
- the signature by the spk in the destination- Returns:
- success, false if verify failed or expired
- Throws:
IllegalStateException
- if already signed
-
offlineSign
public static Signature offlineSign(long expires, SigningPublicKey transientSPK, SigningPrivateKey priv)
Generate a Signature to pass to setOfflineSignature()- Parameters:
expires
- absolute mstransientSPK
- the key that will sign the leasesetpriv
- the private signing key for the destination- Returns:
- null on error
-
verifyOfflineSignature
public boolean verifyOfflineSignature()
-
verifyOfflineSignature
protected boolean verifyOfflineSignature(SigningPublicKey spk)
-
setBlindedHash
public void setBlindedHash(Hash bh)
Set this on creation if known
-
getBlindedHash
public Hash getBlindedHash()
The orignal blinded hash, where this came from.- Returns:
- null if unknown or not previously blinded
-
getType
public int getType()
Description copied from class:DatabaseEntry
Get the type of the data structure. This should be faster than instanceof.
-
setSigningKey
public void setSigningKey(SigningPublicKey key)
The revocation key. Overridden to do nothing, as we're using the _signingKey field for the blinded key in Enc LS2.- Overrides:
setSigningKey
in classLeaseSet
- Since:
- 0.9.39
-
isCurrent
public boolean isCurrent(long fudge)
Determine whether the leaseset is currently valid, at least within a given fudge factor. Overridden to use the expiration time instead of the last expiration.
-
getBytes
protected byte[] getBytes()
without sig!
-
readBytes
public void readBytes(InputStream in) throws DataFormatException, IOException
This does NOT validate the signature- Specified by:
readBytes
in interfaceDataStructure
- Overrides:
readBytes
in classLeaseSet
- Parameters:
in
- stream to read from- Throws:
IllegalStateException
- if called more than once or Destination already setDataFormatException
- if the data is improperly formattedIOException
- if there was a problem reading the stream
-
writeBytes
public void writeBytes(OutputStream out) throws DataFormatException, IOException
Including sig. This does NOT validate the signature- Specified by:
writeBytes
in interfaceDataStructure
- Overrides:
writeBytes
in classLeaseSet
- Parameters:
out
- stream to write to- Throws:
DataFormatException
- if the data was incomplete or not yet ready to be writtenIOException
- if there was a problem writing to the stream
-
writeBytesWithoutSig
protected void writeBytesWithoutSig(OutputStream out) throws DataFormatException, IOException
Without sig. This does NOT validate the signature- Throws:
DataFormatException
IOException
-
writeBody
protected void writeBody(OutputStream out) throws DataFormatException, IOException
Without sig. This does NOT validate the signature- Throws:
DataFormatException
IOException
-
readHeader
protected void readHeader(InputStream in) throws DataFormatException, IOException
- Throws:
DataFormatException
IOException
-
writeHeader
protected void writeHeader(OutputStream out) throws DataFormatException, IOException
- Throws:
DataFormatException
IOException
-
readOfflineBytes
protected void readOfflineBytes(InputStream in) throws DataFormatException, IOException
- Throws:
DataFormatException
IOException
-
writeOfflineBytes
protected void writeOfflineBytes(OutputStream out) throws DataFormatException, IOException
- Throws:
DataFormatException
IOException
-
addLease
public void addLease(Lease lease)
- Overrides:
addLease
in classLeaseSet
- Parameters:
lease
- must be a Lease2- Throws:
IllegalArgumentException
- if not a Lease2
-
sign
public void sign(SigningPrivateKey key) throws DataFormatException
Sign the structure using the supplied signing key. Overridden because LS2 sigs cover the type byte.- Overrides:
sign
in classDatabaseEntry
- Throws:
IllegalStateException
- if already signedDataFormatException
-
verifySignature
public boolean verifySignature()
Verify with the SPK in the dest for online sigs. Verify with the SPK in the offline sig section for offline sigs.- Overrides:
verifySignature
in classLeaseSet
- Returns:
- valid
-
hashCode
public int hashCode()
the destination has enough randomness in it to use it by itself for speed
-
encrypt
public void encrypt(SessionKey key)
Description copied from class:LeaseSet
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().
-
-