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

Side by Side Diff: third_party/WebKit/Source/modules/crypto/SubtleCrypto.cpp

Issue 2838603002: Added [SecureContext] to the subtle attribute (Closed)
Patch Set: Magic test starts doing differnt things out of the blue. Need to handle this properly. Avada Kedavr… Created 3 years, 8 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
« no previous file with comments | « third_party/WebKit/Source/modules/crypto/Crypto.idl ('k') | no next file » | 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 WebCryptoOperation op, 51 WebCryptoOperation op,
52 WebCryptoAlgorithm& algorithm, 52 WebCryptoAlgorithm& algorithm,
53 CryptoResult* result) { 53 CryptoResult* result) {
54 AlgorithmError error; 54 AlgorithmError error;
55 bool success = NormalizeAlgorithm(raw, op, algorithm, &error); 55 bool success = NormalizeAlgorithm(raw, op, algorithm, &error);
56 if (!success) 56 if (!success)
57 result->CompleteWithError(error.error_type, error.error_details); 57 result->CompleteWithError(error.error_type, error.error_details);
58 return success; 58 return success;
59 } 59 }
60 60
61 static bool CanAccessWebCrypto(ScriptState* script_state,
62 CryptoResult* result) {
63 String error_message;
64 if (!ExecutionContext::From(script_state)
65 ->IsSecureContext(error_message,
66 ExecutionContext::kWebCryptoSecureContextCheck)) {
67 result->CompleteWithError(kWebCryptoErrorTypeNotSupported, error_message);
68 return false;
69 }
70
71 if (!ExecutionContext::From(script_state)->IsSecureContext()) {
72 Deprecation::CountDeprecation(
73 ExecutionContext::From(script_state),
74 UseCounter::kSubtleCryptoOnlyStrictSecureContextCheckFailed);
75 }
76
77 return true;
78 }
79
80 static bool CopyStringProperty(const char* property, 61 static bool CopyStringProperty(const char* property,
81 const Dictionary& source, 62 const Dictionary& source,
82 JSONObject* destination) { 63 JSONObject* destination) {
83 String value; 64 String value;
84 if (!DictionaryHelper::Get(source, property, value)) 65 if (!DictionaryHelper::Get(source, property, value))
85 return false; 66 return false;
86 destination->SetString(property, value); 67 destination->SetString(property, value);
87 return true; 68 return true;
88 } 69 }
89 70
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 ScriptPromise SubtleCrypto::encrypt(ScriptState* script_state, 164 ScriptPromise SubtleCrypto::encrypt(ScriptState* script_state,
184 const AlgorithmIdentifier& raw_algorithm, 165 const AlgorithmIdentifier& raw_algorithm,
185 CryptoKey* key, 166 CryptoKey* key,
186 const BufferSource& raw_data) { 167 const BufferSource& raw_data) {
187 // Method described by: 168 // Method described by:
188 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-encry pt 169 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-encry pt
189 170
190 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 171 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
191 ScriptPromise promise = result->Promise(); 172 ScriptPromise promise = result->Promise();
192 173
193 if (!CanAccessWebCrypto(script_state, result))
194 return promise;
195
196 // 14.3.1.2: Let data be the result of getting a copy of the bytes held by 174 // 14.3.1.2: Let data be the result of getting a copy of the bytes held by
197 // the data parameter passed to the encrypt method. 175 // the data parameter passed to the encrypt method.
198 WebVector<uint8_t> data = CopyBytes(raw_data); 176 WebVector<uint8_t> data = CopyBytes(raw_data);
199 177
200 // 14.3.1.3: Let normalizedAlgorithm be the result of normalizing an 178 // 14.3.1.3: Let normalizedAlgorithm be the result of normalizing an
201 // algorithm, with alg set to algorithm and op set to "encrypt". 179 // algorithm, with alg set to algorithm and op set to "encrypt".
202 WebCryptoAlgorithm normalized_algorithm; 180 WebCryptoAlgorithm normalized_algorithm;
203 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationEncrypt, 181 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationEncrypt,
204 normalized_algorithm, result)) 182 normalized_algorithm, result))
205 return promise; 183 return promise;
(...skipping 18 matching lines...) Expand all
224 ScriptPromise SubtleCrypto::decrypt(ScriptState* script_state, 202 ScriptPromise SubtleCrypto::decrypt(ScriptState* script_state,
225 const AlgorithmIdentifier& raw_algorithm, 203 const AlgorithmIdentifier& raw_algorithm,
226 CryptoKey* key, 204 CryptoKey* key,
227 const BufferSource& raw_data) { 205 const BufferSource& raw_data) {
228 // Method described by: 206 // Method described by:
229 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-decry pt 207 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-decry pt
230 208
231 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 209 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
232 ScriptPromise promise = result->Promise(); 210 ScriptPromise promise = result->Promise();
233 211
234 if (!CanAccessWebCrypto(script_state, result))
235 return promise;
236
237 // 14.3.2.2: Let data be the result of getting a copy of the bytes held by 212 // 14.3.2.2: Let data be the result of getting a copy of the bytes held by
238 // the data parameter passed to the decrypt method. 213 // the data parameter passed to the decrypt method.
239 WebVector<uint8_t> data = CopyBytes(raw_data); 214 WebVector<uint8_t> data = CopyBytes(raw_data);
240 215
241 // 14.3.2.3: Let normalizedAlgorithm be the result of normalizing an 216 // 14.3.2.3: Let normalizedAlgorithm be the result of normalizing an
242 // algorithm, with alg set to algorithm and op set to "decrypt". 217 // algorithm, with alg set to algorithm and op set to "decrypt".
243 WebCryptoAlgorithm normalized_algorithm; 218 WebCryptoAlgorithm normalized_algorithm;
244 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDecrypt, 219 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDecrypt,
245 normalized_algorithm, result)) 220 normalized_algorithm, result))
246 return promise; 221 return promise;
(...skipping 18 matching lines...) Expand all
265 ScriptPromise SubtleCrypto::sign(ScriptState* script_state, 240 ScriptPromise SubtleCrypto::sign(ScriptState* script_state,
266 const AlgorithmIdentifier& raw_algorithm, 241 const AlgorithmIdentifier& raw_algorithm,
267 CryptoKey* key, 242 CryptoKey* key,
268 const BufferSource& raw_data) { 243 const BufferSource& raw_data) {
269 // Method described by: 244 // Method described by:
270 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-sign 245 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-sign
271 246
272 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 247 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
273 ScriptPromise promise = result->Promise(); 248 ScriptPromise promise = result->Promise();
274 249
275 if (!CanAccessWebCrypto(script_state, result))
276 return promise;
277
278 // 14.3.3.2: Let data be the result of getting a copy of the bytes held by 250 // 14.3.3.2: Let data be the result of getting a copy of the bytes held by
279 // the data parameter passed to the sign method. 251 // the data parameter passed to the sign method.
280 WebVector<uint8_t> data = CopyBytes(raw_data); 252 WebVector<uint8_t> data = CopyBytes(raw_data);
281 253
282 // 14.3.3.3: Let normalizedAlgorithm be the result of normalizing an 254 // 14.3.3.3: Let normalizedAlgorithm be the result of normalizing an
283 // algorithm, with alg set to algorithm and op set to "sign". 255 // algorithm, with alg set to algorithm and op set to "sign".
284 WebCryptoAlgorithm normalized_algorithm; 256 WebCryptoAlgorithm normalized_algorithm;
285 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationSign, 257 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationSign,
286 normalized_algorithm, result)) 258 normalized_algorithm, result))
287 return promise; 259 return promise;
(...skipping 20 matching lines...) Expand all
308 const AlgorithmIdentifier& raw_algorithm, 280 const AlgorithmIdentifier& raw_algorithm,
309 CryptoKey* key, 281 CryptoKey* key,
310 const BufferSource& raw_signature, 282 const BufferSource& raw_signature,
311 const BufferSource& raw_data) { 283 const BufferSource& raw_data) {
312 // Method described by: 284 // Method described by:
313 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-verify 285 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-verify
314 286
315 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 287 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
316 ScriptPromise promise = result->Promise(); 288 ScriptPromise promise = result->Promise();
317 289
318 if (!CanAccessWebCrypto(script_state, result))
319 return promise;
320
321 // 14.3.4.2: Let signature be the result of getting a copy of the bytes 290 // 14.3.4.2: Let signature be the result of getting a copy of the bytes
322 // held by the signature parameter passed to the verify method. 291 // held by the signature parameter passed to the verify method.
323 WebVector<uint8_t> signature = CopyBytes(raw_signature); 292 WebVector<uint8_t> signature = CopyBytes(raw_signature);
324 293
325 // 14.3.4.3: Let data be the result of getting a copy of the bytes held by 294 // 14.3.4.3: Let data be the result of getting a copy of the bytes held by
326 // the data parameter passed to the verify method. 295 // the data parameter passed to the verify method.
327 WebVector<uint8_t> data = CopyBytes(raw_data); 296 WebVector<uint8_t> data = CopyBytes(raw_data);
328 297
329 // 14.3.4.4: Let normalizedAlgorithm be the result of normalizing an 298 // 14.3.4.4: Let normalizedAlgorithm be the result of normalizing an
330 // algorithm, with alg set to algorithm and op set to "verify". 299 // algorithm, with alg set to algorithm and op set to "verify".
(...skipping 22 matching lines...) Expand all
353 322
354 ScriptPromise SubtleCrypto::digest(ScriptState* script_state, 323 ScriptPromise SubtleCrypto::digest(ScriptState* script_state,
355 const AlgorithmIdentifier& raw_algorithm, 324 const AlgorithmIdentifier& raw_algorithm,
356 const BufferSource& raw_data) { 325 const BufferSource& raw_data) {
357 // Method described by: 326 // Method described by:
358 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-digest 327 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-digest
359 328
360 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 329 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
361 ScriptPromise promise = result->Promise(); 330 ScriptPromise promise = result->Promise();
362 331
363 if (!CanAccessWebCrypto(script_state, result))
364 return promise;
365
366 // 14.3.5.2: Let data be the result of getting a copy of the bytes held 332 // 14.3.5.2: Let data be the result of getting a copy of the bytes held
367 // by the data parameter passed to the digest method. 333 // by the data parameter passed to the digest method.
368 WebVector<uint8_t> data = CopyBytes(raw_data); 334 WebVector<uint8_t> data = CopyBytes(raw_data);
369 335
370 // 14.3.5.3: Let normalizedAlgorithm be the result of normalizing an 336 // 14.3.5.3: Let normalizedAlgorithm be the result of normalizing an
371 // algorithm, with alg set to algorithm and op set to "digest". 337 // algorithm, with alg set to algorithm and op set to "digest".
372 WebCryptoAlgorithm normalized_algorithm; 338 WebCryptoAlgorithm normalized_algorithm;
373 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDigest, 339 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDigest,
374 normalized_algorithm, result)) 340 normalized_algorithm, result))
375 return promise; 341 return promise;
376 342
377 HistogramAlgorithm(ExecutionContext::From(script_state), 343 HistogramAlgorithm(ExecutionContext::From(script_state),
378 normalized_algorithm); 344 normalized_algorithm);
379 Platform::Current()->Crypto()->Digest(normalized_algorithm, std::move(data), 345 Platform::Current()->Crypto()->Digest(normalized_algorithm, std::move(data),
380 result->Result()); 346 result->Result());
381 return promise; 347 return promise;
382 } 348 }
383 349
384 ScriptPromise SubtleCrypto::generateKey( 350 ScriptPromise SubtleCrypto::generateKey(
385 ScriptState* script_state, 351 ScriptState* script_state,
386 const AlgorithmIdentifier& raw_algorithm, 352 const AlgorithmIdentifier& raw_algorithm,
387 bool extractable, 353 bool extractable,
388 const Vector<String>& raw_key_usages) { 354 const Vector<String>& raw_key_usages) {
389 // Method described by: 355 // Method described by:
390 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-generateK ey 356 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-generateK ey
391 357
392 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 358 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
393 ScriptPromise promise = result->Promise(); 359 ScriptPromise promise = result->Promise();
394 360
395 if (!CanAccessWebCrypto(script_state, result))
396 return promise;
397
398 WebCryptoKeyUsageMask key_usages; 361 WebCryptoKeyUsageMask key_usages;
399 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result)) 362 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result))
400 return promise; 363 return promise;
401 364
402 // 14.3.6.2: Let normalizedAlgorithm be the result of normalizing an 365 // 14.3.6.2: Let normalizedAlgorithm be the result of normalizing an
403 // algorithm, with alg set to algorithm and op set to 366 // algorithm, with alg set to algorithm and op set to
404 // "generateKey". 367 // "generateKey".
405 WebCryptoAlgorithm normalized_algorithm; 368 WebCryptoAlgorithm normalized_algorithm;
406 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationGenerateKey, 369 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationGenerateKey,
407 normalized_algorithm, result)) 370 normalized_algorithm, result))
(...skipping 16 matching lines...) Expand all
424 const ArrayBufferOrArrayBufferViewOrDictionary& raw_key_data, 387 const ArrayBufferOrArrayBufferViewOrDictionary& raw_key_data,
425 const AlgorithmIdentifier& raw_algorithm, 388 const AlgorithmIdentifier& raw_algorithm,
426 bool extractable, 389 bool extractable,
427 const Vector<String>& raw_key_usages) { 390 const Vector<String>& raw_key_usages) {
428 // Method described by: 391 // Method described by:
429 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-importKey 392 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-importKey
430 393
431 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 394 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
432 ScriptPromise promise = result->Promise(); 395 ScriptPromise promise = result->Promise();
433 396
434 if (!CanAccessWebCrypto(script_state, result))
435 return promise;
436
437 WebCryptoKeyFormat format; 397 WebCryptoKeyFormat format;
438 if (!CryptoKey::ParseFormat(raw_format, format, result)) 398 if (!CryptoKey::ParseFormat(raw_format, format, result))
439 return promise; 399 return promise;
440 400
441 WebCryptoKeyUsageMask key_usages; 401 WebCryptoKeyUsageMask key_usages;
442 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result)) 402 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result))
443 return promise; 403 return promise;
444 404
445 // In the case of JWK keyData will hold the UTF8-encoded JSON for the 405 // In the case of JWK keyData will hold the UTF8-encoded JSON for the
446 // JsonWebKey, otherwise it holds a copy of the BufferSource. 406 // JsonWebKey, otherwise it holds a copy of the BufferSource.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 468
509 ScriptPromise SubtleCrypto::exportKey(ScriptState* script_state, 469 ScriptPromise SubtleCrypto::exportKey(ScriptState* script_state,
510 const String& raw_format, 470 const String& raw_format,
511 CryptoKey* key) { 471 CryptoKey* key) {
512 // Method described by: 472 // Method described by:
513 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-expor tKey 473 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-expor tKey
514 474
515 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 475 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
516 ScriptPromise promise = result->Promise(); 476 ScriptPromise promise = result->Promise();
517 477
518 if (!CanAccessWebCrypto(script_state, result))
519 return promise;
520
521 WebCryptoKeyFormat format; 478 WebCryptoKeyFormat format;
522 if (!CryptoKey::ParseFormat(raw_format, format, result)) 479 if (!CryptoKey::ParseFormat(raw_format, format, result))
523 return promise; 480 return promise;
524 481
525 // 14.3.10.6: If the [[extractable]] internal slot of key is false, then 482 // 14.3.10.6: If the [[extractable]] internal slot of key is false, then
526 // throw an InvalidAccessError. 483 // throw an InvalidAccessError.
527 if (!key->extractable()) { 484 if (!key->extractable()) {
528 result->CompleteWithError(kWebCryptoErrorTypeInvalidAccess, 485 result->CompleteWithError(kWebCryptoErrorTypeInvalidAccess,
529 "key is not extractable"); 486 "key is not extractable");
530 return promise; 487 return promise;
(...skipping 10 matching lines...) Expand all
541 const String& raw_format, 498 const String& raw_format,
542 CryptoKey* key, 499 CryptoKey* key,
543 CryptoKey* wrapping_key, 500 CryptoKey* wrapping_key,
544 const AlgorithmIdentifier& raw_wrap_algorithm) { 501 const AlgorithmIdentifier& raw_wrap_algorithm) {
545 // Method described by: 502 // Method described by:
546 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-wrapKey 503 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-wrapKey
547 504
548 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 505 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
549 ScriptPromise promise = result->Promise(); 506 ScriptPromise promise = result->Promise();
550 507
551 if (!CanAccessWebCrypto(script_state, result))
552 return promise;
553
554 WebCryptoKeyFormat format; 508 WebCryptoKeyFormat format;
555 if (!CryptoKey::ParseFormat(raw_format, format, result)) 509 if (!CryptoKey::ParseFormat(raw_format, format, result))
556 return promise; 510 return promise;
557 511
558 // 14.3.11.2: Let normalizedAlgorithm be the result of normalizing an 512 // 14.3.11.2: Let normalizedAlgorithm be the result of normalizing an
559 // algorithm, with alg set to algorithm and op set to "wrapKey". 513 // algorithm, with alg set to algorithm and op set to "wrapKey".
560 // 514 //
561 // 14.3.11.3: If an error occurred, let normalizedAlgorithm be the result 515 // 14.3.11.3: If an error occurred, let normalizedAlgorithm be the result
562 // of normalizing an algorithm, with alg set to algorithm and op 516 // of normalizing an algorithm, with alg set to algorithm and op
563 // set to "encrypt". 517 // set to "encrypt".
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 const AlgorithmIdentifier& raw_unwrap_algorithm, 560 const AlgorithmIdentifier& raw_unwrap_algorithm,
607 const AlgorithmIdentifier& raw_unwrapped_key_algorithm, 561 const AlgorithmIdentifier& raw_unwrapped_key_algorithm,
608 bool extractable, 562 bool extractable,
609 const Vector<String>& raw_key_usages) { 563 const Vector<String>& raw_key_usages) {
610 // Method described by: 564 // Method described by:
611 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-unwrapKey 565 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-unwrapKey
612 566
613 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 567 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
614 ScriptPromise promise = result->Promise(); 568 ScriptPromise promise = result->Promise();
615 569
616 if (!CanAccessWebCrypto(script_state, result))
617 return promise;
618
619 WebCryptoKeyFormat format; 570 WebCryptoKeyFormat format;
620 if (!CryptoKey::ParseFormat(raw_format, format, result)) 571 if (!CryptoKey::ParseFormat(raw_format, format, result))
621 return promise; 572 return promise;
622 573
623 WebCryptoKeyUsageMask key_usages; 574 WebCryptoKeyUsageMask key_usages;
624 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result)) 575 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result))
625 return promise; 576 return promise;
626 577
627 // 14.3.12.2: Let wrappedKey be the result of getting a copy of the bytes 578 // 14.3.12.2: Let wrappedKey be the result of getting a copy of the bytes
628 // held by the wrappedKey parameter passed to the unwrapKey 579 // held by the wrappedKey parameter passed to the unwrapKey
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 ScriptPromise SubtleCrypto::deriveBits(ScriptState* script_state, 629 ScriptPromise SubtleCrypto::deriveBits(ScriptState* script_state,
679 const AlgorithmIdentifier& raw_algorithm, 630 const AlgorithmIdentifier& raw_algorithm,
680 CryptoKey* base_key, 631 CryptoKey* base_key,
681 unsigned length_bits) { 632 unsigned length_bits) {
682 // Method described by: 633 // Method described by:
683 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-deriv eBits 634 // https://w3c.github.io/webcrypto/Overview.html#dfn-SubtleCrypto-method-deriv eBits
684 635
685 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 636 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
686 ScriptPromise promise = result->Promise(); 637 ScriptPromise promise = result->Promise();
687 638
688 if (!CanAccessWebCrypto(script_state, result))
689 return promise;
690
691 // 14.3.8.2: Let normalizedAlgorithm be the result of normalizing an 639 // 14.3.8.2: Let normalizedAlgorithm be the result of normalizing an
692 // algorithm, with alg set to algorithm and op set to 640 // algorithm, with alg set to algorithm and op set to
693 // "deriveBits". 641 // "deriveBits".
694 WebCryptoAlgorithm normalized_algorithm; 642 WebCryptoAlgorithm normalized_algorithm;
695 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDeriveBits, 643 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDeriveBits,
696 normalized_algorithm, result)) 644 normalized_algorithm, result))
697 return promise; 645 return promise;
698 646
699 // 14.3.8.7: If the name member of normalizedAlgorithm is not equal to the 647 // 14.3.8.7: If the name member of normalizedAlgorithm is not equal to the
700 // name attribute of the [[algorithm]] internal slot of baseKey 648 // name attribute of the [[algorithm]] internal slot of baseKey
(...skipping 18 matching lines...) Expand all
719 CryptoKey* base_key, 667 CryptoKey* base_key,
720 const AlgorithmIdentifier& raw_derived_key_type, 668 const AlgorithmIdentifier& raw_derived_key_type,
721 bool extractable, 669 bool extractable,
722 const Vector<String>& raw_key_usages) { 670 const Vector<String>& raw_key_usages) {
723 // Method described by: 671 // Method described by:
724 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey 672 // https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey
725 673
726 CryptoResultImpl* result = CryptoResultImpl::Create(script_state); 674 CryptoResultImpl* result = CryptoResultImpl::Create(script_state);
727 ScriptPromise promise = result->Promise(); 675 ScriptPromise promise = result->Promise();
728 676
729 if (!CanAccessWebCrypto(script_state, result))
730 return promise;
731
732 WebCryptoKeyUsageMask key_usages; 677 WebCryptoKeyUsageMask key_usages;
733 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result)) 678 if (!CryptoKey::ParseUsageMask(raw_key_usages, key_usages, result))
734 return promise; 679 return promise;
735 680
736 // 14.3.7.2: Let normalizedAlgorithm be the result of normalizing an 681 // 14.3.7.2: Let normalizedAlgorithm be the result of normalizing an
737 // algorithm, with alg set to algorithm and op set to 682 // algorithm, with alg set to algorithm and op set to
738 // "deriveBits". 683 // "deriveBits".
739 WebCryptoAlgorithm normalized_algorithm; 684 WebCryptoAlgorithm normalized_algorithm;
740 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDeriveBits, 685 if (!ParseAlgorithm(raw_algorithm, kWebCryptoOperationDeriveBits,
741 normalized_algorithm, result)) 686 normalized_algorithm, result))
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 normalized_algorithm, base_key->Key()); 725 normalized_algorithm, base_key->Key());
781 HistogramAlgorithm(ExecutionContext::From(script_state), 726 HistogramAlgorithm(ExecutionContext::From(script_state),
782 normalized_derived_key_algorithm); 727 normalized_derived_key_algorithm);
783 Platform::Current()->Crypto()->DeriveKey( 728 Platform::Current()->Crypto()->DeriveKey(
784 normalized_algorithm, base_key->Key(), normalized_derived_key_algorithm, 729 normalized_algorithm, base_key->Key(), normalized_derived_key_algorithm,
785 key_length_algorithm, extractable, key_usages, result->Result()); 730 key_length_algorithm, extractable, key_usages, result->Result());
786 return promise; 731 return promise;
787 } 732 }
788 733
789 } // namespace blink 734 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/crypto/Crypto.idl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698