aboutsummaryrefslogtreecommitdiff
path: root/tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java')
-rw-r--r--tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java489
1 files changed, 489 insertions, 0 deletions
diff --git a/tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java
new file mode 100644
index 00000000..36c7648a
--- /dev/null
+++ b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/message/IkeEncryptedPayloadBodyTest.java
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.internal.net.ipsec.ike.message;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import android.net.ipsec.ike.SaProposal;
+
+import com.android.internal.net.TestUtils;
+import com.android.internal.net.ipsec.ike.crypto.IkeCipher;
+import com.android.internal.net.ipsec.ike.crypto.IkeCombinedModeCipher;
+import com.android.internal.net.ipsec.ike.crypto.IkeMacIntegrity;
+import com.android.internal.net.ipsec.ike.crypto.IkeNormalModeCipher;
+import com.android.internal.net.ipsec.ike.message.IkeSaPayload.EncryptionTransform;
+import com.android.internal.net.ipsec.ike.message.IkeSaPayload.IntegrityTransform;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.security.GeneralSecurityException;
+import java.util.Arrays;
+
+public final class IkeEncryptedPayloadBodyTest {
+ private static final String IKE_AUTH_INIT_REQUEST_HEADER =
+ "5f54bf6d8b48e6e1909232b3d1edcb5c2e20230800000001000000ec";
+ private static final String IKE_AUTH_INIT_REQUEST_SK_HEADER = "230000d0";
+ private static final String IKE_AUTH_INIT_REQUEST_IV = "b9132b7bb9f658dfdc648e5017a6322a";
+ private static final String IKE_AUTH_INIT_REQUEST_ENCRYPT_PADDED_DATA =
+ "030c316ce55f365760d46426ce5cfc78bd1ed9abff63eb9594c1bd58"
+ + "46de333ecd3ea2b705d18293b130395300ba92a351041345"
+ + "0a10525cea51b2753b4e92b081fd78d995659a98f742278f"
+ + "f9b8fd3e21554865c15c79a5134d66b2744966089e416c60"
+ + "a274e44a9a3f084eb02f3bdce1e7de9de8d9a62773ab563b"
+ + "9a69ba1db03c752acb6136452b8a86c41addb4210d68c423"
+ + "efed80e26edca5fa3fe5d0a5ca9375ce332c474b93fb1fa3"
+ + "59eb4e81";
+ private static final String IKE_AUTH_INIT_REQUEST_CHECKSUM = "ae6e0f22abdad69ba8007d50";
+
+ private static final String IKE_AUTH_INIT_REQUEST_UNENCRYPTED_DATA =
+ "2400000c010000000a50500d2700000c010000000a505050"
+ + "2100001c02000000df7c038aefaaa32d3f44b228b52a3327"
+ + "44dfb2c12c00002c00000028010304032ad4c0a20300000c"
+ + "0100000c800e008003000008030000020000000805000000"
+ + "2d00001801000000070000100000ffff00000000ffffffff"
+ + "2900001801000000070000100000ffff00000000ffffffff"
+ + "29000008000040000000000c0000400100000001";
+ private static final String IKE_AUTH_INIT_REQUEST_PADDING = "0000000000000000000000";
+ private static final int HMAC_SHA1_CHECKSUM_LEN = 12;
+
+ private static final String ENCR_KEY_FROM_INIT_TO_RESP = "5cbfd33f75796c0188c4a3a546aec4a1";
+ private static final String INTE_KEY_FROM_INIT_TO_RESP =
+ "554fbf5a05b7f511e05a30ce23d874db9ef55e51";
+
+ private static final String ENCR_ALGO_AES_CBC = "AES/CBC/NoPadding";
+
+ // Test vectors for IKE message protected by HmacSha1 and 3DES
+ private static final String HMAC_SHA1_3DES_MSG_HEX_STRING =
+ "5837b1bd28ec424f85ddd0c609c8dbfe2e20232000000002"
+ + "00000064300000488beaf41d88544baabd95eac60269f19a"
+ + "5986295fe318ce02f65368cd957985f36b183794c4c78d35"
+ + "437762297a131a773d7f7806aaa0c590f48b9d71001f4d65"
+ + "70a44533";
+
+ private static final String HMAC_SHA1_3DES_DECRYPTED_BODY_HEX_STRING =
+ "00000028013c00241a013c001f10dac4f8b759138776091dd0f00033c5b07374726f6e675377616e";
+
+ private static final String HMAC_SHA1_3DES_MSG_ENCR_KEY =
+ "ee0fdd6d35bbdbe9eeef2f24495b6632e5047bdd8e413c87";
+ private static final String HMAC_SHA1_3DES_MSG_INTE_KEY =
+ "867a0bd019108db856cf6984fc9fb62d70c0de74";
+
+ // TODO: b/142753861 Test IKE fragment protected by AES_CBC instead of 3DES
+
+ // Test vectors for IKE fragment protected by HmacSha1 and 3DES
+ private static final String HMAC_SHA1_3DES_FRAG_HEX_STRING =
+ "939ae1251d18eb9077a99551b15c6e933520232000000001"
+ + "000000c0000000a400050005fd7c7931705af184b7be76bb"
+ + "d45a8ecbb3ffd58b9438b93f67e9fe86b06229f80e9b52d2"
+ + "ff6afde3f2c13ae93ce55a801f62e1a818c9003880a36bbe"
+ + "986fe6979ba233b9f4f0ddc992d06dbad5a2b998be18fae9"
+ + "47e5ccfb37775d069344e711fbf499bb289cf4cca245bd45"
+ + "0ad89d18689207759507ba18d47247e920b9e000a25a7596"
+ + "e4130929e5cdc37d5c1b0d90bbaae946c260f4d3cf815f6d";
+ private static final String HMAC_SHA1_3DES_FRAG_DECRYPTED_BODY_HEX_STRING =
+ "54ebd95c572100002002000000000100040a0a0a01000300"
+ + "040808080800030004080804042c00002c00000028020304"
+ + "03cc86090a0300000c0100000c800e010003000008030000"
+ + "0200000008050000002d00001801000000070000100000ff"
+ + "ff0a0a0a010a0a0a010000001801000000070000100000ff"
+ + "ff00000000ffffffff";
+ private static final String HMAC_SHA1_3DES_FRAG_IV = "fd7c7931705af184";
+ private static final String HMAC_SHA1_3DES_FRAG_PADDING = "dcf0fa5e2b64";
+
+ private static final int HMAC_SHA1_3DES_FRAGMENT_NUM = 5;
+ private static final int HMAC_SHA1_3DES_TOTAL_FRAGMENTS = 5;
+
+ private static final String HMAC_SHA1_3DES_FRAG_ENCR_KEY =
+ "6BBF6CB3526D6492F4DA0AF45E9B9FD3E1FF534280352073";
+ private static final String HMAC_SHA1_3DES_FRAG_INTE_KEY =
+ "293449E8E518060780B9C06F15838A06EEF57814";
+
+ // Test vectors for IKE message protected by AES_GCM_16
+ private static final String AES_GCM_MSG_HEX_STRING =
+ "77c708b4523e39a471dc683c1d4f21362e20230800000005"
+ + "0000006127000045fbd69d9ee2dafc5e7c03a0106761065b2"
+ + "8fa8d11aed6046f7f8af117e44da7635be6e0dfafcb0a387c"
+ + "53fb46ba5d6fa9509161915929de97b7fbe23dc65723b0fe";
+ private static final String AES_GCM_MSG_DECRYPTED_BODY_HEX_STRING =
+ "000000280200000033233837e909ec805d56151bef5b1fa9b8e25b32419c9b3fc96ee699ec29d501";
+ private static final String AES_GCM_MSG_IV = "fbd69d9ee2dafc5e";
+ private static final String AES_GCM_MSG_ENCR_KEY =
+ "7C04513660DEC572D896105254EF92608054F8E6EE19E79CE52AB8697B2B5F2C2AA90C29";
+
+ // Test vectors for IKE fragment protected by AES_GCM_16
+ private static final String AES_GCM_FRAG_HEX_STRING =
+ "77c708b4523e39a471dc683c1d4f213635202320000000010"
+ + "0000113000000f7000200026faf9e5c04c67571871681d443"
+ + "01489f99fd78d318b0517a5a99bf6a3e1770f43d7d997c9e0"
+ + "d186038d16df3fd525eda821f80b3a40fc6bce397ac67539e"
+ + "40042919a5e9af38c70881d092a8571f0e131f594c0e8d6b8"
+ + "4ea116f0c95619439b0a267b35bc47dac72bbfb3d3776feb3"
+ + "86d7d4f819b0248f52f60bf4371ab6384e37819a9685c27d8"
+ + "e41abe30cd6f60905dd5c05c351ec0a1fcf9b99360161d2f3"
+ + "4dcf6401829df9392121d88e2201d279200e25d750678af6a"
+ + "7f4892a5c8d4a7358ec50cdf12cfa7652488f756ba6d07441"
+ + "e9a27aad3976ac8a705ff796857cb2df9ce360c3992e0285b"
+ + "34834255b06";
+ private static final String AES_GCM_FRAG_DECRYPTED_BODY_HEX_STRING =
+ "0fce6e996f4936ec8db8097339c371c686be75f4bed3f259c"
+ + "14d39c3ad90cb864085c6375f75b724d9f9daa8e7b22a106a"
+ + "488bc48c081997b7416fd33b146882e51ff6a640edf760212"
+ + "7f2454d502e92262ba3dd07cff52ee1bb1ea85f582db41a68"
+ + "aaf6dace362e5d8b10cfeb65eebc7572690e2c415a11cae57"
+ + "020810cf7aa56d9f2d5c2be3a633f8e4c6af5483a2b1f05bd"
+ + "4340ab551ddf7f51def57eaf5a37793ff6aa1e1ec288a2adf"
+ + "a647c369f15efa61a619966a320f24e1765c0e00c5ed394aa"
+ + "ef14512032b005827c000000090100000501";
+ private static final String AES_GCM_FRAG_IV = "6faf9e5c04c67571";
+
+ private static final int AES_GCM_FRAGMENT_NUM = 2;
+ private static final int AES_GCM_TOTAL_FRAGMENTS = 2;
+
+ private static final String AES_GCM_FRAG_ENCR_KEY =
+ "955ED949D6F18857220E97B17D9285C830A39F8D4DC46AB43943668093C62A3D66664F8C";
+
+ private static final int ENCRYPTED_BODY_SK_OFFSET =
+ IkeHeader.IKE_HEADER_LENGTH + IkePayload.GENERIC_HEADER_LENGTH;
+ private static final int ENCRYPTED_BODY_SKF_OFFSET =
+ ENCRYPTED_BODY_SK_OFFSET + IkeSkfPayload.SKF_HEADER_LEN;
+
+ private IkeNormalModeCipher mAesCbcCipher;
+ private byte[] mAesCbcKey;
+
+ private IkeMacIntegrity mHmacSha1IntegrityMac;
+ private byte[] mHmacSha1IntegrityKey;
+
+ private byte[] mDataToPadAndEncrypt;
+ private byte[] mDataToAuthenticate;
+ private byte[] mEncryptedPaddedData;
+ private byte[] mIkeMessage;
+
+ private byte[] mChecksum;
+ private byte[] mIv;
+ private byte[] mPadding;
+
+ private IkeNormalModeCipher m3DesCipher;
+
+ private IkeCombinedModeCipher mAesGcm16Cipher;
+
+ private byte[] mAesGcmMsgKey;
+ private byte[] mAesGcmMsg;
+ private byte[] mAesGcmUnencryptedData;
+
+ private byte[] mAesGcmFragKey;
+ private byte[] mAesGcmFragMsg;
+ private byte[] mAesGcmFragUnencryptedData;
+
+ @Before
+ public void setUp() throws Exception {
+ mDataToPadAndEncrypt =
+ TestUtils.hexStringToByteArray(IKE_AUTH_INIT_REQUEST_UNENCRYPTED_DATA);
+ String hexStringToAuthenticate =
+ IKE_AUTH_INIT_REQUEST_HEADER
+ + IKE_AUTH_INIT_REQUEST_SK_HEADER
+ + IKE_AUTH_INIT_REQUEST_IV
+ + IKE_AUTH_INIT_REQUEST_ENCRYPT_PADDED_DATA;
+ mDataToAuthenticate = TestUtils.hexStringToByteArray(hexStringToAuthenticate);
+ mEncryptedPaddedData =
+ TestUtils.hexStringToByteArray(IKE_AUTH_INIT_REQUEST_ENCRYPT_PADDED_DATA);
+ mIkeMessage =
+ TestUtils.hexStringToByteArray(
+ IKE_AUTH_INIT_REQUEST_HEADER
+ + IKE_AUTH_INIT_REQUEST_SK_HEADER
+ + IKE_AUTH_INIT_REQUEST_IV
+ + IKE_AUTH_INIT_REQUEST_ENCRYPT_PADDED_DATA
+ + IKE_AUTH_INIT_REQUEST_CHECKSUM);
+
+ mChecksum = TestUtils.hexStringToByteArray(IKE_AUTH_INIT_REQUEST_CHECKSUM);
+ mIv = TestUtils.hexStringToByteArray(IKE_AUTH_INIT_REQUEST_IV);
+ mPadding = TestUtils.hexStringToByteArray(IKE_AUTH_INIT_REQUEST_PADDING);
+
+ m3DesCipher =
+ (IkeNormalModeCipher)
+ IkeCipher.create(
+ new EncryptionTransform(SaProposal.ENCRYPTION_ALGORITHM_3DES),
+ IkeMessage.getSecurityProvider());
+
+ mAesCbcCipher =
+ (IkeNormalModeCipher)
+ IkeCipher.create(
+ new EncryptionTransform(
+ SaProposal.ENCRYPTION_ALGORITHM_AES_CBC,
+ SaProposal.KEY_LEN_AES_128),
+ IkeMessage.getSecurityProvider());
+ mAesCbcKey = TestUtils.hexStringToByteArray(ENCR_KEY_FROM_INIT_TO_RESP);
+
+ mHmacSha1IntegrityMac =
+ IkeMacIntegrity.create(
+ new IntegrityTransform(SaProposal.INTEGRITY_ALGORITHM_HMAC_SHA1_96),
+ IkeMessage.getSecurityProvider());
+ mHmacSha1IntegrityKey = TestUtils.hexStringToByteArray(INTE_KEY_FROM_INIT_TO_RESP);
+
+ mAesGcm16Cipher =
+ (IkeCombinedModeCipher)
+ IkeCipher.create(
+ new EncryptionTransform(
+ SaProposal.ENCRYPTION_ALGORITHM_AES_GCM_16,
+ SaProposal.KEY_LEN_AES_256),
+ IkeMessage.getSecurityProvider());
+
+ mAesGcmMsgKey = TestUtils.hexStringToByteArray(AES_GCM_MSG_ENCR_KEY);
+ mAesGcmMsg = TestUtils.hexStringToByteArray(AES_GCM_MSG_HEX_STRING);
+ mAesGcmUnencryptedData =
+ TestUtils.hexStringToByteArray(AES_GCM_MSG_DECRYPTED_BODY_HEX_STRING);
+
+ mAesGcmFragKey = TestUtils.hexStringToByteArray(AES_GCM_FRAG_ENCR_KEY);
+ mAesGcmFragMsg = TestUtils.hexStringToByteArray(AES_GCM_FRAG_HEX_STRING);
+ mAesGcmFragUnencryptedData =
+ TestUtils.hexStringToByteArray(AES_GCM_FRAG_DECRYPTED_BODY_HEX_STRING);
+ }
+
+ @Test
+ public void testValidateChecksum() throws Exception {
+ IkeEncryptedPayloadBody.validateInboundChecksumOrThrow(
+ mDataToAuthenticate, mHmacSha1IntegrityMac, mHmacSha1IntegrityKey, mChecksum);
+ }
+
+ @Test
+ public void testThrowForInvalidChecksum() throws Exception {
+ byte[] dataToAuthenticate = Arrays.copyOf(mDataToAuthenticate, mDataToAuthenticate.length);
+ dataToAuthenticate[0]++;
+
+ try {
+ IkeEncryptedPayloadBody.validateInboundChecksumOrThrow(
+ dataToAuthenticate, mHmacSha1IntegrityMac, mHmacSha1IntegrityKey, mChecksum);
+ fail("Expected GeneralSecurityException due to mismatched checksum.");
+ } catch (GeneralSecurityException expected) {
+ }
+ }
+
+ @Test
+ public void testCalculatePaddingPlaintextShorterThanBlockSize() throws Exception {
+ int blockSize = 16;
+ int plainTextLength = 15;
+ int expectedPadLength = 0;
+
+ byte[] calculatedPadding =
+ IkeEncryptedPayloadBody.calculatePadding(plainTextLength, blockSize);
+ assertEquals(expectedPadLength, calculatedPadding.length);
+ }
+
+ @Test
+ public void testCalculatePaddingPlaintextInBlockSize() throws Exception {
+ int blockSize = 16;
+ int plainTextLength = 16;
+ int expectedPadLength = 15;
+
+ byte[] calculatedPadding =
+ IkeEncryptedPayloadBody.calculatePadding(plainTextLength, blockSize);
+ assertEquals(expectedPadLength, calculatedPadding.length);
+ }
+
+ @Test
+ public void testCalculatePaddingPlaintextLongerThanBlockSize() throws Exception {
+ int blockSize = 16;
+ int plainTextLength = 17;
+ int expectedPadLength = 14;
+
+ byte[] calculatedPadding =
+ IkeEncryptedPayloadBody.calculatePadding(plainTextLength, blockSize);
+ assertEquals(expectedPadLength, calculatedPadding.length);
+ }
+
+ @Test
+ public void testEncrypt() throws Exception {
+ byte[] calculatedData =
+ IkeEncryptedPayloadBody.normalModeEncrypt(
+ mDataToPadAndEncrypt, mAesCbcCipher, mAesCbcKey, mIv, mPadding);
+
+ assertArrayEquals(mEncryptedPaddedData, calculatedData);
+ }
+
+ @Test
+ public void testDecrypt() throws Exception {
+ byte[] calculatedPlainText =
+ IkeEncryptedPayloadBody.normalModeDecrypt(
+ mEncryptedPaddedData, mAesCbcCipher, mAesCbcKey, mIv);
+
+ assertArrayEquals(mDataToPadAndEncrypt, calculatedPlainText);
+ }
+
+ @Test
+ public void testBuildAndEncodeOutboundIkeEncryptedPayloadBody() throws Exception {
+ IkeHeader ikeHeader = new IkeHeader(mIkeMessage);
+
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ ikeHeader,
+ IkePayload.PAYLOAD_TYPE_ID_INITIATOR,
+ new byte[0] /*skfHeader*/,
+ mDataToPadAndEncrypt,
+ mHmacSha1IntegrityMac,
+ mAesCbcCipher,
+ mHmacSha1IntegrityKey,
+ mAesCbcKey,
+ mIv,
+ mPadding);
+
+ byte[] expectedEncodedData =
+ TestUtils.hexStringToByteArray(
+ IKE_AUTH_INIT_REQUEST_IV
+ + IKE_AUTH_INIT_REQUEST_ENCRYPT_PADDED_DATA
+ + IKE_AUTH_INIT_REQUEST_CHECKSUM);
+ assertArrayEquals(expectedEncodedData, payloadBody.encode());
+ }
+
+ @Test
+ public void testAuthAndDecodeHmacSha1AesCbc() throws Exception {
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ mIkeMessage,
+ ENCRYPTED_BODY_SK_OFFSET,
+ mHmacSha1IntegrityMac,
+ mAesCbcCipher,
+ mHmacSha1IntegrityKey,
+ mAesCbcKey);
+
+ assertArrayEquals(mDataToPadAndEncrypt, payloadBody.getUnencryptedData());
+ }
+
+ @Test
+ public void testAuthAndDecodeHmacSha13Des() throws Exception {
+ byte[] message = TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_MSG_HEX_STRING);
+ byte[] expectedDecryptedData =
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_DECRYPTED_BODY_HEX_STRING);
+
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ message,
+ ENCRYPTED_BODY_SK_OFFSET,
+ mHmacSha1IntegrityMac,
+ m3DesCipher,
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_MSG_INTE_KEY),
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_MSG_ENCR_KEY));
+
+ assertArrayEquals(expectedDecryptedData, payloadBody.getUnencryptedData());
+ }
+
+ @Test
+ public void testBuildAndEncodeWithHmacSha13Des() throws Exception {
+ byte[] message = TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_FRAG_HEX_STRING);
+ IkeHeader ikeHeader = new IkeHeader(message);
+
+ byte[] skfHeaderBytes =
+ IkeSkfPayload.encodeSkfHeader(
+ HMAC_SHA1_3DES_FRAGMENT_NUM, HMAC_SHA1_3DES_TOTAL_FRAGMENTS);
+
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ ikeHeader,
+ IkePayload.PAYLOAD_TYPE_NO_NEXT,
+ skfHeaderBytes,
+ TestUtils.hexStringToByteArray(
+ HMAC_SHA1_3DES_FRAG_DECRYPTED_BODY_HEX_STRING),
+ mHmacSha1IntegrityMac,
+ m3DesCipher,
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_FRAG_INTE_KEY),
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_FRAG_ENCR_KEY),
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_FRAG_IV),
+ TestUtils.hexStringToByteArray(HMAC_SHA1_3DES_FRAG_PADDING));
+
+ byte[] expectedEncodedData =
+ Arrays.copyOfRange(message, ENCRYPTED_BODY_SKF_OFFSET, message.length);
+
+ assertArrayEquals(expectedEncodedData, payloadBody.encode());
+ }
+
+ @Test
+ public void testAuthAndDecodeFullMsgWithAesGcm() throws Exception {
+ IkeEncryptedPayloadBody encryptedBody =
+ new IkeEncryptedPayloadBody(
+ mAesGcmMsg,
+ ENCRYPTED_BODY_SK_OFFSET,
+ null /*integrityMac*/,
+ mAesGcm16Cipher,
+ null /*integrityKey*/,
+ mAesGcmMsgKey);
+
+ assertArrayEquals(mAesGcmUnencryptedData, encryptedBody.getUnencryptedData());
+ }
+
+ @Test
+ public void testBuildAndEncodeMsgWithAesGcm() throws Exception {
+ IkeHeader ikeHeader = new IkeHeader(mAesGcmMsg);
+
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ ikeHeader,
+ IkePayload.PAYLOAD_TYPE_AUTH,
+ new byte[0],
+ mAesGcmUnencryptedData,
+ null /*integrityMac*/,
+ mAesGcm16Cipher,
+ null /*integrityKey*/,
+ mAesGcmMsgKey,
+ TestUtils.hexStringToByteArray(AES_GCM_MSG_IV),
+ new byte[0] /*padding*/);
+
+ byte[] expectedEncodedData =
+ Arrays.copyOfRange(mAesGcmMsg, ENCRYPTED_BODY_SK_OFFSET, mAesGcmMsg.length);
+
+ assertArrayEquals(expectedEncodedData, payloadBody.encode());
+ }
+
+ @Test
+ public void testAuthAndDecodeFragMsgWithAesGcm() throws Exception {
+ IkeEncryptedPayloadBody encryptedBody =
+ new IkeEncryptedPayloadBody(
+ mAesGcmFragMsg,
+ ENCRYPTED_BODY_SKF_OFFSET,
+ null /*integrityMac*/,
+ mAesGcm16Cipher,
+ null /*integrityKey*/,
+ mAesGcmFragKey);
+
+ assertArrayEquals(mAesGcmFragUnencryptedData, encryptedBody.getUnencryptedData());
+ }
+
+ @Test
+ public void testBuildAndEncodeFragMsgWithAesGcm() throws Exception {
+ IkeHeader ikeHeader = new IkeHeader(mAesGcmFragMsg);
+ byte[] skfHeaderBytes =
+ IkeSkfPayload.encodeSkfHeader(AES_GCM_FRAGMENT_NUM, AES_GCM_TOTAL_FRAGMENTS);
+
+ IkeEncryptedPayloadBody payloadBody =
+ new IkeEncryptedPayloadBody(
+ ikeHeader,
+ IkePayload.PAYLOAD_TYPE_NO_NEXT,
+ skfHeaderBytes,
+ mAesGcmFragUnencryptedData,
+ null /*integrityMac*/,
+ mAesGcm16Cipher,
+ null /*integrityKey*/,
+ mAesGcmFragKey,
+ TestUtils.hexStringToByteArray(AES_GCM_FRAG_IV),
+ new byte[0] /*padding*/);
+
+ byte[] expectedEncodedData =
+ Arrays.copyOfRange(
+ mAesGcmFragMsg, ENCRYPTED_BODY_SKF_OFFSET, mAesGcmFragMsg.length);
+
+ assertArrayEquals(expectedEncodedData, payloadBody.encode());
+ }
+}