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

Side by Side Diff: content/child/webcrypto/test/rsa_ssa_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/status.h" 9 #include "content/child/webcrypto/status.h"
10 #include "content/child/webcrypto/test/test_helpers.h" 10 #include "content/child/webcrypto/test/test_helpers.h"
(...skipping 20 matching lines...) Expand all
31 dict->SetString( 31 dict->SetString(
32 "n", 32 "n",
33 "qLOyhK-OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx-CwgtaTpef87Wdc9GaFEncsDLxk" 33 "qLOyhK-OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx-CwgtaTpef87Wdc9GaFEncsDLxk"
34 "p0LGxjD1M8jMcvYq6DPEC_JYQumEu3i9v5fAEH1VvbZi9cTg-rmEXLUUjvc5LdOq_5OuHmtm" 34 "p0LGxjD1M8jMcvYq6DPEC_JYQumEu3i9v5fAEH1VvbZi9cTg-rmEXLUUjvc5LdOq_5OuHmtm"
35 "e7PUJHYW1PW6ENTP0ibeiNOfFvs"); 35 "e7PUJHYW1PW6ENTP0ibeiNOfFvs");
36 dict->SetString("e", "AQAB"); 36 dict->SetString("e", "AQAB");
37 } 37 }
38 38
39 TEST(WebCryptoRsaSsaTest, ImportExportSpki) { 39 TEST(WebCryptoRsaSsaTest, ImportExportSpki) {
40 // Passing case: Import a valid RSA key in SPKI format. 40 // Passing case: Import a valid RSA key in SPKI format.
41 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 41 blink::WebCryptoKey key;
42 ASSERT_EQ(Status::Success(), 42 ASSERT_EQ(Status::Success(),
43 ImportKey(blink::WebCryptoKeyFormatSpki, 43 ImportKey(blink::WebCryptoKeyFormatSpki,
44 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 44 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
45 CreateRsaHashedImportAlgorithm( 45 CreateRsaHashedImportAlgorithm(
46 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 46 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
47 blink::WebCryptoAlgorithmIdSha256), 47 blink::WebCryptoAlgorithmIdSha256),
48 true, 48 true,
49 blink::WebCryptoKeyUsageVerify, 49 blink::WebCryptoKeyUsageVerify,
50 &key)); 50 &key));
51 EXPECT_TRUE(key.handle()); 51 EXPECT_TRUE(key.handle());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 // (e.g. SHA-1 in OID, SHA-256 in params) 120 // (e.g. SHA-1 in OID, SHA-256 in params)
121 // TODO(eroman): Failing test: Import a SPKI for RSA-SSA, but with params 121 // TODO(eroman): Failing test: Import a SPKI for RSA-SSA, but with params
122 // as OAEP/PSS 122 // as OAEP/PSS
123 } 123 }
124 124
125 TEST(WebCryptoRsaSsaTest, ImportExportPkcs8) { 125 TEST(WebCryptoRsaSsaTest, ImportExportPkcs8) {
126 if (!SupportsRsaPrivateKeyImport()) 126 if (!SupportsRsaPrivateKeyImport())
127 return; 127 return;
128 128
129 // Passing case: Import a valid RSA key in PKCS#8 format. 129 // Passing case: Import a valid RSA key in PKCS#8 format.
130 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 130 blink::WebCryptoKey key;
131 ASSERT_EQ(Status::Success(), 131 ASSERT_EQ(Status::Success(),
132 ImportKey(blink::WebCryptoKeyFormatPkcs8, 132 ImportKey(blink::WebCryptoKeyFormatPkcs8,
133 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), 133 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
134 CreateRsaHashedImportAlgorithm( 134 CreateRsaHashedImportAlgorithm(
135 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 135 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
136 blink::WebCryptoAlgorithmIdSha1), 136 blink::WebCryptoAlgorithmIdSha1),
137 true, 137 true,
138 blink::WebCryptoKeyUsageSign, 138 blink::WebCryptoKeyUsageSign,
139 &key)); 139 &key));
140 EXPECT_TRUE(key.handle()); 140 EXPECT_TRUE(key.handle());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 219
220 for (size_t test_index = 0; test_index < arraysize(kOffsetsToCorrupt); 220 for (size_t test_index = 0; test_index < arraysize(kOffsetsToCorrupt);
221 ++test_index) { 221 ++test_index) {
222 SCOPED_TRACE(test_index); 222 SCOPED_TRACE(test_index);
223 223
224 unsigned int i = kOffsetsToCorrupt[test_index]; 224 unsigned int i = kOffsetsToCorrupt[test_index];
225 std::vector<uint8_t> corrupted_data = 225 std::vector<uint8_t> corrupted_data =
226 HexStringToBytes(kPrivateKeyPkcs8DerHex); 226 HexStringToBytes(kPrivateKeyPkcs8DerHex);
227 corrupted_data[i] = ~corrupted_data[i]; 227 corrupted_data[i] = ~corrupted_data[i];
228 228
229 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 229 blink::WebCryptoKey key;
230 EXPECT_EQ(Status::DataError(), 230 EXPECT_EQ(Status::DataError(),
231 ImportKey(blink::WebCryptoKeyFormatPkcs8, 231 ImportKey(blink::WebCryptoKeyFormatPkcs8,
232 CryptoData(corrupted_data), 232 CryptoData(corrupted_data),
233 CreateRsaHashedImportAlgorithm( 233 CreateRsaHashedImportAlgorithm(
234 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 234 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
235 blink::WebCryptoAlgorithmIdSha1), 235 blink::WebCryptoAlgorithmIdSha1),
236 true, 236 true,
237 blink::WebCryptoKeyUsageSign, 237 blink::WebCryptoKeyUsageSign,
238 &key)); 238 &key));
239 } 239 }
240 } 240 }
241 241
242 // Tests JWK import and export by doing a roundtrip key conversion and ensuring 242 // Tests JWK import and export by doing a roundtrip key conversion and ensuring
243 // it was lossless: 243 // it was lossless:
244 // 244 //
245 // PKCS8 --> JWK --> PKCS8 245 // PKCS8 --> JWK --> PKCS8
246 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkToPkcs8RoundTrip) { 246 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkToPkcs8RoundTrip) {
247 if (!SupportsRsaPrivateKeyImport()) 247 if (!SupportsRsaPrivateKeyImport())
248 return; 248 return;
249 249
250 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 250 blink::WebCryptoKey key;
251 ASSERT_EQ(Status::Success(), 251 ASSERT_EQ(Status::Success(),
252 ImportKey(blink::WebCryptoKeyFormatPkcs8, 252 ImportKey(blink::WebCryptoKeyFormatPkcs8,
253 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)), 253 CryptoData(HexStringToBytes(kPrivateKeyPkcs8DerHex)),
254 CreateRsaHashedImportAlgorithm( 254 CreateRsaHashedImportAlgorithm(
255 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 255 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
256 blink::WebCryptoAlgorithmIdSha1), 256 blink::WebCryptoAlgorithmIdSha1),
257 true, 257 true,
258 blink::WebCryptoKeyUsageSign, 258 blink::WebCryptoKeyUsageSign,
259 &key)); 259 &key));
260 260
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 334
335 // Get the PKCS8 representation of the key. 335 // Get the PKCS8 representation of the key.
336 std::string pkcs8_hex_string; 336 std::string pkcs8_hex_string;
337 ASSERT_TRUE(key_values->GetString("pkcs8", &pkcs8_hex_string)); 337 ASSERT_TRUE(key_values->GetString("pkcs8", &pkcs8_hex_string));
338 std::vector<uint8_t> pkcs8_bytes = HexStringToBytes(pkcs8_hex_string); 338 std::vector<uint8_t> pkcs8_bytes = HexStringToBytes(pkcs8_hex_string);
339 339
340 // Get the modulus length for the key. 340 // Get the modulus length for the key.
341 int modulus_length_bits = 0; 341 int modulus_length_bits = 0;
342 ASSERT_TRUE(key_values->GetInteger("modulusLength", &modulus_length_bits)); 342 ASSERT_TRUE(key_values->GetInteger("modulusLength", &modulus_length_bits));
343 343
344 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 344 blink::WebCryptoKey private_key;
345 345
346 // Import the key from JWK. 346 // Import the key from JWK.
347 ASSERT_EQ( 347 ASSERT_EQ(
348 Status::Success(), 348 Status::Success(),
349 ImportKeyJwkFromDict(*key_jwk, 349 ImportKeyJwkFromDict(*key_jwk,
350 CreateRsaHashedImportAlgorithm( 350 CreateRsaHashedImportAlgorithm(
351 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 351 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
352 blink::WebCryptoAlgorithmIdSha256), 352 blink::WebCryptoAlgorithmIdSha256),
353 true, 353 true,
354 blink::WebCryptoKeyUsageSign, 354 blink::WebCryptoKeyUsageSign,
(...skipping 27 matching lines...) Expand all
382 382
383 scoped_ptr<base::ListValue> key_list; 383 scoped_ptr<base::ListValue> key_list;
384 ASSERT_TRUE(ReadJsonTestFileToList("rsa_private_keys.json", &key_list)); 384 ASSERT_TRUE(ReadJsonTestFileToList("rsa_private_keys.json", &key_list));
385 385
386 // Import a 1024-bit private key. 386 // Import a 1024-bit private key.
387 base::DictionaryValue* key1_props; 387 base::DictionaryValue* key1_props;
388 ASSERT_TRUE(key_list->GetDictionary(1, &key1_props)); 388 ASSERT_TRUE(key_list->GetDictionary(1, &key1_props));
389 base::DictionaryValue* key1_jwk; 389 base::DictionaryValue* key1_jwk;
390 ASSERT_TRUE(key1_props->GetDictionary("jwk", &key1_jwk)); 390 ASSERT_TRUE(key1_props->GetDictionary("jwk", &key1_jwk));
391 391
392 blink::WebCryptoKey key1 = blink::WebCryptoKey::createNull(); 392 blink::WebCryptoKey key1;
393 ASSERT_EQ(Status::Success(), 393 ASSERT_EQ(Status::Success(),
394 ImportKeyJwkFromDict(*key1_jwk, 394 ImportKeyJwkFromDict(*key1_jwk,
395 CreateRsaHashedImportAlgorithm( 395 CreateRsaHashedImportAlgorithm(
396 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 396 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
397 blink::WebCryptoAlgorithmIdSha256), 397 blink::WebCryptoAlgorithmIdSha256),
398 true, 398 true,
399 blink::WebCryptoKeyUsageSign, 399 blink::WebCryptoKeyUsageSign,
400 &key1)); 400 &key1));
401 401
402 ASSERT_EQ(1024u, key1.algorithm().rsaHashedParams()->modulusLengthBits()); 402 ASSERT_EQ(1024u, key1.algorithm().rsaHashedParams()->modulusLengthBits());
403 403
404 // Construct a JWK using the modulus of key1, but all the other fields from 404 // Construct a JWK using the modulus of key1, but all the other fields from
405 // another key (also a 1024-bit private key). 405 // another key (also a 1024-bit private key).
406 base::DictionaryValue* key2_props; 406 base::DictionaryValue* key2_props;
407 ASSERT_TRUE(key_list->GetDictionary(5, &key2_props)); 407 ASSERT_TRUE(key_list->GetDictionary(5, &key2_props));
408 base::DictionaryValue* key2_jwk; 408 base::DictionaryValue* key2_jwk;
409 ASSERT_TRUE(key2_props->GetDictionary("jwk", &key2_jwk)); 409 ASSERT_TRUE(key2_props->GetDictionary("jwk", &key2_jwk));
410 std::string modulus; 410 std::string modulus;
411 key1_jwk->GetString("n", &modulus); 411 key1_jwk->GetString("n", &modulus);
412 key2_jwk->SetString("n", modulus); 412 key2_jwk->SetString("n", modulus);
413 413
414 // This should fail, as the n,e,d parameters are not consistent. It MUST NOT 414 // This should fail, as the n,e,d parameters are not consistent. It MUST NOT
415 // somehow return the key created earlier. 415 // somehow return the key created earlier.
416 blink::WebCryptoKey key2 = blink::WebCryptoKey::createNull(); 416 blink::WebCryptoKey key2;
417 ASSERT_EQ(Status::OperationError(), 417 ASSERT_EQ(Status::OperationError(),
418 ImportKeyJwkFromDict(*key2_jwk, 418 ImportKeyJwkFromDict(*key2_jwk,
419 CreateRsaHashedImportAlgorithm( 419 CreateRsaHashedImportAlgorithm(
420 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 420 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
421 blink::WebCryptoAlgorithmIdSha256), 421 blink::WebCryptoAlgorithmIdSha256),
422 true, 422 true,
423 blink::WebCryptoKeyUsageSign, 423 blink::WebCryptoKeyUsageSign,
424 &key2)); 424 &key2));
425 } 425 }
426 426
427 // Import a JWK RSA private key with some optional parameters missing (q, dp, 427 // Import a JWK RSA private key with some optional parameters missing (q, dp,
428 // dq, qi). 428 // dq, qi).
429 // 429 //
430 // The only optional parameter included is "p". 430 // The only optional parameter included is "p".
431 // 431 //
432 // This fails because JWA says that producers must include either ALL optional 432 // This fails because JWA says that producers must include either ALL optional
433 // parameters or NONE. 433 // parameters or NONE.
434 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkMissingOptionalParams) { 434 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkMissingOptionalParams) {
435 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 435 blink::WebCryptoKey key;
436 436
437 base::DictionaryValue dict; 437 base::DictionaryValue dict;
438 dict.SetString("kty", "RSA"); 438 dict.SetString("kty", "RSA");
439 dict.SetString("alg", "RS1"); 439 dict.SetString("alg", "RS1");
440 440
441 dict.SetString( 441 dict.SetString(
442 "n", 442 "n",
443 "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_" 443 "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_"
444 "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_" 444 "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_"
445 "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc"); 445 "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc");
(...skipping 22 matching lines...) Expand all
468 // Import a JWK RSA private key, without any of the optional parameters. 468 // Import a JWK RSA private key, without any of the optional parameters.
469 // 469 //
470 // According to JWA, such keys are valid, but applications SHOULD 470 // According to JWA, such keys are valid, but applications SHOULD
471 // include all the parameters when sending, and recipients MAY 471 // include all the parameters when sending, and recipients MAY
472 // accept them, but are not required to. Chromium's WebCrypto does 472 // accept them, but are not required to. Chromium's WebCrypto does
473 // not allow such degenerate keys. 473 // not allow such degenerate keys.
474 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkIncorrectOptionalEmpty) { 474 TEST(WebCryptoRsaSsaTest, ImportRsaPrivateKeyJwkIncorrectOptionalEmpty) {
475 if (!SupportsRsaPrivateKeyImport()) 475 if (!SupportsRsaPrivateKeyImport())
476 return; 476 return;
477 477
478 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 478 blink::WebCryptoKey key;
479 479
480 base::DictionaryValue dict; 480 base::DictionaryValue dict;
481 dict.SetString("kty", "RSA"); 481 dict.SetString("kty", "RSA");
482 dict.SetString("alg", "RS1"); 482 dict.SetString("alg", "RS1");
483 483
484 dict.SetString( 484 dict.SetString(
485 "n", 485 "n",
486 "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_" 486 "pW5KDnAQF1iaUYfcfqhB0Vby7A42rVKkTf6x5h962ZHYxRBW_-2xYrTA8oOhKoijlN_"
487 "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_" 487 "1JqtykcuzB86r_OCx39XNlQgJbVsri2311nHvY3fAkhyyPCcKcOJZjm_4nRnxBazC0_"
488 "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc"); 488 "DLNfKSgOE4a29kxO8i4eHyDQzoz_siSb2aITc");
(...skipping 19 matching lines...) Expand all
508 base::DictionaryValue dict; 508 base::DictionaryValue dict;
509 509
510 dict.SetString("kty", "RSA"); 510 dict.SetString("kty", "RSA");
511 dict.SetString("e", "AAEAAQ"); // 00 01 00 01 511 dict.SetString("e", "AAEAAQ"); // 00 01 00 01
512 dict.SetString( 512 dict.SetString(
513 "n", 513 "n",
514 "qLOyhK-OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx-CwgtaTpef87Wdc9GaFEncsDLxk" 514 "qLOyhK-OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx-CwgtaTpef87Wdc9GaFEncsDLxk"
515 "p0LGxjD1M8jMcvYq6DPEC_JYQumEu3i9v5fAEH1VvbZi9cTg-rmEXLUUjvc5LdOq_5OuHmtm" 515 "p0LGxjD1M8jMcvYq6DPEC_JYQumEu3i9v5fAEH1VvbZi9cTg-rmEXLUUjvc5LdOq_5OuHmtm"
516 "e7PUJHYW1PW6ENTP0ibeiNOfFvs"); 516 "e7PUJHYW1PW6ENTP0ibeiNOfFvs");
517 517
518 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 518 blink::WebCryptoKey key;
519 519
520 EXPECT_EQ(Status::ErrorJwkBigIntegerHasLeadingZero("e"), 520 EXPECT_EQ(Status::ErrorJwkBigIntegerHasLeadingZero("e"),
521 ImportKeyJwkFromDict(dict, 521 ImportKeyJwkFromDict(dict,
522 CreateRsaHashedImportAlgorithm( 522 CreateRsaHashedImportAlgorithm(
523 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 523 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
524 blink::WebCryptoAlgorithmIdSha256), 524 blink::WebCryptoAlgorithmIdSha256),
525 false, 525 false,
526 blink::WebCryptoKeyUsageVerify, 526 blink::WebCryptoKeyUsageVerify,
527 &key)); 527 &key));
528 } 528 }
529 529
530 TEST(WebCryptoRsaSsaTest, GenerateKeyPairRsa) { 530 TEST(WebCryptoRsaSsaTest, GenerateKeyPairRsa) {
531 // Note: using unrealistic short key lengths here to avoid bogging down tests. 531 // Note: using unrealistic short key lengths here to avoid bogging down tests.
532 532
533 // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha256) 533 // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha256)
534 const unsigned int modulus_length = 256; 534 const unsigned int modulus_length = 256;
535 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001"); 535 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001");
536 blink::WebCryptoAlgorithm algorithm = 536 blink::WebCryptoAlgorithm algorithm =
537 CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 537 CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
538 blink::WebCryptoAlgorithmIdSha256, 538 blink::WebCryptoAlgorithmIdSha256,
539 modulus_length, 539 modulus_length,
540 public_exponent); 540 public_exponent);
541 bool extractable = true; 541 bool extractable = true;
542 const blink::WebCryptoKeyUsageMask usage_mask = 0; 542 const blink::WebCryptoKeyUsageMask usage_mask = 0;
543 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 543 blink::WebCryptoKey public_key;
544 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 544 blink::WebCryptoKey private_key;
545 545
546 EXPECT_EQ(Status::Success(), 546 EXPECT_EQ(Status::Success(),
547 GenerateKeyPair( 547 GenerateKeyPair(
548 algorithm, extractable, usage_mask, &public_key, &private_key)); 548 algorithm, extractable, usage_mask, &public_key, &private_key));
549 EXPECT_FALSE(public_key.isNull()); 549 EXPECT_FALSE(public_key.isNull());
550 EXPECT_FALSE(private_key.isNull()); 550 EXPECT_FALSE(private_key.isNull());
551 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type()); 551 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
552 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type()); 552 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
553 EXPECT_EQ(modulus_length, 553 EXPECT_EQ(modulus_length,
554 public_key.algorithm().rsaHashedParams()->modulusLengthBits()); 554 public_key.algorithm().rsaHashedParams()->modulusLengthBits());
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 725
726 for (size_t i = 0; i < arraysize(kBadModulusBits); ++i) { 726 for (size_t i = 0; i < arraysize(kBadModulusBits); ++i) {
727 const unsigned int modulus_length_bits = kBadModulusBits[i]; 727 const unsigned int modulus_length_bits = kBadModulusBits[i];
728 blink::WebCryptoAlgorithm algorithm = CreateRsaHashedKeyGenAlgorithm( 728 blink::WebCryptoAlgorithm algorithm = CreateRsaHashedKeyGenAlgorithm(
729 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 729 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
730 blink::WebCryptoAlgorithmIdSha256, 730 blink::WebCryptoAlgorithmIdSha256,
731 modulus_length_bits, 731 modulus_length_bits,
732 public_exponent); 732 public_exponent);
733 bool extractable = true; 733 bool extractable = true;
734 const blink::WebCryptoKeyUsageMask usage_mask = 0; 734 const blink::WebCryptoKeyUsageMask usage_mask = 0;
735 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 735 blink::WebCryptoKey public_key;
736 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 736 blink::WebCryptoKey private_key;
737 737
738 EXPECT_EQ( 738 EXPECT_EQ(
739 Status::ErrorGenerateRsaUnsupportedModulus(), 739 Status::ErrorGenerateRsaUnsupportedModulus(),
740 GenerateKeyPair( 740 GenerateKeyPair(
741 algorithm, extractable, usage_mask, &public_key, &private_key)); 741 algorithm, extractable, usage_mask, &public_key, &private_key));
742 } 742 }
743 } 743 }
744 744
745 // Try generating RSA key pairs using unsupported public exponents. Only 745 // Try generating RSA key pairs using unsupported public exponents. Only
746 // exponents of 3 and 65537 are supported. While both OpenSSL and NSS can 746 // exponents of 3 and 65537 are supported. While both OpenSSL and NSS can
747 // support other values, OpenSSL hangs when given invalid exponents, so use a 747 // support other values, OpenSSL hangs when given invalid exponents, so use a
748 // whitelist to validate the parameters. 748 // whitelist to validate the parameters.
749 TEST(WebCryptoRsaSsaTest, GenerateKeyPairRsaBadExponent) { 749 TEST(WebCryptoRsaSsaTest, GenerateKeyPairRsaBadExponent) {
750 const unsigned int modulus_length = 1024; 750 const unsigned int modulus_length = 1024;
751 751
752 const char* const kPublicExponents[] = { 752 const char* const kPublicExponents[] = {
753 "11", // 17 - This is a valid public exponent, but currently disallowed. 753 "11", // 17 - This is a valid public exponent, but currently disallowed.
754 "00", "01", "02", 754 "00", "01", "02",
755 "010000", // 65536 755 "010000", // 65536
756 }; 756 };
757 757
758 for (size_t i = 0; i < arraysize(kPublicExponents); ++i) { 758 for (size_t i = 0; i < arraysize(kPublicExponents); ++i) {
759 SCOPED_TRACE(i); 759 SCOPED_TRACE(i);
760 blink::WebCryptoAlgorithm algorithm = CreateRsaHashedKeyGenAlgorithm( 760 blink::WebCryptoAlgorithm algorithm = CreateRsaHashedKeyGenAlgorithm(
761 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 761 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
762 blink::WebCryptoAlgorithmIdSha256, 762 blink::WebCryptoAlgorithmIdSha256,
763 modulus_length, 763 modulus_length,
764 HexStringToBytes(kPublicExponents[i])); 764 HexStringToBytes(kPublicExponents[i]));
765 765
766 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 766 blink::WebCryptoKey public_key;
767 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 767 blink::WebCryptoKey private_key;
768 768
769 EXPECT_EQ(Status::ErrorGenerateKeyPublicExponent(), 769 EXPECT_EQ(Status::ErrorGenerateKeyPublicExponent(),
770 GenerateKeyPair(algorithm, true, 0, &public_key, &private_key)); 770 GenerateKeyPair(algorithm, true, 0, &public_key, &private_key));
771 } 771 }
772 } 772 }
773 773
774 TEST(WebCryptoRsaSsaTest, SignVerifyFailures) { 774 TEST(WebCryptoRsaSsaTest, SignVerifyFailures) {
775 if (!SupportsRsaPrivateKeyImport()) 775 if (!SupportsRsaPrivateKeyImport())
776 return; 776 return;
777 777
778 // Import a key pair. 778 // Import a key pair.
779 blink::WebCryptoAlgorithm import_algorithm = 779 blink::WebCryptoAlgorithm import_algorithm =
780 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 780 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
781 blink::WebCryptoAlgorithmIdSha1); 781 blink::WebCryptoAlgorithmIdSha1);
782 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 782 blink::WebCryptoKey public_key;
783 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 783 blink::WebCryptoKey private_key;
784 ASSERT_NO_FATAL_FAILURE( 784 ASSERT_NO_FATAL_FAILURE(
785 ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex), 785 ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex),
786 HexStringToBytes(kPrivateKeyPkcs8DerHex), 786 HexStringToBytes(kPrivateKeyPkcs8DerHex),
787 import_algorithm, 787 import_algorithm,
788 false, 788 false,
789 blink::WebCryptoKeyUsageVerify, 789 blink::WebCryptoKeyUsageVerify,
790 blink::WebCryptoKeyUsageSign, 790 blink::WebCryptoKeyUsageSign,
791 &public_key, 791 &public_key,
792 &private_key)); 792 &private_key));
793 793
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 // signature itself (undesired), the verify will pass, while if the hash type 865 // signature itself (undesired), the verify will pass, while if the hash type
866 // is specified by the key algorithm (desired), the verify will fail. 866 // is specified by the key algorithm (desired), the verify will fail.
867 867
868 // Compute a signature using SHA-1 as the inner hash. 868 // Compute a signature using SHA-1 as the inner hash.
869 EXPECT_EQ(Status::Success(), 869 EXPECT_EQ(Status::Success(),
870 Sign(CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5), 870 Sign(CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5),
871 private_key, 871 private_key,
872 CryptoData(data), 872 CryptoData(data),
873 &signature)); 873 &signature));
874 874
875 blink::WebCryptoKey public_key_256 = blink::WebCryptoKey::createNull(); 875 blink::WebCryptoKey public_key_256;
876 EXPECT_EQ(Status::Success(), 876 EXPECT_EQ(Status::Success(),
877 ImportKey(blink::WebCryptoKeyFormatSpki, 877 ImportKey(blink::WebCryptoKeyFormatSpki,
878 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 878 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
879 CreateRsaHashedImportAlgorithm( 879 CreateRsaHashedImportAlgorithm(
880 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 880 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
881 blink::WebCryptoAlgorithmIdSha256), 881 blink::WebCryptoAlgorithmIdSha256),
882 true, 882 true,
883 blink::WebCryptoKeyUsageVerify, 883 blink::WebCryptoKeyUsageVerify,
884 &public_key_256)); 884 &public_key_256));
885 885
(...skipping 21 matching lines...) Expand all
907 if (!SupportsRsaPrivateKeyImport()) 907 if (!SupportsRsaPrivateKeyImport())
908 return; 908 return;
909 909
910 scoped_ptr<base::ListValue> tests; 910 scoped_ptr<base::ListValue> tests;
911 ASSERT_TRUE(ReadJsonTestFileToList("pkcs1v15_sign.json", &tests)); 911 ASSERT_TRUE(ReadJsonTestFileToList("pkcs1v15_sign.json", &tests));
912 912
913 // Import the key pair. 913 // Import the key pair.
914 blink::WebCryptoAlgorithm import_algorithm = 914 blink::WebCryptoAlgorithm import_algorithm =
915 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 915 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
916 blink::WebCryptoAlgorithmIdSha1); 916 blink::WebCryptoAlgorithmIdSha1);
917 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 917 blink::WebCryptoKey public_key;
918 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 918 blink::WebCryptoKey private_key;
919 ASSERT_NO_FATAL_FAILURE( 919 ASSERT_NO_FATAL_FAILURE(
920 ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex), 920 ImportRsaKeyPair(HexStringToBytes(kPublicKeySpkiDerHex),
921 HexStringToBytes(kPrivateKeyPkcs8DerHex), 921 HexStringToBytes(kPrivateKeyPkcs8DerHex),
922 import_algorithm, 922 import_algorithm,
923 false, 923 false,
924 blink::WebCryptoKeyUsageVerify, 924 blink::WebCryptoKeyUsageVerify,
925 blink::WebCryptoKeyUsageSign, 925 blink::WebCryptoKeyUsageSign,
926 &public_key, 926 &public_key,
927 &private_key)); 927 &private_key));
928 928
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 blink::WebCryptoKeyUsageMask bad_usages[] = { 969 blink::WebCryptoKeyUsageMask bad_usages[] = {
970 blink::WebCryptoKeyUsageSign, 970 blink::WebCryptoKeyUsageSign,
971 blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify, 971 blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
972 blink::WebCryptoKeyUsageEncrypt, 972 blink::WebCryptoKeyUsageEncrypt,
973 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt, 973 blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt,
974 }; 974 };
975 975
976 for (size_t i = 0; i < arraysize(bad_usages); ++i) { 976 for (size_t i = 0; i < arraysize(bad_usages); ++i) {
977 SCOPED_TRACE(i); 977 SCOPED_TRACE(i);
978 978
979 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 979 blink::WebCryptoKey public_key;
980 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(), 980 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
981 ImportKey(blink::WebCryptoKeyFormatSpki, 981 ImportKey(blink::WebCryptoKeyFormatSpki,
982 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 982 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
983 algorithm, 983 algorithm,
984 false, 984 false,
985 bad_usages[i], 985 bad_usages[i],
986 &public_key)); 986 &public_key));
987 } 987 }
988 } 988 }
989 989
(...skipping 12 matching lines...) Expand all
1002 }; 1002 };
1003 1003
1004 base::DictionaryValue dict; 1004 base::DictionaryValue dict;
1005 RestoreJwkRsaDictionary(&dict); 1005 RestoreJwkRsaDictionary(&dict);
1006 dict.Remove("use", NULL); 1006 dict.Remove("use", NULL);
1007 dict.SetString("alg", "RS256"); 1007 dict.SetString("alg", "RS256");
1008 1008
1009 for (size_t i = 0; i < arraysize(bad_usages); ++i) { 1009 for (size_t i = 0; i < arraysize(bad_usages); ++i) {
1010 SCOPED_TRACE(i); 1010 SCOPED_TRACE(i);
1011 1011
1012 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 1012 blink::WebCryptoKey public_key;
1013 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(), 1013 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
1014 ImportKeyJwkFromDict( 1014 ImportKeyJwkFromDict(
1015 dict, algorithm, false, bad_usages[i], &public_key)); 1015 dict, algorithm, false, bad_usages[i], &public_key));
1016 } 1016 }
1017 } 1017 }
1018 1018
1019 // Generate an RSA-SSA key pair with invalid usages. RSA-SSA supports: 1019 // Generate an RSA-SSA key pair with invalid usages. RSA-SSA supports:
1020 // 'sign', 'verify' 1020 // 'sign', 'verify'
1021 TEST(WebCryptoRsaSsaTest, GenerateKeyBadUsages) { 1021 TEST(WebCryptoRsaSsaTest, GenerateKeyBadUsages) {
1022 blink::WebCryptoKeyUsageMask bad_usages[] = { 1022 blink::WebCryptoKeyUsageMask bad_usages[] = {
1023 blink::WebCryptoKeyUsageDecrypt, 1023 blink::WebCryptoKeyUsageDecrypt,
1024 blink::WebCryptoKeyUsageVerify | blink::WebCryptoKeyUsageDecrypt, 1024 blink::WebCryptoKeyUsageVerify | blink::WebCryptoKeyUsageDecrypt,
1025 blink::WebCryptoKeyUsageWrapKey, 1025 blink::WebCryptoKeyUsageWrapKey,
1026 }; 1026 };
1027 1027
1028 const unsigned int modulus_length = 256; 1028 const unsigned int modulus_length = 256;
1029 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001"); 1029 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001");
1030 1030
1031 for (size_t i = 0; i < arraysize(bad_usages); ++i) { 1031 for (size_t i = 0; i < arraysize(bad_usages); ++i) {
1032 SCOPED_TRACE(i); 1032 SCOPED_TRACE(i);
1033 1033
1034 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 1034 blink::WebCryptoKey public_key;
1035 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 1035 blink::WebCryptoKey private_key;
1036 1036
1037 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(), 1037 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
1038 GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm( 1038 GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm(
1039 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 1039 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
1040 blink::WebCryptoAlgorithmIdSha256, 1040 blink::WebCryptoAlgorithmIdSha256,
1041 modulus_length, 1041 modulus_length,
1042 public_exponent), 1042 public_exponent),
1043 true, 1043 true,
1044 bad_usages[i], 1044 bad_usages[i],
1045 &public_key, 1045 &public_key,
1046 &private_key)); 1046 &private_key));
1047 } 1047 }
1048 } 1048 }
1049 1049
1050 // Generate an RSA-SSA key pair. The public and private keys should select the 1050 // Generate an RSA-SSA key pair. The public and private keys should select the
1051 // key usages which are applicable, and not have the exact same usages as was 1051 // key usages which are applicable, and not have the exact same usages as was
1052 // specified to GenerateKey 1052 // specified to GenerateKey
1053 TEST(WebCryptoRsaSsaTest, GenerateKeyPairIntersectUsages) { 1053 TEST(WebCryptoRsaSsaTest, GenerateKeyPairIntersectUsages) {
1054 const unsigned int modulus_length = 256; 1054 const unsigned int modulus_length = 256;
1055 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001"); 1055 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001");
1056 1056
1057 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 1057 blink::WebCryptoKey public_key;
1058 blink::WebCryptoKey private_key = blink::WebCryptoKey::createNull(); 1058 blink::WebCryptoKey private_key;
1059 1059
1060 ASSERT_EQ(Status::Success(), 1060 ASSERT_EQ(Status::Success(),
1061 GenerateKeyPair( 1061 GenerateKeyPair(
1062 CreateRsaHashedKeyGenAlgorithm( 1062 CreateRsaHashedKeyGenAlgorithm(
1063 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 1063 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
1064 blink::WebCryptoAlgorithmIdSha256, 1064 blink::WebCryptoAlgorithmIdSha256,
1065 modulus_length, 1065 modulus_length,
1066 public_exponent), 1066 public_exponent),
1067 true, 1067 true,
1068 blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify, 1068 blink::WebCryptoKeyUsageSign | blink::WebCryptoKeyUsageVerify,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 1105
1106 for (size_t test_index = 0; test_index < arraysize(kTests); ++test_index) { 1106 for (size_t test_index = 0; test_index < arraysize(kTests); ++test_index) {
1107 SCOPED_TRACE(test_index); 1107 SCOPED_TRACE(test_index);
1108 const TestCase& test = kTests[test_index]; 1108 const TestCase& test = kTests[test_index];
1109 1109
1110 const blink::WebCryptoAlgorithm import_algorithm = 1110 const blink::WebCryptoAlgorithm import_algorithm =
1111 CreateRsaHashedImportAlgorithm( 1111 CreateRsaHashedImportAlgorithm(
1112 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, test.hash); 1112 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, test.hash);
1113 1113
1114 // Import the spki to create a public key 1114 // Import the spki to create a public key
1115 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); 1115 blink::WebCryptoKey public_key;
1116 ASSERT_EQ(Status::Success(), 1116 ASSERT_EQ(Status::Success(),
1117 ImportKey(blink::WebCryptoKeyFormatSpki, 1117 ImportKey(blink::WebCryptoKeyFormatSpki,
1118 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 1118 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
1119 import_algorithm, 1119 import_algorithm,
1120 true, 1120 true,
1121 test.usage, 1121 test.usage,
1122 &public_key)); 1122 &public_key));
1123 1123
1124 // Export the public key as JWK and verify its contents 1124 // Export the public key as JWK and verify its contents
1125 std::vector<uint8_t> jwk; 1125 std::vector<uint8_t> jwk;
1126 ASSERT_EQ(Status::Success(), 1126 ASSERT_EQ(Status::Success(),
1127 ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk)); 1127 ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk));
1128 EXPECT_TRUE(VerifyPublicJwk(jwk, 1128 EXPECT_TRUE(VerifyPublicJwk(jwk,
1129 test.jwk_alg, 1129 test.jwk_alg,
1130 kPublicKeyModulusHex, 1130 kPublicKeyModulusHex,
1131 kPublicKeyExponentHex, 1131 kPublicKeyExponentHex,
1132 test.usage)); 1132 test.usage));
1133 1133
1134 // Import the JWK back in to create a new key 1134 // Import the JWK back in to create a new key
1135 blink::WebCryptoKey public_key2 = blink::WebCryptoKey::createNull(); 1135 blink::WebCryptoKey public_key2;
1136 ASSERT_EQ(Status::Success(), 1136 ASSERT_EQ(Status::Success(),
1137 ImportKey(blink::WebCryptoKeyFormatJwk, 1137 ImportKey(blink::WebCryptoKeyFormatJwk,
1138 CryptoData(jwk), 1138 CryptoData(jwk),
1139 import_algorithm, 1139 import_algorithm,
1140 true, 1140 true,
1141 test.usage, 1141 test.usage,
1142 &public_key2)); 1142 &public_key2));
1143 ASSERT_TRUE(public_key2.handle()); 1143 ASSERT_TRUE(public_key2.handle());
1144 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key2.type()); 1144 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key2.type());
1145 EXPECT_TRUE(public_key2.extractable()); 1145 EXPECT_TRUE(public_key2.extractable());
1146 EXPECT_EQ(import_algorithm.id(), public_key2.algorithm().id()); 1146 EXPECT_EQ(import_algorithm.id(), public_key2.algorithm().id());
1147 1147
1148 // Export the new key as spki and compare to the original. 1148 // Export the new key as spki and compare to the original.
1149 std::vector<uint8_t> spki; 1149 std::vector<uint8_t> spki;
1150 ASSERT_EQ(Status::Success(), 1150 ASSERT_EQ(Status::Success(),
1151 ExportKey(blink::WebCryptoKeyFormatSpki, public_key2, &spki)); 1151 ExportKey(blink::WebCryptoKeyFormatSpki, public_key2, &spki));
1152 EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, CryptoData(spki)); 1152 EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, CryptoData(spki));
1153 } 1153 }
1154 } 1154 }
1155 1155
1156 TEST(WebCryptoRsaSsaTest, ImportJwkRsaFailures) { 1156 TEST(WebCryptoRsaSsaTest, ImportJwkRsaFailures) {
1157 base::DictionaryValue dict; 1157 base::DictionaryValue dict;
1158 RestoreJwkRsaDictionary(&dict); 1158 RestoreJwkRsaDictionary(&dict);
1159 blink::WebCryptoAlgorithm algorithm = 1159 blink::WebCryptoAlgorithm algorithm =
1160 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 1160 CreateRsaHashedImportAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
1161 blink::WebCryptoAlgorithmIdSha256); 1161 blink::WebCryptoAlgorithmIdSha256);
1162 blink::WebCryptoKeyUsageMask usage_mask = blink::WebCryptoKeyUsageVerify; 1162 blink::WebCryptoKeyUsageMask usage_mask = blink::WebCryptoKeyUsageVerify;
1163 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 1163 blink::WebCryptoKey key;
1164 1164
1165 // An RSA public key JWK _must_ have an "n" (modulus) and an "e" (exponent) 1165 // An RSA public key JWK _must_ have an "n" (modulus) and an "e" (exponent)
1166 // entry, while an RSA private key must have those plus at least a "d" 1166 // entry, while an RSA private key must have those plus at least a "d"
1167 // (private exponent) entry. 1167 // (private exponent) entry.
1168 // See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18, 1168 // See http://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-18,
1169 // section 6.3. 1169 // section 6.3.
1170 1170
1171 // Baseline pass. 1171 // Baseline pass.
1172 EXPECT_EQ(Status::Success(), 1172 EXPECT_EQ(Status::Success(),
1173 ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key)); 1173 ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key));
(...skipping 25 matching lines...) Expand all
1199 ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key)); 1199 ImportKeyJwkFromDict(dict, algorithm, false, usage_mask, &key));
1200 RestoreJwkRsaDictionary(&dict); 1200 RestoreJwkRsaDictionary(&dict);
1201 } 1201 }
1202 } 1202 }
1203 1203
1204 } // namespace 1204 } // namespace
1205 1205
1206 } // namespace webcrypto 1206 } // namespace webcrypto
1207 1207
1208 } // namespace content 1208 } // namespace content
OLDNEW
« no previous file with comments | « content/child/webcrypto/test/rsa_oaep_unittest.cc ('k') | content/child/webcrypto/test/test_helpers.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698