18d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce/* 28d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Copyright (C) 2014 The Android Open Source Project 38d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 48d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Licensed under the Apache License, Version 2.0 (the "License"); 58d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * you may not use this file except in compliance with the License. 68d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * You may obtain a copy of the License at 78d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 88d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * http://www.apache.org/licenses/LICENSE-2.0 98d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * 108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * Unless required by applicable law or agreed to in writing, software 118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * distributed under the License is distributed on an "AS IS" BASIS, 128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * See the License for the specific language governing permissions and 148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce * limitations under the License. 158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce */ 168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <gtest/gtest.h> 188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <string.h> 198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <utils/String8.h> 218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include <utils/Vector.h> 228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce#include "AesCtrDecryptor.h" 248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Brucenamespace clearkeydrm { 268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruceusing namespace android; 288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruceclass AesCtrDecryptorTest : public ::testing::Test { 308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce protected: 318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce typedef uint8_t Key[kBlockSize]; 328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce status_t attemptDecrypt(const Key& key, const Iv& iv, const uint8_t* source, 348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t* destination, const SubSample* subSamples, 358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce size_t numSubSamples, size_t* bytesDecryptedOut) { 368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Vector<uint8_t> keyVector; 378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce keyVector.appendArray(key, kBlockSize); 388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce AesCtrDecryptor decryptor; 408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce return decryptor.decrypt(keyVector, iv, source, destination, subSamples, 418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce numSubSamples, bytesDecryptedOut); 428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce template <size_t totalSize> 458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce void attemptDecryptExpectingSuccess(const Key& key, const Iv& iv, 468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const uint8_t* encrypted, 478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const uint8_t* decrypted, 488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const SubSample* subSamples, 498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce size_t numSubSamples) { 508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t outputBuffer[totalSize] = {}; 518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce size_t bytesDecrypted = 0; 528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce ASSERT_EQ(android::OK, attemptDecrypt(key, iv, encrypted, outputBuffer, 538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, numSubSamples, 548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce &bytesDecrypted)); 558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_EQ(totalSize, bytesDecrypted); 568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce EXPECT_EQ(0, memcmp(outputBuffer, decrypted, totalSize)); 578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce } 588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce}; 598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsContiguousEncryptedBlock) { 618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 64; 628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 1; 638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Test vectors from NIST-800-38A 658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 64} 998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 1028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 1038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsAlignedBifurcatedEncryptedBlock) { 1068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 64; 1078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 2; 1088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Test vectors from NIST-800-38A 1108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 1118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 1128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 1138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 1168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 1218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 1228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 1238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 1248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 1258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 1268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 1278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 1288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 1298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 1328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 1338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 1348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 1358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 1368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 1378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 1388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 1398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 1408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 1438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 32}, 1448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 32} 1458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 1488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 1498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsUnalignedBifurcatedEncryptedBlock) { 1528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 64; 1538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 2; 1548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Test vectors from NIST-800-38A 1568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 1578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 1588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 1598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 1628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 1638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 1648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 1678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 1688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 1698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 1708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 1718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 1728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 1738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 1748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 1758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 1788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 1798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 1808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 1818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 1828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 1838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 1848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 1858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 1868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 1898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 29}, 1908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 35} 1918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 1928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 1948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 1958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 1968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 1978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsOneMixedSubSample) { 1988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 72; 1998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 1; 2008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Based on test vectors from NIST-800-38A 2028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 2038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 2048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 2058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 2088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 2098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 2108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 2138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 2148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 2158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 64 encrypted bytes 2168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 2178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 2188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 2198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 2208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 2218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 2228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 2238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 2248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 2278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 2288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 2298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 2308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 2318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 2328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 2338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 2348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 2358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 2368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 2398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 64} 2408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 2438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 2448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 2458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsAlignedMixedSubSamples) { 2478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 80; 2488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 2; 2498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Based on test vectors from NIST-800-38A 2518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 2528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 2538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 2548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 2578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 2588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 2598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 2628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 2638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 2648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 32 encrypted bytes 2658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 2668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 2678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 2688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 2698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 2708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 2718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 32 encrypted bytes 2728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 2738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 2748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 2758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 2768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 2798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 2808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 2818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 2828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 2838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 2848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 2858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 2868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 2878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 2888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 2898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 2928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 32}, 2938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 32} 2948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 2958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 2968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 2978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 2988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 2998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsUnalignedMixedSubSamples) { 3018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 80; 3028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 2; 3038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Based on test vectors from NIST-800-38A 3058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 3068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 3078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 3088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 3118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 3128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 3138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 3168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 3178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 3188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 30 encrypted bytes 3198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 3208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 3218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 3228d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 3238d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 3248d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 3258d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 34 encrypted bytes 3268d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xfd, 0xff, 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 3278d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xd3, 0x5e, 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 3288d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x3e, 0xab, 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 3298d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x03, 0xd1, 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 3308d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9c, 0xee 3318d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3328d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3338d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 3348d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 3358d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 3368d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 3378d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 3388d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x94, 0xba, 3398d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 0x8e, 0x51, 3408d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 3418d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 3428d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 3438d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 3448d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3458d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3468d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 3478d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 30}, 3488d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 34} 3498d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3508d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3518d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 3528d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 3538d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 3548d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3558d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" BruceTEST_F(AesCtrDecryptorTest, DecryptsComplexMixedSubSamples) { 3568d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kTotalSize = 72; 3578d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce const size_t kNumSubsamples = 6; 3588d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3598d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // Based on test vectors from NIST-800-38A 3608d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Key key = { 3618d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 3628d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 3638d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3648d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3658d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce Iv iv = { 3668d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 3678d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 3688d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3698d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3708d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t encrypted[kTotalSize] = { 3718d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 4 clear bytes 3728d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 3738d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 1 encrypted bytes 3748d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x87, 3758d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 9 encrypted bytes 3768d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 0x1b, 3778d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xef, 3788d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 11 clear bytes 3798d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x81, 0x4f, 0x24, 0x87, 0x0e, 0xde, 0xba, 0xad, 3808d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x11, 0x9b, 0x46, 3818d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 20 encrypted bytes 3828d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 3838d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 3848d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 3858d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 8 clear bytes 3868d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 3878d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 3 clear bytes 3888d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x10, 0xf5, 0x22, 3898d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 14 encrypted bytes 3908d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xfd, 0xff, 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 3918d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xd3, 0x5e, 0x5b, 0x4f, 0x09, 0x02, 3928d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce // 2 clear bytes 3938d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x02, 0x01 3948d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 3958d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 3968d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce uint8_t decrypted[kTotalSize] = { 3978d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xf0, 0x13, 0xca, 0xc7, 0x6b, 0xc1, 0xbe, 0xe2, 3988d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x81, 0x4f, 3998d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x24, 0x87, 0x0e, 0xde, 0xba, 0xad, 0x11, 0x9b, 4008d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x46, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 4018d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 4028d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x94, 0xba, 0x88, 4038d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x2e, 0x0e, 0x12, 0x11, 0x55, 0x10, 0xf5, 0x22, 4048d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 4058d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x02, 0x01 4068d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 4078d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 4088d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce SubSample subSamples[kNumSubsamples] = { 4098d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {4, 1}, 4108d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {0, 9}, 4118d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {11, 20}, 4128d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {8, 0}, 4138d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {3, 14}, 4148d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce {2, 0} 4158d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce }; 4168d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 4178d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 4188d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce subSamples, kNumSubsamples); 4198d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} 4208d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce 4218d0bc4a8ea2a5d0d6aba036f15b185d60e18778fJohn "Juce" Bruce} // namespace clearkeydrm 422