Package org.forgerock.json.jose.utils
Class XECUtils
java.lang.Object
org.forgerock.json.jose.utils.XECUtils
Utilities for handling XEC keys for X25519 and X448 ECDH key agreement. These classes are only available from Java
11, so we use reflection to perform default behaviour on earlier JDKs (typically returning null).
-
Method Summary
Modifier and TypeMethodDescriptionstatic SupportedEllipticCurve
Returns the curve that this XECKey is for.static boolean
Determines whether the given key is a XECKey.static AlgorithmParameterSpec
namedCurveParams
(Key key) Returns the NamedCurveParameters for this key.static byte[]
privateScalarValue
(PrivateKey privateKey) Returns the private scalar value for the given XECPrivateKey.static byte[]
publicUCoordinate
(PublicKey publicKey) Returns the little-endian bytes of the public u-coordinate of the given XECPublicKey.static PrivateKey
xecPrivateKey
(SupportedEllipticCurve curve, byte[] privateValue) Converts a private scalar byte value into a XECPrivateKey on the given curve.static PublicKey
xecPublicKey
(SupportedEllipticCurve curve, BigInteger uCoord) Converts a public u-coordinate into a XECPublicKey on the given curve.
-
Method Details
-
isXecKey
Determines whether the given key is a XECKey.- Parameters:
key
- the key.- Returns:
- true if XDH is available and this is a XECKey, or else false.
-
xecPrivateKey
Converts a private scalar byte value into a XECPrivateKey on the given curve.- Parameters:
curve
- the curve. Must be either X25519 or X448.privateValue
- the private scalar value.- Returns:
- the XECPrivateKey corresponding to the given curve and private value.
- Throws:
UnsupportedOperationException
- if XDH support is not available.IllegalArgumentException
- if the curve is not X25519 or X448 or if there is a problem with the scalar.
-
xecPublicKey
Converts a public u-coordinate into a XECPublicKey on the given curve.- Parameters:
curve
- the curve. Must be either X25519 or X448.uCoord
- the public u coordinate value.- Returns:
- the XECPublicKey corresponding to the given curve and coordinate.
- Throws:
UnsupportedOperationException
- if XDH support is not available.IllegalArgumentException
- if the curve is not X25519 or X448 or there is a problem with the u-coordinate.
-
publicUCoordinate
Returns the little-endian bytes of the public u-coordinate of the given XECPublicKey.- Parameters:
publicKey
- the public key.- Returns:
- the unsigned big-endian bytes of the public u-coordinate.
- Throws:
IllegalStateException
- if XDH support is not available.IllegalArgumentException
- if the key is not a XECPublicKey.
-
privateScalarValue
Returns the private scalar value for the given XECPrivateKey.- Parameters:
privateKey
- the private key.- Returns:
- the private scalar value.
- Throws:
IllegalStateException
- if XDH support is not available.IllegalArgumentException
- if the key is not a XECPrivateKey.
-
curve
Returns the curve that this XECKey is for.- Parameters:
key
- the key. Must be a XECKey.- Returns:
- the supported elliptic curve for this key.
- Throws:
IllegalStateException
- if XDH support is not available.IllegalArgumentException
- if the key is not a XECKey.
-
namedCurveParams
Returns the NamedCurveParameters for this key.- Parameters:
key
- the key. Must be a XECKey.- Returns:
- the NamedCurveParameters for this key.
- Throws:
IllegalArgumentException
- if the key is not a XECKey.IllegalStateException
- if XDH support is not available.
-