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

Side by Side Diff: LayoutTests/crypto/normalize-algorithm.html

Issue 23164012: WebCrypto: Remove support for multi-part operations. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/common.js"></script>
6 </head>
7 <body>
8 <p id="description"></p>
9 <div id="console"></div>
10
11 <script>
12 description("Tests algorithm normalization.");
13
14 jsTestIsAsync = true;
15
16 // FIXME: Rename this to crypto-operation.html, since it tests the basic
17 // construction of CryptoOperations.
18
19 // -------------------------------
20 // Helpers to return a normalized algorithm identifier.
21 // -------------------------------
22
23 aesCbcKey = null;
24 hmacSha1Key = null;
25 rsaSsaKey = null;
26
27 function normalizeDigest(algorithmIdentifier)
28 {
29 return crypto.subtle.digest(algorithmIdentifier).algorithm;
30 }
31
32 function normalizeEncrypt(algorithmIdentifier, key)
33 {
34 return crypto.subtle.encrypt(algorithmIdentifier, key).algorithm;
35 }
36
37 function normalizeSign(algorithmIdentifier, key)
38 {
39 return crypto.subtle.sign(algorithmIdentifier, key).algorithm;
40 }
41
42 function runTests()
43 {
44 // -------------------------------
45 // Case insensitivity of "name"
46 // -------------------------------
47 algorithm = normalizeDigest({name: "SHA-1"});
48 shouldBe("algorithm.name", "'SHA-1'");
49 algorithm = normalizeDigest({name: "sHa-256"});
50 shouldBe("algorithm.name", "'SHA-256'");
51
52 // -------------------------------
53 // Failures if "name" is invalid
54 // -------------------------------
55 shouldThrow("normalizeDigest({})");
56 shouldThrow("normalizeDigest({name: null})");
57 shouldThrow("normalizeDigest({name: -1})");
58 shouldThrow("normalizeDigest({name: ''})");
59 shouldThrow("normalizeDigest({name: 'nosuchalgorithm'})");
60 shouldThrow("normalizeDigest({name: '\\u0189'})");
61
62 // -------------------------------
63 // Failures if the algorithm identifier is not an object
64 // -------------------------------
65 shouldThrow("normalizeDigest(null)");
66 shouldThrow("normalizeDigest(0)");
67 shouldThrow("normalizeDigest(undefined)");
68 shouldThrow("normalizeDigest('')");
69
70 // -------------------------------
71 // Skip unrecognized parameters.
72 // -------------------------------
73 algorithm = normalizeDigest({name: "sHa-1", noSuchParam: 3});
74 shouldBeUndefined("algorithm.noSuchParam");
75
76 // -------------------------------
77 // Normalized algorithm COPIES all data
78 // -------------------------------
79 originalIv = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1 4, 15]);
80 algorithm = normalizeEncrypt({ name: "aes-cbc", iv: originalIv }, aesCbcKey) ;
81
82 // Make sure it constructed the normalized result.
83 shouldBe("algorithm.name", "'AES-CBC'");
84 shouldBe("algorithm.iv.length", "16");
85 shouldBe("algorithm.iv[3]", "3");
86
87 // Mutate the original (un-normalized) algorithm. Verify that this doesn't a ffect the normalized output.
88 originalIv[3] = 0;
89 shouldBe("algorithm.iv[3]", "3");
90
91 // -------------------------------
92 // AES-CBC normalization failures
93 // -------------------------------
94
95 // The "iv" MUST be 16 bytes long.
96 rawAlgorithm = {
97 name: "AES-CBC",
98 iv: new Uint8Array([1, 2, 3])
99 };
100 shouldThrow("normalizeEncrypt(rawAlgorithm, aesCbcKey)");
101
102 // -------------------------------
103 // Normalize a normalized algorithm (SHA-384)
104 // -------------------------------
105 algorithm = normalizeDigest({name: "sHa-384"});
106 shouldBe("algorithm.name", "'SHA-384'");
107 algorithm = normalizeDigest(algorithm);
108 shouldBe("algorithm.name", "'SHA-384'");
109
110 // -------------------------------
111 // Normalize a normalized algorithm (AES-CBC, encrypt)
112 // -------------------------------
113 algorithm = normalizeEncrypt({ name: "aEs-cbc", iv: originalIv }, aesCbcKey) ;
114 // Make sure it constructed the normalized result.
115 shouldBe("algorithm.name", "'AES-CBC'");
116 shouldBe("algorithm.iv.length", "16");
117 shouldBe("algorithm.iv[1]", "1");
118 algorithm = normalizeEncrypt(algorithm, aesCbcKey);
119 shouldBe("algorithm.name", "'AES-CBC'");
120 shouldBe("algorithm.iv.length", "16");
121 shouldBe("algorithm.iv[1]", "1");
122
123 // -------------------------------
124 // Unsupported operation on algorithm
125 // -------------------------------
126 shouldThrow("normalizeEncrypt({ name: 'SHA-1' }, aesCbcKey)");
127 shouldThrow("normalizeDigest({ name: 'AES-CBC', iv: originalIv })");
128
129 // -------------------------------
130 // Normalize HMAC
131 // -------------------------------
132 shouldThrow("normalizeSign({name: 'hmac'}, hmacSha1Key)"); // Missing "hash"
133 shouldThrow("normalizeSign({name: 'hmac', hash: 'foo'}, hmacSha1Key)"); // N ot a valid "hash"
134 shouldThrow("normalizeSign({name: 'hmac', hash: { name: 'AES-CBC', iv: origi nalIv }}, hmacSha1Key)"); // Not a valid "hash"
135
136 validHmacSha1 = {name: 'hmac', hash: {name: 'Sha-1'}};
137 algorithm = normalizeSign(validHmacSha1, hmacSha1Key);
138 shouldBe("algorithm.name", "'HMAC'");
139 shouldBe("algorithm.hash.name", "'SHA-1'");
140
141 shouldThrow("normalizeEncrypt(validHmacSha1, hmacSha1Key)"); // Not defined for encrypt()
142
143 // -------------------------------
144 // Normalize RSASSA-PKCS1-v1_5
145 // -------------------------------
146 shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5'}, rsaSsaKey)"); // Mis sing "hash"
147 shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5', hash: 'foo'}, rsaSsaK ey)"); // Not a valid "hash"
148 shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5', hash: { name: 'AES-CB C', iv: originalIv }}, rsaSsaKey)"); // Not a valid "hash"
149
150 validRsaSsa = {name: 'RsaSsa-PKCS1-v1_5', hash: {name: 'Sha-256'}};
151 algorithm = normalizeSign(validRsaSsa, rsaSsaKey);
152 shouldBe("algorithm.name", "'RSASSA-PKCS1-v1_5'");
153 shouldBe("algorithm.hash.name", "'SHA-256'");
154
155 shouldThrow("normalizeEncrypt(validRsaSsa, rsaSsaKey)"); // Not defined for encrypt()
156
157 // FIXME: Test the normalization of RsaSsaKeyGen parameters.
158
159 // -------------------------------
160 // Try using a key for an unsupported operation.
161 // -------------------------------
162 algorithmIdentifier = { name: "aes-cbc", iv: originalIv };
163 shouldThrow("crypto.subtle.encrypt(algorithmIdentifier, aesCbcKeyNoEncrypt)" );
164
165 // -------------------------------
166 // Try using an HMAC-SHA1 key for encrypting AES-CBC
167 // -------------------------------
168 algorithmIdentifier = { name: "aes-cbc", iv: originalIv };
169 shouldThrow("crypto.subtle.encrypt(algorithmIdentifier, hmacSha1Key)");
170
171 // -------------------------------
172 // Try using an HMAC-SHA1 key for signing HMAC-SHA256
173 // -------------------------------
174 algorithmIdentifier = {name: 'hmac', hash: {name: 'sha-256'}};
175 shouldThrow("crypto.subtle.sign(algorithmIdentifier, hmacSha1Key)");
176 }
177
178 function importAesCbcKey(keyUsages)
179 {
180 var keyFormat = "spki";
181 var data = new Uint8Array([]);
182 var algorithm = {name: "aes-cbc"};
183 var extractable = false;
184
185 return crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyU sages);
186 }
187
188 function importRsaSsaKey()
189 {
190 var keyFormat = "spki";
191 var data = new Uint8Array([]);
192 var algorithm = {name: "RSASSA-PKCS1-v1_5"};
193 var extractable = false;
194 var keyUsages = ["encrypt", "decrypt", "verify", "sign"];
195
196 return crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyU sages);
197 }
198
199 function failedKeyImport(value)
200 {
201 debug("Failed importing key: " + value);
202 finishJSTest();
203 }
204
205 // Import two keys before starting the tests: one for AES-CBC, and one for
206 // HMAC SHA1.
207 Promise.every(importAesCbcKey(['encrypt', 'decrypt', 'sign', 'verify']), importA esCbcKey(['decrypt', 'sign', 'verify']), importHmacSha1Key(), importRsaSsaKey()) .then(function(keys)
208 {
209 aesCbcKey = keys[0];
210 aesCbcKeyNoEncrypt = keys[1];
211 hmacSha1Key = keys[2];
212 rsaSsaKey = keys[3];
213
214 runTests();
215 finishJSTest();
216
217 }, failedKeyImport);
218
219 </script>
220
221 <script src="../fast/js/resources/js-test-post.js"></script>
222 </body>
223 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698