Example usage for org.bouncycastle.crypto.params ECPrivateKeyParameters getParameters

List of usage examples for org.bouncycastle.crypto.params ECPrivateKeyParameters getParameters

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.params ECPrivateKeyParameters getParameters.

Prototype

public ECDomainParameters getParameters() 

Source Link

Usage

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

License:Apache License

public static boolean compare(ECPrivateKeyParameters privateA, ECPrivateKeyParameters privateB) {
    ECDomainParameters parametersA = privateA.getParameters();
    ECDomainParameters parametersB = privateB.getParameters();

    // is it the same curve?
    boolean equals = parametersA.getCurve().equals(parametersB.getCurve());
    if (!equals) {
        return false;
    }/*w w w . ja v a 2 s  . co  m*/

    equals = parametersA.getG().equals(parametersB.getG());
    if (!equals) {
        return false;
    }

    equals = parametersA.getH().equals(parametersB.getH());
    if (!equals) {
        return false;
    }

    equals = parametersA.getN().equals(parametersB.getN());
    if (!equals) {
        return false;
    }

    equals = privateA.getD().equals(privateB.getD());

    return equals;
}

From source file:dorkbox.util.serialization.EccPrivateKeySerializer.java

License:Apache License

public static void write(Output output, ECPrivateKeyParameters key) throws KryoException {
    byte[] bytes;
    int length;//from w w w.j a v a2s .c  o m

    ECDomainParameters parameters = key.getParameters();
    ECCurve curve = parameters.getCurve();

    EccPrivateKeySerializer.serializeCurve(output, curve);

    /////////////
    BigInteger n = parameters.getN();
    ECPoint g = parameters.getG();

    /////////////
    bytes = n.toByteArray();
    length = bytes.length;
    output.writeInt(length, true);
    output.writeBytes(bytes, 0, length);

    serializeECPoint(g, output);

    /////////////
    bytes = key.getD().toByteArray();
    length = bytes.length;
    output.writeInt(length, true);
    output.writeBytes(bytes, 0, length);
}

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

License:Apache License

public ByteString eciesDecrypt(PrivateKey recipientPrivateKey, ByteString cipherText) {
    BCECPrivateKey bcecPrivateKey = (BCECPrivateKey) recipientPrivateKey;
    ECNamedCurveSpec ecNamedCurveSpec = (ECNamedCurveSpec) bcecPrivateKey.getParams();
    int level = SecurityLevel.from(ecNamedCurveSpec.getName()).size();

    //cipherText = ephemeralPubKeyBytes + encryptedTokBytes + macBytes
    //ephemeralPubKeyBytes = first ((384+7)/8)*2 + 1 bytes = first 97 bytes
    //hmac is sha3_384 = 48 bytes or sha3_256 = 32 bytes
    int ephemeralPubKeyLength = ((level + 7) / 8) * 2 + 1;
    int hmacLength = level >> 3;
    int cipherTextLength = cipherText.size();

    if (cipherTextLength <= ephemeralPubKeyLength + hmacLength)
        throw new RuntimeException(String.format("Illegal cipherText length: %d must be > %d", cipherTextLength,
                ephemeralPubKeyLength + hmacLength));

    ByteString ephemeralPubKey = cipherText.substring(0, ephemeralPubKeyLength);
    ByteString encryptedContent = cipherText.substring(ephemeralPubKeyLength, cipherTextLength - hmacLength);
    ByteString hmac = cipherText.substring(cipherTextLength - hmacLength);

    ECPrivateKeyParameters ecdhPrivateKeyParameters;
    try {//from w  w  w.j  av  a2  s  .co m
        ecdhPrivateKeyParameters = (ECPrivateKeyParameters) (PrivateKeyFactory
                .createKey(bcecPrivateKey.getEncoded()));
    } catch (IOException e) {
        logger.error("ECIES decrypt load private key exception", e);
        throw new RuntimeException(e);
    }
    ECDomainParameters ecDomainParameters = ecdhPrivateKeyParameters.getParameters();
    ECCurve ecCurve = ecDomainParameters.getCurve();
    ECPublicKeyParameters ecPublicKeyParameters = new ECPublicKeyParameters(
            ecCurve.decodePoint(ephemeralPubKey.toByteArray()), ecDomainParameters);
    BasicAgreement agree = new ECDHBasicAgreement();
    agree.init(ecdhPrivateKeyParameters);
    byte[] keyAgreement = agree.calculateAgreement(ecPublicKeyParameters).toByteArray();

    HKDFParameters hkdfParameters = new HKDFParameters(keyAgreement, null, null);
    HKDFBytesGenerator hkdfBytesGenerator = new HKDFBytesGenerator(digest);
    hkdfBytesGenerator.init(hkdfParameters);
    byte[] hkdfOutputBytes = new byte[AESKEY_LENGTH + HMACKEY_LENGTH];
    hkdfBytesGenerator.generateBytes(hkdfOutputBytes, 0, AESKEY_LENGTH + HMACKEY_LENGTH);
    ByteString hkdfOutput = ByteString.copyFrom(hkdfOutputBytes);
    ByteString aesKey = hkdfOutput.substring(0, AESKEY_LENGTH);
    ByteString hmacKey = hkdfOutput.substring(AESKEY_LENGTH, AESKEY_LENGTH + HMACKEY_LENGTH);
    HMac hMac = new HMac(digest);
    hMac.init(new KeyParameter(hmacKey.toByteArray()));
    hMac.update(encryptedContent.toByteArray(), 0, encryptedContent.size());
    byte[] recoveredHmac = new byte[hMac.getMacSize()];
    hMac.doFinal(recoveredHmac, 0);
    if (!MessageDigest.isEqual(hmac.toByteArray(), recoveredHmac)) {
        throw new RuntimeException("HMAC verify failed");
    }

    CFBBlockCipher aesCipher = new CFBBlockCipher(new AESEngine(), BLOCK_BIT_SIZE);
    ByteString iv = encryptedContent.substring(0, IV_LENGTH);
    CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(aesKey.toByteArray()), iv.toByteArray());
    aesCipher.init(false, ivAndKey);
    byte[] decryptedBytes = new byte[500];
    aesCipher.decryptBlock(encryptedContent.substring(IV_LENGTH).toByteArray(), 0, decryptedBytes, 0);
    return ByteString.copyFrom(decryptedBytes);
}

From source file:org.cryptoworkshop.ximix.node.crypto.key.ECNewDKGGenerator.java

License:Apache License

public ECCommittedSecretShareMessage[] generateThresholdKey(String keyID, ECDomainParameters domainParameters,
        int numberOfPeers, int threshold, ECPoint h) {
    // TODO: should have a source of randomness.
    AsymmetricCipherKeyPair keyPair = keyManager.generateKeyPair(keyID, algorithm, numberOfPeers,
            domainParameters, h);// w ww.ja  va  2  s.c o  m

    ECPrivateKeyParameters privKey = (ECPrivateKeyParameters) keyPair.getPrivate();
    ECNewDKGSecretSplitter secretSplitter = new ECNewDKGSecretSplitter(numberOfPeers, threshold, h,
            privKey.getParameters(), new SecureRandom());

    ECCommittedSplitSecret splitSecret = secretSplitter.split(privKey.getD());
    ECCommittedSecretShare[] shares = splitSecret.getCommittedShares();
    ECCommittedSecretShareMessage[] messages = new ECCommittedSecretShareMessage[shares.length];

    BigInteger[] aCoefficients = splitSecret.getCoefficients();
    ECPoint[] qCommitments = new ECPoint[aCoefficients.length];

    for (int i = 0; i != qCommitments.length; i++) {
        qCommitments[i] = privKey.getParameters().getG().multiply(aCoefficients[i]);
    }

    for (int i = 0; i != shares.length; i++) {
        messages[i] = new ECCommittedSecretShareMessage(i, shares[i].getValue(), shares[i].getWitness(),
                shares[i].getCommitmentFactors(), ((ECPublicKeyParameters) keyPair.getPublic()).getQ(),
                qCommitments);
    }

    return messages;
}