Destroyable
class SymmetricState extends Object implements Destroyable
Constructor | Description |
---|---|
SymmetricState(String cipherName,
String hashName) |
Constructs a new symmetric state object.
|
Modifier and Type | Method | Description |
---|---|---|
int |
decryptAndHash(byte[] ciphertext,
int ciphertextOffset,
byte[] plaintext,
int plaintextOffset,
int length) |
Decrypts a block of ciphertext and mixes it into the handshake hash.
|
void |
destroy() |
Destroys all sensitive state in the current object.
|
int |
encryptAndHash(byte[] plaintext,
int plaintextOffset,
byte[] ciphertext,
int ciphertextOffset,
int length) |
Encrypts a block of plaintext and mixes the ciphertext into the handshake hash.
|
byte[] |
getChainingKey() |
I2P for getting chaining key for siphash calculation
|
byte[] |
getHandshakeHash() |
Gets the current value of the handshake hash.
|
int |
getMACLength() |
Gets the length of MAC values in the current state.
|
String |
getProtocolName() |
Gets the name of the Noise protocol.
|
void |
mixHash(byte[] data,
int offset,
int length) |
Mixes data into the handshake hash.
|
void |
mixKey(byte[] data,
int offset,
int length) |
Mixes data into the chaining key.
|
void |
mixPreSharedKey(byte[] key) |
Mixes a pre-shared key into the chaining key and handshake hash.
|
void |
mixPublicKey(DHState dh) |
Mixes a pre-supplied public key into the handshake hash.
|
void |
mixPublicKeyIntoCK(DHState dh) |
Mixes a pre-supplied public key into the chaining key.
|
CipherStatePair |
split() |
Splits the symmetric state into two ciphers for session encryption.
|
CipherStatePair |
split(byte[] secondaryKey,
int offset,
int length) |
Splits the symmetric state into two ciphers for session encryption,
and optionally mixes in a secondary symmetric key.
|
String |
toString() |
I2P debug
|
public SymmetricState(String cipherName, String hashName) throws NoSuchAlgorithmException
cipherName
- The name of the cipher within protocolName.hashName
- The name of the hash within protocolName.NoSuchAlgorithmException
- The cipher or hash algorithm in the
protocol name is not supported.public String getProtocolName()
public int getMACLength()
public void mixKey(byte[] data, int offset, int length)
data
- The buffer containing the data to mix in.offset
- The offset of the first data byte to mix in.length
- The number of bytes to mix in.public void mixHash(byte[] data, int offset, int length)
data
- The buffer containing the data to mix in.offset
- The offset of the first data byte to mix in.length
- The number of bytes to mix in.public void mixPreSharedKey(byte[] key)
key
- The pre-shared key value.public void mixPublicKey(DHState dh)
dh
- The object containing the public key.public void mixPublicKeyIntoCK(DHState dh)
dh
- The object containing the public key.public int encryptAndHash(byte[] plaintext, int plaintextOffset, byte[] ciphertext, int ciphertextOffset, int length) throws ShortBufferException
plaintext
- The buffer containing the plaintext to encrypt.plaintextOffset
- The offset within the plaintext buffer of the
first byte or plaintext data.ciphertext
- The buffer to place the ciphertext in. This can
be the same as the plaintext buffer.ciphertextOffset
- The first offset within the ciphertext buffer
to place the ciphertext and the MAC tag.length
- The length of the plaintext.ShortBufferException
- There is not enough space in the
ciphertext buffer for the encrypted data plus MAC value.
The plaintext and ciphertext buffers can be the same for in-place
encryption. In that case, plaintextOffset must be identical to
ciphertextOffset.
There must be enough space in the ciphertext buffer to accomodate
length + getMACLength() bytes of data starting at ciphertextOffset.public int decryptAndHash(byte[] ciphertext, int ciphertextOffset, byte[] plaintext, int plaintextOffset, int length) throws ShortBufferException, BadPaddingException
ciphertext
- The buffer containing the ciphertext to decrypt.ciphertextOffset
- The offset within the ciphertext buffer of
the first byte of ciphertext data.plaintext
- The buffer to place the plaintext in. This can be
the same as the ciphertext buffer.plaintextOffset
- The first offset within the plaintext buffer
to place the plaintext.length
- The length of the incoming ciphertext plus the MAC tag.ShortBufferException
- There is not enough space in the plaintext
buffer for the decrypted data.BadPaddingException
- The MAC value failed to verify.
The plaintext and ciphertext buffers can be the same for in-place
decryption. In that case, ciphertextOffset must be identical to
plaintextOffset.public CipherStatePair split()
public CipherStatePair split(byte[] secondaryKey, int offset, int length)
secondaryKey
- The buffer containing the secondary key.offset
- The offset of the first secondary key byte.length
- The length of the secondary key in bytes, which
must be either 0 or 32.IllegalArgumentException
- The length is not 0 or 32.public byte[] getHandshakeHash()
public void destroy()
Destroyable
destroy
in interface Destroyable
public byte[] getChainingKey()