org.jose4j.keys.OctetKeyPairUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jose4j Show documentation
Show all versions of jose4j Show documentation
The jose.4.j library is a robust and easy to use open source implementation of JSON Web Token (JWT) and the JOSE specification suite (JWS, JWE, and JWK).
It is written in Java and relies solely on the JCA APIs for cryptography.
Please see https://bitbucket.org/b_c/jose4j/wiki/Home for more info, examples, etc..
package org.jose4j.keys;
import org.jose4j.jwk.OctetKeyPairJsonWebKey;
import org.jose4j.lang.ExceptionHelp;
import org.jose4j.lang.JoseException;
import java.security.InvalidAlgorithmParameterException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.NamedParameterSpec;
abstract public class OctetKeyPairUtil extends KeyPairUtil
{
public OctetKeyPairUtil(String provider, SecureRandom secureRandom)
{
super(provider, secureRandom);
}
public static OctetKeyPairUtil getOctetKeyPairUtil(String subtypeName, String provider, SecureRandom secureRandom)
{
if (subtypeName.equals(OctetKeyPairJsonWebKey.SUBTYPE_ED25519) || subtypeName.equals(OctetKeyPairJsonWebKey.SUBTYPE_ED448))
{
return new EdDsaKeyUtil(provider, secureRandom);
}
else if (subtypeName.equals(OctetKeyPairJsonWebKey.SUBTYPE_X25519) || subtypeName.equals(OctetKeyPairJsonWebKey.SUBTYPE_X448))
{
return new XDHKeyUtil(provider, secureRandom);
}
return null;
}
abstract public PublicKey publicKey(byte[] publicKeyBytes, String name) throws JoseException;
abstract public PrivateKey privateKey(byte[] privateKeyBytes, String name) throws JoseException;
abstract public byte[] rawPublicKey(Key key);
abstract public byte[] rawPrivateKey(PrivateKey privateKey);
public KeyPair generateKeyPair(String name) throws JoseException
{
KeyPairGenerator keyGenerator = getKeyPairGenerator();
NamedParameterSpec spec = getNamedParameterSpec(name);
try
{
if (secureRandom == null)
{
keyGenerator.initialize(spec);
}
else
{
keyGenerator.initialize(spec, secureRandom);
}
return keyGenerator.generateKeyPair();
}
catch (InvalidAlgorithmParameterException e)
{
throw new JoseException("Unable to create EdDSA key pair: " + e, e);
}
}
NamedParameterSpec getNamedParameterSpec(String name) throws JoseException
{
try
{
return new NamedParameterSpec(name);
}
catch (NoClassDefFoundError ncd)
{
throw new JoseException(name + " NamedParameterSpec not available. " + ExceptionHelp.toStringWithCauses(ncd));
}
}
}