| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script src="../resources/common.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| <script> |
| description("Test decrypting using AES-CBC with an imported 128bit key"); |
| |
| jsTestIsAsync = true; |
| |
| var extractable = false; |
| var aesCbcParams = { |
| name: "aes-cbc", |
| iv: asciiToUint8Array("jnOw99oOZFLIEPMr"), |
| } |
| var rawKey = asciiToUint8Array("jnOw99oOZFLIEPMr"); |
| |
| |
| // Test 0 ~ 33 bytes plain text data. |
| // It covers the boundary values where the padding size are changed, namely, 0, 1, 15, 16, 17, 31, 32, and 33. |
| // 16 comes from the AES-CBC block size, which is 128bit = 16 bytes. |
| |
| // Pair of expected plain text and cipher text |
| var testCases = [ |
| [ |
| "", |
| "54695f2b49d2c35b5f4675c59669c7d5" |
| ], |
| [ |
| "A", |
| "7f3224da4b207bd3b55a3ba55f95c8dd" |
| ], |
| [ |
| "AB", |
| "05b7b4caa28897ff5fa0b8cac9821070" |
| ], |
| [ |
| "ABC", |
| "c5fcd82c93ca70630e77871408cb60a5" |
| ], |
| [ |
| "ABCD", |
| "8c68b0ba2952761877f30e26eb43e98b" |
| ], |
| [ |
| "ABCDE", |
| "6e5845ce085801492ecdb3da47e54e0d" |
| ], |
| [ |
| "ABCDEF", |
| "a2bf7011f0560504fd2d3f6f4fa85179" |
| ], |
| [ |
| "ABCDEFG", |
| "bfbe3717d97b8e8dbb362aa32a5d6715" |
| ], |
| [ |
| "ABCDEFGH", |
| "ac55dadf6d3d1be1fede0e33e9de021a" |
| ], |
| [ |
| "ABCDEFGHI", |
| "f5adfd70b6a907441aa1e1b8d03138b8" |
| ], |
| [ |
| "ABCDEFGHIJ", |
| "b4a2d688f3a9bd307efe62643d80ead0" |
| ], |
| [ |
| "ABCDEFGHIJK", |
| "d5cce76a9416b3c00c4d2e0bb2879134" |
| ], |
| [ |
| "ABCDEFGHIJKL", |
| "7b87f2b55433d595ed02cd3417c510a4" |
| ], |
| [ |
| "ABCDEFGHIJKLM", |
| "29f5af157bda78fdde9550aaadfc467d" |
| ], |
| [ |
| "ABCDEFGHIJKLMN", |
| "bd86ff3b780b56d4faf98bd7f818de59" |
| ], |
| [ |
| "ABCDEFGHIJKLMNO", |
| "8f7d4ffd08155e67b2f936aa7eedd918" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOP", |
| "bb57e6bd078639a31e3762035652ddba8b641840a083e33027a0aea305e95a64" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQ", |
| "bb57e6bd078639a31e3762035652ddbaad705f7fda061c4486fbce2b3a470b59" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQR", |
| "bb57e6bd078639a31e3762035652ddbad5c1de41aa0a5d2f03dd129e419b99b9" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRS", |
| "bb57e6bd078639a31e3762035652ddba9ca7c65d2137e0e4e1b752d7d5a7619a" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRST", |
| "bb57e6bd078639a31e3762035652ddba946ca5063ae30b7b068b7a0ddb573143" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTU", |
| "bb57e6bd078639a31e3762035652ddba3e53d6b22634ba2d0033aa1f74984017" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUV", |
| "bb57e6bd078639a31e3762035652ddba9be121a85ec7b87d14d069821f241817" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVW", |
| "bb57e6bd078639a31e3762035652ddbaeb91126c4649fbf256d2698a8b3cd108" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWX", |
| "bb57e6bd078639a31e3762035652ddba5fda70f10d9c190691a58c8014226b09" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXY", |
| "bb57e6bd078639a31e3762035652ddbaca22ea606b337f0e549bd6c8134026c2" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZ", |
| "bb57e6bd078639a31e3762035652ddbac5883abd9ff470ad8d5aefe0726131b8" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZA", |
| "bb57e6bd078639a31e3762035652ddba0ba1680b7ca9ca18f9bdc30a2213e138" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZAB", |
| "bb57e6bd078639a31e3762035652ddba34795f08b688add2ac28d579c1e4a735" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZABC", |
| "bb57e6bd078639a31e3762035652ddba5e6174bbd7d9848e19dadc7316a51905" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZABCD", |
| "bb57e6bd078639a31e3762035652ddba758897c9b84584efaf7bba27e80e2971" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE", |
| "bb57e6bd078639a31e3762035652ddba23aecf5b5981c3a0b9967c6d5faf2f44" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF", |
| "bb57e6bd078639a31e3762035652ddbace7c8364cc84b579dbb16765cba58de65123694ddc958e0c9436f6687338fc6e" |
| ], |
| [ |
| "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", |
| "bb57e6bd078639a31e3762035652ddbace7c8364cc84b579dbb16765cba58de659650a237cd9a2764e9b92749843fd22" |
| ] |
| ]; |
| |
| Promise.all(testCases.map(function(testCase){ |
| var expectedPlainText = testCase[0]; |
| var cipherText = testCase[1]; |
| return crypto.subtle.importKey("raw", rawKey, "aes-cbc", extractable, ["decrypt"]).then(function(key) { |
| return crypto.subtle.decrypt(aesCbcParams, key, hexStringToUint8Array(cipherText)); |
| }).then(function(plainText) { |
| return { |
| plainText: plainText, |
| cipherText: cipherText, |
| expectedPlainText: expectedPlainText |
| }; |
| }); |
| })).then(function(results) { |
| for (var result of results) { |
| plainText = result.plainText; |
| cipherText = result.cipherText; |
| expectedPlainText = result.expectedPlainText; |
| debug("Expected plain text: " + expectedPlainText); |
| shouldBe("bytesToASCIIString(plainText)", "expectedPlainText"); |
| } |
| finishJSTest(); |
| }); |
| |
| </script> |
| |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |