Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 246 WebCryptoAlgorithmInfo::Undefined, // Sign | 246 WebCryptoAlgorithmInfo::Undefined, // Sign |
| 247 WebCryptoAlgorithmInfo::Undefined, // Verify | 247 WebCryptoAlgorithmInfo::Undefined, // Verify |
| 248 WebCryptoAlgorithmInfo::Undefined, // Digest | 248 WebCryptoAlgorithmInfo::Undefined, // Digest |
| 249 WebCryptoAlgorithmInfo::Undefined, // GenerateKey | 249 WebCryptoAlgorithmInfo::Undefined, // GenerateKey |
| 250 WebCryptoAlgorithmParamsTypeNone, // ImportKey | 250 WebCryptoAlgorithmParamsTypeNone, // ImportKey |
| 251 WebCryptoAlgorithmParamsTypeNone, // GetKeyLength | 251 WebCryptoAlgorithmParamsTypeNone, // GetKeyLength |
| 252 WebCryptoAlgorithmParamsTypeHkdfParams, // DeriveBits | 252 WebCryptoAlgorithmParamsTypeHkdfParams, // DeriveBits |
| 253 WebCryptoAlgorithmInfo::Undefined, // WrapKey | 253 WebCryptoAlgorithmInfo::Undefined, // WrapKey |
| 254 WebCryptoAlgorithmInfo::Undefined // UnwrapKey | 254 WebCryptoAlgorithmInfo::Undefined // UnwrapKey |
| 255 } | 255 } |
| 256 }, { // Index 15 | |
| 257 "PBKDF2", { | |
| 258 WebCryptoAlgorithmInfo::Undefined, // Encrypt | |
| 259 WebCryptoAlgorithmInfo::Undefined, // Decrypt | |
| 260 WebCryptoAlgorithmInfo::Undefined, // Sign | |
| 261 WebCryptoAlgorithmInfo::Undefined, // Verify | |
| 262 WebCryptoAlgorithmInfo::Undefined, // Digest | |
| 263 WebCryptoAlgorithmInfo::Undefined, // GenerateKey | |
| 264 WebCryptoAlgorithmParamsTypeNone, // ImportKey | |
| 265 WebCryptoAlgorithmParamsTypeNone, // GetKeyLength | |
| 266 WebCryptoAlgorithmParamsTypePbkdf2Params, // DeriveBits | |
| 267 WebCryptoAlgorithmInfo::Undefined, // WrapKey | |
| 268 WebCryptoAlgorithmInfo::Undefined // UnwrapKey | |
| 269 } | |
| 256 }, | 270 }, |
| 257 }; | 271 }; |
| 258 | 272 |
| 259 // Initializing the algorithmIdToInfo table above depends on knowing the enum | 273 // Initializing the algorithmIdToInfo table above depends on knowing the enum |
| 260 // values for algorithm IDs. If those ever change, the table will need to be | 274 // values for algorithm IDs. If those ever change, the table will need to be |
| 261 // updated. | 275 // updated. |
| 262 static_assert(WebCryptoAlgorithmIdAesCbc == 0, "AES CBC id must match"); | 276 static_assert(WebCryptoAlgorithmIdAesCbc == 0, "AES CBC id must match"); |
| 263 static_assert(WebCryptoAlgorithmIdHmac == 1, "HMAC id must match"); | 277 static_assert(WebCryptoAlgorithmIdHmac == 1, "HMAC id must match"); |
| 264 static_assert(WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 == 2, "RSASSA-PKCS1-v1_5 id mu st match"); | 278 static_assert(WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 == 2, "RSASSA-PKCS1-v1_5 id mu st match"); |
| 265 static_assert(WebCryptoAlgorithmIdSha1 == 3, "SHA1 id must match"); | 279 static_assert(WebCryptoAlgorithmIdSha1 == 3, "SHA1 id must match"); |
| 266 static_assert(WebCryptoAlgorithmIdSha256 == 4, "SHA256 id must match"); | 280 static_assert(WebCryptoAlgorithmIdSha256 == 4, "SHA256 id must match"); |
| 267 static_assert(WebCryptoAlgorithmIdSha384 == 5, "SHA384 id must match"); | 281 static_assert(WebCryptoAlgorithmIdSha384 == 5, "SHA384 id must match"); |
| 268 static_assert(WebCryptoAlgorithmIdSha512 == 6, "SHA512 id must match"); | 282 static_assert(WebCryptoAlgorithmIdSha512 == 6, "SHA512 id must match"); |
| 269 static_assert(WebCryptoAlgorithmIdAesGcm == 7, "AES GCM id must match"); | 283 static_assert(WebCryptoAlgorithmIdAesGcm == 7, "AES GCM id must match"); |
| 270 static_assert(WebCryptoAlgorithmIdRsaOaep == 8, "RSA OAEP id must match"); | 284 static_assert(WebCryptoAlgorithmIdRsaOaep == 8, "RSA OAEP id must match"); |
| 271 static_assert(WebCryptoAlgorithmIdAesCtr == 9, "AES CTR id must match"); | 285 static_assert(WebCryptoAlgorithmIdAesCtr == 9, "AES CTR id must match"); |
| 272 static_assert(WebCryptoAlgorithmIdAesKw == 10, "AESKW id must match"); | 286 static_assert(WebCryptoAlgorithmIdAesKw == 10, "AESKW id must match"); |
| 273 static_assert(WebCryptoAlgorithmIdRsaPss == 11, "RSA-PSS id must match"); | 287 static_assert(WebCryptoAlgorithmIdRsaPss == 11, "RSA-PSS id must match"); |
| 274 static_assert(WebCryptoAlgorithmIdEcdsa == 12, "ECDSA id must match"); | 288 static_assert(WebCryptoAlgorithmIdEcdsa == 12, "ECDSA id must match"); |
| 275 static_assert(WebCryptoAlgorithmIdEcdh == 13, "ECDH id must match"); | 289 static_assert(WebCryptoAlgorithmIdEcdh == 13, "ECDH id must match"); |
| 276 static_assert(WebCryptoAlgorithmIdHkdf == 14, "HKDF id must match"); | 290 static_assert(WebCryptoAlgorithmIdHkdf == 14, "HKDF id must match"); |
| 277 static_assert(WebCryptoAlgorithmIdLast == 14, "last id must match"); | 291 static_assert(WebCryptoAlgorithmIdPbkdf2 == 15, "Pbkdf2 id must match"); |
| 292 static_assert(WebCryptoAlgorithmIdLast == 15, "last id must match"); | |
| 278 static_assert(10 == WebCryptoOperationLast, "the parameter mapping needs to be u pdated"); | 293 static_assert(10 == WebCryptoOperationLast, "the parameter mapping needs to be u pdated"); |
| 279 | 294 |
| 280 } // namespace | 295 } // namespace |
| 281 | 296 |
| 282 class WebCryptoAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoAlgorithm Private> { | 297 class WebCryptoAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoAlgorithm Private> { |
| 283 public: | 298 public: |
| 284 WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgor ithmParams> params) | 299 WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgor ithmParams> params) |
| 285 : id(id) | 300 : id(id) |
| 286 , params(params) | 301 , params(params) |
| 287 { | 302 { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 301 return WebCryptoAlgorithm(); | 316 return WebCryptoAlgorithm(); |
| 302 } | 317 } |
| 303 | 318 |
| 304 WebCryptoAlgorithm WebCryptoAlgorithm::adoptParamsAndCreate(WebCryptoAlgorithmId id, WebCryptoAlgorithmParams* params) | 319 WebCryptoAlgorithm WebCryptoAlgorithm::adoptParamsAndCreate(WebCryptoAlgorithmId id, WebCryptoAlgorithmParams* params) |
| 305 { | 320 { |
| 306 return WebCryptoAlgorithm(id, adoptPtr(params)); | 321 return WebCryptoAlgorithm(id, adoptPtr(params)); |
| 307 } | 322 } |
| 308 | 323 |
| 309 const WebCryptoAlgorithmInfo* WebCryptoAlgorithm::lookupAlgorithmInfo(WebCryptoA lgorithmId id) | 324 const WebCryptoAlgorithmInfo* WebCryptoAlgorithm::lookupAlgorithmInfo(WebCryptoA lgorithmId id) |
| 310 { | 325 { |
| 311 if (id < 0 || id >= WTF_ARRAY_LENGTH(algorithmIdToInfo)) | 326 const unsigned idInt = id; |
| 327 if (idInt >= WTF_ARRAY_LENGTH(algorithmIdToInfo)) | |
|
xun.sun
2015/01/13 19:16:29
I made this change because I'm seeing the followin
eroman
2015/01/14 21:12:22
Not sure why it would do that.
| |
| 312 return 0; | 328 return 0; |
| 313 return &algorithmIdToInfo[id]; | 329 return &algorithmIdToInfo[id]; |
| 314 } | 330 } |
| 315 | 331 |
| 316 bool WebCryptoAlgorithm::isNull() const | 332 bool WebCryptoAlgorithm::isNull() const |
| 317 { | 333 { |
| 318 return m_private.isNull(); | 334 return m_private.isNull(); |
| 319 } | 335 } |
| 320 | 336 |
| 321 WebCryptoAlgorithmId WebCryptoAlgorithm::id() const | 337 WebCryptoAlgorithmId WebCryptoAlgorithm::id() const |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 453 } | 469 } |
| 454 | 470 |
| 455 const WebCryptoHkdfParams* WebCryptoAlgorithm::hkdfParams() const | 471 const WebCryptoHkdfParams* WebCryptoAlgorithm::hkdfParams() const |
| 456 { | 472 { |
| 457 ASSERT(!isNull()); | 473 ASSERT(!isNull()); |
| 458 if (paramsType() == WebCryptoAlgorithmParamsTypeHkdfParams) | 474 if (paramsType() == WebCryptoAlgorithmParamsTypeHkdfParams) |
| 459 return static_cast<WebCryptoHkdfParams*>(m_private->params.get()); | 475 return static_cast<WebCryptoHkdfParams*>(m_private->params.get()); |
| 460 return 0; | 476 return 0; |
| 461 } | 477 } |
| 462 | 478 |
| 479 const WebCryptoPbkdf2Params* WebCryptoAlgorithm::pbkdf2Params() const | |
| 480 { | |
| 481 ASSERT(!isNull()); | |
| 482 if (paramsType() == WebCryptoAlgorithmParamsTypePbkdf2Params) | |
| 483 return static_cast<WebCryptoPbkdf2Params*>(m_private->params.get()); | |
| 484 return 0; | |
| 485 } | |
| 486 | |
| 463 bool WebCryptoAlgorithm::isHash(WebCryptoAlgorithmId id) | 487 bool WebCryptoAlgorithm::isHash(WebCryptoAlgorithmId id) |
| 464 { | 488 { |
| 465 switch (id) { | 489 switch (id) { |
| 466 case WebCryptoAlgorithmIdSha1: | 490 case WebCryptoAlgorithmIdSha1: |
| 467 case WebCryptoAlgorithmIdSha256: | 491 case WebCryptoAlgorithmIdSha256: |
| 468 case WebCryptoAlgorithmIdSha384: | 492 case WebCryptoAlgorithmIdSha384: |
| 469 case WebCryptoAlgorithmIdSha512: | 493 case WebCryptoAlgorithmIdSha512: |
| 470 return true; | 494 return true; |
| 471 case WebCryptoAlgorithmIdAesCbc: | 495 case WebCryptoAlgorithmIdAesCbc: |
| 472 case WebCryptoAlgorithmIdHmac: | 496 case WebCryptoAlgorithmIdHmac: |
| 473 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: | 497 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: |
| 474 case WebCryptoAlgorithmIdAesGcm: | 498 case WebCryptoAlgorithmIdAesGcm: |
| 475 case WebCryptoAlgorithmIdRsaOaep: | 499 case WebCryptoAlgorithmIdRsaOaep: |
| 476 case WebCryptoAlgorithmIdAesCtr: | 500 case WebCryptoAlgorithmIdAesCtr: |
| 477 case WebCryptoAlgorithmIdAesKw: | 501 case WebCryptoAlgorithmIdAesKw: |
| 478 case WebCryptoAlgorithmIdRsaPss: | 502 case WebCryptoAlgorithmIdRsaPss: |
| 479 case WebCryptoAlgorithmIdEcdsa: | 503 case WebCryptoAlgorithmIdEcdsa: |
| 480 case WebCryptoAlgorithmIdEcdh: | 504 case WebCryptoAlgorithmIdEcdh: |
| 481 case WebCryptoAlgorithmIdHkdf: | 505 case WebCryptoAlgorithmIdHkdf: |
| 506 case WebCryptoAlgorithmIdPbkdf2: | |
| 482 break; | 507 break; |
| 483 } | 508 } |
| 484 return false; | 509 return false; |
| 485 } | 510 } |
| 486 | 511 |
| 487 bool WebCryptoAlgorithm::isKdf(WebCryptoAlgorithmId id) | 512 bool WebCryptoAlgorithm::isKdf(WebCryptoAlgorithmId id) |
| 488 { | 513 { |
| 489 switch (id) { | 514 switch (id) { |
| 490 case WebCryptoAlgorithmIdHkdf: | 515 case WebCryptoAlgorithmIdHkdf: |
| 516 case WebCryptoAlgorithmIdPbkdf2: | |
| 491 return true; | 517 return true; |
| 492 case WebCryptoAlgorithmIdSha1: | 518 case WebCryptoAlgorithmIdSha1: |
| 493 case WebCryptoAlgorithmIdSha256: | 519 case WebCryptoAlgorithmIdSha256: |
| 494 case WebCryptoAlgorithmIdSha384: | 520 case WebCryptoAlgorithmIdSha384: |
| 495 case WebCryptoAlgorithmIdSha512: | 521 case WebCryptoAlgorithmIdSha512: |
| 496 case WebCryptoAlgorithmIdAesCbc: | 522 case WebCryptoAlgorithmIdAesCbc: |
| 497 case WebCryptoAlgorithmIdHmac: | 523 case WebCryptoAlgorithmIdHmac: |
| 498 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: | 524 case WebCryptoAlgorithmIdRsaSsaPkcs1v1_5: |
| 499 case WebCryptoAlgorithmIdAesGcm: | 525 case WebCryptoAlgorithmIdAesGcm: |
| 500 case WebCryptoAlgorithmIdRsaOaep: | 526 case WebCryptoAlgorithmIdRsaOaep: |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 512 { | 538 { |
| 513 m_private = other.m_private; | 539 m_private = other.m_private; |
| 514 } | 540 } |
| 515 | 541 |
| 516 void WebCryptoAlgorithm::reset() | 542 void WebCryptoAlgorithm::reset() |
| 517 { | 543 { |
| 518 m_private.reset(); | 544 m_private.reset(); |
| 519 } | 545 } |
| 520 | 546 |
| 521 } // namespace blink | 547 } // namespace blink |
| OLD | NEW |