1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <gtest/gtest.h> 18 #include <string.h> 19 20 #include <utils/String8.h> 21 #include <utils/Vector.h> 22 23 #include "AesCtrDecryptor.h" 24 25 namespace clearkeydrm { 26 27 using namespace android; 28 29 class AesCtrDecryptorTest : public ::testing::Test { 30 protected: 31 typedef uint8_t Key[kBlockSize]; 32 33 status_t attemptDecrypt(const Key& key, const Iv& iv, const uint8_t* source, 34 uint8_t* destination, const SubSample* subSamples, 35 size_t numSubSamples, size_t* bytesDecryptedOut) { 36 Vector<uint8_t> keyVector; 37 keyVector.appendArray(key, sizeof(key) / sizeof(uint8_t)); 38 39 AesCtrDecryptor decryptor; 40 return decryptor.decrypt(keyVector, iv, source, destination, subSamples, 41 numSubSamples, bytesDecryptedOut); 42 } 43 44 template <size_t totalSize> 45 void attemptDecryptExpectingSuccess(const Key& key, const Iv& iv, 46 const uint8_t* encrypted, 47 const uint8_t* decrypted, 48 const SubSample* subSamples, 49 size_t numSubSamples) { 50 uint8_t outputBuffer[totalSize] = {}; 51 size_t bytesDecrypted = 0; 52 ASSERT_EQ(android::OK, attemptDecrypt(key, iv, encrypted, outputBuffer, 53 subSamples, numSubSamples, 54 &bytesDecrypted)); 55 EXPECT_EQ(totalSize, bytesDecrypted); 56 EXPECT_EQ(0, memcmp(outputBuffer, decrypted, totalSize)); 57 } 58 }; 59 60 TEST_F(AesCtrDecryptorTest, DecryptsWithEmptyKey) { 61 const size_t kTotalSize = 64; 62 const size_t kNumSubsamples = 1; 63 64 // Test vectors from NIST-800-38A 65 Iv iv = { 66 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 67 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 68 }; 69 70 uint8_t source[kTotalSize] = { 0 }; 71 uint8_t destination[kTotalSize] = { 0 }; 72 SubSample subSamples[kNumSubsamples] = { 73 {0, 64} 74 }; 75 76 size_t bytesDecrypted = 0; 77 Vector<uint8_t> keyVector; 78 keyVector.clear(); 79 80 AesCtrDecryptor decryptor; 81 ASSERT_EQ(android::ERROR_DRM_DECRYPT, decryptor.decrypt(keyVector, iv, 82 &source[0], &destination[0], 83 &subSamples[0], kNumSubsamples, &bytesDecrypted)); 84 ASSERT_EQ(0u, bytesDecrypted); 85 } 86 87 TEST_F(AesCtrDecryptorTest, DecryptsWithKeyTooLong) { 88 const size_t kTotalSize = 64; 89 const size_t kNumSubsamples = 1; 90 91 // Test vectors from NIST-800-38A 92 uint8_t key[kBlockSize * 2] = { 93 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 94 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c, 95 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 96 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 97 }; 98 99 Iv iv = { 100 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 101 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 102 }; 103 104 uint8_t source[kTotalSize] = { 0 }; 105 uint8_t destination[kTotalSize] = { 0 }; 106 SubSample subSamples[kNumSubsamples] = { 107 {0, 64} 108 }; 109 110 size_t bytesDecrypted = 0; 111 Vector<uint8_t> keyVector; 112 keyVector.appendArray(key, sizeof(key) / sizeof(uint8_t)); 113 114 AesCtrDecryptor decryptor; 115 ASSERT_EQ(android::ERROR_DRM_DECRYPT, decryptor.decrypt(keyVector, iv, 116 &source[0], &destination[0], 117 &subSamples[0], kNumSubsamples, &bytesDecrypted)); 118 ASSERT_EQ(0u, bytesDecrypted); 119 } 120 121 TEST_F(AesCtrDecryptorTest, DecryptsContiguousEncryptedBlock) { 122 const size_t kTotalSize = 64; 123 const size_t kNumSubsamples = 1; 124 125 // Test vectors from NIST-800-38A 126 Key key = { 127 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 128 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 129 }; 130 131 Iv iv = { 132 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 133 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 134 }; 135 136 uint8_t encrypted[kTotalSize] = { 137 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 138 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 139 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 140 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 141 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 142 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 143 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 144 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 145 }; 146 147 uint8_t decrypted[kTotalSize] = { 148 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 149 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 150 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 151 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 152 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 153 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 154 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 155 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 156 }; 157 158 SubSample subSamples[kNumSubsamples] = { 159 {0, 64} 160 }; 161 162 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 163 subSamples, kNumSubsamples); 164 } 165 166 TEST_F(AesCtrDecryptorTest, DecryptsAlignedBifurcatedEncryptedBlock) { 167 const size_t kTotalSize = 64; 168 const size_t kNumSubsamples = 2; 169 170 // Test vectors from NIST-800-38A 171 Key key = { 172 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 173 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 174 }; 175 176 Iv iv = { 177 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 178 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 179 }; 180 181 uint8_t encrypted[kTotalSize] = { 182 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 183 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 184 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 185 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 186 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 187 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 188 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 189 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 190 }; 191 192 uint8_t decrypted[kTotalSize] = { 193 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 194 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 195 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 196 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 197 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 198 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 199 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 200 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 201 }; 202 203 SubSample subSamples[kNumSubsamples] = { 204 {0, 32}, 205 {0, 32} 206 }; 207 208 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 209 subSamples, kNumSubsamples); 210 } 211 212 TEST_F(AesCtrDecryptorTest, DecryptsUnalignedBifurcatedEncryptedBlock) { 213 const size_t kTotalSize = 64; 214 const size_t kNumSubsamples = 2; 215 216 // Test vectors from NIST-800-38A 217 Key key = { 218 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 219 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 220 }; 221 222 Iv iv = { 223 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 224 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 225 }; 226 227 uint8_t encrypted[kTotalSize] = { 228 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 229 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 230 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 231 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 232 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 233 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 234 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 235 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 236 }; 237 238 uint8_t decrypted[kTotalSize] = { 239 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 240 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 241 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 242 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 243 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 244 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 245 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 246 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 247 }; 248 249 SubSample subSamples[kNumSubsamples] = { 250 {0, 29}, 251 {0, 35} 252 }; 253 254 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 255 subSamples, kNumSubsamples); 256 } 257 258 TEST_F(AesCtrDecryptorTest, DecryptsOneMixedSubSample) { 259 const size_t kTotalSize = 72; 260 const size_t kNumSubsamples = 1; 261 262 // Based on test vectors from NIST-800-38A 263 Key key = { 264 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 265 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 266 }; 267 268 Iv iv = { 269 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 270 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 271 }; 272 273 uint8_t encrypted[kTotalSize] = { 274 // 8 clear bytes 275 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 276 // 64 encrypted bytes 277 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 278 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 279 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 280 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 281 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 282 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 283 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 284 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 285 }; 286 287 uint8_t decrypted[kTotalSize] = { 288 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 289 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 290 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 291 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 292 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 293 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 294 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 295 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 296 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 297 }; 298 299 SubSample subSamples[kNumSubsamples] = { 300 {8, 64} 301 }; 302 303 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 304 subSamples, kNumSubsamples); 305 } 306 307 TEST_F(AesCtrDecryptorTest, DecryptsAlignedMixedSubSamples) { 308 const size_t kTotalSize = 80; 309 const size_t kNumSubsamples = 2; 310 311 // Based on test vectors from NIST-800-38A 312 Key key = { 313 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 314 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 315 }; 316 317 Iv iv = { 318 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 319 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 320 }; 321 322 uint8_t encrypted[kTotalSize] = { 323 // 8 clear bytes 324 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 325 // 32 encrypted bytes 326 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 327 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 328 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 329 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 0xfd, 0xff, 330 // 8 clear bytes 331 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 332 // 32 encrypted bytes 333 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 0xd3, 0x5e, 334 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 0x3e, 0xab, 335 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 0x03, 0xd1, 336 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 0x9c, 0xee 337 }; 338 339 uint8_t decrypted[kTotalSize] = { 340 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 341 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 342 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 343 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 344 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 345 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 346 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 347 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 348 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 349 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 350 }; 351 352 SubSample subSamples[kNumSubsamples] = { 353 {8, 32}, 354 {8, 32} 355 }; 356 357 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 358 subSamples, kNumSubsamples); 359 } 360 361 TEST_F(AesCtrDecryptorTest, DecryptsUnalignedMixedSubSamples) { 362 const size_t kTotalSize = 80; 363 const size_t kNumSubsamples = 2; 364 365 // Based on test vectors from NIST-800-38A 366 Key key = { 367 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 368 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 369 }; 370 371 Iv iv = { 372 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 373 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 374 }; 375 376 uint8_t encrypted[kTotalSize] = { 377 // 8 clear bytes 378 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 379 // 30 encrypted bytes 380 0x87, 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 381 0x1b, 0xef, 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 382 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 383 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 384 // 8 clear bytes 385 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 386 // 34 encrypted bytes 387 0xfd, 0xff, 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 388 0xd3, 0x5e, 0x5b, 0x4f, 0x09, 0x02, 0x0d, 0xb0, 389 0x3e, 0xab, 0x1e, 0x03, 0x1d, 0xda, 0x2f, 0xbe, 390 0x03, 0xd1, 0x79, 0x21, 0x70, 0xa0, 0xf3, 0x00, 391 0x9c, 0xee 392 }; 393 394 uint8_t decrypted[kTotalSize] = { 395 0xf0, 0x13, 0xca, 0xc7, 0x00, 0x64, 0x0b, 0xbb, 396 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 397 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 398 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 399 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x94, 0xba, 400 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 0x8e, 0x51, 401 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 402 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 403 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 404 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 405 }; 406 407 SubSample subSamples[kNumSubsamples] = { 408 {8, 30}, 409 {8, 34} 410 }; 411 412 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 413 subSamples, kNumSubsamples); 414 } 415 416 TEST_F(AesCtrDecryptorTest, DecryptsComplexMixedSubSamples) { 417 const size_t kTotalSize = 72; 418 const size_t kNumSubsamples = 6; 419 420 // Based on test vectors from NIST-800-38A 421 Key key = { 422 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 423 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c 424 }; 425 426 Iv iv = { 427 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 428 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 429 }; 430 431 uint8_t encrypted[kTotalSize] = { 432 // 4 clear bytes 433 0xf0, 0x13, 0xca, 0xc7, 434 // 1 encrypted bytes 435 0x87, 436 // 9 encrypted bytes 437 0x4d, 0x61, 0x91, 0xb6, 0x20, 0xe3, 0x26, 0x1b, 438 0xef, 439 // 11 clear bytes 440 0x81, 0x4f, 0x24, 0x87, 0x0e, 0xde, 0xba, 0xad, 441 0x11, 0x9b, 0x46, 442 // 20 encrypted bytes 443 0x68, 0x64, 0x99, 0x0d, 0xb6, 0xce, 444 0x98, 0x06, 0xf6, 0x6b, 0x79, 0x70, 0xfd, 0xff, 445 0x86, 0x17, 0x18, 0x7b, 0xb9, 0xff, 446 // 8 clear bytes 447 0x94, 0xba, 0x88, 0x2e, 0x0e, 0x12, 0x11, 0x55, 448 // 3 clear bytes 449 0x10, 0xf5, 0x22, 450 // 14 encrypted bytes 451 0xfd, 0xff, 0x5a, 0xe4, 0xdf, 0x3e, 0xdb, 0xd5, 452 0xd3, 0x5e, 0x5b, 0x4f, 0x09, 0x02, 453 // 2 clear bytes 454 0x02, 0x01 455 }; 456 457 uint8_t decrypted[kTotalSize] = { 458 0xf0, 0x13, 0xca, 0xc7, 0x6b, 0xc1, 0xbe, 0xe2, 459 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x81, 0x4f, 460 0x24, 0x87, 0x0e, 0xde, 0xba, 0xad, 0x11, 0x9b, 461 0x46, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, 0xae, 462 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 463 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x94, 0xba, 0x88, 464 0x2e, 0x0e, 0x12, 0x11, 0x55, 0x10, 0xf5, 0x22, 465 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 466 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x02, 0x01 467 }; 468 469 SubSample subSamples[kNumSubsamples] = { 470 {4, 1}, 471 {0, 9}, 472 {11, 20}, 473 {8, 0}, 474 {3, 14}, 475 {2, 0} 476 }; 477 478 attemptDecryptExpectingSuccess<kTotalSize>(key, iv, encrypted, decrypted, 479 subSamples, kNumSubsamples); 480 } 481 482 } // namespace clearkeydrm 483