Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(884)

Side by Side Diff: LayoutTests/crypto/encrypt-decrypt.html

Issue 141413003: [webcrypto] Match the error handling defined by the spec. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « LayoutTests/crypto/digest-expected.txt ('k') | LayoutTests/crypto/encrypt-decrypt-expected.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <script src="../resources/js-test.js"></script> 4 <script src="../resources/js-test.js"></script>
5 <script src="resources/common.js"></script> 5 <script src="resources/common.js"></script>
6 </head> 6 </head>
7 <body> 7 <body>
8 <p id="description"></p> 8 <p id="description"></p>
9 <div id="console"></div> 9 <div id="console"></div>
10 10
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 var keyData = hexStringToUint8Array(testCase.key); 78 var keyData = hexStringToUint8Array(testCase.key);
79 var usages = ['encrypt', 'decrypt']; 79 var usages = ['encrypt', 'decrypt'];
80 var extractable = false; 80 var extractable = false;
81 81
82 // (1) Import the key 82 // (1) Import the key
83 return crypto.subtle.importKey('raw', keyData, algorithm, extractable, usage s).then(function(result) { 83 return crypto.subtle.importKey('raw', keyData, algorithm, extractable, usage s).then(function(result) {
84 key = result; 84 key = result;
85 85
86 // shouldBe() can only resolve variables in global context. 86 // shouldBe() can only resolve variables in global context.
87 tmpKey = key; 87 tmpKey = key;
88 shouldBe("tmpKey.type", "'secret'") 88 shouldBe("tmpKey.type", "'secret'");
89 shouldBe("tmpKey.extractable", "false") 89 shouldBe("tmpKey.extractable", "false");
90 shouldBe("tmpKey.algorithm.name", "'AES-CBC'") 90 shouldBe("tmpKey.algorithm.name", "'AES-CBC'");
91 shouldBe("tmpKey.usages.join(',')", "'decrypt,encrypt'") 91 shouldBe("tmpKey.usages.join(',')", "'decrypt,encrypt'");
92 92
93 // (2) Encrypt. 93 // (2) Encrypt.
94 return crypto.subtle.encrypt(algorithm, key, hexStringToUint8Array(testC ase.plainText)); 94 return crypto.subtle.encrypt(algorithm, key, hexStringToUint8Array(testC ase.plainText));
95 }).then(function(result) { 95 }).then(function(result) {
96 bytesShouldMatchHexString("Encryption", testCase.cipherText, result); 96 bytesShouldMatchHexString("Encryption", testCase.cipherText, result);
97 97
98 // (3) Decrypt 98 // (3) Decrypt
99 return crypto.subtle.decrypt(algorithm, key, hexStringToUint8Array(testC ase.cipherText)); 99 return crypto.subtle.decrypt(algorithm, key, hexStringToUint8Array(testC ase.cipherText));
100 }).then(function(result) { 100 }).then(function(result) {
101 bytesShouldMatchHexString("Decryption", testCase.plainText, result); 101 bytesShouldMatchHexString("Decryption", testCase.plainText, result);
102 }); 102 });
103 } 103 }
104 104
105 // Add all of the tests defined above. 105 // Add all of the tests defined above.
106 for (var i = 0; i < kSuccessTestVectors.length; ++i) { 106 for (var i = 0; i < kSuccessTestVectors.length; ++i) {
107 allTests.push(runSuccessTestCase(kSuccessTestVectors[i])); 107 addTask(runSuccessTestCase(kSuccessTestVectors[i]));
108 } 108 }
109 109
110 // ------------------------------------------------- 110 // -------------------------------------------------
111 // Failed key import. 111 // Failed key import.
112 // ------------------------------------------------- 112 // -------------------------------------------------
113 113
114 // Supported key lengths are 16 (128-bit), 32 (256-bit), 24 (192-bit), 114 // Supported key lengths are 16 (128-bit), 32 (256-bit), 24 (192-bit),
115 // Try key lengths that are off by 1 from the supported ones. 115 // Try key lengths that are off by 1 from the supported ones.
116 var kUnsupportedKeyLengths = [ 116 var kUnsupportedKeyLengths = [
117 0, 1, 15, 17, 31, 33, 23, 25, 64 117 0, 1, 15, 17, 31, 33, 23, 25, 64
118 ]; 118 ];
119 119
120 function testInvalidKeyImport(keyLengthBytes) 120 function testInvalidKeyImport(keyLengthBytes)
121 { 121 {
122 var algorithm = {name: 'aes-cbc'}; 122 var algorithm = {name: 'aes-cbc'};
123 var keyData = new Uint8Array(keyLengthBytes); 123 var keyData = new Uint8Array(keyLengthBytes);
124 124
125 var usages = ['encrypt', 'decrypt']; 125 var usages = ['encrypt', 'decrypt'];
126 var extractable = false; 126 var extractable = false;
127 127
128 return crypto.subtle.importKey('raw', keyData, algorithm, extractable, usage s).then(function(result) { 128 return crypto.subtle.importKey('raw', keyData, algorithm, extractable, usage s).then(function(result) {
129 debug("FAIL: Successfully import key of length " + keyData.byteLength + " bytes"); 129 debug("FAIL: Successfully import key of length " + keyData.byteLength + " bytes");
130 }, function(result) { 130 }, function(result) {
131 debug("PASS: Failed to import key of length " + keyData.byteLength + " b ytes"); 131 debug("PASS: Failed to import key of length " + keyData.byteLength + " b ytes");
132 }); 132 });
133 } 133 }
134 134
135 for (var i = 0; i < kUnsupportedKeyLengths.length; ++i) { 135 for (var i = 0; i < kUnsupportedKeyLengths.length; ++i) {
136 allTests.push(testInvalidKeyImport(kUnsupportedKeyLengths[i])); 136 addTask(testInvalidKeyImport(kUnsupportedKeyLengths[i]));
137 } 137 }
138 138
139 // ------------------------------------------------- 139 // -------------------------------------------------
140 // Invalid cipher texts 140 // Invalid cipher texts
141 // ------------------------------------------------- 141 // -------------------------------------------------
142 142
143 function testInvalidDecryptions() 143 function testInvalidDecryptions()
144 { 144 {
145 // 128-bit key with plaintext that is an exact multiple of block size. 145 // 128-bit key with plaintext that is an exact multiple of block size.
146 // Derived from [1] F.2.1 (CBC-AES128.Encrypt), by adding padding block. 146 // Derived from [1] F.2.1 (CBC-AES128.Encrypt), by adding padding block.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // padding error. 182 // padding error.
183 verifyDecryptionFails(cipherText.byteLength - 16), 183 verifyDecryptionFails(cipherText.byteLength - 16),
184 verifyDecryptionFails(1), 184 verifyDecryptionFails(1),
185 verifyDecryptionFails(15), 185 verifyDecryptionFails(15),
186 verifyDecryptionFails(16), 186 verifyDecryptionFails(16),
187 verifyDecryptionFails(17), 187 verifyDecryptionFails(17),
188 ]); 188 ]);
189 }); 189 });
190 } 190 }
191 191
192 allTests.push(testInvalidDecryptions()); 192 addTask(testInvalidDecryptions());
193 193
194 function testNormalizationFailures(importedKeys) 194 function testNormalizationFailures(importedKeys)
195 { 195 {
196 keys = importedKeys; 196 keys = importedKeys;
197 197
198 data = asciiToUint8Array("hello"); 198 data = asciiToUint8Array("hello");
199 199
200 // --------------------------------------------------- 200 // ---------------------------------------------------
201 // AES-CBC normalization failures (AesCbcParams) 201 // AES-CBC normalization failures (AesCbcParams)
202 // --------------------------------------------------- 202 // ---------------------------------------------------
203 203
204 shouldThrow("crypto.subtle.encrypt({name: 'AES-CBC', iv: null}, keys.aesCbc, data)"); 204 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CBC', iv: nul l}, keys.aesCbc, data)");
205 shouldThrow("crypto.subtle.encrypt({name: 'AES-CBC'}, keys.aesCbc, data)"); 205 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CBC'}, keys.a esCbc, data)");
206 shouldThrow("crypto.subtle.encrypt({name: 'AES-CBC', iv: 3}, keys.aesCbc, da ta)"); 206 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CBC', iv: 3}, keys.aesCbc, data)");
207 shouldThrow("crypto.subtle.encrypt({name: 'AES-CBC', iv: new Uint8Array[0]}, keys.aesCbc, data)"); 207 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CBC', iv: new Uint8Array(0)}, keys.aesCbc, data)");
208 208
209 // --------------------------------------------------- 209 // ---------------------------------------------------
210 // AES-CTR normalization failures (AesCtrParams) 210 // AES-CTR normalization failures (AesCtrParams)
211 // --------------------------------------------------- 211 // ---------------------------------------------------
212 212
213 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: null}, keys.ae sCtr, data)"); 213 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : null}, keys.aesCtr, data)");
214 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR'}, keys.aesCtr, data)"); 214 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR'}, keys.a esCtr, data)");
215 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (0)}, keys.aesCtr, data)"); 215 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(0)}, keys.aesCtr, data)");
216 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (16), length: 0}, keys.aesCtr, data)"); 216 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(16), length: 0}, keys.aesCtr, data)");
217 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (16), length: 18}, keys.aesCtr, data)"); 217 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(16), length: 18}, keys.aesCtr, data)");
218 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (16), length: 256}, keys.aesCtr, data)"); 218 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(16), length: 256}, keys.aesCtr, data)");
219 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (16), length: -3}, keys.aesCtr, data)"); 219 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(16), length: -3}, keys.aesCtr, data)");
220 shouldThrow("crypto.subtle.encrypt({name: 'AES-CTR', counter: new Uint8Array (16), length: Infinity}, keys.aesCtr, data)"); 220 shouldRejectPromiseWithNull("crypto.subtle.encrypt({name: 'AES-CTR', counter : new Uint8Array(16), length: Infinity}, keys.aesCtr, data)");
221 221
222 // Try calling with the wrong key type. 222 // Try calling with the wrong key type.
223 aesCbc = {name: 'AES-CBC', iv: new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])}; 223 aesCbc = {name: 'AES-CBC', iv: new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])};
224 shouldThrow("crypto.subtle.encrypt(aesCbc, keys.hmacSha1, data)"); 224 shouldRejectPromiseWithNull("crypto.subtle.encrypt(aesCbc, keys.hmacSha1, da ta)");
225 225
226 // Key doesn't support encrypt. 226 // Key doesn't support encrypt.
227 shouldThrow("crypto.subtle.encrypt(aesCbc, keys.aesCbcJustDecrypt, data)"); 227 shouldRejectPromiseWithNull("crypto.subtle.encrypt(aesCbc, keys.aesCbcJustDe crypt, data)");
228 228
229 // If no key was specified AND the algorithm was bogus, should complain 229 // If no key was specified AND the algorithm was bogus, should complain
230 // about the missing key first. 230 // about the missing key first.
231 shouldThrow("crypto.subtle.encrypt({name: 'bogus'}, null, data)"); 231 shouldThrow("crypto.subtle.encrypt({name: 'bogus'}, null, data)");
232 } 232 }
233 233
234 allTests.push(importTestKeys().then(testNormalizationFailures)); 234 addTask(importTestKeys().then(testNormalizationFailures));
235 235
236 // ------------------------------------------------- 236 completeTestWhenAllTasksDone();
237 // Wait until all the tests have been run.
238 // -------------------------------------------------
239
240 Promise.all(allTests).then(finishJSTest, failAndFinishJSTest);
241 237
242 </script> 238 </script>
243 239
244 </body> 240 </body>
OLDNEW
« no previous file with comments | « LayoutTests/crypto/digest-expected.txt ('k') | LayoutTests/crypto/encrypt-decrypt-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698