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

com.nimbusds.jose.crypto.ECDSAProvider Maven / Gradle / Ivy

package com.nimbusds.jose.crypto;


import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.sec.SECNamedCurves;
import org.bouncycastle.asn1.sec.SECObjectIdentifiers;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.digests.SHA384Digest;
import org.bouncycastle.crypto.digests.SHA512Digest;

import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;


/**
 * The base abstract class for Elliptic Curve Digital Signature Algorithm 
 * (ECDSA) signers and validators of {@link com.nimbusds.jose.JWSObject JWS 
 * objects}.
 *
 * 

Supports the following JSON Web Algorithms (JWAs): * *

    *
  • {@link com.nimbusds.jose.JWSAlgorithm#ES256} *
  • {@link com.nimbusds.jose.JWSAlgorithm#ES384} *
  • {@link com.nimbusds.jose.JWSAlgorithm#ES512} *
* * @author Axel Nennker * @author Vladimir Dzhuvinov * @version $version$ (2013-11-06) */ abstract class ECDSAProvider extends BaseJWSProvider { /** * The supported JWS algorithms. */ public static final Set SUPPORTED_ALGORITHMS; /** * Initialises the supported algorithms. */ static { Set algs = new HashSet<>(); algs.add(JWSAlgorithm.ES256); algs.add(JWSAlgorithm.ES384); algs.add(JWSAlgorithm.ES512); SUPPORTED_ALGORITHMS = Collections.unmodifiableSet(algs); } /** * Creates a new Elliptic Curve Digital Signature Algorithm (ECDSA) * provider. */ protected ECDSAProvider() { super(SUPPORTED_ALGORITHMS); } /** * Gets the expected signature byte array length (R + S parts) for the * specified ECDSA algorithm. * * @param alg The JSON Web Algorithm (JWA). Must be supported and not * {@code null}. * * @return The expected byte array length for the signature. * * @throws JOSEException If the algorithm is not supported. */ protected static int getSignatureByteArrayLength(final JWSAlgorithm alg) throws JOSEException { if (alg.equals(JWSAlgorithm.ES256)) { return 64; } else if (alg.equals(JWSAlgorithm.ES384)) { return 96; } else if (alg.equals(JWSAlgorithm.ES512)) { return 132; } else { throw new JOSEException("Unsupported ECDSA algorithm, must be ES256, ES384 or ES512"); } } /** * Gets the initial parameters for the specified ECDSA-based JSON Web * Algorithm (JWA). * * @param alg The JSON Web Algorithm (JWA). Must be supported and not * {@code null}. * * @return The initial ECDSA parameters. * * @throws JOSEException If the algorithm is not supported. */ protected static ECDSAParameters getECDSAParameters(final JWSAlgorithm alg) throws JOSEException { ASN1ObjectIdentifier oid; Digest digest; if (alg.equals(JWSAlgorithm.ES256)) { oid = SECObjectIdentifiers.secp256r1; digest = new SHA256Digest(); } else if (alg.equals(JWSAlgorithm.ES384)) { oid = SECObjectIdentifiers.secp384r1; digest = new SHA384Digest(); } else if (alg.equals(JWSAlgorithm.ES512)) { oid = SECObjectIdentifiers.secp521r1; digest = new SHA512Digest(); } else { throw new JOSEException("Unsupported ECDSA algorithm, must be ES256, ES384 or ES512"); } X9ECParameters x9ECParams = SECNamedCurves.getByOID(oid); return new ECDSAParameters(x9ECParams, digest); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy