public class CiphertextHeaderV2 extends CiphertextHeader
Data format:
+---------+---------+---+----------+-------+------+ | Version | KeyName | 0 | NonceLen | Nonce | HMAC | +---------+---------+---+----------+-------+------+ | | +--- 4 ---+--- x ---+ 1 +--- 1 ----+-- y --+- 32 -+
Where fields are defined as follows:
The last two fields provide support for multiple keys at the encryption provider. A common case for multiple keys is key rotation; by tagging encrypted data with a key name, an old key may be retrieved by name to decrypt outstanding data which will be subsequently re-encrypted with a new key.
keyName, length, MAX_KEYNAME_LEN, MAX_NONCE_LEN, nonce
Constructor and Description |
---|
CiphertextHeaderV2(byte[] nonce,
String keyName)
Creates a new instance with a nonce and named key.
|
Modifier and Type | Method and Description |
---|---|
protected int |
computeLength() |
static CiphertextHeaderV2 |
decode(byte[] data,
Function<String,SecretKey> keyLookup)
Creates a header from encrypted data containing a cleartext header prepended to the start.
|
static CiphertextHeaderV2 |
decode(InputStream input,
Function<String,SecretKey> keyLookup)
Creates a header from encrypted data containing a cleartext header prepended to the start.
|
byte[] |
encode()
Encodes the header into bytes.
|
byte[] |
encode(SecretKey hmacKey)
Encodes the header into bytes.
|
void |
setKeyLookup(Function<String,SecretKey> keyLookup)
Sets the function to resolve keys from
CiphertextHeader.keyName . |
decode, decode, getKeyName, getLength, getNonce
public CiphertextHeaderV2(byte[] nonce, String keyName)
nonce
- Nonce bytes.keyName
- Key name.public void setKeyLookup(Function<String,SecretKey> keyLookup)
CiphertextHeader.keyName
.keyLookup
- Key lookup function.public byte[] encode()
CiphertextHeader
encode
in class CiphertextHeader
public byte[] encode(SecretKey hmacKey)
hmacKey
- Key used to generate header HMAC.protected int computeLength()
computeLength
in class CiphertextHeader
public static CiphertextHeaderV2 decode(byte[] data, Function<String,SecretKey> keyLookup) throws EncodingException
data
- Encrypted data with prepended header data.keyLookup
- Function used to look up the secret key from the symbolic key name in the header.EncodingException
- when ciphertext header cannot be decoded.public static CiphertextHeaderV2 decode(InputStream input, Function<String,SecretKey> keyLookup) throws EncodingException, StreamException
input
- Input stream that is positioned at the start of ciphertext header data.keyLookup
- Function used to look up the secret key from the symbolic key name in the header.EncodingException
- when ciphertext header cannot be decoded.StreamException
- on stream IO errors.Copyright © 2003-2024 Virginia Tech. All Rights Reserved.