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

Side by Side Diff: Source/modules/crypto/NormalizeAlgorithm.cpp

Issue 179353002: [webcrypto] Add the KeyAlgorithm interface. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase yet again (another conflict) Created 6 years, 10 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 | « Source/modules/crypto/KeyPair.h ('k') | Source/modules/crypto/RsaHashedKeyAlgorithm.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 93
94 // AES-CTR 94 // AES-CTR
95 {blink::WebCryptoAlgorithmIdAesCtr, Decrypt, blink::WebCryptoAlgorithmParams TypeAesCtrParams}, 95 {blink::WebCryptoAlgorithmIdAesCtr, Decrypt, blink::WebCryptoAlgorithmParams TypeAesCtrParams},
96 {blink::WebCryptoAlgorithmIdAesCtr, Encrypt, blink::WebCryptoAlgorithmParams TypeAesCtrParams}, 96 {blink::WebCryptoAlgorithmIdAesCtr, Encrypt, blink::WebCryptoAlgorithmParams TypeAesCtrParams},
97 {blink::WebCryptoAlgorithmIdAesCtr, GenerateKey, blink::WebCryptoAlgorithmPa ramsTypeAesKeyGenParams}, 97 {blink::WebCryptoAlgorithmIdAesCtr, GenerateKey, blink::WebCryptoAlgorithmPa ramsTypeAesKeyGenParams},
98 {blink::WebCryptoAlgorithmIdAesCtr, ImportKey, blink::WebCryptoAlgorithmPara msTypeNone}, 98 {blink::WebCryptoAlgorithmIdAesCtr, ImportKey, blink::WebCryptoAlgorithmPara msTypeNone},
99 {blink::WebCryptoAlgorithmIdAesCtr, UnwrapKey, blink::WebCryptoAlgorithmPara msTypeAesCtrParams}, 99 {blink::WebCryptoAlgorithmIdAesCtr, UnwrapKey, blink::WebCryptoAlgorithmPara msTypeAesCtrParams},
100 {blink::WebCryptoAlgorithmIdAesCtr, WrapKey, blink::WebCryptoAlgorithmParams TypeAesCtrParams}, 100 {blink::WebCryptoAlgorithmIdAesCtr, WrapKey, blink::WebCryptoAlgorithmParams TypeAesCtrParams},
101 101
102 // HMAC 102 // HMAC
103 {blink::WebCryptoAlgorithmIdHmac, Sign, blink::WebCryptoAlgorithmParamsTypeH macParams}, 103 {blink::WebCryptoAlgorithmIdHmac, Sign, blink::WebCryptoAlgorithmParamsTypeN one},
104 {blink::WebCryptoAlgorithmIdHmac, Verify, blink::WebCryptoAlgorithmParamsTyp eHmacParams}, 104 {blink::WebCryptoAlgorithmIdHmac, Verify, blink::WebCryptoAlgorithmParamsTyp eNone},
105 {blink::WebCryptoAlgorithmIdHmac, GenerateKey, blink::WebCryptoAlgorithmPara msTypeHmacKeyParams}, 105 {blink::WebCryptoAlgorithmIdHmac, GenerateKey, blink::WebCryptoAlgorithmPara msTypeHmacKeyGenParams},
106 {blink::WebCryptoAlgorithmIdHmac, ImportKey, blink::WebCryptoAlgorithmParams TypeHmacParams}, 106 {blink::WebCryptoAlgorithmIdHmac, ImportKey, blink::WebCryptoAlgorithmParams TypeHmacImportParams},
107 107
108 // RSASSA-PKCS1-v1_5 108 // RSASSA-PKCS1-v1_5
109 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Sign, blink::WebCryptoAlgorithm ParamsTypeRsaSsaParams}, 109 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Sign, blink::WebCryptoAlgorithm ParamsTypeNone},
110 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Verify, blink::WebCryptoAlgorit hmParamsTypeRsaSsaParams}, 110 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Verify, blink::WebCryptoAlgorit hmParamsTypeNone},
111 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, GenerateKey, blink::WebCryptoAl gorithmParamsTypeRsaKeyGenParams}, 111 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, GenerateKey, blink::WebCryptoAl gorithmParamsTypeRsaHashedKeyGenParams},
112 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, ImportKey, blink::WebCryptoAlgo rithmParamsTypeNone}, 112 {blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, ImportKey, blink::WebCryptoAlgo rithmParamsTypeRsaHashedImportParams},
113 113
114 // RSAES-PKCS1-v1_5 114 // RSAES-PKCS1-v1_5
115 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, Encrypt, blink::WebCryptoAlgorit hmParamsTypeNone}, 115 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, Encrypt, blink::WebCryptoAlgorit hmParamsTypeNone},
116 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, Decrypt, blink::WebCryptoAlgorit hmParamsTypeNone}, 116 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, Decrypt, blink::WebCryptoAlgorit hmParamsTypeNone},
117 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, GenerateKey, blink::WebCryptoAlg orithmParamsTypeRsaKeyGenParams}, 117 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, GenerateKey, blink::WebCryptoAlg orithmParamsTypeRsaKeyGenParams},
118 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, ImportKey, blink::WebCryptoAlgor ithmParamsTypeNone}, 118 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, ImportKey, blink::WebCryptoAlgor ithmParamsTypeNone},
119 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, WrapKey, blink::WebCryptoAlgorit hmParamsTypeNone}, 119 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, WrapKey, blink::WebCryptoAlgorit hmParamsTypeNone},
120 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, UnwrapKey, blink::WebCryptoAlgor ithmParamsTypeNone}, 120 {blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5, UnwrapKey, blink::WebCryptoAlgor ithmParamsTypeNone},
121 121
122 // SHA-* 122 // SHA-*
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 456
457 context.add("hash"); 457 context.add("hash");
458 return parseAlgorithm(rawHash, Digest, hash, context, errorDetails); 458 return parseAlgorithm(rawHash, Digest, hash, context, errorDetails);
459 } 459 }
460 460
461 // Defined by the WebCrypto spec as: 461 // Defined by the WebCrypto spec as:
462 // 462 //
463 // dictionary HmacImportParams : Algorithm { 463 // dictionary HmacImportParams : Algorithm {
464 // AlgorithmIdentifier hash; 464 // AlgorithmIdentifier hash;
465 // }; 465 // };
466 bool parseHmacParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPara ms>& params, const ErrorContext& context, String& errorDetails) 466 bool parseHmacImportParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorit hmParams>& params, const ErrorContext& context, String& errorDetails)
467 { 467 {
468 blink::WebCryptoAlgorithm hash; 468 blink::WebCryptoAlgorithm hash;
469 if (!parseHash(raw, hash, context, errorDetails)) 469 if (!parseHash(raw, hash, context, errorDetails))
470 return false; 470 return false;
471 471
472 params = adoptPtr(new blink::WebCryptoHmacParams(hash)); 472 params = adoptPtr(new blink::WebCryptoHmacImportParams(hash));
473 return true; 473 return true;
474 } 474 }
475 475
476 // Defined by the WebCrypto spec as: 476 // Defined by the WebCrypto spec as:
477 // 477 //
478 // dictionary HmacKeyGenParams : Algorithm { 478 // dictionary HmacKeyGenParams : Algorithm {
479 // AlgorithmIdentifier hash; 479 // AlgorithmIdentifier hash;
480 // // The length (in bytes) of the key to generate. If unspecified, the 480 // // The length (in bytes) of the key to generate. If unspecified, the
481 // // recommended length will be used, which is the size of the associated hash function's block 481 // // recommended length will be used, which is the size of the associated hash function's block
482 // // size. 482 // // size.
483 // unsigned long length; 483 // unsigned long length;
484 // }; 484 // };
485 bool parseHmacKeyParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmP arams>& params, const ErrorContext& context, String& errorDetails) 485 bool parseHmacKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorit hmParams>& params, const ErrorContext& context, String& errorDetails)
486 { 486 {
487 blink::WebCryptoAlgorithm hash; 487 blink::WebCryptoAlgorithm hash;
488 if (!parseHash(raw, hash, context, errorDetails)) 488 if (!parseHash(raw, hash, context, errorDetails))
489 return false; 489 return false;
490 490
491 bool hasLength; 491 bool hasLength;
492 uint32_t length = 0; 492 uint32_t length = 0;
493 if (!getOptionalUint32(raw, "length", hasLength, length, context, errorDetai ls)) 493 if (!getOptionalUint32(raw, "length", hasLength, length, context, errorDetai ls))
494 return false; 494 return false;
495 495
496 params = adoptPtr(new blink::WebCryptoHmacKeyParams(hash, hasLength, length) ); 496 params = adoptPtr(new blink::WebCryptoHmacKeyGenParams(hash, hasLength, leng th));
497 return true; 497 return true;
498 } 498 }
499 499
500 bool parseRsaSsaParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPa rams>& params, const ErrorContext& context, String& errorDetails) 500 // Defined by the WebCrypto spec as:
501 //
502 // dictionary RsaHashedImportParams {
503 // AlgorithmIdentifier hash;
504 // };
505 bool parseRsaHashedImportParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAl gorithmParams>& params, const ErrorContext& context, String& errorDetails)
501 { 506 {
502 blink::WebCryptoAlgorithm hash; 507 blink::WebCryptoAlgorithm hash;
503 if (!parseHash(raw, hash, context, errorDetails)) 508 if (!parseHash(raw, hash, context, errorDetails))
504 return false; 509 return false;
505 510
506 params = adoptPtr(new blink::WebCryptoRsaSsaParams(hash)); 511 params = adoptPtr(new blink::WebCryptoRsaHashedImportParams(hash));
507 return true; 512 return true;
508 } 513 }
509 514
510 // Defined by the WebCrypto spec as: 515 // Defined by the WebCrypto spec as:
511 // 516 //
512 // dictionary RsaKeyGenParams : Algorithm { 517 // dictionary RsaKeyGenParams : Algorithm {
513 // unsigned long modulusLength; 518 // unsigned long modulusLength;
514 // BigInteger publicExponent; 519 // BigInteger publicExponent;
515 // }; 520 // };
521 bool parseRsaKeyGenParams(const Dictionary& raw, uint32_t& modulusLength, RefPtr <Uint8Array>& publicExponent, const ErrorContext& context, String& errorDetails)
522 {
523 if (!getUint32(raw, "modulusLength", modulusLength, context, errorDetails))
524 return false;
525
526 if (!getBigInteger(raw, "publicExponent", publicExponent, context, errorDeta ils))
527 return false;
528
529 return true;
530 }
531
516 bool parseRsaKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorith mParams>& params, const ErrorContext& context, String& errorDetails) 532 bool parseRsaKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorith mParams>& params, const ErrorContext& context, String& errorDetails)
517 { 533 {
518 uint32_t modulusLength; 534 uint32_t modulusLength;
519 if (!getUint32(raw, "modulusLength", modulusLength, context, errorDetails))
520 return false;
521
522 RefPtr<Uint8Array> publicExponent; 535 RefPtr<Uint8Array> publicExponent;
523 if (!getBigInteger(raw, "publicExponent", publicExponent, context, errorDeta ils)) 536 if (!parseRsaKeyGenParams(raw, modulusLength, publicExponent, context, error Details))
524 return false; 537 return false;
525 538
526 params = adoptPtr(new blink::WebCryptoRsaKeyGenParams(modulusLength, static_ cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteL ength())); 539 params = adoptPtr(new blink::WebCryptoRsaKeyGenParams(modulusLength, static_ cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteL ength()));
527 return true; 540 return true;
528 } 541 }
529 542
530 // Defined by the WebCrypto spec as: 543 // Defined by the WebCrypto spec as:
531 // 544 //
545 // dictionary RsaHashedKeyGenParams : RsaKeyGenParams {
546 // AlgorithmIdentifier hash;
547 // };
548 bool parseRsaHashedKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAl gorithmParams>& params, const ErrorContext& context, String& errorDetails)
549 {
550 uint32_t modulusLength;
551 RefPtr<Uint8Array> publicExponent;
552 if (!parseRsaKeyGenParams(raw, modulusLength, publicExponent, context, error Details))
553 return false;
554
555 blink::WebCryptoAlgorithm hash;
556 if (!parseHash(raw, hash, context, errorDetails))
557 return false;
558
559 params = adoptPtr(new blink::WebCryptoRsaHashedKeyGenParams(hash, modulusLen gth, static_cast<const unsigned char*>(publicExponent->baseAddress()), publicExp onent->byteLength()));
560 return true;
561 }
562
563 // Defined by the WebCrypto spec as:
564 //
532 // dictionary AesCtrParams : Algorithm { 565 // dictionary AesCtrParams : Algorithm {
533 // CryptoOperationData counter; 566 // CryptoOperationData counter;
534 // [EnforceRange] octet length; 567 // [EnforceRange] octet length;
535 // }; 568 // };
536 bool parseAesCtrParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPa rams>& params, const ErrorContext& context, String& errorDetails) 569 bool parseAesCtrParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPa rams>& params, const ErrorContext& context, String& errorDetails)
537 { 570 {
538 RefPtr<ArrayBufferView> counter; 571 RefPtr<ArrayBufferView> counter;
539 if (!getCryptoOperationData(raw, "counter", counter, context, errorDetails)) 572 if (!getCryptoOperationData(raw, "counter", counter, context, errorDetails))
540 return false; 573 return false;
541 574
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 { 617 {
585 switch (type) { 618 switch (type) {
586 case blink::WebCryptoAlgorithmParamsTypeNone: 619 case blink::WebCryptoAlgorithmParamsTypeNone:
587 return true; 620 return true;
588 case blink::WebCryptoAlgorithmParamsTypeAesCbcParams: 621 case blink::WebCryptoAlgorithmParamsTypeAesCbcParams:
589 context.add("AesCbcParams"); 622 context.add("AesCbcParams");
590 return parseAesCbcParams(raw, params, context, errorDetails); 623 return parseAesCbcParams(raw, params, context, errorDetails);
591 case blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams: 624 case blink::WebCryptoAlgorithmParamsTypeAesKeyGenParams:
592 context.add("AesKeyGenParams"); 625 context.add("AesKeyGenParams");
593 return parseAesKeyGenParams(raw, params, context, errorDetails); 626 return parseAesKeyGenParams(raw, params, context, errorDetails);
594 case blink::WebCryptoAlgorithmParamsTypeHmacParams: 627 case blink::WebCryptoAlgorithmParamsTypeHmacImportParams:
595 context.add("HmacParams"); 628 context.add("HmacImporParams");
596 return parseHmacParams(raw, params, context, errorDetails); 629 return parseHmacImportParams(raw, params, context, errorDetails);
597 case blink::WebCryptoAlgorithmParamsTypeHmacKeyParams: 630 case blink::WebCryptoAlgorithmParamsTypeHmacKeyGenParams:
598 context.add("HmacKeyParams"); 631 context.add("HmacKeyGenParams");
599 return parseHmacKeyParams(raw, params, context, errorDetails); 632 return parseHmacKeyGenParams(raw, params, context, errorDetails);
600 case blink::WebCryptoAlgorithmParamsTypeRsaSsaParams: 633 case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams:
601 context.add("RsaSSaParams"); 634 context.add("RsaHashedKeyGenParams");
602 return parseRsaSsaParams(raw, params, context, errorDetails); 635 return parseRsaHashedKeyGenParams(raw, params, context, errorDetails);
636 case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams:
637 context.add("RsaHashedImportParams");
638 return parseRsaHashedImportParams(raw, params, context, errorDetails);
603 case blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams: 639 case blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams:
604 context.add("RsaKeyGenParams"); 640 context.add("RsaKeyGenParams");
605 return parseRsaKeyGenParams(raw, params, context, errorDetails); 641 return parseRsaKeyGenParams(raw, params, context, errorDetails);
606 case blink::WebCryptoAlgorithmParamsTypeAesCtrParams: 642 case blink::WebCryptoAlgorithmParamsTypeAesCtrParams:
607 context.add("AesCtrParams"); 643 context.add("AesCtrParams");
608 return parseAesCtrParams(raw, params, context, errorDetails); 644 return parseAesCtrParams(raw, params, context, errorDetails);
609 case blink::WebCryptoAlgorithmParamsTypeAesGcmParams: 645 case blink::WebCryptoAlgorithmParamsTypeAesGcmParams:
610 context.add("AesGcmParams"); 646 context.add("AesGcmParams");
611 return parseAesGcmParams(raw, params, context, errorDetails); 647 return parseAesGcmParams(raw, params, context, errorDetails);
612 case blink::WebCryptoAlgorithmParamsTypeRsaOaepParams: 648 case blink::WebCryptoAlgorithmParamsTypeRsaOaepParams:
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 } 702 }
667 return true; 703 return true;
668 } 704 }
669 705
670 const char* algorithmIdToName(blink::WebCryptoAlgorithmId id) 706 const char* algorithmIdToName(blink::WebCryptoAlgorithmId id)
671 { 707 {
672 return AlgorithmRegistry::instance().lookupAlgorithmById(id)->algorithmName; 708 return AlgorithmRegistry::instance().lookupAlgorithmById(id)->algorithmName;
673 } 709 }
674 710
675 } // namespace WebCore 711 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/crypto/KeyPair.h ('k') | Source/modules/crypto/RsaHashedKeyAlgorithm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698