|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.i2p.crypto.ElGamalAESEngine
public class ElGamalAESEngine
Handles the actual ElGamal+AES encryption and decryption scenarios using the supplied keys and data.
Constructor Summary | |
---|---|
ElGamalAESEngine(I2PAppContext ctx)
|
Method Summary | |
---|---|
byte[] |
decrypt(byte[] data,
PrivateKey targetPrivateKey)
Decrypt the message using the given private key. |
(package private) byte[] |
decryptAESBlock(byte[] encrypted,
int offset,
int encryptedLen,
SessionKey key,
byte[] iv,
byte[] sentTag,
java.util.Set foundTags,
SessionKey foundKey)
|
(package private) byte[] |
decryptAESBlock(byte[] encrypted,
SessionKey key,
byte[] iv,
byte[] sentTag,
java.util.Set foundTags,
SessionKey foundKey)
Decrypt the AES data with the session key and IV. |
(package private) byte[] |
decryptExistingSession(byte[] data,
SessionKey key,
PrivateKey targetPrivateKey,
java.util.Set foundTags,
SessionKey usedKey,
SessionKey foundKey)
scenario 2: The data begins with 32 byte session tag, which also serves as the preIV. |
(package private) byte[] |
decryptNewSession(byte[] data,
PrivateKey targetPrivateKey,
java.util.Set foundTags,
SessionKey usedKey,
SessionKey foundKey)
scenario 1: Begin with 222 bytes, ElG encrypted, containing: - 32 byte SessionKey - 32 byte pre-IV for the AES - 158 bytes of random padding Then encrypt with AES using that session key and the first 16 bytes of the SHA256 of the pre-IV, using the decryptAESBlock method & structure. |
byte[] |
encrypt(byte[] data,
PublicKey target,
SessionKey key,
long paddedSize)
Encrypt the data to the target using the given key delivering no tags |
byte[] |
encrypt(byte[] data,
PublicKey target,
SessionKey key,
java.util.Set tagsForDelivery,
long paddedSize)
Encrypt the data to the target using the given key and deliver the specified tags |
byte[] |
encrypt(byte[] data,
PublicKey target,
SessionKey key,
java.util.Set tagsForDelivery,
SessionTag currentTag,
long paddedSize)
Encrypt the data to the target using the given key and deliver the specified tags |
byte[] |
encrypt(byte[] data,
PublicKey target,
SessionKey key,
java.util.Set tagsForDelivery,
SessionTag currentTag,
SessionKey newKey,
long paddedSize)
Encrypt the unencrypted data to the target. |
(package private) byte[] |
encryptAESBlock(byte[] data,
SessionKey key,
byte[] iv,
java.util.Set tagsForDelivery,
SessionKey newKey,
long paddedSize)
For both scenarios, this method encrypts the AES area using the given key, iv and making sure the resulting data is at least as long as the paddedSize and also mod 16 bytes. |
(package private) byte[] |
encryptAESBlock(byte[] data,
SessionKey key,
byte[] iv,
java.util.Set tagsForDelivery,
SessionKey newKey,
long paddedSize,
int prefixBytes)
|
(package private) byte[] |
encryptExistingSession(byte[] data,
PublicKey target,
SessionKey key,
java.util.Set tagsForDelivery,
SessionTag currentTag,
SessionKey newKey,
long paddedSize)
scenario 2: Begin with 32 byte session tag, which also serves as the preIV. |
(package private) byte[] |
encryptNewSession(byte[] data,
PublicKey target,
SessionKey key,
java.util.Set tagsForDelivery,
SessionKey newKey,
long paddedSize)
scenario 1: Begin with 222 bytes, ElG encrypted, containing: - 32 byte SessionKey - 32 byte pre-IV for the AES - 158 bytes of random padding Then encrypt with AES using that session key and the first 16 bytes of the SHA256 of the pre-IV: - 2 byte integer specifying the # of session tags - that many 32 byte session tags - 4 byte integer specifying data.length - SHA256 of data - 1 byte flag that, if == 1, is followed by a new SessionKey - data - random bytes, padding the total size to greater than paddedSize with a mod 16 = 0 |
(package private) static byte[] |
getPadding(I2PAppContext context,
int curSize,
long minPaddedSize)
Return random bytes for padding the data to a mod 16 size so that it is at least minPaddedSize |
(package private) static int |
getPaddingSize(int curSize,
long minPaddedSize)
|
static void |
main(java.lang.String[] args)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public ElGamalAESEngine(I2PAppContext ctx)
Method Detail |
---|
public byte[] decrypt(byte[] data, PrivateKey targetPrivateKey) throws DataFormatException
DataFormatException
byte[] decryptNewSession(byte[] data, PrivateKey targetPrivateKey, java.util.Set foundTags, SessionKey usedKey, SessionKey foundKey) throws DataFormatException
foundTags
- set which is filled with any sessionTags found during decryptionfoundKey
- session key which may be filled with a new sessionKey found during decryption
DataFormatException
byte[] decryptExistingSession(byte[] data, SessionKey key, PrivateKey targetPrivateKey, java.util.Set foundTags, SessionKey usedKey, SessionKey foundKey) throws DataFormatException
foundTags
- set which is filled with any sessionTags found during decryptionfoundKey
- session key which may be filled with a new sessionKey found during decryption
DataFormatException
byte[] decryptAESBlock(byte[] encrypted, SessionKey key, byte[] iv, byte[] sentTag, java.util.Set foundTags, SessionKey foundKey) throws DataFormatException
foundTags
- set which is filled with any sessionTags found during decryptionfoundKey
- session key which may be filled with a new sessionKey found during decryption
DataFormatException
byte[] decryptAESBlock(byte[] encrypted, int offset, int encryptedLen, SessionKey key, byte[] iv, byte[] sentTag, java.util.Set foundTags, SessionKey foundKey) throws DataFormatException
DataFormatException
public byte[] encrypt(byte[] data, PublicKey target, SessionKey key, java.util.Set tagsForDelivery, SessionTag currentTag, SessionKey newKey, long paddedSize)
target
- public key to which the data should be encrypted.key
- session key to use during encryptiontagsForDelivery
- session tags to be associated with the key (or newKey if specified), or nullcurrentTag
- sessionTag to use, or null if it should use ElGnewKey
- key to be delivered to the target, with which the tagsForDelivery should be associatedpaddedSize
- minimum size in bytes of the body after padding it (if less than the
body's real size, no bytes are appended but the body is not truncated)public byte[] encrypt(byte[] data, PublicKey target, SessionKey key, java.util.Set tagsForDelivery, SessionTag currentTag, long paddedSize)
public byte[] encrypt(byte[] data, PublicKey target, SessionKey key, java.util.Set tagsForDelivery, long paddedSize)
public byte[] encrypt(byte[] data, PublicKey target, SessionKey key, long paddedSize)
byte[] encryptNewSession(byte[] data, PublicKey target, SessionKey key, java.util.Set tagsForDelivery, SessionKey newKey, long paddedSize)
byte[] encryptExistingSession(byte[] data, PublicKey target, SessionKey key, java.util.Set tagsForDelivery, SessionTag currentTag, SessionKey newKey, long paddedSize)
final byte[] encryptAESBlock(byte[] data, SessionKey key, byte[] iv, java.util.Set tagsForDelivery, SessionKey newKey, long paddedSize)
final byte[] encryptAESBlock(byte[] data, SessionKey key, byte[] iv, java.util.Set tagsForDelivery, SessionKey newKey, long paddedSize, int prefixBytes)
static final byte[] getPadding(I2PAppContext context, int curSize, long minPaddedSize)
static final int getPaddingSize(int curSize, long minPaddedSize)
public static void main(java.lang.String[] args)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |