| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/child/webcrypto/nss/rsa_key_nss.h" | 5 #include "content/child/webcrypto/nss/rsa_key_nss.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/numerics/safe_math.h" |
| 8 #include "content/child/webcrypto/crypto_data.h" | 9 #include "content/child/webcrypto/crypto_data.h" |
| 9 #include "content/child/webcrypto/jwk.h" | 10 #include "content/child/webcrypto/jwk.h" |
| 10 #include "content/child/webcrypto/nss/key_nss.h" | 11 #include "content/child/webcrypto/nss/key_nss.h" |
| 11 #include "content/child/webcrypto/nss/util_nss.h" | 12 #include "content/child/webcrypto/nss/util_nss.h" |
| 12 #include "content/child/webcrypto/status.h" | 13 #include "content/child/webcrypto/status.h" |
| 13 #include "content/child/webcrypto/webcrypto_util.h" | 14 #include "content/child/webcrypto/webcrypto_util.h" |
| 14 #include "crypto/scoped_nss_types.h" | 15 #include "crypto/scoped_nss_types.h" |
| 15 #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" | 16 #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" |
| 16 #include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" | 17 #include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" |
| 17 | 18 |
| (...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 (public_exponent != 3 && public_exponent != 65537)) { | 592 (public_exponent != 3 && public_exponent != 65537)) { |
| 592 return Status::ErrorGenerateKeyPublicExponent(); | 593 return Status::ErrorGenerateKeyPublicExponent(); |
| 593 } | 594 } |
| 594 | 595 |
| 595 crypto::ScopedPK11Slot slot(PK11_GetInternalKeySlot()); | 596 crypto::ScopedPK11Slot slot(PK11_GetInternalKeySlot()); |
| 596 if (!slot) | 597 if (!slot) |
| 597 return Status::OperationError(); | 598 return Status::OperationError(); |
| 598 | 599 |
| 599 PK11RSAGenParams rsa_gen_params; | 600 PK11RSAGenParams rsa_gen_params; |
| 600 // keySizeInBits is a signed type, don't pass in a negative value. | 601 // keySizeInBits is a signed type, don't pass in a negative value. |
| 601 if (params->modulusLengthBits() > INT_MAX) | 602 base::CheckedNumeric<int> signed_modulus(params->modulusLengthBits()); |
| 603 if (!signed_modulus.IsValid()) |
| 602 return Status::OperationError(); | 604 return Status::OperationError(); |
| 603 rsa_gen_params.keySizeInBits = params->modulusLengthBits(); | 605 rsa_gen_params.keySizeInBits = signed_modulus.ValueOrDie(); |
| 604 rsa_gen_params.pe = public_exponent; | 606 rsa_gen_params.pe = public_exponent; |
| 605 | 607 |
| 606 const CK_FLAGS operation_flags_mask = | 608 const CK_FLAGS operation_flags_mask = |
| 607 CKF_ENCRYPT | CKF_DECRYPT | CKF_SIGN | CKF_VERIFY | CKF_WRAP | CKF_UNWRAP; | 609 CKF_ENCRYPT | CKF_DECRYPT | CKF_SIGN | CKF_VERIFY | CKF_WRAP | CKF_UNWRAP; |
| 608 | 610 |
| 609 // The private key must be marked as insensitive and extractable, otherwise it | 611 // The private key must be marked as insensitive and extractable, otherwise it |
| 610 // cannot later be exported in unencrypted form or structured-cloned. | 612 // cannot later be exported in unencrypted form or structured-cloned. |
| 611 const PK11AttrFlags attribute_flags = | 613 const PK11AttrFlags attribute_flags = |
| 612 PK11_ATTR_INSENSITIVE | PK11_ATTR_EXTRACTABLE; | 614 PK11_ATTR_INSENSITIVE | PK11_ATTR_EXTRACTABLE; |
| 613 | 615 |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 return Status::Success(); | 890 return Status::Success(); |
| 889 } | 891 } |
| 890 default: | 892 default: |
| 891 return Status::ErrorUnexpected(); | 893 return Status::ErrorUnexpected(); |
| 892 } | 894 } |
| 893 } | 895 } |
| 894 | 896 |
| 895 } // namespace webcrypto | 897 } // namespace webcrypto |
| 896 | 898 |
| 897 } // namespace content | 899 } // namespace content |
| OLD | NEW |