| Index: components/webcrypto/algorithms/rsa.cc
|
| diff --git a/components/webcrypto/algorithms/rsa.cc b/components/webcrypto/algorithms/rsa.cc
|
| index 892a5a0ec134b35f23da0d0a606c67ef22cef40c..e789d2921f8aa8fb1e4e6416dc2d408a55c21412 100644
|
| --- a/components/webcrypto/algorithms/rsa.cc
|
| +++ b/components/webcrypto/algorithms/rsa.cc
|
| @@ -19,6 +19,7 @@
|
| #include "crypto/scoped_openssl_types.h"
|
| #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h"
|
| #include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h"
|
| +#include "third_party/WebKit/public/platform/WebCryptoUtil.h"
|
|
|
| namespace webcrypto {
|
|
|
| @@ -104,26 +105,6 @@ Status ReadRsaKeyJwk(const CryptoData& key_data,
|
| return Status::Success();
|
| }
|
|
|
| -// Converts a (big-endian) WebCrypto BigInteger, with or without leading zeros,
|
| -// to unsigned int.
|
| -bool BigIntegerToUint(const uint8_t* data,
|
| - size_t data_size,
|
| - unsigned int* result) {
|
| - if (data_size == 0)
|
| - return false;
|
| -
|
| - *result = 0;
|
| - for (size_t i = 0; i < data_size; ++i) {
|
| - size_t reverse_i = data_size - i - 1;
|
| -
|
| - if (reverse_i >= sizeof(*result) && data[i])
|
| - return false; // Too large for a uint.
|
| -
|
| - *result |= data[i] << 8 * reverse_i;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| // Creates a blink::WebCryptoAlgorithm having the modulus length and public
|
| // exponent of |key|.
|
| Status CreateRsaHashedKeyAlgorithm(
|
| @@ -298,10 +279,8 @@ Status RsaHashedAlgorithm::GenerateKey(
|
| }
|
|
|
| unsigned int public_exponent = 0;
|
| - if (!BigIntegerToUint(params->publicExponent().data(),
|
| - params->publicExponent().size(), &public_exponent)) {
|
| + if (!blink::bigIntegerToUint(params->publicExponent(), public_exponent))
|
| return Status::ErrorGenerateKeyPublicExponent();
|
| - }
|
|
|
| // OpenSSL hangs when given bad public exponents. Use a whitelist.
|
| if (public_exponent != 3 && public_exponent != 65537)
|
|
|