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

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

Issue 170243007: [webcrypto] Make all of the crypto.subtle method failures asynchronous. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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/NormalizeAlgorithm.h ('k') | Source/modules/crypto/SubtleCrypto.cpp » ('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 14 matching lines...) Expand all
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "modules/crypto/NormalizeAlgorithm.h" 32 #include "modules/crypto/NormalizeAlgorithm.h"
33 33
34 #include "bindings/v8/Dictionary.h" 34 #include "bindings/v8/Dictionary.h"
35 #include "bindings/v8/ExceptionState.h" 35 #include "platform/CryptoResult.h"
36 #include "bindings/v8/ExceptionStatePlaceholder.h"
37 #include "core/dom/ExceptionCode.h"
38 #include "platform/NotImplemented.h" 36 #include "platform/NotImplemented.h"
39 #include "public/platform/WebCryptoAlgorithmParams.h" 37 #include "public/platform/WebCryptoAlgorithmParams.h"
38 #include "public/platform/WebString.h"
40 #include "wtf/ArrayBuffer.h" 39 #include "wtf/ArrayBuffer.h"
41 #include "wtf/ArrayBufferView.h" 40 #include "wtf/ArrayBufferView.h"
42 #include "wtf/HashMap.h" 41 #include "wtf/HashMap.h"
43 #include "wtf/MathExtras.h" 42 #include "wtf/MathExtras.h"
44 #include "wtf/Uint8Array.h" 43 #include "wtf/Uint8Array.h"
45 #include "wtf/Vector.h" 44 #include "wtf/Vector.h"
46 #include "wtf/text/StringBuilder.h" 45 #include "wtf/text/StringBuilder.h"
47 #include "wtf/text/StringHash.h" 46 #include "wtf/text/StringHash.h"
48 47
49 namespace WebCore { 48 namespace WebCore {
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 bool parseAesKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorith mParams>& params, const ErrorContext& context, String& errorDetails) 369 bool parseAesKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorith mParams>& params, const ErrorContext& context, String& errorDetails)
371 { 370 {
372 uint16_t length; 371 uint16_t length;
373 if (!getUint16(raw, "length", length, context, errorDetails)) 372 if (!getUint16(raw, "length", length, context, errorDetails))
374 return false; 373 return false;
375 374
376 params = adoptPtr(new blink::WebCryptoAesKeyGenParams(length)); 375 params = adoptPtr(new blink::WebCryptoAesKeyGenParams(length));
377 return true; 376 return true;
378 } 377 }
379 378
380 bool parseAlgorithm(const Dictionary&, AlgorithmOperation, blink::WebCryptoAlgor ithm&, ErrorContext, String&, ExceptionState&); 379 bool parseAlgorithm(const Dictionary&, AlgorithmOperation, blink::WebCryptoAlgor ithm&, ErrorContext, String&);
381 380
382 bool parseHash(const Dictionary& raw, blink::WebCryptoAlgorithm& hash, ErrorCont ext context, String& errorDetails) 381 bool parseHash(const Dictionary& raw, blink::WebCryptoAlgorithm& hash, ErrorCont ext context, String& errorDetails)
383 { 382 {
384 Dictionary rawHash; 383 Dictionary rawHash;
385 if (!raw.get("hash", rawHash)) { 384 if (!raw.get("hash", rawHash)) {
386 errorDetails = context.toString("hash", "Missing or not a dictionary"); 385 errorDetails = context.toString("hash", "Missing or not a dictionary");
387 return false; 386 return false;
388 } 387 }
389 388
390 context.add("hash"); 389 context.add("hash");
391 IgnorableExceptionState exceptionState; 390 return parseAlgorithm(rawHash, Digest, hash, context, errorDetails);
392 return parseAlgorithm(rawHash, Digest, hash, context, errorDetails, exceptio nState);
393 } 391 }
394 392
395 bool parseHmacParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPara ms>& params, const ErrorContext& context, String& errorDetails) 393 bool parseHmacParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmPara ms>& params, const ErrorContext& context, String& errorDetails)
396 { 394 {
397 blink::WebCryptoAlgorithm hash; 395 blink::WebCryptoAlgorithm hash;
398 if (!parseHash(raw, hash, context, errorDetails)) 396 if (!parseHash(raw, hash, context, errorDetails))
399 return false; 397 return false;
400 398
401 params = adoptPtr(new blink::WebCryptoHmacParams(hash)); 399 params = adoptPtr(new blink::WebCryptoHmacParams(hash));
402 return true; 400 return true;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 case blink::WebCryptoAlgorithmParamsTypeAesGcmParams: 482 case blink::WebCryptoAlgorithmParamsTypeAesGcmParams:
485 case blink::WebCryptoAlgorithmParamsTypeRsaOaepParams: 483 case blink::WebCryptoAlgorithmParamsTypeRsaOaepParams:
486 // TODO 484 // TODO
487 notImplemented(); 485 notImplemented();
488 break; 486 break;
489 } 487 }
490 ASSERT_NOT_REACHED(); 488 ASSERT_NOT_REACHED();
491 return false; 489 return false;
492 } 490 }
493 491
494 bool parseAlgorithm(const Dictionary& raw, AlgorithmOperation op, blink::WebCryp toAlgorithm& algorithm, ErrorContext context, String& errorDetails, ExceptionSta te& exceptionState) 492 bool parseAlgorithm(const Dictionary& raw, AlgorithmOperation op, blink::WebCryp toAlgorithm& algorithm, ErrorContext context, String& errorDetails)
495 { 493 {
496 context.add("Algorithm"); 494 context.add("Algorithm");
497 495
498 if (!raw.isObject()) { 496 if (!raw.isObject()) {
499 errorDetails = context.toString("Not an object"); 497 errorDetails = context.toString("Not an object");
500 exceptionState.throwTypeError(errorDetails);
501 return false; 498 return false;
502 } 499 }
503 500
504 String algorithmName; 501 String algorithmName;
505 if (!raw.get("name", algorithmName)) { 502 if (!raw.get("name", algorithmName)) {
506 errorDetails = context.toString("name", "Missing or not a string"); 503 errorDetails = context.toString("name", "Missing or not a string");
507 exceptionState.throwDOMException(NotSupportedError, errorDetails);
508 return false; 504 return false;
509 } 505 }
510 506
511 const AlgorithmInfo* info = AlgorithmRegistry::instance().lookupAlgorithmByN ame(algorithmName); 507 const AlgorithmInfo* info = AlgorithmRegistry::instance().lookupAlgorithmByN ame(algorithmName);
512 if (!info) { 508 if (!info) {
513 errorDetails = context.toString("Unrecognized algorithm name"); 509 errorDetails = context.toString("Unrecognized algorithm name");
514 exceptionState.throwDOMException(NotSupportedError, errorDetails);
515 return false; 510 return false;
516 } 511 }
517 512
518 context.add(info->algorithmName); 513 context.add(info->algorithmName);
519 514
520 if (info->paramsForOperation[op] == UnsupportedOp) { 515 if (info->paramsForOperation[op] == UnsupportedOp) {
521 errorDetails = context.toString("Unsupported operation"); 516 errorDetails = context.toString("Unsupported operation");
522 exceptionState.throwDOMException(NotSupportedError, errorDetails);
523 return false; 517 return false;
524 } 518 }
525 519
526 blink::WebCryptoAlgorithmParamsType paramsType = static_cast<blink::WebCrypt oAlgorithmParamsType>(info->paramsForOperation[op]); 520 blink::WebCryptoAlgorithmParamsType paramsType = static_cast<blink::WebCrypt oAlgorithmParamsType>(info->paramsForOperation[op]);
527 OwnPtr<blink::WebCryptoAlgorithmParams> params; 521 OwnPtr<blink::WebCryptoAlgorithmParams> params;
528 if (!parseAlgorithmParams(raw, paramsType, params, context, errorDetails)) 522 if (!parseAlgorithmParams(raw, paramsType, params, context, errorDetails))
529 return false; 523 return false;
530 524
531 algorithm = blink::WebCryptoAlgorithm(info->algorithmId, params.release()); 525 algorithm = blink::WebCryptoAlgorithm(info->algorithmId, params.release());
532 return true; 526 return true;
533 } 527 }
534 528
535 } // namespace 529 } // namespace
536 530
537 bool parseAlgorithm(const Dictionary& raw, AlgorithmOperation op, blink::WebCryp toAlgorithm& algorithm, String& errorDetails, ExceptionState& exceptionState) 531 bool parseAlgorithm(const Dictionary& raw, AlgorithmOperation op, blink::WebCryp toAlgorithm& algorithm, CryptoResult* result)
538 { 532 {
539 return parseAlgorithm(raw, op, algorithm, ErrorContext(), errorDetails, exce ptionState); 533 String errorDetails;
534 if (!parseAlgorithm(raw, op, algorithm, ErrorContext(), errorDetails)) {
535 result->completeWithError(errorDetails);
536 return false;
537 }
538 return true;
540 } 539 }
541 540
542 const char* algorithmIdToName(blink::WebCryptoAlgorithmId id) 541 const char* algorithmIdToName(blink::WebCryptoAlgorithmId id)
543 { 542 {
544 return AlgorithmRegistry::instance().lookupAlgorithmById(id)->algorithmName; 543 return AlgorithmRegistry::instance().lookupAlgorithmById(id)->algorithmName;
545 } 544 }
546 545
547 } // namespace WebCore 546 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/crypto/NormalizeAlgorithm.h ('k') | Source/modules/crypto/SubtleCrypto.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698