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, getNoncepublic 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()
CiphertextHeaderencode in class CiphertextHeaderpublic byte[] encode(SecretKey hmacKey)
hmacKey - Key used to generate header HMAC.protected int computeLength()
computeLength in class CiphertextHeaderpublic 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.