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

Side by Side Diff: LayoutTests/crypto/resources/subtle-crypto-concurrent.js

Issue 806913006: [WebCrypto] Move LayoutTests from crypto to crypto/subtle (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update path for deserialize legacy tests Created 6 years 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
OLDNEW
(Empty)
1 if (self.importScripts) {
2 importScripts('../../resources/js-test.js');
3 importScripts('common.js');
4 }
5
6 function shouldEvaluateAsSilent(expressionToEval, expectedResult)
7 {
8 var result = eval(expressionToEval);
9 if (result !== expectedResult) {
10 testFailed(expressionToEval + " evaluated to " + result + " instead of " + expectedResult);
11 }
12 }
13
14 function doPostMessage(data)
15 {
16 if (isWorker())
17 self.postMessage(data);
18 else
19 self.postMessage(data, '*');
20 }
21
22 function notifySuccess()
23 {
24 doPostMessage("TEST_FINISHED");
25 }
26
27 function notifyFailure(details)
28 {
29 doPostMessage("FAIL:" + details);
30 }
31
32 function testGenerateRsaKey()
33 {
34 var extractable = false;
35 var usages = ['sign', 'verify'];
36 // Note that the modulus length is unusually small in order to speed up
37 // the test (1024 or 2048 would be more typical).
38 var algorithm = {name: "RSASSA-PKCS1-v1_5", modulusLength: 256, publicExpone nt: hexStringToUint8Array("010001"), hash: {name: "SHA-256"}};
39
40 return crypto.subtle.generateKey(algorithm, extractable, usages).then(functi on(result) {
41 publicKey = result.publicKey;
42 privateKey = result.privateKey;
43
44 shouldEvaluateAsSilent("publicKey.type", "public");
45 shouldEvaluateAsSilent("publicKey.extractable", true);
46 shouldEvaluateAsSilent("publicKey.algorithm.name", algorithm.name);
47 shouldEvaluateAsSilent("publicKey.algorithm.modulusLength", algorithm.mo dulusLength);
48 shouldEvaluateAsSilent("bytesToHexString(publicKey.algorithm.publicExpon ent)", "010001");
49
50 shouldEvaluateAsSilent("privateKey.type", "private");
51 shouldEvaluateAsSilent("privateKey.extractable", false);
52 shouldEvaluateAsSilent("privateKey.algorithm.name", algorithm.name);
53 shouldEvaluateAsSilent("privateKey.algorithm.modulusLength", algorithm.m odulusLength);
54 shouldEvaluateAsSilent("bytesToHexString(privateKey.algorithm.publicExpo nent)", "010001");
55 });
56 }
57
58 // Very similar to "hmac-sign-verify.html".
59 function testHmac()
60 {
61 var importAlgorithm = {name: 'HMAC', hash: {name: "SHA-256"}};
62 var algorithm = {name: 'HMAC'};
63
64 var key = null;
65
66 var testCase = {
67 hash: "SHA-256",
68 key: "9779d9120642797f1747025d5b22b7ac607cab08e1758f2f3a46c8be1e25c53b8c6a 8f58ffefa176",
69 message: "b1689c2591eaf3c9e66070f8a77954ffb81749f1b00346f9dfe0b2ee905dcc28 8baf4a92de3f4001dd9f44c468c3d07d6c6ee82faceafc97c2fc0fc0601719d2dcd0aa2aec92d1b0 ae933c65eb06a03c9c935c2bad0459810241347ab87e9f11adb30415424c6c7f5f22a003b8ab8de5 4f6ded0e3ab9245fa79568451dfa258e",
70 mac: "769f00d3e6a6cc1fb426a14a4f76c6462e6149726e0dee0ec0cf97a16605ac8b"
71 };
72
73 var keyData = hexStringToUint8Array(testCase.key);
74 var usages = ['sign', 'verify'];
75 var extractable = true;
76
77 // (1) Import the key
78 return crypto.subtle.importKey('raw', keyData, importAlgorithm, extractable, usages).then(function(result) {
79 key = result;
80
81 // shouldBe() can only resolve variables in global context.
82 tmpKey = key;
83 shouldEvaluateAsSilent("tmpKey.type", "secret");
84 shouldEvaluateAsSilent("tmpKey.extractable", true);
85 shouldEvaluateAsSilent("tmpKey.algorithm.name", "HMAC");
86 shouldEvaluateAsSilent("tmpKey.algorithm.hash.name", testCase.hash);
87 shouldEvaluateAsSilent("tmpKey.algorithm.length", keyData.length * 8);
88 shouldEvaluateAsSilent("tmpKey.usages.join(',')", "sign,verify");
89
90 // (2) Sign.
91 var signPromise = crypto.subtle.sign(algorithm, key, hexStringToUint8Arr ay(testCase.message));
92
93 // (3) Verify
94 var verifyPromise = crypto.subtle.verify(algorithm, key, hexStringToUint 8Array(testCase.mac), hexStringToUint8Array(testCase.message));
95
96 // (4) Verify truncated mac (by stripping 1 byte off of it).
97 var expectedMac = hexStringToUint8Array(testCase.mac);
98 var verifyTruncatedPromise = crypto.subtle.verify(algorithm, key, expect edMac.subarray(0, expectedMac.byteLength - 1), hexStringToUint8Array(testCase.me ssage));
99
100 var exportKeyPromise = crypto.subtle.exportKey('raw', key);
101
102 return Promise.all([signPromise, verifyPromise, verifyTruncatedPromise, exportKeyPromise]);
103 }).then(function(result) {
104 // signPromise
105 mac = result[0];
106 shouldEvaluateAsSilent("bytesToHexString(mac)", testCase.mac);
107
108 // verifyPromise
109 verifyResult = result[1];
110 shouldEvaluateAsSilent("verifyResult", true);
111
112 // verifyTruncatedPromise
113 verifyResult = result[2];
114 shouldEvaluateAsSilent("verifyResult", false);
115
116 // exportKeyPromise
117 exportedKeyData = result[3];
118 shouldEvaluateAsSilent("bytesToHexString(exportedKeyData)", testCase.key );
119 });
120 }
121
122 // Very similar to aes-gcm-encrypt-decrypt.hml
123 function testAesGcm()
124 {
125 var testCase = {
126 "key": "e03548984a7ec8eaf0870637df0ac6bc17f7159315d0ae26a764fd224e483810",
127 "iv": "f4feb26b846be4cd224dbc5133a5ae13814ebe19d3032acdd3a006463fdb71e83a9 d5d96679f26cc1719dd6b4feb3bab5b4b7993d0c0681f36d105ad3002fb66b201538e2b7479838ab 83402b0d816cd6e0fe5857e6f4adf92de8ee72b122ba1ac81795024943b7d0151bbf84ce87c8911f 512c397d14112296da7ecdd0da52a",
128 "cipherText": "fda718aa1ec163487e21afc34f5a3a34795a9ee71dd3e7ee9a18fdb2418 1dc982b29c6ec723294a130ca2234952bb0ef68c0f3",
129 "additionalData": "aab26eb3e7acd09a034a9e2651636ab3868e51281590ecc948355e4 57da42b7ad1391c7be0d9e82895e506173a81857c3226829fbd6dfb3f9657a71a2934445d7c05fa9 401cddd5109016ba32c3856afaadc48de80b8a01b57cb",
130 "authenticationTag": "4795fbe0",
131 "plainText": "69fd0c9da10b56ec6786333f8d76d4b74f8a434195f2f241f088b2520fb5 fa29455df9893164fb1638abe6617915d9497a8fe2"
132 }
133
134 var key = null;
135 var keyData = hexStringToUint8Array(testCase.key);
136 var iv = hexStringToUint8Array(testCase.iv);
137 var additionalData = hexStringToUint8Array(testCase.additionalData);
138 var tag = hexStringToUint8Array(testCase.authenticationTag);
139 var usages = ['encrypt', 'decrypt'];
140 var extractable = false;
141
142 var tagLengthBits = tag.byteLength * 8;
143
144 var algorithm = {name: 'aes-gcm', iv: iv, additionalData: additionalData, ta gLength: tagLengthBits};
145
146 // (1) Import the key
147 return crypto.subtle.importKey('raw', keyData, algorithm, extractable, usage s).then(function(result) {
148 key = result;
149
150 // shouldBe() can only resolve variables in global context.
151 tmpKey = key;
152 shouldEvaluateAsSilent("tmpKey.type", "secret");
153 shouldEvaluateAsSilent("tmpKey.extractable", false);
154 shouldEvaluateAsSilent("tmpKey.algorithm.name", "AES-GCM");
155 shouldEvaluateAsSilent("tmpKey.usages.join(',')", "encrypt,decrypt");
156
157 // (2) Encrypt
158 var encryptPromise1 = crypto.subtle.encrypt(algorithm, key, hexStringToU int8Array(testCase.plainText));
159 var encryptPromise2 = crypto.subtle.encrypt(algorithm, key, hexStringToU int8Array(testCase.plainText));
160
161 // (3) Decrypt
162 var decryptPromise1 = crypto.subtle.decrypt(algorithm, key, hexStringToU int8Array(testCase.cipherText + testCase.authenticationTag));
163 var decryptPromise2 = crypto.subtle.decrypt(algorithm, key, hexStringToU int8Array(testCase.cipherText + testCase.authenticationTag));
164
165 return Promise.all([encryptPromise1, encryptPromise2, decryptPromise1, d ecryptPromise2]);
166 }).then(function(result) {
167 // encryptPromise1, encryptPromise2
168 for (var i = 0; i < 2; ++i) {
169 cipherText = result[i];
170 shouldEvaluateAsSilent("bytesToHexString(cipherText)", testCase.ciph erText + testCase.authenticationTag);
171 }
172
173 // decryptPromise1, decryptPromise2
174 for (var i = 0; i < 2; ++i) {
175 plainText = result[2 + i];
176 shouldEvaluateAsSilent("bytesToHexString(plainText)", testCase.plain Text);
177 }
178 });
179 }
180
181 Promise.all([
182 testHmac(),
183 testGenerateRsaKey(),
184 testAesGcm(),
185 testHmac(),
186 testAesGcm(),
187 ]).then(notifySuccess, notifyFailure);
OLDNEW
« no previous file with comments | « LayoutTests/crypto/resources/random-values-types.js ('k') | LayoutTests/crypto/resources/worker-infinite-loop-generateKey.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698