/** * Generate and encapsulate a random session key. * * @param out the output buffer for the encapsulated key. * @param keyLen the length of the session key. * @return the random session key. */ public CipherParameters encrypt(byte[] out, int keyLen) { return encrypt(out, 0, keyLen); }
/** * Generate and encapsulate a random session key. * * @param out the output buffer for the encapsulated key. * @param keyLen the length of the session key. * @return the random session key. */ public CipherParameters encrypt(byte[] out, int keyLen) { return encrypt(out, 0, keyLen); }
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; }