All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jose4j.keys.OctetKeyPairUtil Maven / Gradle / Ivy

Go to download

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..

There is a newer version: 0.9.6
Show newest version
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));
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy