[jira] [Comment Edited] (CRYPTO-60) opensslCipher support GCM mode

2016-10-17 Thread Xianda Ke (JIRA)

[ 
https://issues.apache.org/jira/browse/CRYPTO-60?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15299508#comment-15299508
 ] 

Xianda Ke edited comment on CRYPTO-60 at 10/17/16 8:43 AM:
---

Please help review: [Github PR|https://github.com/apache/commons-crypto/pull/70]


was (Author: kexianda):
Please help review: [Github PR|https://github.com/apache/commons-crypto/pull/44]

> opensslCipher support GCM mode 
> ---
>
> Key: CRYPTO-60
> URL: https://issues.apache.org/jira/browse/CRYPTO-60
> Project: Commons Crypto
>  Issue Type: Sub-task
>Reporter: Xianda Ke
>Assignee: Xianda Ke
> Attachments: gcm_design_doc.pdf
>
>
> The interface would look like JCE. In encryption mode,  the authenticated tag 
> information is appended at the end of output. 
> In decryption mode, the authenticated tag should appended at the end of 
> input. If the encrypted data is tampered, it will throw an 
> AEADBadTagException.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Comment Edited] (CRYPTO-60) opensslCipher support GCM mode

2016-10-14 Thread Xianda Ke (JIRA)

[ 
https://issues.apache.org/jira/browse/CRYPTO-60?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15299404#comment-15299404
 ] 

Xianda Ke edited comment on CRYPTO-60 at 10/14/16 8:29 AM:
---

Here is a sample. The behavior is similar to JCE.

{code:title=GCMSample.java|borderStyle=solid}

final String transform = "AES/GCM/NoPadding";
  
Random r = new Random();
int textLength = r.nextInt(1024*1024);
int ivLength = r.nextInt(60);
int keyLength = 16;
int tagLength = 128;  // bits
int aadLength = r.nextInt(128);

byte[] keyBytes = new byte[keyLength];
byte[] plainBytes = new byte[textLength];
byte[] ivBytes = new byte[ivLength];
byte[] aadBytes = new byte[aadLength];

r.nextBytes(keyBytes);
r.nextBytes(plainBytes);
r.nextBytes(ivBytes);
r.nextBytes(aadBytes);

byte[] encOutput = new byte[plainBytes.length + (tagLength >> 3)];
byte[] decOutput = new byte[plainBytes.length];

try {
CryptoCipher c = Utils.getCipherInstance(transformation);
Key key = new SecretKeySpec(keyBytes, "AES");

GCMParameterSpec iv = new GCMParameterSpec(tagLength, ivBytes);
c.init(CryptoCipher.ENCRYPT_MODE, key, iv);
c.updateAAD(aadBytes);
c.doFinal(plainBytes, 0, plainBytes.length, encOutput, 0);
c.close();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}

// Tamper the encrypted data.
encOutput[0] = (byte)(encOutput[0] + 1);

try {
CryptoCipher c = Utils.getCipherInstance(transformation, props);
Key key = new SecretKeySpec(keyBytes, "AES");

GCMParameterSpec iv = new GCMParameterSpec(tagLength, ivBytes);
c.init(CryptoCipher.DECRYPT_MODE, key, iv);
c.updateAAD(aadBytes);
c.doFinal(encOutput, 0, encOutput.length, decOutput, 0);
c.close();
}
catch (AEADBadTagException ex) {
System.out.println(ex.getMessage());  // "Tag mismatch!"
}

{code}



was (Author: kexianda):
Here is a sample. The behavior is similar to JCE.

{code:title=GCMSample.java|borderStyle=solid}
CipherTransformation transformation = 
CipherTransformation.AES_GCM_NOPADDING;
Properties props = new Properties();
props.setProperty(ConfigurationKeys.COMMONS_CRYPTO_CIPHER_CLASSES_KEY, 
cipherClass);
Random r = new Random();
int textLength = r.nextInt(1024*1024);
int ivLength = r.nextInt(60);
int keyLength = 16;
int tagLength = 128;  // bits
int aadLength = r.nextInt(128);

byte[] keyBytes = new byte[keyLength];
byte[] plainBytes = new byte[textLength];
byte[] ivBytes = new byte[ivLength];
byte[] aadBytes = new byte[aadLength];

r.nextBytes(keyBytes);
r.nextBytes(plainBytes);
r.nextBytes(ivBytes);
r.nextBytes(aadBytes);

byte[] encOutput = new byte[plainBytes.length + (tagLength >> 3)];
byte[] decOutput = new byte[plainBytes.length];

try {
CryptoCipher c = Utils.getCipherInstance(transformation, props);
Key key = new SecretKeySpec(keyBytes, "AES");

GCMParameterSpec iv = new GCMParameterSpec(tagLength, ivBytes);
c.init(CryptoCipher.ENCRYPT_MODE, key, iv);
c.updateAAD(aadBytes);
c.doFinal(plainBytes, 0, plainBytes.length, encOutput, 0);
c.close();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}

// Tamper the encrypted data.
encOutput[0] = (byte)(encOutput[0] + 1);

try {
CryptoCipher c = Utils.getCipherInstance(transformation, props);
Key key = new SecretKeySpec(keyBytes, "AES");

GCMParameterSpec iv = new GCMParameterSpec(tagLength, ivBytes);
c.init(CryptoCipher.DECRYPT_MODE, key, iv);
c.updateAAD(aadBytes);
c.doFinal(encOutput, 0, encOutput.length, decOutput, 0);
c.close();
}
catch (AEADBadTagException ex) {
System.out.println(ex.getMessage());  // "Tag mismatch!"
}

{code}


> opensslCipher support GCM mode 
> ---
>
> Key: CRYPTO-60
> URL: https://issues.apache.org/jira/browse/CRYPTO-60
> Project: Commons Crypto
>  Issue Type: Sub-task
>Reporter: Xianda Ke
>Assignee: Xianda Ke
>
> The interface would look like JCE. In encryption mode,  the authenticated tag 
> information is appended at the end of output. 
> In decryption mode, the authenticated tag should appended at the end of 
> input. If the encrypted data is tampered, it will throw an 
> AEADBadTagException.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)