Search in sources :

Example 1 with EphemeralKeyPairGenerator

use of org.spongycastle.crypto.generators.EphemeralKeyPairGenerator in project rskj by rsksmart.

the class ECIESCoder method encryptSimple.

/**
 *  Encryption equivalent to the Crypto++ default ECIES<ECP> settings:
 *
 *  DL_KeyAgreementAlgorithm:        DL_KeyAgreementAlgorithm_DH<struct ECPPoint,struct EnumToType<enum CofactorMultiplicationOption,0> >
 *  DL_KeyDerivationAlgorithm:       DL_KeyDerivationAlgorithm_P1363<struct ECPPoint,0,class P1363_KDF2<class SHA1> >
 *  DL_SymmetricEncryptionAlgorithm: DL_EncryptionAlgorithm_Xor<class HMAC<class SHA1>,0>
 *  DL_PrivateKey:                   DL_Key<ECPPoint>
 *  DL_PrivateKey_EC<class ECP>
 *
 *  Used for Whisper V3
 */
public static byte[] encryptSimple(ECPoint pub, byte[] plaintext) throws IOException, InvalidCipherTextException {
    EthereumIESEngine iesEngine = new EthereumIESEngine(new ECDHBasicAgreement(), new MGF1BytesGeneratorExt(new SHA1Digest(), 1), new HMac(new SHA1Digest()), new SHA1Digest(), null);
    IESParameters p = new IESParameters(null, null, KEY_SIZE);
    ParametersWithIV parametersWithIV = new ParametersWithIV(p, new byte[0]);
    iesEngine.setHashMacKey(false);
    ECKeyPairGenerator eGen = new ECKeyPairGenerator();
    SecureRandom random = new SecureRandom();
    KeyGenerationParameters gParam = new ECKeyGenerationParameters(CURVE, random);
    eGen.init(gParam);
    EphemeralKeyPairGenerator ephemeralKeyPairGenerator = new EphemeralKeyPairGenerator(/*testGen*/
    eGen, new ECIESPublicKeyEncoder());
    iesEngine.init(new ECPublicKeyParameters(pub, CURVE), parametersWithIV, ephemeralKeyPairGenerator);
    return iesEngine.processBlock(plaintext, 0, plaintext.length);
}
Also used : ECKeyPairGenerator(org.spongycastle.crypto.generators.ECKeyPairGenerator) EphemeralKeyPairGenerator(org.spongycastle.crypto.generators.EphemeralKeyPairGenerator) HMac(org.spongycastle.crypto.macs.HMac) SHA1Digest(org.spongycastle.crypto.digests.SHA1Digest) SecureRandom(java.security.SecureRandom) KeyGenerationParameters(org.spongycastle.crypto.KeyGenerationParameters) ECDHBasicAgreement(org.spongycastle.crypto.agreement.ECDHBasicAgreement)

Example 2 with EphemeralKeyPairGenerator

use of org.spongycastle.crypto.generators.EphemeralKeyPairGenerator in project rskj by rsksmart.

the class CryptoTest method test15.

// ECIES_AES128_SHA256 + Ephemeral Key + IV(all zeroes)
@Test
public void test15() throws Throwable {
    byte[] privKey = Hex.decode("a4627abc2a3c25315bff732cb22bc128f203912dd2a840f31e66efb27a47d2b1");
    ECKey ecKey = ECKey.fromPrivate(privKey);
    ECPrivateKeyParameters ecPrivKey = new ECPrivateKeyParameters(ecKey.getPrivKey(), ECKey.CURVE);
    ECPublicKeyParameters ecPubKey = new ECPublicKeyParameters(ecKey.getPubKeyPoint(), ECKey.CURVE);
    AsymmetricCipherKeyPair myKey = new AsymmetricCipherKeyPair(ecPubKey, ecPrivKey);
    AESFastEngine aesFastEngine = new AESFastEngine();
    IESEngine iesEngine = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA256Digest()), new HMac(new SHA256Digest()), new BufferedBlockCipher(new SICBlockCipher(aesFastEngine)));
    byte[] d = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    byte[] e = new byte[] { 8, 7, 6, 5, 4, 3, 2, 1 };
    IESParameters p = new IESWithCipherParameters(d, e, 64, 128);
    ParametersWithIV parametersWithIV = new ParametersWithIV(p, new byte[16]);
    ECKeyPairGenerator eGen = new ECKeyPairGenerator();
    KeyGenerationParameters gParam = new ECKeyGenerationParameters(ECKey.CURVE, new SecureRandom());
    eGen.init(gParam);
    ECKeyGenerationParameters keygenParams = new ECKeyGenerationParameters(ECKey.CURVE, new SecureRandom());
    ECKeyPairGenerator generator = new ECKeyPairGenerator();
    generator.init(keygenParams);
    EphemeralKeyPairGenerator kGen = new EphemeralKeyPairGenerator(generator, new KeyEncoder() {

        public byte[] getEncoded(AsymmetricKeyParameter keyParameter) {
            return ((ECPublicKeyParameters) keyParameter).getQ().getEncoded();
        }
    });
    ECKeyPairGenerator gen = new ECKeyPairGenerator();
    gen.init(new ECKeyGenerationParameters(ECKey.CURVE, new SecureRandom()));
    iesEngine.init(myKey.getPublic(), parametersWithIV, kGen);
    byte[] message = Hex.decode("010101");
    log.info("payload: {}", Hex.toHexString(message));
    byte[] cipher = iesEngine.processBlock(message, 0, message.length);
    log.info("cipher: {}", Hex.toHexString(cipher));
    IESEngine decryptorIES_Engine = new IESEngine(new ECDHBasicAgreement(), new KDF2BytesGenerator(new SHA256Digest()), new HMac(new SHA256Digest()), new BufferedBlockCipher(new SICBlockCipher(aesFastEngine)));
    decryptorIES_Engine.init(myKey.getPrivate(), parametersWithIV, new ECIESPublicKeyParser(ECKey.CURVE));
    byte[] orig = decryptorIES_Engine.processBlock(cipher, 0, cipher.length);
    log.info("orig: " + Hex.toHexString(orig));
}
Also used : ECKeyPairGenerator(org.spongycastle.crypto.generators.ECKeyPairGenerator) EphemeralKeyPairGenerator(org.spongycastle.crypto.generators.EphemeralKeyPairGenerator) KeyEncoder(org.spongycastle.crypto.KeyEncoder) HMac(org.spongycastle.crypto.macs.HMac) SecureRandom(java.security.SecureRandom) SICBlockCipher(org.spongycastle.crypto.modes.SICBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) KeyGenerationParameters(org.spongycastle.crypto.KeyGenerationParameters) AsymmetricCipherKeyPair(org.spongycastle.crypto.AsymmetricCipherKeyPair) IESEngine(org.spongycastle.crypto.engines.IESEngine) ECDHBasicAgreement(org.spongycastle.crypto.agreement.ECDHBasicAgreement) KDF2BytesGenerator(org.spongycastle.crypto.generators.KDF2BytesGenerator) SHA256Digest(org.spongycastle.crypto.digests.SHA256Digest) BufferedBlockCipher(org.spongycastle.crypto.BufferedBlockCipher) ECIESPublicKeyParser(org.spongycastle.crypto.parsers.ECIESPublicKeyParser) Test(org.junit.Test)

Aggregations

SecureRandom (java.security.SecureRandom)2 KeyGenerationParameters (org.spongycastle.crypto.KeyGenerationParameters)2 ECDHBasicAgreement (org.spongycastle.crypto.agreement.ECDHBasicAgreement)2 ECKeyPairGenerator (org.spongycastle.crypto.generators.ECKeyPairGenerator)2 EphemeralKeyPairGenerator (org.spongycastle.crypto.generators.EphemeralKeyPairGenerator)2 HMac (org.spongycastle.crypto.macs.HMac)2 Test (org.junit.Test)1 AsymmetricCipherKeyPair (org.spongycastle.crypto.AsymmetricCipherKeyPair)1 BufferedBlockCipher (org.spongycastle.crypto.BufferedBlockCipher)1 KeyEncoder (org.spongycastle.crypto.KeyEncoder)1 SHA1Digest (org.spongycastle.crypto.digests.SHA1Digest)1 SHA256Digest (org.spongycastle.crypto.digests.SHA256Digest)1 AESFastEngine (org.spongycastle.crypto.engines.AESFastEngine)1 IESEngine (org.spongycastle.crypto.engines.IESEngine)1 KDF2BytesGenerator (org.spongycastle.crypto.generators.KDF2BytesGenerator)1 SICBlockCipher (org.spongycastle.crypto.modes.SICBlockCipher)1 ECIESPublicKeyParser (org.spongycastle.crypto.parsers.ECIESPublicKeyParser)1