private final void encrypt(byte data[], int offset, int length) { for (int off = offset + IV_LENGTH; off < length; off += IV_LENGTH) { //DataHelper.xor(data, off - IV_LENGTH, data, off, data, off, IV_LENGTH); for (int j = 0; j < IV_LENGTH; j++) { data[off + j] ^= data[(off - IV_LENGTH) + j]; } _context.aes().encryptBlock(data, off, _config.getLayerKey(), data, off); } }
private final void updateIV(byte orig[], int offset) { _context.aes().encryptBlock(orig, offset, _config.getIVKey(), orig, offset); }
_context.aes().encrypt(aesData, prefixBytes, aesData, prefixBytes, key, iv, aesData.length - prefixBytes);
System.arraycopy(baos.toByteArray(), 0, enc, 0, enclen); byte[] dec = new byte[enclen]; I2PAppContext.getGlobalContext().aes().decrypt(enc, 0, dec, 0, key, iv, enclen); ByteArrayInputStream bais = new ByteArrayInputStream(dec); _decryptedLeases = new ArrayList<Lease>(size - 1);
System.arraycopy(_destination.getPublicKey().getData(), 0, iv, 0, IV_LEN); byte[] enc = new byte[DATA_LEN * (size + 1)]; I2PAppContext.getGlobalContext().aes().encrypt(baos.toByteArray(), 0, enc, 0, key, iv, datalen);
_context.aes().decrypt(encrypted, offset, decrypted, 0, key, iv, encryptedLen);
/** * Create a new encrypted response * * @param status the response 0-255 * @param replyIV 16 bytes * @param responseMessageId unused except for debugging * @return a 528-byte response record */ public static EncryptedBuildRecord create(I2PAppContext ctx, int status, SessionKey replyKey, byte replyIV[], long responseMessageId) { //Log log = ctx.logManager().getLog(BuildResponseRecord.class); byte rv[] = new byte[TunnelBuildReplyMessage.RECORD_SIZE]; ctx.random().nextBytes(rv, Hash.HASH_LENGTH, TunnelBuildReplyMessage.RECORD_SIZE - Hash.HASH_LENGTH - 1); DataHelper.toLong(rv, TunnelBuildMessage.RECORD_SIZE-1, 1, status); // rv = AES(SHA256(padding+status) + padding + status, replyKey, replyIV) ctx.sha().calculateHash(rv, Hash.HASH_LENGTH, rv.length - Hash.HASH_LENGTH, rv, 0); //if (log.shouldLog(Log.DEBUG)) // log.debug(responseMessageId + ": before encrypt: " + Base64.encode(rv, 0, 128) + " with " + replyKey.toBase64() + "/" + Base64.encode(replyIV)); ctx.aes().encrypt(rv, 0, rv, 0, replyKey, replyIV, rv.length); //if (log.shouldLog(Log.DEBUG)) // log.debug(responseMessageId + ": after encrypt: " + Base64.encode(rv, 0, 128)); return new EncryptedBuildRecord(rv); } }
ctx.aes().decrypt(rec.getData(), 0, rec.getData(), 0, key, iv, TunnelBuildMessage.RECORD_SIZE);
public void testMultiple(){ for(int i = 0; i < 100; i++){ SessionKey key = _context.keyGenerator().generateSessionKey(); byte[] iv = new byte[16]; _context.random().nextBytes(iv); byte[] plain = new byte[256]; _context.random().nextBytes(plain); byte[] e = new byte[plain.length]; _context.aes().encrypt(plain, 0, e, 0, key, iv, plain.length); byte[] d = new byte[e.length]; _context.aes().decrypt(e, 0, d, 0, key, iv, d.length); boolean same = true; assertTrue(DataHelper.eq(plain, d)); } }
@SuppressWarnings("deprecation") public void testLong(){ I2PAppContext ctx = new I2PAppContext(); SessionKey key = ctx.keyGenerator().generateSessionKey(); byte iv[] = new byte[16]; RandomSource.getInstance().nextBytes(iv); byte lbuf[] = new byte[1024]; RandomSource.getInstance().nextBytes(lbuf); byte le[] = ctx.aes().safeEncrypt(lbuf, key, iv, 2048); byte ld[] = ctx.aes().safeDecrypt(le, key, iv); assertTrue(DataHelper.eq(ld, lbuf)); }
public void testShort(){ I2PAppContext ctx = new I2PAppContext(); SessionKey key = ctx.keyGenerator().generateSessionKey(); byte iv[] = new byte[16]; RandomSource.getInstance().nextBytes(iv); byte sbuf[] = new byte[16]; RandomSource.getInstance().nextBytes(sbuf); byte se[] = new byte[16]; ctx.aes().encrypt(sbuf, 0, se, 0, key, iv, sbuf.length); byte sd[] = new byte[16]; ctx.aes().decrypt(se, 0, sd, 0, key, iv, se.length); assertTrue(DataHelper.eq(sd, sbuf)); } }
public void testBasicAES(){ SessionKey sessionKey = KeyGenerator.getInstance().generateSessionKey(); Hash h = SHA256Generator.getInstance().calculateHash(sessionKey.getData()); byte iv[] = new byte[16]; System.arraycopy(h.getData(), 0, iv, 0, 16); String msg = "Hello world01234012345678901234501234567890123450123456789012345"; h = SHA256Generator.getInstance().calculateHash(DataHelper.getASCII(msg)); byte aesEncr[] = new byte[DataHelper.getASCII(msg).length]; byte aesDecr[] = new byte[aesEncr.length]; _context.aes().encrypt(DataHelper.getASCII(msg), 0, aesEncr, 0, sessionKey, iv, aesEncr.length); _context.aes().decrypt(aesEncr, 0, aesDecr, 0, sessionKey, iv, aesEncr.length); h = SHA256Generator.getInstance().calculateHash(aesDecr); assertEquals(msg, new String(aesDecr)); }
public void testDHSessionKeyBuilder(){ I2PAppContext ctx = new I2PAppContext(); for (int i = 0; i < 5; i++) { DHSessionKeyBuilder builder1 = new DHSessionKeyBuilder(); DHSessionKeyBuilder builder2 = new DHSessionKeyBuilder(); BigInteger pub1 = builder1.getMyPublicValue(); BigInteger pub2 = builder2.getMyPublicValue(); try { builder2.setPeerPublicValue(pub1); builder1.setPeerPublicValue(pub2); } catch (DHSessionKeyBuilder.InvalidPublicParameterException ippe) { assertTrue(ippe.getMessage(), true); } SessionKey key1 = builder1.getSessionKey(); SessionKey key2 = builder2.getSessionKey(); assertEquals(key1, key2); byte iv[] = new byte[16]; RandomSource.getInstance().nextBytes(iv); String origVal = "1234567890123456"; // 16 bytes max using AESEngine byte enc[] = new byte[16]; byte dec[] = new byte[16]; ctx.aes().encrypt(DataHelper.getASCII(origVal), 0, enc, 0, key1, iv, 16); ctx.aes().decrypt(enc, 0, dec, 0, key2, iv, 16); String tranVal = new String(dec); assertEquals(origVal, tranVal); } } }
ctx.aes().encrypt(bytes, 0, bytes, 0, replyKey, iv, 0, EncryptedBuildRecord.LENGTH);
/** * Writes the header, then encrypts the internal buffer and writes the encrypted * data to the underlying <code>OutputStream</code>. * @throws IOException */ @SuppressWarnings("deprecation") // for net.i2p.crypto.AESEngine private void encryptAndWrite() throws IOException { downstream.write(START_OF_FILE); downstream.write(FORMAT_VERSION); FileEncryptionConstants.KDF_PARAMETERS.writeTo(downstream); downstream.write(derivedKey.salt); byte iv[] = new byte[BLOCK_SIZE]; I2PAppContext appContext = I2PAppContext.getGlobalContext(); appContext.random().nextBytes(iv); downstream.write(iv); byte[] data = outputBuffer.toByteArray(); SessionKey key = new SessionKey(derivedKey.key); byte[] encryptedData = appContext.aes().safeEncrypt(data, key, iv, 0); downstream.write(encryptedData); } }
I2PAppContext appContext = I2PAppContext.getGlobalContext(); byte[] decryptedData = appContext.aes().safeDecrypt(encryptedData, key, iv);
log.debug(reply.getUniqueId() + ": Full reply rec: sz=" + data.length + " data=" + Base64.encode(data, 0, TunnelBuildReplyMessage.RECORD_SIZE)); ctx.aes().decrypt(data, 0, data, 0, replyKey, replyIV, 0, TunnelBuildReplyMessage.RECORD_SIZE); if (log.shouldLog(Log.DEBUG)) log.debug(reply.getUniqueId() + ": after decrypt: " + Base64.encode(data));