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

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

Introduction

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

Prototype

public boolean verifySignature(byte[] message, BigInteger r, BigInteger s) 

Source Link

Document

return true if the value r and s represent a DSA signature for the passed in message (for standard DSA the message should be a SHA-1 hash of the real message to be verified).

Usage

From source file:ACNS.thresholdDSA.Util.java

License:Apache License

public static boolean verifySignature(byte[] message, BigInteger r, BigInteger s, byte[] pub,
        ECDomainParameters Curve) {//ww w . j av  a  2s  .c  o m
    ECDSASigner signer = new ECDSASigner();
    ECPublicKeyParameters params = new ECPublicKeyParameters(Curve.getCurve().decodePoint(pub), Curve);
    signer.init(false, params);
    try {
        return signer.verifySignature(message, r, s);
    } catch (NullPointerException e) {
        // Bouncy Castle contains a bug that can cause NPEs given specially
        // crafted signatures. Those signatures
        // are inherently invalid/attack sigs so we just fail them here
        // rather than crash the thread.
        System.out.println("Caught NPE inside bouncy castle");
        e.printStackTrace();
        return false;
    }
}

From source file:com.aaasec.sigserv.cscommon.xmldsig.XMLSign.java

License:EUPL

public static boolean ecdsaVerifyDigest(byte[] digest, EcdsaSigValue signature, PublicKey pubKey) {
    try {//from  w  ww  . jav a  2s  . c  om
        ECDSASigner ecdsa = new ECDSASigner();
        CipherParameters param = ECUtil.generatePublicKeyParameter(pubKey);
        ecdsa.init(false, param);
        EcdsaSigValue sigVal = EcdsaSigValue.getInstance(signature);
        return ecdsa.verifySignature(digest, sigVal.getR(), sigVal.getS());
    } catch (Exception ex) {
        Logger.getLogger(XMLSign.class.getName()).log(Level.SEVERE, null, ex);
    }
    return false;
}

From source file:com.bitsofproof.supernode.api.ECKeyPair.java

License:Apache License

public static boolean verify(byte[] hash, byte[] signature, byte[] pub) {
    ASN1InputStream asn1 = new ASN1InputStream(signature);
    try {// w  w w.j a  va2  s  . com
        ECDSASigner signer = new ECDSASigner();
        signer.init(false, new ECPublicKeyParameters(curve.getCurve().decodePoint(pub), domain));

        DLSequence seq = (DLSequence) asn1.readObject();
        BigInteger r = ((DERInteger) seq.getObjectAt(0)).getPositiveValue();
        BigInteger s = ((DERInteger) seq.getObjectAt(1)).getPositiveValue();
        return signer.verifySignature(hash, r, s);
    } catch (Exception e) {
        // threat format errors as invalid signatures
        return false;
    } finally {
        try {
            asn1.close();
        } catch (IOException e) {
        }
    }
}

From source file:com.DSC.crypto.ECDSA.java

License:Open Source License

/**
 * Verify the data, return true if the signature is valid, false otherwise
 * @param pubKey/*from   w w w  .jav  a 2s .  c o m*/
 * @param data
 * @param signature
 * @return
 */
private static boolean verify(CipherParameters pubKey, byte[] data, BigInteger[] signature) {
    ECDSASigner ecdsa = new ECDSASigner();
    ecdsa.init(false, pubKey);
    return ecdsa.verifySignature(data, signature[0], signature[1]);
}

From source file:com.github.horrorho.inflatabledonkey.crypto.ec.ECCurvePoint.java

License:Open Source License

public boolean verifySignature(byte[] message, BigInteger r, BigInteger s) {
    ECDomainParameters ecDomainParameters = ECAssistant.ecDomainParametersFrom(x9ECParameters);
    ECPublicKeyParameters ecPublicKeyParameters = new ECPublicKeyParameters(Q, ecDomainParameters);

    ECDSASigner signer = new ECDSASigner();
    signer.init(false, ecPublicKeyParameters);

    return signer.verifySignature(message, r, s);
}

From source file:com.github.horrorho.inflatabledonkey.crypto.eckey.DefaultECPublicKey.java

License:Open Source License

@Override
public boolean verifySignature(byte[] message, BigInteger r, BigInteger s) {
    ECDomainParameters ecDomainParameters = ECAssistant.ecDomainParametersFrom(x9ECParameters);
    ECPublicKeyParameters ecPublicKeyParameters = new ECPublicKeyParameters(Q, ecDomainParameters);

    ECDSASigner signer = new ECDSASigner();
    signer.init(false, ecPublicKeyParameters);

    return signer.verifySignature(message, r, s);
}

From source file:com.google.bitcoin.core.ECKey.java

License:Apache License

/**
 * <p>Verifies the given ECDSA signature against the message bytes using the public key bytes.</p>
 * /*w  ww  . j a  v  a 2 s  .  co m*/
 * <p>When using native ECDSA verification, data must be 32 bytes, and no element may be
 * larger than 520 bytes.</p>
 *
 * @param data      Hash of the data to verify.
 * @param signature ASN.1 encoded signature.
 * @param pub       The public key bytes to use.
 */
public static boolean verify(byte[] data, ECDSASignature signature, byte[] pub) {
    if (FAKE_SIGNATURES)
        return true;

    if (NativeSecp256k1.enabled)
        return NativeSecp256k1.verify(data, signature.encodeToDER(), pub);

    ECDSASigner signer = new ECDSASigner();
    ECPublicKeyParameters params = new ECPublicKeyParameters(CURVE.getCurve().decodePoint(pub), CURVE);
    signer.init(false, params);
    try {
        return signer.verifySignature(data, signature.r, signature.s);
    } catch (NullPointerException e) {
        // Bouncy Castle contains a bug that can cause NPEs given specially crafted signatures. Those signatures
        // are inherently invalid/attack sigs so we just fail them here rather than crash the thread.
        log.error("Caught NPE inside bouncy castle");
        e.printStackTrace();
        return false;
    }
}

From source file:COSE.SignCommon.java

boolean validateSignature(byte[] rgbToBeSigned, byte[] rgbSignature, CipherParameters key)
        throws CoseException {
    AlgorithmID alg = AlgorithmID.FromCBOR(findAttribute(HeaderKeys.Algorithm));
    Digest digest;/*from   ww  w .j  a  v  a 2 s  . c  o  m*/

    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: {
        byte[] rgbR = new byte[rgbSignature.length / 2];
        byte[] rgbS = new byte[rgbSignature.length / 2];
        System.arraycopy(rgbSignature, 0, rgbR, 0, rgbR.length);
        System.arraycopy(rgbSignature, rgbR.length, rgbS, 0, rgbR.length);

        digest.update(rgbToBeSigned, 0, rgbToBeSigned.length);
        byte[] rgbDigest = new byte[digest.getDigestSize()];
        digest.doFinal(rgbDigest, 0);

        ECDSASigner ecdsa = new ECDSASigner();
        ecdsa.init(false, key);
        return ecdsa.verifySignature(rgbDigest, new BigInteger(1, rgbR), new BigInteger(1, rgbS));
    }

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

From source file:COSE.SignCommon.java

boolean validateSignature(byte[] rgbToBeSigned, byte[] rgbSignature, OneKey cnKey) throws CoseException {
    AlgorithmID alg = AlgorithmID.FromCBOR(findAttribute(HeaderKeys.Algorithm));
    Digest digest;/*w w  w . jav a 2  s  .  co  m*/

    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: {
        byte[] rgbR = new byte[rgbSignature.length / 2];
        byte[] rgbS = new byte[rgbSignature.length / 2];
        System.arraycopy(rgbSignature, 0, rgbR, 0, rgbR.length);
        System.arraycopy(rgbSignature, rgbR.length, rgbS, 0, rgbR.length);

        digest.update(rgbToBeSigned, 0, rgbToBeSigned.length);
        byte[] rgbDigest = new byte[digest.getDigestSize()];
        digest.doFinal(rgbDigest, 0);

        X9ECParameters p = cnKey.GetCurve();
        ECDomainParameters parameters = new ECDomainParameters(p.getCurve(), p.getG(), p.getN(), p.getH());
        BigInteger bnX = new BigInteger(1, cnKey.get(KeyKeys.EC2_X).GetByteString());
        ECPoint point = p.getCurve().createPoint(bnX,
                new BigInteger(1, cnKey.get(KeyKeys.EC2_Y).GetByteString()));

        ECPublicKeyParameters pubKey = new ECPublicKeyParameters(point, parameters);

        ECDSASigner ecdsa = new ECDSASigner();
        ecdsa.init(false, pubKey);
        return ecdsa.verifySignature(rgbDigest, new BigInteger(1, rgbR), new BigInteger(1, rgbS));
    }

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

From source file:COSE.Signer.java

static boolean validateSignature(AlgorithmID alg, byte[] rgbToBeSigned, byte[] rgbSignature, OneKey cnKey)
        throws CoseException {
    Digest digest;/*from w  ww .jav a  2  s  . c  o  m*/

    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: {
        byte[] rgbR = new byte[rgbSignature.length / 2];
        byte[] rgbS = new byte[rgbSignature.length / 2];
        System.arraycopy(rgbSignature, 0, rgbR, 0, rgbR.length);
        System.arraycopy(rgbSignature, rgbR.length, rgbS, 0, rgbR.length);

        digest.update(rgbToBeSigned, 0, rgbToBeSigned.length);
        byte[] rgbDigest = new byte[digest.getDigestSize()];
        digest.doFinal(rgbDigest, 0);

        X9ECParameters p = cnKey.GetCurve();
        ECDomainParameters parameters = new ECDomainParameters(p.getCurve(), p.getG(), p.getN(), p.getH());
        BigInteger bnX = new BigInteger(1, cnKey.get(KeyKeys.EC2_X.AsCBOR()).GetByteString());
        ECPoint point = p.getCurve().createPoint(bnX,
                new BigInteger(1, cnKey.get(KeyKeys.EC2_Y.AsCBOR()).GetByteString()));

        ECPublicKeyParameters pubKey = new ECPublicKeyParameters(point, parameters);

        ECDSASigner ecdsa = new ECDSASigner();
        ecdsa.init(false, pubKey);
        return ecdsa.verifySignature(rgbDigest, new BigInteger(1, rgbR), new BigInteger(1, rgbS));
    }

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