public static byte[] Decrypt(byte[] prikey, byte[] IV, byte[] key_cxt, byte[] ciphertext, int keylen) { try { com.github.ontio.account.Account account = new com.github.ontio.account.Account(prikey, signatureScheme); ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec((String) curveParaSpec[0]); ECDomainParameters ecDomain = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN()); AsymmetricCipherKeyPair keys = new AsymmetricCipherKeyPair( null, new ECPrivateKeyParameters(((BCECPrivateKey) account.getPrivateKey()).getD(), ecDomain)); byte[] out = key_cxt; ECIESKeyEncapsulation kem = new ECIESKeyEncapsulation(new KDF2BytesGenerator(defaultDigest), new SecureRandom()); KeyParameter key1; kem.init(keys.getPrivate()); key1 = (KeyParameter) kem.decrypt(out, keylen); byte[] plaintext; try { Cipher dec = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); Key key = new SecretKeySpec(key1.getKey(), "AES"); dec.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV)); plaintext = dec.doFinal(ciphertext); } catch (Exception e) { throw new Exception("AES failed initialisation - " + e.toString(), e); } return plaintext; } catch (Exception e) { e.printStackTrace(); } return null; }
public static byte[] Decrypt(byte[] prikey, byte[] IV, byte[] key_cxt, byte[] ciphertext, int keylen) { try { com.github.ontio.account.Account account = new com.github.ontio.account.Account(prikey, signatureScheme); ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec((String) curveParaSpec[0]); ECDomainParameters ecDomain = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN()); AsymmetricCipherKeyPair keys = new AsymmetricCipherKeyPair( null, new ECPrivateKeyParameters(((BCECPrivateKey) account.getPrivateKey()).getD(), ecDomain)); byte[] out = key_cxt; ECIESKeyEncapsulation kem = new ECIESKeyEncapsulation(new KDF2BytesGenerator(defaultDigest), new SecureRandom()); KeyParameter key1; kem.init(keys.getPrivate()); key1 = (KeyParameter) kem.decrypt(out, keylen); byte[] plaintext; try { Cipher dec = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); Key key = new SecretKeySpec(key1.getKey(), "AES"); dec.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV)); plaintext = dec.doFinal(ciphertext); } catch (Exception e) { throw new Exception("AES failed initialisation - " + e.toString(), e); } return plaintext; } catch (Exception e) { e.printStackTrace(); } return null; }
public static String[] Encrypt(String pubkey, byte[] msg, int keylen) { try { com.github.ontio.account.Account account = new com.github.ontio.account.Account(false, Helper.hexToBytes(pubkey)); ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec((String) curveParaSpec[0]); ECDomainParameters ecDomain = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN()); AsymmetricCipherKeyPair keys = new AsymmetricCipherKeyPair( new ECPublicKeyParameters(((BCECPublicKey) account.getPublicKey()).getQ(), ecDomain), null); byte[] out = new byte[(ecDomain.getCurve().getFieldSize() / 8) * 2 + 1]; ECIESKeyEncapsulation kem = new ECIESKeyEncapsulation(new KDF2BytesGenerator(defaultDigest), new SecureRandom()); KeyParameter key1; kem.init(keys.getPublic()); key1 = (KeyParameter) kem.encrypt(out, keylen); //AES key = key1 (is encrypted in out) byte[] IV = Hex.decode(getRandomString(keylen)); //choose random IV of length = keylen byte[] ciphertext; try { Cipher en = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); Key key = new SecretKeySpec(key1.getKey(), "AES"); en.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV)); ciphertext = en.doFinal(msg); } catch (Exception e) { throw new Exception("AES failed initialisation - " + e.toString(), e); } //(IV, out, ciphertext) return new String[]{Helper.toHexString(IV), Helper.toHexString(out), Helper.toHexString(ciphertext)}; } catch (Exception e) { e.printStackTrace(); } return null; }
public static String[] Encrypt(String pubkey, byte[] msg, int keylen) { try { com.github.ontio.account.Account account = new com.github.ontio.account.Account(false, Helper.hexToBytes(pubkey)); ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec((String) curveParaSpec[0]); ECDomainParameters ecDomain = new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN()); AsymmetricCipherKeyPair keys = new AsymmetricCipherKeyPair( new ECPublicKeyParameters(((BCECPublicKey) account.getPublicKey()).getQ(), ecDomain), null); byte[] out = new byte[(ecDomain.getCurve().getFieldSize() / 8) * 2 + 1]; ECIESKeyEncapsulation kem = new ECIESKeyEncapsulation(new KDF2BytesGenerator(defaultDigest), new SecureRandom()); KeyParameter key1; kem.init(keys.getPublic()); key1 = (KeyParameter) kem.encrypt(out, keylen); //AES key = key1 (is encrypted in out) byte[] IV = Hex.decode(getRandomString(keylen)); //choose random IV of length = keylen byte[] ciphertext; try { Cipher en = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); Key key = new SecretKeySpec(key1.getKey(), "AES"); en.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV)); ciphertext = en.doFinal(msg); } catch (Exception e) { throw new Exception("AES failed initialisation - " + e.toString(), e); } //(IV, out, ciphertext) return new String[]{Helper.toHexString(IV), Helper.toHexString(out), Helper.toHexString(ciphertext)}; } catch (Exception e) { e.printStackTrace(); } return null; }