Package com.nimbusds.jose.crypto
Class ECDHDecrypter
- java.lang.Object
-
- com.nimbusds.jose.crypto.impl.ECDHCryptoProvider
-
- com.nimbusds.jose.crypto.ECDHDecrypter
-
- All Implemented Interfaces:
CriticalHeaderParamsAware,JCAAware<JWEJCAContext>,JOSEProvider,JWEDecrypter,JWEProvider
public class ECDHDecrypter extends ECDHCryptoProvider implements JWEDecrypter, CriticalHeaderParamsAware
Elliptic Curve Diffie-Hellman decrypter ofJWE objectsfor curves using EC JWK keys. Expects a private EC key (with a P-256, P-384 or P-521 curve).See RFC 7518 section 4.6 for more information.
For Curve25519/X25519, see
X25519Decrypterinstead.This class is thread-safe.
Supports the following key management algorithms:
JWEAlgorithm.ECDH_ESJWEAlgorithm.ECDH_ES_A128KWJWEAlgorithm.ECDH_ES_A192KWJWEAlgorithm.ECDH_ES_A256KW
Supports the following elliptic curves:
Supports the following content encryption algorithms:
- Version:
- 2023-05-17
- Author:
- Vladimir Dzhuvinov, Egor Puzanov
-
-
Field Summary
Fields Modifier and Type Field Description static Set<Curve>SUPPORTED_ELLIPTIC_CURVESThe supported EC JWK curves by the ECDH crypto provider class.-
Fields inherited from class com.nimbusds.jose.crypto.impl.ECDHCryptoProvider
SUPPORTED_ALGORITHMS, SUPPORTED_ENCRYPTION_METHODS
-
-
Constructor Summary
Constructors Constructor Description ECDHDecrypter(ECKey ecJWK)Creates a new Elliptic Curve Diffie-Hellman decrypter.ECDHDecrypter(ECPrivateKey privateKey)Creates a new Elliptic Curve Diffie-Hellman decrypter.ECDHDecrypter(ECPrivateKey privateKey, Set<String> defCritHeaders)Creates a new Elliptic Curve Diffie-Hellman decrypter.ECDHDecrypter(PrivateKey privateKey, Set<String> defCritHeaders, Curve curve)Creates a new Elliptic Curve Diffie-Hellman decrypter.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description byte[]decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag)Deprecated.byte[]decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag, byte[] aad)Decrypts the specified cipher text of aJWE Object.protected SecretKeygetCEK(EncryptionMethod enc)Returns the content encryption key (CEK) to use.Set<String>getDeferredCriticalHeaderParams()Returns the names of the critical (crit) header parameters that are deferred to the application for processing and will be ignored by the JWS verifier / JWE decrypter.JWEJCAContextgetJCAContext()Returns the Java Cryptography Architecture (JCA) context.PrivateKeygetPrivateKey()Returns the private EC key.Set<String>getProcessedCriticalHeaderParams()Returns the names of the critical (crit) header parameters that are understood and processed by the JWS verifier / JWE decrypter.protected booleanisCEKProvided()Returnstrueif a content encryption key (CEK) was provided at construction time.Set<Curve>supportedEllipticCurves()Returns the names of the supported elliptic curves.Set<EncryptionMethod>supportedEncryptionMethods()Returns the names of the supported encryption methods by the JWE provier.Set<JWEAlgorithm>supportedJWEAlgorithms()Returns the names of the supported algorithms by the JWE provider instance.-
Methods inherited from class com.nimbusds.jose.crypto.impl.ECDHCryptoProvider
decryptWithZ, encryptWithZ, getConcatKDF, getCurve
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.nimbusds.jose.jca.JCAAware
getJCAContext
-
Methods inherited from interface com.nimbusds.jose.JWEProvider
supportedEncryptionMethods, supportedJWEAlgorithms
-
-
-
-
Field Detail
-
SUPPORTED_ELLIPTIC_CURVES
public static final Set<Curve> SUPPORTED_ELLIPTIC_CURVES
The supported EC JWK curves by the ECDH crypto provider class.
-
-
Constructor Detail
-
ECDHDecrypter
public ECDHDecrypter(ECPrivateKey privateKey) throws JOSEException
Creates a new Elliptic Curve Diffie-Hellman decrypter.- Parameters:
privateKey- The private EC key. Must not benull.- Throws:
JOSEException- If the elliptic curve is not supported.
-
ECDHDecrypter
public ECDHDecrypter(ECKey ecJWK) throws JOSEException
Creates a new Elliptic Curve Diffie-Hellman decrypter.- Parameters:
ecJWK- The EC JSON Web Key (JWK). Must contain a private part. Must not benull.- Throws:
JOSEException- If the elliptic curve is not supported.
-
ECDHDecrypter
public ECDHDecrypter(ECPrivateKey privateKey, Set<String> defCritHeaders) throws JOSEException
Creates a new Elliptic Curve Diffie-Hellman decrypter.- Parameters:
privateKey- The private EC key. Must not benull.defCritHeaders- The names of the critical header parameters that are deferred to the application for processing, empty set ornullif none.- Throws:
JOSEException- If the elliptic curve is not supported.
-
ECDHDecrypter
public ECDHDecrypter(PrivateKey privateKey, Set<String> defCritHeaders, Curve curve) throws JOSEException
Creates a new Elliptic Curve Diffie-Hellman decrypter. This constructor can also accept a private EC key located in a PKCS#11 store that doesn't expose the private key parameters (such as a smart card or HSM).- Parameters:
privateKey- The private EC key. Must not benull.defCritHeaders- The names of the critical header parameters that are deferred to the application for processing, empty set ornullif none.curve- The key curve. Must not benull.- Throws:
JOSEException- If the elliptic curve is not supported.
-
-
Method Detail
-
getPrivateKey
public PrivateKey getPrivateKey()
Returns the private EC key.- Returns:
- The private EC key. Casting to
ECPrivateKeymay not be possible if the key is located in a PKCS#11 store that doesn't expose the private key parameters.
-
supportedEllipticCurves
public Set<Curve> supportedEllipticCurves()
Description copied from class:ECDHCryptoProviderReturns the names of the supported elliptic curves. These correspond to thecrvEC JWK parameter.- Specified by:
supportedEllipticCurvesin classECDHCryptoProvider- Returns:
- The supported elliptic curves.
-
getProcessedCriticalHeaderParams
public Set<String> getProcessedCriticalHeaderParams()
Description copied from interface:CriticalHeaderParamsAwareReturns the names of the critical (crit) header parameters that are understood and processed by the JWS verifier / JWE decrypter.- Specified by:
getProcessedCriticalHeaderParamsin interfaceCriticalHeaderParamsAware- Returns:
- The names of the critical header parameters that are understood and processed, empty set if none.
-
getDeferredCriticalHeaderParams
public Set<String> getDeferredCriticalHeaderParams()
Description copied from interface:CriticalHeaderParamsAwareReturns the names of the critical (crit) header parameters that are deferred to the application for processing and will be ignored by the JWS verifier / JWE decrypter.- Specified by:
getDeferredCriticalHeaderParamsin interfaceCriticalHeaderParamsAware- Returns:
- The names of the critical header parameters that are deferred to the application for processing, empty set if none.
-
decrypt
@Deprecated public byte[] decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag) throws JOSEException
Deprecated.Decrypts the specified cipher text of aJWE Object.- Parameters:
header- The JSON Web Encryption (JWE) header. Must specify a supported JWE algorithm and method. Must not benull.encryptedKey- The encrypted key,nullif not required by the JWE algorithm.iv- The initialisation vector,nullif not required by the JWE algorithm.cipherText- The cipher text to decrypt. Must not benull.authTag- The authentication tag,nullif not required.- Returns:
- The clear text.
- Throws:
JOSEException- If the JWE algorithm or method is not supported, if a critical header parameter is not supported or marked for deferral to the application, or if decryption failed for some other reason.
-
decrypt
public byte[] decrypt(JWEHeader header, Base64URL encryptedKey, Base64URL iv, Base64URL cipherText, Base64URL authTag, byte[] aad) throws JOSEException
Description copied from interface:JWEDecrypterDecrypts the specified cipher text of aJWE Object.- Specified by:
decryptin interfaceJWEDecrypter- Parameters:
header- The JSON Web Encryption (JWE) header. Must specify a supported JWE algorithm and method. Must not benull.encryptedKey- The encrypted key,nullif not required by the JWE algorithm.iv- The initialisation vector,nullif not required by the JWE algorithm.cipherText- The cipher text to decrypt. Must not benull.authTag- The authentication tag,nullif not required.aad- The additional authenticated data. Must not benull.- Returns:
- The clear text.
- Throws:
JOSEException- If the JWE algorithm or method is not supported, if a critical header parameter is not supported or marked for deferral to the application, or if decryption failed for some other reason.
-
supportedJWEAlgorithms
public Set<JWEAlgorithm> supportedJWEAlgorithms()
Description copied from interface:JWEProviderReturns the names of the supported algorithms by the JWE provider instance. These correspond to thealgJWE header parameter.- Specified by:
supportedJWEAlgorithmsin interfaceJWEProvider- Returns:
- The supported JWE algorithms, empty set if none.
-
supportedEncryptionMethods
public Set<EncryptionMethod> supportedEncryptionMethods()
Description copied from interface:JWEProviderReturns the names of the supported encryption methods by the JWE provier. These correspond to theencJWE header parameter.- Specified by:
supportedEncryptionMethodsin interfaceJWEProvider- Returns:
- The supported encryption methods, empty set if none.
-
getJCAContext
public JWEJCAContext getJCAContext()
Description copied from interface:JCAAwareReturns the Java Cryptography Architecture (JCA) context. May be used to set a specific JCA security provider or secure random generator.- Specified by:
getJCAContextin interfaceJCAAware<JWEJCAContext>- Returns:
- The JCA context. Not
null.
-
isCEKProvided
protected boolean isCEKProvided()
Returnstrueif a content encryption key (CEK) was provided at construction time.- Returns:
trueif a CEK was provided at construction time,falseif CEKs will be internally generated.
-
getCEK
protected SecretKey getCEK(EncryptionMethod enc) throws JOSEException
Returns the content encryption key (CEK) to use. Unless a CEK was provided at construction time this will be a new internally generated CEK.- Parameters:
enc- The encryption method. Must not benull.- Returns:
- The content encryption key (CEK).
- Throws:
JOSEException- If an internal exception is encountered.
-
-