OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/cert/internal/signature_algorithm.h" | 5 #include "net/cert/internal/signature_algorithm.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/numerics/safe_math.h" | 9 #include "base/numerics/safe_math.h" |
10 #include "net/der/input.h" | 10 #include "net/der/input.h" |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 // } | 333 // } |
334 WARN_UNUSED_RESULT bool ParseHashAlgorithm(const der::Input input, | 334 WARN_UNUSED_RESULT bool ParseHashAlgorithm(const der::Input input, |
335 DigestAlgorithm* out) { | 335 DigestAlgorithm* out) { |
336 der::Input oid; | 336 der::Input oid; |
337 der::Input params; | 337 der::Input params; |
338 if (!ParseAlgorithmIdentifier(input, &oid, ¶ms)) | 338 if (!ParseAlgorithmIdentifier(input, &oid, ¶ms)) |
339 return false; | 339 return false; |
340 | 340 |
341 DigestAlgorithm hash; | 341 DigestAlgorithm hash; |
342 | 342 |
343 if (oid.Equals(der::Input(kOidSha1))) { | 343 if (oid == der::Input(kOidSha1)) { |
344 hash = DigestAlgorithm::Sha1; | 344 hash = DigestAlgorithm::Sha1; |
345 } else if (oid.Equals(der::Input(kOidSha256))) { | 345 } else if (oid == der::Input(kOidSha256)) { |
346 hash = DigestAlgorithm::Sha256; | 346 hash = DigestAlgorithm::Sha256; |
347 } else if (oid.Equals(der::Input(kOidSha384))) { | 347 } else if (oid == der::Input(kOidSha384)) { |
348 hash = DigestAlgorithm::Sha384; | 348 hash = DigestAlgorithm::Sha384; |
349 } else if (oid.Equals(der::Input(kOidSha512))) { | 349 } else if (oid == der::Input(kOidSha512)) { |
350 hash = DigestAlgorithm::Sha512; | 350 hash = DigestAlgorithm::Sha512; |
351 } else { | 351 } else { |
352 // Unsupported digest algorithm. | 352 // Unsupported digest algorithm. |
353 return false; | 353 return false; |
354 } | 354 } |
355 | 355 |
356 // From RFC 5912: "PARAMS TYPE NULL ARE preferredPresent". Which is to say | 356 // From RFC 5912: "PARAMS TYPE NULL ARE preferredPresent". Which is to say |
357 // the can either be absent, or NULL. | 357 // the can either be absent, or NULL. |
358 if (!IsEmpty(params) && !IsNull(params)) | 358 if (!IsEmpty(params) && !IsNull(params)) |
359 return false; | 359 return false; |
(...skipping 28 matching lines...) Expand all Loading... |
388 // the only function supported is MGF1, as that is the singular mask gen | 388 // the only function supported is MGF1, as that is the singular mask gen |
389 // function defined by RFC 4055 / RFC 5912. | 389 // function defined by RFC 4055 / RFC 5912. |
390 WARN_UNUSED_RESULT bool ParseMaskGenAlgorithm(const der::Input input, | 390 WARN_UNUSED_RESULT bool ParseMaskGenAlgorithm(const der::Input input, |
391 DigestAlgorithm* mgf1_hash) { | 391 DigestAlgorithm* mgf1_hash) { |
392 der::Input oid; | 392 der::Input oid; |
393 der::Input params; | 393 der::Input params; |
394 if (!ParseAlgorithmIdentifier(input, &oid, ¶ms)) | 394 if (!ParseAlgorithmIdentifier(input, &oid, ¶ms)) |
395 return false; | 395 return false; |
396 | 396 |
397 // MGF1 is the only supported mask generation algorithm. | 397 // MGF1 is the only supported mask generation algorithm. |
398 if (!oid.Equals(der::Input(kOidMgf1))) | 398 if (oid != der::Input(kOidMgf1)) |
399 return false; | 399 return false; |
400 | 400 |
401 return ParseHashAlgorithm(params, mgf1_hash); | 401 return ParseHashAlgorithm(params, mgf1_hash); |
402 } | 402 } |
403 | 403 |
404 // Consumes an optional, explicitly-tagged INTEGER from |parser|, using the | 404 // Consumes an optional, explicitly-tagged INTEGER from |parser|, using the |
405 // indicated context-specific class number. Values greater than 32-bits will be | 405 // indicated context-specific class number. Values greater than 32-bits will be |
406 // rejected. | 406 // rejected. |
407 // | 407 // |
408 // Returns true on success and sets |*present| to true if the field was present. | 408 // Returns true on success and sets |*present| to true if the field was present. |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 scoped_ptr<SignatureAlgorithm> SignatureAlgorithm::CreateFromDer( | 548 scoped_ptr<SignatureAlgorithm> SignatureAlgorithm::CreateFromDer( |
549 const der::Input& algorithm_identifier) { | 549 const der::Input& algorithm_identifier) { |
550 der::Input oid; | 550 der::Input oid; |
551 der::Input params; | 551 der::Input params; |
552 if (!ParseAlgorithmIdentifier(algorithm_identifier, &oid, ¶ms)) | 552 if (!ParseAlgorithmIdentifier(algorithm_identifier, &oid, ¶ms)) |
553 return nullptr; | 553 return nullptr; |
554 | 554 |
555 // TODO(eroman): Each OID is tested for equality in order, which is not | 555 // TODO(eroman): Each OID is tested for equality in order, which is not |
556 // particularly efficient. | 556 // particularly efficient. |
557 | 557 |
558 if (oid.Equals(der::Input(kOidSha1WithRsaEncryption))) | 558 if (oid == der::Input(kOidSha1WithRsaEncryption)) |
559 return ParseRsaPkcs1(DigestAlgorithm::Sha1, params); | 559 return ParseRsaPkcs1(DigestAlgorithm::Sha1, params); |
560 | 560 |
561 if (oid.Equals(der::Input(kOidSha256WithRsaEncryption))) | 561 if (oid == der::Input(kOidSha256WithRsaEncryption)) |
562 return ParseRsaPkcs1(DigestAlgorithm::Sha256, params); | 562 return ParseRsaPkcs1(DigestAlgorithm::Sha256, params); |
563 | 563 |
564 if (oid.Equals(der::Input(kOidSha384WithRsaEncryption))) | 564 if (oid == der::Input(kOidSha384WithRsaEncryption)) |
565 return ParseRsaPkcs1(DigestAlgorithm::Sha384, params); | 565 return ParseRsaPkcs1(DigestAlgorithm::Sha384, params); |
566 | 566 |
567 if (oid.Equals(der::Input(kOidSha512WithRsaEncryption))) | 567 if (oid == der::Input(kOidSha512WithRsaEncryption)) |
568 return ParseRsaPkcs1(DigestAlgorithm::Sha512, params); | 568 return ParseRsaPkcs1(DigestAlgorithm::Sha512, params); |
569 | 569 |
570 if (oid.Equals(der::Input(kOidEcdsaWithSha1))) | 570 if (oid == der::Input(kOidEcdsaWithSha1)) |
571 return ParseEcdsa(DigestAlgorithm::Sha1, params); | 571 return ParseEcdsa(DigestAlgorithm::Sha1, params); |
572 | 572 |
573 if (oid.Equals(der::Input(kOidEcdsaWithSha256))) | 573 if (oid == der::Input(kOidEcdsaWithSha256)) |
574 return ParseEcdsa(DigestAlgorithm::Sha256, params); | 574 return ParseEcdsa(DigestAlgorithm::Sha256, params); |
575 | 575 |
576 if (oid.Equals(der::Input(kOidEcdsaWithSha384))) | 576 if (oid == der::Input(kOidEcdsaWithSha384)) |
577 return ParseEcdsa(DigestAlgorithm::Sha384, params); | 577 return ParseEcdsa(DigestAlgorithm::Sha384, params); |
578 | 578 |
579 if (oid.Equals(der::Input(kOidEcdsaWithSha512))) | 579 if (oid == der::Input(kOidEcdsaWithSha512)) |
580 return ParseEcdsa(DigestAlgorithm::Sha512, params); | 580 return ParseEcdsa(DigestAlgorithm::Sha512, params); |
581 | 581 |
582 if (oid.Equals(der::Input(kOidRsaSsaPss))) | 582 if (oid == der::Input(kOidRsaSsaPss)) |
583 return ParseRsaPss(params); | 583 return ParseRsaPss(params); |
584 | 584 |
585 if (oid.Equals(der::Input(kOidSha1WithRsaSignature))) | 585 if (oid == der::Input(kOidSha1WithRsaSignature)) |
586 return ParseRsaPkcs1(DigestAlgorithm::Sha1, params); | 586 return ParseRsaPkcs1(DigestAlgorithm::Sha1, params); |
587 | 587 |
588 return nullptr; // Unsupported OID. | 588 return nullptr; // Unsupported OID. |
589 } | 589 } |
590 | 590 |
591 scoped_ptr<SignatureAlgorithm> SignatureAlgorithm::CreateRsaPkcs1( | 591 scoped_ptr<SignatureAlgorithm> SignatureAlgorithm::CreateRsaPkcs1( |
592 DigestAlgorithm digest) { | 592 DigestAlgorithm digest) { |
593 return make_scoped_ptr( | 593 return make_scoped_ptr( |
594 new SignatureAlgorithm(SignatureAlgorithmId::RsaPkcs1, digest, nullptr)); | 594 new SignatureAlgorithm(SignatureAlgorithmId::RsaPkcs1, digest, nullptr)); |
595 } | 595 } |
(...skipping 19 matching lines...) Expand all Loading... |
615 return nullptr; | 615 return nullptr; |
616 } | 616 } |
617 | 617 |
618 SignatureAlgorithm::SignatureAlgorithm( | 618 SignatureAlgorithm::SignatureAlgorithm( |
619 SignatureAlgorithmId algorithm, | 619 SignatureAlgorithmId algorithm, |
620 DigestAlgorithm digest, | 620 DigestAlgorithm digest, |
621 scoped_ptr<SignatureAlgorithmParameters> params) | 621 scoped_ptr<SignatureAlgorithmParameters> params) |
622 : algorithm_(algorithm), digest_(digest), params_(std::move(params)) {} | 622 : algorithm_(algorithm), digest_(digest), params_(std::move(params)) {} |
623 | 623 |
624 } // namespace net | 624 } // namespace net |
OLD | NEW |