Example usage for org.bouncycastle.crypto.signers ECDSASigner ECDSASigner

List of usage examples for org.bouncycastle.crypto.signers ECDSASigner ECDSASigner

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.signers ECDSASigner ECDSASigner.

Prototype

public ECDSASigner(DSAKCalculator kCalculator) 

Source Link

Document

Configuration with an alternate, possibly deterministic calculator of K.

Usage

From source file:com.facebook.delegatedrecovery.RecoveryToken.java

License:Open Source License

private byte[] getSignature(final byte[] rawArray, final ECPrivateKey privateKey) throws IOException {
    if (this.signature != null) {
        throw new IllegalStateException("This token already has a signature.");
    }//  w  w  w  .j av  a 2  s .c  o m
    final BigInteger privatePoint = privateKey.getS();

    final SHA256Digest digest = new SHA256Digest();
    final byte[] hash = new byte[digest.getByteLength()];
    digest.update(rawArray, 0, rawArray.length);
    digest.doFinal(hash, 0);

    final ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
    signer.init(true, new ECPrivateKeyParameters(privatePoint, DelegatedRecoveryUtils.P256_DOMAIN_PARAMS));
    final BigInteger[] signature = signer.generateSignature(hash);
    final ByteArrayOutputStream s = new ByteArrayOutputStream();
    final DERSequenceGenerator seq = new DERSequenceGenerator(s);
    seq.addObject(new ASN1Integer(signature[0]));
    seq.addObject(new ASN1Integer(signature[1]));
    seq.close();

    return s.toByteArray();
}

From source file:COSE.SignCommon.java

byte[] computeSignature(byte[] rgbToBeSigned, CipherParameters key) throws CoseException {
    AlgorithmID alg = AlgorithmID.FromCBOR(findAttribute(HeaderKeys.Algorithm));
    Digest digest;// w ww  . j  ava2  s .  c o m
    CBORObject cn;
    switch (alg) {
    case ECDSA_256:
        digest = new SHA256Digest();
        break;

    case ECDSA_384:
        digest = new SHA384Digest();
        break;

    case ECDSA_512:
        digest = new SHA512Digest();
        break;

    default:
        throw new CoseException("Unsupported Algorithm Specified");
    }

    switch (alg) {
    case ECDSA_256:
    case ECDSA_384:
    case ECDSA_512: {
        digest.update(rgbToBeSigned, 0, rgbToBeSigned.length);
        byte[] rgbDigest = new byte[digest.getDigestSize()];
        digest.doFinal(rgbDigest, 0);

        ECDSASigner ecdsa = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
        ecdsa.init(true, key);
        BigInteger[] sig = ecdsa.generateSignature(rgbDigest);

        int cb = (((ECPrivateKeyParameters) key).getParameters().getCurve().getFieldSize() + 7) / 8;
        byte[] r = sig[0].toByteArray();
        byte[] s = sig[1].toByteArray();

        byte[] sigs = new byte[cb * 2];
        int cbR = min(cb, r.length);
        System.arraycopy(r, r.length - cbR, sigs, cb - cbR, cbR);
        cbR = min(cb, s.length);
        System.arraycopy(s, s.length - cbR, sigs, cb + cb - cbR, cbR);

        return sigs;

    }

    default:
        throw new CoseException("Inernal error");
    }
}

From source file:me.grapebaba.hyperledger.fabric.Crypto.java

License:Apache License

public BigInteger[] ecdsaSign(PrivateKey privateKey, ByteString message) {
    ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(digest));
    ECPrivateKeyParameters ecdhPrivateKeyParameters;
    try {//from  w  ww  .  j  a v  a2s.c o  m
        ecdhPrivateKeyParameters = (ECPrivateKeyParameters) (PrivateKeyFactory
                .createKey(privateKey.getEncoded()));
    } catch (IOException e) {
        logger.error("ECDSA sign load private key exception", e);
        throw new RuntimeException(e);
    }
    signer.init(true, ecdhPrivateKeyParameters);
    return signer.generateSignature(message.toByteArray());
}

From source file:org.ethereum.crypto.ECKey.java

License:Open Source License

/**
 * Signs the given hash and returns the R and S components as BigIntegers
 * and put them in ECDSASignature/*from w  w w  .ja v a2  s  . c  o  m*/
 *
 * @param input to sign
 * @return ECDSASignature signature that contains the R and S components
 */
public ECDSASignature doSign(byte[] input) {
    // No decryption of private key required.
    if (priv == null) {
        throw new MissingPrivateKeyException();
    }
    ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
    ECPrivateKeyParameters privKey = new ECPrivateKeyParameters(priv, CURVE);
    signer.init(true, privKey);
    BigInteger[] components = signer.generateSignature(input);
    return new ECDSASignature(components[0], components[1]).toCanonicalised();
}

From source file:org.hyperledger.common.BouncyCastleCrypto.java

License:Apache License

@Override
public byte[] sign(byte[] hash, byte[] privateKey) {
    ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
    signer.init(true, new ECPrivateKeyParameters(new BigInteger(privateKey), domain));
    BigInteger[] signature = signer.generateSignature(hash);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {/*from ww w.ja va2  s .c  o m*/
        DERSequenceGenerator seq = new DERSequenceGenerator(baos);
        seq.addObject(new ASN1Integer(signature[0]));
        seq.addObject(new ASN1Integer(toCanonicalS(signature[1])));
        seq.close();
        return baos.toByteArray();
    } catch (IOException e) {
        return new byte[0];
    }
}

From source file:org.hyperledger.common.PrivateKey.java

License:Apache License

/**
 * Sign a digest with this key./* w w  w .ja  v a 2  s .  c  o  m*/
 *
 * @param hash arbitrary data
 * @return signature
 */
public byte[] sign(byte[] hash) {
    ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
    signer.init(true, new ECPrivateKeyParameters(priv, domain));
    BigInteger[] signature = signer.generateSignature(hash);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        DERSequenceGenerator seq = new DERSequenceGenerator(baos);
        seq.addObject(new ASN1Integer(signature[0]));
        seq.addObject(new ASN1Integer(toCanonicalS(signature[1])));
        seq.close();
        return baos.toByteArray();
    } catch (IOException e) {
    }
    return null;
}

From source file:org.hyperledger.fabric.sdk.security.CryptoPrimitives.java

License:Open Source License

public byte[][] ecdsaSign(PrivateKey privateKey, byte[] data) throws CryptoException {
    try {//ww w.ja  v a 2  s  .c  o m
        byte[] encoded = hash(data);
        X9ECParameters params = SECNamedCurves.getByName(this.curveName);
        ECDomainParameters ecParams = new ECDomainParameters(params.getCurve(), params.getG(), params.getN(),
                params.getH());

        ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA512Digest()));
        ECPrivateKeyParameters privKey = new ECPrivateKeyParameters(((ECPrivateKey) privateKey).getS(),
                ecParams);
        signer.init(true, privKey);
        BigInteger[] sigs = signer.generateSignature(encoded);
        return new byte[][] { sigs[0].toString().getBytes(UTF_8), sigs[1].toString().getBytes(UTF_8) };
    } catch (Exception e) {
        throw new CryptoException("Could not sign the message using private key", e);
    }

}

From source file:org.ScripterRon.BitcoinCore.ECKey.java

License:Apache License

/**
 * Creates a signature for the supplied contents using the private key
 *
 * @param       contents                Contents to be signed
 * @return                              ECDSA signature
 * @throws      ECException             Unable to create signature
 *///from w w w  .jav  a2  s .c  o m
public ECDSASignature createSignature(byte[] contents) throws ECException {
    if (privKey == null)
        throw new IllegalStateException("No private key available");
    //
    // Get the double SHA-256 hash of the signed contents
    //
    byte[] contentsHash = Utils.doubleDigest(contents);
    //
    // Create the signature
    //
    BigInteger[] sigs;
    try {
        ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
        ECPrivateKeyParameters privKeyParams = new ECPrivateKeyParameters(privKey, ecParams);
        signer.init(true, privKeyParams);
        sigs = signer.generateSignature(contentsHash);
    } catch (RuntimeException exc) {
        throw new ECException("Exception while creating signature", exc);
    }
    //
    // Create a canonical signature by adjusting the S component to be less than or equal to
    // half the curve order.
    //
    if (sigs[1].compareTo(HALF_CURVE_ORDER) > 0)
        sigs[1] = ecParams.getN().subtract(sigs[1]);
    return new ECDSASignature(sigs[0], sigs[1]);
}

From source file:us.eharning.atomun.core.ec.internal.BouncyCastleECKeyPair.java

License:Apache License

/**
 * Perform an ECDSA signature using the private key.
 *
 * @param hash/*from w w w . ja v a2 s  .  c  o  m*/
 *         byte array to sign.
 *
 * @return ASN.1 representation of the signature.
 */
@Nonnull
@Override
public byte[] sign(@Nonnull byte[] hash) {
    /* The HMacDSAKCalculator is what makes this signer RFC 6979 compliant. */
    ECDSASigner signer = new ECDSASigner(new RFC6979KCalculator(new SHA256Digest()));
    signer.init(true, new ECPrivateKeyParameters(privateExponent, domain));
    BigInteger[] signature = signer.generateSignature(hash);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    /* Need to canonicalize signature up front ... */
    if (CANONICALIZE && signature[1].compareTo(HALF_CURVE_ORDER) > 0) {
        /* BOP does not do this */
        signature[1] = curve.getN().subtract(signature[1]);
    }
    try {
        DERSequenceGenerator seq = new DERSequenceGenerator(stream);
        seq.addObject(new ASN1Integer(signature[0]));
        seq.addObject(new ASN1Integer(signature[1]));
        seq.close();
        return stream.toByteArray();
    } catch (IOException e) {
        throw new IllegalStateException("IOException should not be thrown", e);
    }
}