Example usage for org.bouncycastle.jcajce.provider.asymmetric.ec BCECPublicKey getEncoded

List of usage examples for org.bouncycastle.jcajce.provider.asymmetric.ec BCECPublicKey getEncoded

Introduction

In this page you can find the example usage for org.bouncycastle.jcajce.provider.asymmetric.ec BCECPublicKey getEncoded.

Prototype

public byte[] getEncoded() 

Source Link

Usage

From source file:dorkbox.util.crypto.EccTest.java

License:Apache License

@Test
public void EccJceSerialization() throws IOException {
    AsymmetricCipherKeyPair generateKeyPair = CryptoECC.generateKeyPair(CryptoECC.default_curve,
            new SecureRandom());
    ECPrivateKeyParameters privateKey = (ECPrivateKeyParameters) generateKeyPair.getPrivate();
    ECPublicKeyParameters publicKey = (ECPublicKeyParameters) generateKeyPair.getPublic();

    BCECPublicKey bcecPublicKey = new BCECPublicKey("EC", publicKey, (ECParameterSpec) null,
            BouncyCastleProvider.CONFIGURATION);
    byte[] publicBytes = bcecPublicKey.getEncoded();

    // relies on the BC public key.
    BCECPrivateKey bcecPrivateKey = new BCECPrivateKey("EC", privateKey, bcecPublicKey, (ECParameterSpec) null,
            BouncyCastleProvider.CONFIGURATION);
    byte[] privateBytes = bcecPrivateKey.getEncoded();

    ECPublicKeyParameters publicKey2 = (ECPublicKeyParameters) PublicKeyFactory.createKey(publicBytes);
    ECPrivateKeyParameters privateKey2 = (ECPrivateKeyParameters) PrivateKeyFactory.createKey(privateBytes);

    // test via signing
    byte[] bytes = "hello, my name is inigo montoya".getBytes();

    BigInteger[] signature = CryptoECC.generateSignature("SHA384", privateKey,
            new SecureRandom(entropySeed.getBytes()), bytes);

    boolean verify1 = CryptoECC.verifySignature("SHA384", publicKey, bytes, signature);

    if (!verify1) {
        fail("failed signature verification");
    }//w  ww. j  av a 2  s. c o  m

    boolean verify2 = CryptoECC.verifySignature("SHA384", publicKey2, bytes, signature);

    if (!verify2) {
        fail("failed signature verification");
    }

    // now reverse who signs what.
    BigInteger[] signatureB = CryptoECC.generateSignature("SHA384", privateKey2,
            new SecureRandom(entropySeed.getBytes()), bytes);

    boolean verifyB1 = CryptoECC.verifySignature("SHA384", publicKey, bytes, signatureB);

    if (!verifyB1) {
        fail("failed signature verification");
    }

    boolean verifyB2 = CryptoECC.verifySignature("SHA384", publicKey2, bytes, signatureB);

    if (!verifyB2) {
        fail("failed signature verification");
    }
}