Adición de datos autenticados adicionales a AES-GCM en Android

Estoy intentando agregar los datos autenticados adicionales (AAD) a AES-GCM en Android. Veo la versión Java 7 de las notas de Cipher sobre el uso de GCMParameterSpec y el updateAAD(...) , pero dado que Android está basado en Java 6, estoy completamente sin ideas. Estoy usando Spongycastle como la biblioteca criptográfica

  GCMParameterSpec s = new GCMParameterSpec(...); cipher.init(..., s); cipher.updateAAD(...); // AAD 

gracias @andrey – encontré una muestra más completa también forman la lista de correo de BC

 public void testGCM() { try { byte iv[] = "123456789012".getBytes(); byte inMsg[] = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" .getBytes(); byte aad[] = "123456789012123456789012123456789012345678901234567890123456" .getBytes(); byte key[] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb".getBytes(); System.out.println("inMsgLen===" + inMsg.length); // encrypt AEADParameters parameters = new AEADParameters( new KeyParameter(key), 128, iv, aad); GCMBlockCipher gcmEngine = new GCMBlockCipher(new AESFastEngine()); gcmEngine.init(true, parameters); byte[] encMsg = new byte[gcmEngine.getOutputSize(inMsg.length)]; int encLen = gcmEngine.processBytes(inMsg, 0, inMsg.length, encMsg, 0); encLen += gcmEngine.doFinal(encMsg, encLen); System.out.println("encLen===" + encLen); // decrypt gcmEngine.init(false, parameters); byte[] decMsg = new byte[gcmEngine.getOutputSize(encMsg.length)]; int decLen = gcmEngine.processBytes(encMsg, 0, encMsg.length, decMsg, 0); decLen += gcmEngine.doFinal(decMsg, decLen); System.out.println("decLen===" + decLen); System.out.println("MSG===" + new String(decMsg)); } catch (Exception e) { e.printStackTrace(); } } 

De la lista de correo de BC:

Parece un descuido de nuestra parte significa que el proveedor de JCE no expone actualmente un mecanismo para establecer el AAD (también se aplica a otras cifras AEAD: CCM, EAX).

En la API ligera, el AAD se pasa al cifrado ( .init ) a través de una instancia de AEADParameters (el campo 'associatedText').

Con la API liviana también puede proporcionar datos AAD a través del método processAADBytes() expuesto por la interfaz AEADBlockCipher .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.