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

Side by Side Diff: Source/platform/exported/WebCryptoAlgorithm.cpp

Issue 789733009: Implement HKDF for WebCrypto (blink-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: move ASSERT(), add break Created 5 years, 11 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 /* 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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 WebCryptoAlgorithmInfo::Undefined, // Sign 232 WebCryptoAlgorithmInfo::Undefined, // Sign
233 WebCryptoAlgorithmInfo::Undefined, // Verify 233 WebCryptoAlgorithmInfo::Undefined, // Verify
234 WebCryptoAlgorithmInfo::Undefined, // Digest 234 WebCryptoAlgorithmInfo::Undefined, // Digest
235 WebCryptoAlgorithmParamsTypeEcKeyGenParams, // GenerateKey 235 WebCryptoAlgorithmParamsTypeEcKeyGenParams, // GenerateKey
236 WebCryptoAlgorithmParamsTypeEcKeyImportParams, // ImportKey 236 WebCryptoAlgorithmParamsTypeEcKeyImportParams, // ImportKey
237 WebCryptoAlgorithmInfo::Undefined, // GetKeyLength 237 WebCryptoAlgorithmInfo::Undefined, // GetKeyLength
238 WebCryptoAlgorithmParamsTypeEcdhKeyDeriveParams, // DeriveBits 238 WebCryptoAlgorithmParamsTypeEcdhKeyDeriveParams, // DeriveBits
239 WebCryptoAlgorithmParamsTypeNone, // WrapKey 239 WebCryptoAlgorithmParamsTypeNone, // WrapKey
240 WebCryptoAlgorithmParamsTypeNone // UnwrapKey 240 WebCryptoAlgorithmParamsTypeNone // UnwrapKey
241 } 241 }
242 }, { // Index 14
243 "HKDF", {
244 WebCryptoAlgorithmInfo::Undefined, // Encrypt
245 WebCryptoAlgorithmInfo::Undefined, // Decrypt
246 WebCryptoAlgorithmInfo::Undefined, // Sign
247 WebCryptoAlgorithmInfo::Undefined, // Verify
248 WebCryptoAlgorithmInfo::Undefined, // Digest
249 WebCryptoAlgorithmInfo::Undefined, // GenerateKey
250 WebCryptoAlgorithmParamsTypeNone, // ImportKey
251 WebCryptoAlgorithmParamsTypeNone, // GetKeyLength
252 WebCryptoAlgorithmParamsTypeHkdfParams, // DeriveBits
253 WebCryptoAlgorithmInfo::Undefined, // WrapKey
254 WebCryptoAlgorithmInfo::Undefined // UnwrapKey
255 }
242 }, 256 },
243 }; 257 };
244 258
245 // Initializing the algorithmIdToInfo table above depends on knowing the enum 259 // Initializing the algorithmIdToInfo table above depends on knowing the enum
246 // values for algorithm IDs. If those ever change, the table will need to be 260 // values for algorithm IDs. If those ever change, the table will need to be
247 // updated. 261 // updated.
248 static_assert(WebCryptoAlgorithmIdAesCbc == 0, "AES CBC id must match"); 262 static_assert(WebCryptoAlgorithmIdAesCbc == 0, "AES CBC id must match");
249 static_assert(WebCryptoAlgorithmIdHmac == 1, "HMAC id must match"); 263 static_assert(WebCryptoAlgorithmIdHmac == 1, "HMAC id must match");
250 static_assert(WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 == 2, "RSASSA-PKCS1-v1_5 id mu st match"); 264 static_assert(WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 == 2, "RSASSA-PKCS1-v1_5 id mu st match");
251 static_assert(WebCryptoAlgorithmIdSha1 == 3, "SHA1 id must match"); 265 static_assert(WebCryptoAlgorithmIdSha1 == 3, "SHA1 id must match");
252 static_assert(WebCryptoAlgorithmIdSha256 == 4, "SHA256 id must match"); 266 static_assert(WebCryptoAlgorithmIdSha256 == 4, "SHA256 id must match");
253 static_assert(WebCryptoAlgorithmIdSha384 == 5, "SHA384 id must match"); 267 static_assert(WebCryptoAlgorithmIdSha384 == 5, "SHA384 id must match");
254 static_assert(WebCryptoAlgorithmIdSha512 == 6, "SHA512 id must match"); 268 static_assert(WebCryptoAlgorithmIdSha512 == 6, "SHA512 id must match");
255 static_assert(WebCryptoAlgorithmIdAesGcm == 7, "AES GCM id must match"); 269 static_assert(WebCryptoAlgorithmIdAesGcm == 7, "AES GCM id must match");
256 static_assert(WebCryptoAlgorithmIdRsaOaep == 8, "RSA OAEP id must match"); 270 static_assert(WebCryptoAlgorithmIdRsaOaep == 8, "RSA OAEP id must match");
257 static_assert(WebCryptoAlgorithmIdAesCtr == 9, "AES CTR id must match"); 271 static_assert(WebCryptoAlgorithmIdAesCtr == 9, "AES CTR id must match");
258 static_assert(WebCryptoAlgorithmIdAesKw == 10, "AESKW id must match"); 272 static_assert(WebCryptoAlgorithmIdAesKw == 10, "AESKW id must match");
259 static_assert(WebCryptoAlgorithmIdRsaPss == 11, "RSA-PSS id must match"); 273 static_assert(WebCryptoAlgorithmIdRsaPss == 11, "RSA-PSS id must match");
260 static_assert(WebCryptoAlgorithmIdEcdsa == 12, "ECDSA id must match"); 274 static_assert(WebCryptoAlgorithmIdEcdsa == 12, "ECDSA id must match");
261 static_assert(WebCryptoAlgorithmIdEcdh == 13, "ECDH id must match"); 275 static_assert(WebCryptoAlgorithmIdEcdh == 13, "ECDH id must match");
262 static_assert(WebCryptoAlgorithmIdLast == 13, "last id must match"); 276 static_assert(WebCryptoAlgorithmIdHkdf == 14, "HKDF id must match");
277 static_assert(WebCryptoAlgorithmIdLast == 14, "last id must match");
263 static_assert(10 == WebCryptoOperationLast, "the parameter mapping needs to be u pdated"); 278 static_assert(10 == WebCryptoOperationLast, "the parameter mapping needs to be u pdated");
264 279
265 } // namespace 280 } // namespace
266 281
267 class WebCryptoAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoAlgorithm Private> { 282 class WebCryptoAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoAlgorithm Private> {
268 public: 283 public:
269 WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgor ithmParams> params) 284 WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgor ithmParams> params)
270 : id(id) 285 : id(id)
271 , params(params) 286 , params(params)
272 { 287 {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 } 445 }
431 446
432 const WebCryptoAesDerivedKeyParams* WebCryptoAlgorithm::aesDerivedKeyParams() co nst 447 const WebCryptoAesDerivedKeyParams* WebCryptoAlgorithm::aesDerivedKeyParams() co nst
433 { 448 {
434 ASSERT(!isNull()); 449 ASSERT(!isNull());
435 if (paramsType() == WebCryptoAlgorithmParamsTypeAesDerivedKeyParams) 450 if (paramsType() == WebCryptoAlgorithmParamsTypeAesDerivedKeyParams)
436 return static_cast<WebCryptoAesDerivedKeyParams*>(m_private->params.get( )); 451 return static_cast<WebCryptoAesDerivedKeyParams*>(m_private->params.get( ));
437 return 0; 452 return 0;
438 } 453 }
439 454
455 const WebCryptoHkdfParams* WebCryptoAlgorithm::hkdfParams() const
456 {
457 ASSERT(!isNull());
458 if (paramsType() == WebCryptoAlgorithmParamsTypeHkdfParams)
459 return static_cast<WebCryptoHkdfParams*>(m_private->params.get());
460 return 0;
461 }
462
440 bool WebCryptoAlgorithm::isHash(WebCryptoAlgorithmId id) 463 bool WebCryptoAlgorithm::isHash(WebCryptoAlgorithmId id)
441 { 464 {
442 switch (id) { 465 switch (id) {
443 case WebCryptoAlgorithmIdSha1: 466 case WebCryptoAlgorithmIdSha1:
444 case WebCryptoAlgorithmIdSha256: 467 case WebCryptoAlgorithmIdSha256:
445 case WebCryptoAlgorithmIdSha384: 468 case WebCryptoAlgorithmIdSha384:
446 case WebCryptoAlgorithmIdSha512: 469 case WebCryptoAlgorithmIdSha512:
447 return true; 470 return true;
448 case WebCryptoAlgorithmIdAesCbc: 471 case WebCryptoAlgorithmIdAesCbc:
449 case WebCryptoAlgorithmIdHmac: 472 case WebCryptoAlgorithmIdHmac:
450 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: 473 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5:
451 case WebCryptoAlgorithmIdAesGcm: 474 case WebCryptoAlgorithmIdAesGcm:
452 case WebCryptoAlgorithmIdRsaOaep: 475 case WebCryptoAlgorithmIdRsaOaep:
453 case WebCryptoAlgorithmIdAesCtr: 476 case WebCryptoAlgorithmIdAesCtr:
454 case WebCryptoAlgorithmIdAesKw: 477 case WebCryptoAlgorithmIdAesKw:
455 case WebCryptoAlgorithmIdRsaPss: 478 case WebCryptoAlgorithmIdRsaPss:
456 case WebCryptoAlgorithmIdEcdsa: 479 case WebCryptoAlgorithmIdEcdsa:
457 case WebCryptoAlgorithmIdEcdh: 480 case WebCryptoAlgorithmIdEcdh:
481 case WebCryptoAlgorithmIdHkdf:
482 break;
483 }
484 return false;
485 }
486
487 bool WebCryptoAlgorithm::isKdf(WebCryptoAlgorithmId id)
488 {
489 switch (id) {
490 case WebCryptoAlgorithmIdHkdf:
491 return true;
492 case WebCryptoAlgorithmIdSha1:
493 case WebCryptoAlgorithmIdSha256:
494 case WebCryptoAlgorithmIdSha384:
495 case WebCryptoAlgorithmIdSha512:
496 case WebCryptoAlgorithmIdAesCbc:
497 case WebCryptoAlgorithmIdHmac:
498 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5:
499 case WebCryptoAlgorithmIdAesGcm:
500 case WebCryptoAlgorithmIdRsaOaep:
501 case WebCryptoAlgorithmIdAesCtr:
502 case WebCryptoAlgorithmIdAesKw:
503 case WebCryptoAlgorithmIdRsaPss:
504 case WebCryptoAlgorithmIdEcdsa:
505 case WebCryptoAlgorithmIdEcdh:
458 break; 506 break;
459 } 507 }
460 return false; 508 return false;
461 } 509 }
462 510
463 void WebCryptoAlgorithm::assign(const WebCryptoAlgorithm& other) 511 void WebCryptoAlgorithm::assign(const WebCryptoAlgorithm& other)
464 { 512 {
465 m_private = other.m_private; 513 m_private = other.m_private;
466 } 514 }
467 515
468 void WebCryptoAlgorithm::reset() 516 void WebCryptoAlgorithm::reset()
469 { 517 {
470 m_private.reset(); 518 m_private.reset();
471 } 519 }
472 520
473 } // namespace blink 521 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/crypto/NormalizeAlgorithm.cpp ('k') | Source/platform/exported/WebCryptoKeyAlgorithm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698