public final class RSAEncryptionHandler extends Object implements EncryptionHandler
Modifier and Type | Field and Description |
---|---|
static Option<Boolean> |
USE_WRAP_UNWRAP_OPERATIONS
Indicates whether the handler should use
Cipher.wrap(Key) and Cipher.unwrap(byte[], String, int)
operations or normal encrypt/decrypt operations for encrypting the per-message symmetric AES key. |
Constructor and Description |
---|
RSAEncryptionHandler(EncryptionMethod encryptionMethod,
JweAlgorithm jweAlgorithm)
Constructs a new RSAEncryptionHandler instance.
|
RSAEncryptionHandler(EncryptionMethod encryptionMethod,
JweAlgorithm jweAlgorithm,
Options options)
Constructs a new RSAEncryptionHandler instance with the given options.
|
Modifier and Type | Method and Description |
---|---|
byte[] |
decryptCiphertext(Key contentEncryptionKey,
byte[] initialisationVector,
byte[] ciphertext,
byte[] authenticationTag,
byte[] additionalAuthenticatedData)
Decrypts the ciphertext with the Content Encryption Key, using the initialisation vector and additional
authenticated data, following the steps defined by the EncryptionHandler JweAlgorithm.
|
Key |
decryptContentEncryptionKey(Key key,
byte[] encryptedContentEncryptionKey)
Decrypts the JWE Encrypted Key to produce the Content Encryption Key (CEK).
|
JweEncryption |
encryptPlaintext(Key contentEncryptionKey,
byte[] initialisationVector,
byte[] plaintext,
byte[] additionalAuthenticatedData)
Encrypts the plaintext with the Content Encryption Key, using the initialisation vector and additional
authenticated data, following the steps defined by the EncryptionHandler JweAlgorithm.
|
byte[] |
generateInitialisationVector()
Generates a random JWE Initialisation Vector of the correct size for the encryption algorithm.
|
byte[] |
generateJWEEncryptedKey(Key key,
Key contentEncryptionKey)
Generates the JWE Encrypted Key by encrypting the Content Encryption Key (CEK) using the JweAlgorithm
RSAES_PCKCS1_V1_5.
|
Key |
getContentEncryptionKey()
Creates a Content Encryption Key (CEK) by generating a random key value with a length equal to the
EncryptionMethod A128CBC_HS256 key size.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
decryptContentEncryptionKey, generateJWEEncryptedKey
public static final Option<Boolean> USE_WRAP_UNWRAP_OPERATIONS
Cipher.wrap(Key)
and Cipher.unwrap(byte[], String, int)
operations or normal encrypt/decrypt operations for encrypting the per-message symmetric AES key. This
distinction only matters when using a PKCS#11 Hardware Security Module, in which case the unwrap operation
will install the AES key on the HSM. This may cause problems if the key is marked as unextractable as some of
the JWE EncryptionMethods (e.g. EncryptionMethod.A128CBC_HS256
and related methods) need to access the
raw bytes of the key. The default is specified by the system property
org.forgerock.jwe.rsa.use_wrap_unwrap
, or false
if not specified.public RSAEncryptionHandler(EncryptionMethod encryptionMethod, JweAlgorithm jweAlgorithm)
org.forgerock.jwe.rsa.use_wrap_unwrap
to determine whether to use wrap/unwrap operations or normal
encrypt/decrypt operations for encrypting and decrypting the AES message key. Use
RSAEncryptionHandler(EncryptionMethod, JweAlgorithm, Options)
to manually specify this option.encryptionMethod
- the content encryption method. Must not be null.jweAlgorithm
- the JWE algorithm. Must not be null. Must be an RSA encryption algorithm.public RSAEncryptionHandler(EncryptionMethod encryptionMethod, JweAlgorithm jweAlgorithm, Options options)
encryptionMethod
- the content encryption method. Must not be null.jweAlgorithm
- the JWE algorithm. Must not be null. Must be an RSA encryption algorithm.options
- the options. Must not be null. See above for allowed options.public Key getContentEncryptionKey()
See point 2 in Section 5.1 of the JWE Specification.
getContentEncryptionKey
in interface EncryptionHandler
public byte[] generateJWEEncryptedKey(Key key, Key contentEncryptionKey)
See point 4 in Section 5.1 of the JWE Specification.
generateJWEEncryptedKey
in interface EncryptionHandler
key
- The key to use to encrypt the Content Encryption Key, if the EncryptionHandler JweAlgorithm requires.contentEncryptionKey
- The Content Encryption Key (CEK).public byte[] generateInitialisationVector()
See points 9 in Section 5.1 of the JWE Specification.
generateInitialisationVector
in interface EncryptionHandler
public JweEncryption encryptPlaintext(Key contentEncryptionKey, byte[] initialisationVector, byte[] plaintext, byte[] additionalAuthenticatedData)
See points 15, 16 in Section 5.1 of the JWE Specification.
encryptPlaintext
in interface EncryptionHandler
contentEncryptionKey
- The Content Encryption Key.initialisationVector
- The Initialisation Vector.plaintext
- The plaintext to encrypt.additionalAuthenticatedData
- An array of bytes representing the additional authenticated data.public Key decryptContentEncryptionKey(Key key, byte[] encryptedContentEncryptionKey)
See points 10 in Section 5.2 of the JWE Specification.
decryptContentEncryptionKey
in interface EncryptionHandler
key
- The private key pair to the public key that encrypted the JWT.encryptedContentEncryptionKey
- The encrypted Content Encryption Key.public byte[] decryptCiphertext(Key contentEncryptionKey, byte[] initialisationVector, byte[] ciphertext, byte[] authenticationTag, byte[] additionalAuthenticatedData)
See points 14, 15 in Section 5.2 of the JWE Specification.
decryptCiphertext
in interface EncryptionHandler
contentEncryptionKey
- The Content Encryption Key.initialisationVector
- The Initialisation Vector.ciphertext
- The ciphertext to decrypt.authenticationTag
- The authentication tag.additionalAuthenticatedData
- An array of bytes representing the additional authenticated data.Copyright 2010-2022 ForgeRock AS.