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

Side by Side Diff: content/child/webcrypto/test/rsa_oaep_unittest.cc

Issue 670433005: Cleanup: Use default constructor for WebCryptoKey rather than createNull() factory method. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "base/stl_util.h" 6 #include "base/stl_util.h"
7 #include "content/child/webcrypto/algorithm_dispatch.h" 7 #include "content/child/webcrypto/algorithm_dispatch.h"
8 #include "content/child/webcrypto/crypto_data.h" 8 #include "content/child/webcrypto/crypto_data.h"
9 #include "content/child/webcrypto/jwk.h" 9 #include "content/child/webcrypto/jwk.h"
10 #include "content/child/webcrypto/status.h" 10 #include "content/child/webcrypto/status.h"
(...skipping 29 matching lines...) Expand all
40 } 40 }
41 41
42 // Import a PKCS#8 private key that uses RSAPrivateKey with the 42 // Import a PKCS#8 private key that uses RSAPrivateKey with the
43 // id-rsaEncryption OID. 43 // id-rsaEncryption OID.
44 TEST(WebCryptoRsaOaepTest, ImportPkcs8WithRsaEncryption) { 44 TEST(WebCryptoRsaOaepTest, ImportPkcs8WithRsaEncryption) {
45 if (!SupportsRsaOaep()) { 45 if (!SupportsRsaOaep()) {
46 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 46 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
47 return; 47 return;
48 } 48 }
49 49
50 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 50 blink::WebCryptoKey private_key;
51 ASSERT_EQ(Status::Success(), 51 ASSERT_EQ(Status::Success(),
52 ImportKey(blink::WebCryptoKeyFormatPkcs8, 52 ImportKey(blink::WebCryptoKeyFormatPkcs8,
53 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), 53 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
54 CreateRsaHashedImportAlgorithm( 54 CreateRsaHashedImportAlgorithm(
55 blink::WebCryptoAlgorithmIdRsaOaep, 55 blink::WebCryptoAlgorithmIdRsaOaep,
56 blink::WebCryptoAlgorithmIdSha1), 56 blink::WebCryptoAlgorithmIdSha1),
57 true, 57 true,
58 blink::WebCryptoKeyUsageDecrypt, 58 blink::WebCryptoKeyUsageDecrypt,
59 &private_key)); 59 &private_key));
60 } 60 }
61 61
62 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithNoAlg) { 62 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithNoAlg) {
63 if (!SupportsRsaOaep()) { 63 if (!SupportsRsaOaep()) {
64 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 64 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
65 return; 65 return;
66 } 66 }
67 67
68 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 68 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
69 69
70 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 70 blink::WebCryptoKey public_key;
71 ASSERT_EQ(Status::Success(), 71 ASSERT_EQ(Status::Success(),
72 ImportKeyJwkFromDict(*jwk.get(), 72 ImportKeyJwkFromDict(*jwk.get(),
73 CreateRsaHashedImportAlgorithm( 73 CreateRsaHashedImportAlgorithm(
74 blink::WebCryptoAlgorithmIdRsaOaep, 74 blink::WebCryptoAlgorithmIdRsaOaep,
75 blink::WebCryptoAlgorithmIdSha1), 75 blink::WebCryptoAlgorithmIdSha1),
76 true, 76 true,
77 blink::WebCryptoKeyUsageEncrypt, 77 blink::WebCryptoKeyUsageEncrypt,
78 &public_key)); 78 &public_key));
79 } 79 }
80 80
81 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMatchingAlg) { 81 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMatchingAlg) {
82 if (!SupportsRsaOaep()) { 82 if (!SupportsRsaOaep()) {
83 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 83 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
84 return; 84 return;
85 } 85 }
86 86
87 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 87 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
88 jwk->SetString("alg", "RSA-OAEP"); 88 jwk->SetString("alg", "RSA-OAEP");
89 89
90 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 90 blink::WebCryptoKey public_key;
91 ASSERT_EQ(Status::Success(), 91 ASSERT_EQ(Status::Success(),
92 ImportKeyJwkFromDict(*jwk.get(), 92 ImportKeyJwkFromDict(*jwk.get(),
93 CreateRsaHashedImportAlgorithm( 93 CreateRsaHashedImportAlgorithm(
94 blink::WebCryptoAlgorithmIdRsaOaep, 94 blink::WebCryptoAlgorithmIdRsaOaep,
95 blink::WebCryptoAlgorithmIdSha1), 95 blink::WebCryptoAlgorithmIdSha1),
96 true, 96 true,
97 blink::WebCryptoKeyUsageEncrypt, 97 blink::WebCryptoKeyUsageEncrypt,
98 &public_key)); 98 &public_key));
99 } 99 }
100 100
101 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMismatchedAlgFails) { 101 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMismatchedAlgFails) {
102 if (!SupportsRsaOaep()) { 102 if (!SupportsRsaOaep()) {
103 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 103 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
104 return; 104 return;
105 } 105 }
106 106
107 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 107 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
108 jwk->SetString("alg", "RSA-OAEP-512"); 108 jwk->SetString("alg", "RSA-OAEP-512");
109 109
110 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 110 blink::WebCryptoKey public_key;
111 ASSERT_EQ(Status::ErrorJwkAlgorithmInconsistent(), 111 ASSERT_EQ(Status::ErrorJwkAlgorithmInconsistent(),
112 ImportKeyJwkFromDict(*jwk.get(), 112 ImportKeyJwkFromDict(*jwk.get(),
113 CreateRsaHashedImportAlgorithm( 113 CreateRsaHashedImportAlgorithm(
114 blink::WebCryptoAlgorithmIdRsaOaep, 114 blink::WebCryptoAlgorithmIdRsaOaep,
115 blink::WebCryptoAlgorithmIdSha1), 115 blink::WebCryptoAlgorithmIdSha1),
116 true, 116 true,
117 blink::WebCryptoKeyUsageEncrypt, 117 blink::WebCryptoKeyUsageEncrypt,
118 &public_key)); 118 &public_key));
119 } 119 }
120 120
121 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMismatchedTypeFails) { 121 TEST(WebCryptoRsaOaepTest, ImportPublicJwkWithMismatchedTypeFails) {
122 if (!SupportsRsaOaep()) { 122 if (!SupportsRsaOaep()) {
123 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 123 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
124 return; 124 return;
125 } 125 }
126 126
127 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 127 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
128 jwk->SetString("kty", "oct"); 128 jwk->SetString("kty", "oct");
129 jwk->SetString("alg", "RSA-OAEP"); 129 jwk->SetString("alg", "RSA-OAEP");
130 130
131 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 131 blink::WebCryptoKey public_key;
132 ASSERT_EQ(Status::ErrorJwkUnexpectedKty("RSA"), 132 ASSERT_EQ(Status::ErrorJwkUnexpectedKty("RSA"),
133 ImportKeyJwkFromDict(*jwk.get(), 133 ImportKeyJwkFromDict(*jwk.get(),
134 CreateRsaHashedImportAlgorithm( 134 CreateRsaHashedImportAlgorithm(
135 blink::WebCryptoAlgorithmIdRsaOaep, 135 blink::WebCryptoAlgorithmIdRsaOaep,
136 blink::WebCryptoAlgorithmIdSha1), 136 blink::WebCryptoAlgorithmIdSha1),
137 true, 137 true,
138 blink::WebCryptoKeyUsageEncrypt, 138 blink::WebCryptoKeyUsageEncrypt,
139 &public_key)); 139 &public_key));
140 } 140 }
141 141
(...skipping 11 matching lines...) Expand all
153 {blink::WebCryptoAlgorithmIdSha384, "RSA-OAEP-384"}, 153 {blink::WebCryptoAlgorithmIdSha384, "RSA-OAEP-384"},
154 {blink::WebCryptoAlgorithmIdSha512, "RSA-OAEP-512"}}; 154 {blink::WebCryptoAlgorithmIdSha512, "RSA-OAEP-512"}};
155 for (size_t i = 0; i < arraysize(kTestData); ++i) { 155 for (size_t i = 0; i < arraysize(kTestData); ++i) {
156 const TestData& test_data = kTestData[i]; 156 const TestData& test_data = kTestData[i];
157 SCOPED_TRACE(test_data.expected_jwk_alg); 157 SCOPED_TRACE(test_data.expected_jwk_alg);
158 158
159 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 159 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
160 jwk->SetString("alg", test_data.expected_jwk_alg); 160 jwk->SetString("alg", test_data.expected_jwk_alg);
161 161
162 // Import the key in a known-good format 162 // Import the key in a known-good format
163 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 163 blink::WebCryptoKey public_key;
164 ASSERT_EQ(Status::Success(), 164 ASSERT_EQ(Status::Success(),
165 ImportKeyJwkFromDict( 165 ImportKeyJwkFromDict(
166 *jwk.get(), 166 *jwk.get(),
167 CreateRsaHashedImportAlgorithm( 167 CreateRsaHashedImportAlgorithm(
168 blink::WebCryptoAlgorithmIdRsaOaep, test_data.hash_alg), 168 blink::WebCryptoAlgorithmIdRsaOaep, test_data.hash_alg),
169 true, 169 true,
170 blink::WebCryptoKeyUsageEncrypt, 170 blink::WebCryptoKeyUsageEncrypt,
171 &public_key)); 171 &public_key));
172 172
173 // Now export the key as JWK and verify its contents 173 // Now export the key as JWK and verify its contents
(...skipping 29 matching lines...) Expand all
203 std::vector<uint8_t> public_key_der = 203 std::vector<uint8_t> public_key_der =
204 GetBytesFromHexString(test, "public_key"); 204 GetBytesFromHexString(test, "public_key");
205 std::vector<uint8_t> private_key_der = 205 std::vector<uint8_t> private_key_der =
206 GetBytesFromHexString(test, "private_key"); 206 GetBytesFromHexString(test, "private_key");
207 std::vector<uint8_t> ciphertext = GetBytesFromHexString(test, "ciphertext"); 207 std::vector<uint8_t> ciphertext = GetBytesFromHexString(test, "ciphertext");
208 std::vector<uint8_t> plaintext = GetBytesFromHexString(test, "plaintext"); 208 std::vector<uint8_t> plaintext = GetBytesFromHexString(test, "plaintext");
209 std::vector<uint8_t> label = GetBytesFromHexString(test, "label"); 209 std::vector<uint8_t> label = GetBytesFromHexString(test, "label");
210 210
211 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm( 211 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
212 blink::WebCryptoAlgorithmIdRsaOaep, digest_algorithm.id()); 212 blink::WebCryptoAlgorithmIdRsaOaep, digest_algorithm.id());
213 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 213 blink::WebCryptoKey public_key;
214 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 214 blink::WebCryptoKey private_key;
215 215
216 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(public_key_der, 216 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(public_key_der,
217 private_key_der, 217 private_key_der,
218 import_algorithm, 218 import_algorithm,
219 false, 219 false,
220 blink::WebCryptoKeyUsageEncrypt, 220 blink::WebCryptoKeyUsageEncrypt,
221 blink::WebCryptoKeyUsageDecrypt, 221 blink::WebCryptoKeyUsageDecrypt,
222 &public_key, 222 &public_key,
223 &private_key)); 223 &private_key));
224 224
(...skipping 24 matching lines...) Expand all
249 if (!SupportsRsaOaep()) { 249 if (!SupportsRsaOaep()) {
250 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 250 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
251 return; 251 return;
252 } 252 }
253 253
254 const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha1; 254 const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha1;
255 const size_t kHashSize = 20; 255 const size_t kHashSize = 20;
256 256
257 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 257 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
258 258
259 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 259 blink::WebCryptoKey public_key;
260 ASSERT_EQ(Status::Success(), 260 ASSERT_EQ(Status::Success(),
261 ImportKeyJwkFromDict(*jwk.get(), 261 ImportKeyJwkFromDict(*jwk.get(),
262 CreateRsaHashedImportAlgorithm( 262 CreateRsaHashedImportAlgorithm(
263 blink::WebCryptoAlgorithmIdRsaOaep, kHash), 263 blink::WebCryptoAlgorithmIdRsaOaep, kHash),
264 true, 264 true,
265 blink::WebCryptoKeyUsageEncrypt, 265 blink::WebCryptoKeyUsageEncrypt,
266 &public_key)); 266 &public_key));
267 267
268 // The maximum size of an encrypted message is: 268 // The maximum size of an encrypted message is:
269 // modulus length 269 // modulus length
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 TEST(WebCryptoRsaOaepTest, EncryptWithLargeDigestFails) { 316 TEST(WebCryptoRsaOaepTest, EncryptWithLargeDigestFails) {
317 if (!SupportsRsaOaep()) { 317 if (!SupportsRsaOaep()) {
318 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 318 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
319 return; 319 return;
320 } 320 }
321 321
322 const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha512; 322 const blink::WebCryptoAlgorithmId kHash = blink::WebCryptoAlgorithmIdSha512;
323 323
324 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict()); 324 scoped_ptr<base::DictionaryValue> jwk(CreatePublicKeyJwkDict());
325 325
326 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 326 blink::WebCryptoKey public_key;
327 ASSERT_EQ(Status::Success(), 327 ASSERT_EQ(Status::Success(),
328 ImportKeyJwkFromDict(*jwk.get(), 328 ImportKeyJwkFromDict(*jwk.get(),
329 CreateRsaHashedImportAlgorithm( 329 CreateRsaHashedImportAlgorithm(
330 blink::WebCryptoAlgorithmIdRsaOaep, kHash), 330 blink::WebCryptoAlgorithmIdRsaOaep, kHash),
331 true, 331 true,
332 blink::WebCryptoKeyUsageEncrypt, 332 blink::WebCryptoKeyUsageEncrypt,
333 &public_key)); 333 &public_key));
334 334
335 // The label has no influence on the maximum message size. For simplicity, 335 // The label has no influence on the maximum message size. For simplicity,
336 // use the empty string. 336 // use the empty string.
337 std::vector<uint8_t> label; 337 std::vector<uint8_t> label;
338 blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label); 338 blink::WebCryptoAlgorithm op_algorithm = CreateRsaOaepAlgorithm(label);
339 339
340 std::string small_message("A"); 340 std::string small_message("A");
341 std::vector<uint8_t> ciphertext; 341 std::vector<uint8_t> ciphertext;
342 // This is an operation error, as the internal consistency checking of the 342 // This is an operation error, as the internal consistency checking of the
343 // algorithm parameters is up to the implementation. 343 // algorithm parameters is up to the implementation.
344 ASSERT_EQ( 344 ASSERT_EQ(
345 Status::OperationError(), 345 Status::OperationError(),
346 Encrypt( 346 Encrypt(
347 op_algorithm, public_key, CryptoData(small_message), &ciphertext)); 347 op_algorithm, public_key, CryptoData(small_message), &ciphertext));
348 } 348 }
349 349
350 TEST(WebCryptoRsaOaepTest, DecryptWithLargeMessageFails) { 350 TEST(WebCryptoRsaOaepTest, DecryptWithLargeMessageFails) {
351 if (!SupportsRsaOaep()) { 351 if (!SupportsRsaOaep()) {
352 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 352 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
353 return; 353 return;
354 } 354 }
355 355
356 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 356 blink::WebCryptoKey private_key;
357 ASSERT_EQ(Status::Success(), 357 ASSERT_EQ(Status::Success(),
358 ImportKey(blink::WebCryptoKeyFormatPkcs8, 358 ImportKey(blink::WebCryptoKeyFormatPkcs8,
359 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), 359 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
360 CreateRsaHashedImportAlgorithm( 360 CreateRsaHashedImportAlgorithm(
361 blink::WebCryptoAlgorithmIdRsaOaep, 361 blink::WebCryptoAlgorithmIdRsaOaep,
362 blink::WebCryptoAlgorithmIdSha1), 362 blink::WebCryptoAlgorithmIdSha1),
363 true, 363 true,
364 blink::WebCryptoKeyUsageDecrypt, 364 blink::WebCryptoKeyUsageDecrypt,
365 &private_key)); 365 &private_key));
366 366
(...skipping 13 matching lines...) Expand all
380 } 380 }
381 381
382 TEST(WebCryptoRsaOaepTest, WrapUnwrapRawKey) { 382 TEST(WebCryptoRsaOaepTest, WrapUnwrapRawKey) {
383 if (!SupportsRsaOaep()) { 383 if (!SupportsRsaOaep()) {
384 LOG(WARNING) << "RSA-OAEP support not present; skipping."; 384 LOG(WARNING) << "RSA-OAEP support not present; skipping.";
385 return; 385 return;
386 } 386 }
387 387
388 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm( 388 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
389 blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1); 389 blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1);
390 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 390 blink::WebCryptoKey public_key;
391 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 391 blink::WebCryptoKey private_key;
392 392
393 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair( 393 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(
394 HexStringToBytes(kPublicKeySpkiDerHex), 394 HexStringToBytes(kPublicKeySpkiDerHex),
395 HexStringToBytes(kPrivateKeyPkcs8DerHex), 395 HexStringToBytes(kPrivateKeyPkcs8DerHex),
396 import_algorithm, 396 import_algorithm,
397 false, 397 false,
398 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey, 398 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey,
399 blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey, 399 blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey,
400 &public_key, 400 &public_key,
401 &private_key)); 401 &private_key));
(...skipping 23 matching lines...) Expand all
425 // Because |private_key| supports both decrypt and unwrap, this is valid. 425 // Because |private_key| supports both decrypt and unwrap, this is valid.
426 std::vector<uint8_t> decrypted_key; 426 std::vector<uint8_t> decrypted_key;
427 ASSERT_EQ(Status::Success(), 427 ASSERT_EQ(Status::Success(),
428 Decrypt(wrapping_algorithm, 428 Decrypt(wrapping_algorithm,
429 private_key, 429 private_key,
430 CryptoData(wrapped_key), 430 CryptoData(wrapped_key),
431 &decrypted_key)); 431 &decrypted_key));
432 EXPECT_BYTES_EQ_HEX(key_hex, decrypted_key); 432 EXPECT_BYTES_EQ_HEX(key_hex, decrypted_key);
433 433
434 // Now attempt to unwrap the key, which should also decrypt the data. 434 // Now attempt to unwrap the key, which should also decrypt the data.
435 blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull(); 435 blink::WebCryptoKey unwrapped_key;
436 ASSERT_EQ(Status::Success(), 436 ASSERT_EQ(Status::Success(),
437 UnwrapKey(blink::WebCryptoKeyFormatRaw, 437 UnwrapKey(blink::WebCryptoKeyFormatRaw,
438 CryptoData(wrapped_key), 438 CryptoData(wrapped_key),
439 private_key, 439 private_key,
440 wrapping_algorithm, 440 wrapping_algorithm,
441 key_algorithm, 441 key_algorithm,
442 true, 442 true,
443 blink::WebCryptoKeyUsageEncrypt, 443 blink::WebCryptoKeyUsageEncrypt,
444 &unwrapped_key)); 444 &unwrapped_key));
445 ASSERT_FALSE(unwrapped_key.isNull()); 445 ASSERT_FALSE(unwrapped_key.isNull());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 "b578f59ed4cb724c47dba94d3b484c1876dcd70281807f15bc7d2406007cac2b138a96af" 498 "b578f59ed4cb724c47dba94d3b484c1876dcd70281807f15bc7d2406007cac2b138a96af"
499 "2d1e00276b84da593132c253fcb73212732dfd25824c2a615bc3d9b7f2c8d2fa542d3562" 499 "2d1e00276b84da593132c253fcb73212732dfd25824c2a615bc3d9b7f2c8d2fa542d3562"
500 "b0c7738e61eeff580a6056239fb367ea9e5efe73d4f846033602e90c36a78db6fa8ea792" 500 "b0c7738e61eeff580a6056239fb367ea9e5efe73d4f846033602e90c36a78db6fa8ea792"
501 "0769675ec58e237bd994d189c8045a96f5dd3a4f12547257ce224e3c9af830a4da3c0eab" 501 "0769675ec58e237bd994d189c8045a96f5dd3a4f12547257ce224e3c9af830a4da3c0eab"
502 "9227a0035ae9028180067caea877e0b23090fc689322b71fbcce63d6596e66ab5fcdbaa0" 502 "9227a0035ae9028180067caea877e0b23090fc689322b71fbcce63d6596e66ab5fcdbaa0"
503 "0d49e93aba8effb4518c2da637f209028401a68f344865b4956b032c69acde51d29177ca" 503 "0d49e93aba8effb4518c2da637f209028401a68f344865b4956b032c69acde51d29177ca"
504 "3db99fdbf5e74848ed4fa7bdfc2ebb60e2aaa5354770a763e1399ab7a2099762d525fea0" 504 "3db99fdbf5e74848ed4fa7bdfc2ebb60e2aaa5354770a763e1399ab7a2099762d525fea0"
505 "37f3e1972c45a477e66db95c9609bb27f862700ef93379930786cf751b"; 505 "37f3e1972c45a477e66db95c9609bb27f862700ef93379930786cf751b";
506 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm( 506 blink::WebCryptoAlgorithm import_algorithm = CreateRsaHashedImportAlgorithm(
507 blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1); 507 blink::WebCryptoAlgorithmIdRsaOaep, blink::WebCryptoAlgorithmIdSha1);
508 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 508 blink::WebCryptoKey public_key;
509 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 509 blink::WebCryptoKey private_key;
510 510
511 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair( 511 ASSERT_NO_FATAL_FAILURE(ImportRsaKeyPair(
512 HexStringToBytes(kPublicKey2048SpkiDerHex), 512 HexStringToBytes(kPublicKey2048SpkiDerHex),
513 HexStringToBytes(kPrivateKey2048Pkcs8DerHex), 513 HexStringToBytes(kPrivateKey2048Pkcs8DerHex),
514 import_algorithm, 514 import_algorithm,
515 false, 515 false,
516 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey, 516 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageWrapKey,
517 blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey, 517 blink::WebCryptoKeyUsageDecrypt | blink::WebCryptoKeyUsageUnwrapKey,
518 &public_key, 518 &public_key,
519 &private_key)); 519 &private_key));
(...skipping 24 matching lines...) Expand all
544 std::vector<uint8_t> decrypted_jwk; 544 std::vector<uint8_t> decrypted_jwk;
545 ASSERT_EQ(Status::Success(), 545 ASSERT_EQ(Status::Success(),
546 Decrypt(wrapping_algorithm, 546 Decrypt(wrapping_algorithm,
547 private_key, 547 private_key,
548 CryptoData(wrapped_key), 548 CryptoData(wrapped_key),
549 &decrypted_jwk)); 549 &decrypted_jwk));
550 EXPECT_TRUE(VerifySecretJwk( 550 EXPECT_TRUE(VerifySecretJwk(
551 decrypted_jwk, "A128CBC", key_hex, blink::WebCryptoKeyUsageEncrypt)); 551 decrypted_jwk, "A128CBC", key_hex, blink::WebCryptoKeyUsageEncrypt));
552 552
553 // Now attempt to unwrap the key, which should also decrypt the data. 553 // Now attempt to unwrap the key, which should also decrypt the data.
554 blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull(); 554 blink::WebCryptoKey unwrapped_key;
555 ASSERT_EQ(Status::Success(), 555 ASSERT_EQ(Status::Success(),
556 UnwrapKey(blink::WebCryptoKeyFormatJwk, 556 UnwrapKey(blink::WebCryptoKeyFormatJwk,
557 CryptoData(wrapped_key), 557 CryptoData(wrapped_key),
558 private_key, 558 private_key,
559 wrapping_algorithm, 559 wrapping_algorithm,
560 key_algorithm, 560 key_algorithm,
561 true, 561 true,
562 blink::WebCryptoKeyUsageEncrypt, 562 blink::WebCryptoKeyUsageEncrypt,
563 &unwrapped_key)); 563 &unwrapped_key));
564 ASSERT_FALSE(unwrapped_key.isNull()); 564 ASSERT_FALSE(unwrapped_key.isNull());
(...skipping 26 matching lines...) Expand all
591 591
592 for (size_t test_index = 0; test_index < arraysize(kTests); ++test_index) { 592 for (size_t test_index = 0; test_index < arraysize(kTests); ++test_index) {
593 SCOPED_TRACE(test_index); 593 SCOPED_TRACE(test_index);
594 const TestCase& test = kTests[test_index]; 594 const TestCase& test = kTests[test_index];
595 595
596 const blink::WebCryptoAlgorithm import_algorithm = 596 const blink::WebCryptoAlgorithm import_algorithm =
597 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep, 597 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
598 test.hash); 598 test.hash);
599 599
600 // Import the spki to create a public key 600 // Import the spki to create a public key
601 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 601 blink::WebCryptoKey public_key;
602 ASSERT_EQ(Status::Success(), 602 ASSERT_EQ(Status::Success(),
603 ImportKey(blink::WebCryptoKeyFormatSpki, 603 ImportKey(blink::WebCryptoKeyFormatSpki,
604 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 604 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
605 import_algorithm, 605 import_algorithm,
606 true, 606 true,
607 test.usage, 607 test.usage,
608 &public_key)); 608 &public_key));
609 609
610 // Export the public key as JWK and verify its contents 610 // Export the public key as JWK and verify its contents
611 std::vector<uint8_t> jwk; 611 std::vector<uint8_t> jwk;
612 ASSERT_EQ(Status::Success(), 612 ASSERT_EQ(Status::Success(),
613 ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk)); 613 ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk));
614 EXPECT_TRUE(VerifyPublicJwk(jwk, 614 EXPECT_TRUE(VerifyPublicJwk(jwk,
615 test.jwk_alg, 615 test.jwk_alg,
616 kPublicKeyModulusHex, 616 kPublicKeyModulusHex,
617 kPublicKeyExponentHex, 617 kPublicKeyExponentHex,
618 test.usage)); 618 test.usage));
619 619
620 // Import the JWK back in to create a new key 620 // Import the JWK back in to create a new key
621 blink::WebCryptoKey public_key2 = blink::WebCryptoKey::createNull(); 621 blink::WebCryptoKey public_key2;
622 ASSERT_EQ(Status::Success(), 622 ASSERT_EQ(Status::Success(),
623 ImportKey(blink::WebCryptoKeyFormatJwk, 623 ImportKey(blink::WebCryptoKeyFormatJwk,
624 CryptoData(jwk), 624 CryptoData(jwk),
625 import_algorithm, 625 import_algorithm,
626 true, 626 true,
627 test.usage, 627 test.usage,
628 &public_key2)); 628 &public_key2));
629 ASSERT_TRUE(public_key2.handle()); 629 ASSERT_TRUE(public_key2.handle());
630 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key2.type()); 630 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key2.type());
631 EXPECT_TRUE(public_key2.extractable()); 631 EXPECT_TRUE(public_key2.extractable());
632 EXPECT_EQ(import_algorithm.id(), public_key2.algorithm().id()); 632 EXPECT_EQ(import_algorithm.id(), public_key2.algorithm().id());
633 633
634 // TODO(eroman): Export the SPKI and verify matches. 634 // TODO(eroman): Export the SPKI and verify matches.
635 } 635 }
636 } 636 }
637 637
638 } // namespace 638 } // namespace
639 639
640 } // namespace webcrypto 640 } // namespace webcrypto
641 641
642 } // namespace content 642 } // namespace content
OLDNEW
« no previous file with comments | « content/child/webcrypto/test/hmac_unittest.cc ('k') | content/child/webcrypto/test/rsa_ssa_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698