Index: content/renderer/webcrypto/webcrypto_util.cc |
diff --git a/content/renderer/webcrypto/webcrypto_util.cc b/content/renderer/webcrypto/webcrypto_util.cc |
deleted file mode 100644 |
index a72805640570009d8dcfc5f2b10a0bbf5b8128fa..0000000000000000000000000000000000000000 |
--- a/content/renderer/webcrypto/webcrypto_util.cc |
+++ /dev/null |
@@ -1,304 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/renderer/webcrypto/webcrypto_util.h" |
- |
-#include "base/base64.h" |
-#include "base/logging.h" |
-#include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h" |
-#include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" |
-#include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" |
- |
-namespace content { |
- |
-namespace webcrypto { |
- |
-bool Status::IsError() const { return type_ == TYPE_ERROR; } |
- |
-bool Status::IsSuccess() const { return type_ == TYPE_SUCCESS; } |
- |
-bool Status::HasErrorDetails() const { return !error_details_.empty(); } |
- |
-std::string Status::ToString() const { |
- return IsSuccess() ? "Success" : error_details_; |
-} |
- |
-Status Status::Success() { return Status(TYPE_SUCCESS); } |
- |
-Status Status::Error() { return Status(TYPE_ERROR); } |
- |
-Status Status::ErrorJwkNotDictionary() { |
- return Status("JWK input could not be parsed to a JSON dictionary"); |
-} |
- |
-Status Status::ErrorJwkPropertyMissing(const std::string& property) { |
- return Status("The required JWK property \"" + property + "\" was missing"); |
-} |
- |
-Status Status::ErrorJwkPropertyWrongType(const std::string& property, |
- const std::string& expected_type) { |
- return Status("The JWK property \"" + property + "\" must be a " + |
- expected_type); |
-} |
- |
-Status Status::ErrorJwkBase64Decode(const std::string& property) { |
- return Status("The JWK property \"" + property + |
- "\" could not be base64 decoded"); |
-} |
- |
-Status Status::ErrorJwkExtractableInconsistent() { |
- return Status( |
- "The \"extractable\" property of the JWK dictionary is " |
- "inconsistent what that specified by the Web Crypto call"); |
-} |
- |
-Status Status::ErrorJwkUnrecognizedAlgorithm() { |
- return Status("The JWK \"alg\" property was not recognized"); |
-} |
- |
-Status Status::ErrorJwkAlgorithmInconsistent() { |
- return Status( |
- "The JWK \"alg\" property was inconsistent with that specified " |
- "by the Web Crypto call"); |
-} |
- |
-Status Status::ErrorJwkAlgorithmMissing() { |
- return Status( |
- "The JWK optional \"alg\" property is missing or not a string, " |
- "and one wasn't specified by the Web Crypto call"); |
-} |
- |
-Status Status::ErrorJwkUnrecognizedUsage() { |
- return Status("The JWK \"use\" property could not be parsed"); |
-} |
- |
-Status Status::ErrorJwkUsageInconsistent() { |
- return Status( |
- "The JWK \"use\" property was inconsistent with that specified " |
- "by the Web Crypto call. The JWK usage must be a superset of " |
- "those requested"); |
-} |
- |
-Status Status::ErrorJwkRsaPrivateKeyUnsupported() { |
- return Status( |
- "JWK RSA key contained \"d\" property: Private key import is " |
- "not yet supported"); |
-} |
- |
-Status Status::ErrorJwkUnrecognizedKty() { |
- return Status("The JWK \"kty\" property was unrecognized"); |
-} |
- |
-Status Status::ErrorJwkIncorrectKeyLength() { |
- return Status( |
- "The JWK \"k\" property did not include the right length " |
- "of key data for the given algorithm."); |
-} |
- |
-Status Status::ErrorImportEmptyKeyData() { |
- return Status("No key data was provided"); |
-} |
- |
-Status Status::ErrorUnexpectedKeyType() { |
- return Status("The key is not of the expected type"); |
-} |
- |
-Status Status::ErrorIncorrectSizeAesCbcIv() { |
- return Status("The \"iv\" has an unexpected length -- must be 16 bytes"); |
-} |
- |
-Status Status::ErrorDataTooLarge() { |
- return Status("The provided data is too large"); |
-} |
- |
-Status Status::ErrorUnsupported() { |
- return Status("The requested operation is unsupported"); |
-} |
- |
-Status Status::ErrorUnexpected() { |
- return Status("Something unexpected happened..."); |
-} |
- |
-Status Status::ErrorInvalidAesGcmTagLength() { |
- return Status( |
- "The tag length is invalid: Must be 32, 64, 96, 104, 112, 120, or 128 " |
- "bits"); |
-} |
- |
-Status Status::ErrorGenerateKeyPublicExponent() { |
- return Status("The \"publicExponent\" is either empty, zero, or too large"); |
-} |
- |
-Status Status::ErrorMissingAlgorithmImportRawKey() { |
- return Status( |
- "The key's algorithm must be specified when importing " |
- "raw-formatted key."); |
-} |
- |
-Status Status::ErrorImportRsaEmptyModulus() { |
- return Status("The modulus is empty"); |
-} |
- |
-Status Status::ErrorGenerateRsaZeroModulus() { |
- return Status("The modulus bit length cannot be zero"); |
-} |
- |
-Status Status::ErrorImportRsaEmptyExponent() { |
- return Status("No bytes for the exponent were provided"); |
-} |
- |
-Status Status::ErrorKeyNotExtractable() { |
- return Status("They key is not extractable"); |
-} |
- |
-Status Status::ErrorGenerateKeyLength() { |
- return Status( |
- "Invalid key length: it is either zero or not a multiple of 8 " |
- "bits"); |
-} |
- |
-Status::Status(const std::string& error_details_utf8) |
- : type_(TYPE_ERROR), error_details_(error_details_utf8) {} |
- |
-Status::Status(Type type) : type_(type) {} |
- |
-const uint8* Uint8VectorStart(const std::vector<uint8>& data) { |
- if (data.empty()) |
- return NULL; |
- return &data[0]; |
-} |
- |
-void ShrinkBuffer(blink::WebArrayBuffer* buffer, unsigned int new_size) { |
- DCHECK_LE(new_size, buffer->byteLength()); |
- |
- if (new_size == buffer->byteLength()) |
- return; |
- |
- blink::WebArrayBuffer new_buffer = blink::WebArrayBuffer::create(new_size, 1); |
- DCHECK(!new_buffer.isNull()); |
- memcpy(new_buffer.data(), buffer->data(), new_size); |
- *buffer = new_buffer; |
-} |
- |
-blink::WebArrayBuffer CreateArrayBuffer(const uint8* data, |
- unsigned int data_size) { |
- blink::WebArrayBuffer buffer = blink::WebArrayBuffer::create(data_size, 1); |
- DCHECK(!buffer.isNull()); |
- if (data_size) // data_size == 0 might mean the data pointer is invalid |
- memcpy(buffer.data(), data, data_size); |
- return buffer; |
-} |
- |
-// This function decodes unpadded 'base64url' encoded data, as described in |
-// RFC4648 (http://www.ietf.org/rfc/rfc4648.txt) Section 5. To do this, first |
-// change the incoming data to 'base64' encoding by applying the appropriate |
-// transformation including adding padding if required, and then call a base64 |
-// decoder. |
-bool Base64DecodeUrlSafe(const std::string& input, std::string* output) { |
- std::string base64EncodedText(input); |
- std::replace(base64EncodedText.begin(), base64EncodedText.end(), '-', '+'); |
- std::replace(base64EncodedText.begin(), base64EncodedText.end(), '_', '/'); |
- base64EncodedText.append((4 - base64EncodedText.size() % 4) % 4, '='); |
- return base::Base64Decode(base64EncodedText, output); |
-} |
- |
-bool IsHashAlgorithm(blink::WebCryptoAlgorithmId alg_id) { |
- return alg_id == blink::WebCryptoAlgorithmIdSha1 || |
- alg_id == blink::WebCryptoAlgorithmIdSha224 || |
- alg_id == blink::WebCryptoAlgorithmIdSha256 || |
- alg_id == blink::WebCryptoAlgorithmIdSha384 || |
- alg_id == blink::WebCryptoAlgorithmIdSha512; |
-} |
- |
-blink::WebCryptoAlgorithm GetInnerHashAlgorithm( |
- const blink::WebCryptoAlgorithm& algorithm) { |
- DCHECK(!algorithm.isNull()); |
- switch (algorithm.paramsType()) { |
- case blink::WebCryptoAlgorithmParamsTypeHmacImportParams: |
- return algorithm.hmacImportParams()->hash(); |
- case blink::WebCryptoAlgorithmParamsTypeHmacKeyGenParams: |
- return algorithm.hmacKeyGenParams()->hash(); |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams: |
- return algorithm.rsaHashedImportParams()->hash(); |
- case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams: |
- return algorithm.rsaHashedKeyGenParams()->hash(); |
- default: |
- return blink::WebCryptoAlgorithm::createNull(); |
- } |
-} |
- |
-blink::WebCryptoAlgorithm CreateAlgorithm(blink::WebCryptoAlgorithmId id) { |
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(id, NULL); |
-} |
- |
-blink::WebCryptoAlgorithm CreateHmacImportAlgorithm( |
- blink::WebCryptoAlgorithmId hash_id) { |
- DCHECK(IsHashAlgorithm(hash_id)); |
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate( |
- blink::WebCryptoAlgorithmIdHmac, |
- new blink::WebCryptoHmacImportParams(CreateAlgorithm(hash_id))); |
-} |
- |
-blink::WebCryptoAlgorithm CreateRsaSsaImportAlgorithm( |
- blink::WebCryptoAlgorithmId hash_id) { |
- DCHECK(IsHashAlgorithm(hash_id)); |
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate( |
- blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, |
- new blink::WebCryptoRsaHashedImportParams(CreateAlgorithm(hash_id))); |
-} |
- |
-blink::WebCryptoAlgorithm CreateRsaOaepImportAlgorithm( |
- blink::WebCryptoAlgorithmId hash_id) { |
- DCHECK(IsHashAlgorithm(hash_id)); |
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate( |
- blink::WebCryptoAlgorithmIdRsaOaep, |
- new blink::WebCryptoRsaHashedImportParams( |
- CreateAlgorithm(hash_id))); |
-} |
- |
- |
-unsigned int ShaBlockSizeBytes(blink::WebCryptoAlgorithmId hash_id) { |
- switch (hash_id) { |
- case blink::WebCryptoAlgorithmIdSha1: |
- case blink::WebCryptoAlgorithmIdSha224: |
- case blink::WebCryptoAlgorithmIdSha256: |
- return 64; |
- case blink::WebCryptoAlgorithmIdSha384: |
- case blink::WebCryptoAlgorithmIdSha512: |
- return 128; |
- default: |
- NOTREACHED(); |
- return 0; |
- } |
-} |
- |
-bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm, |
- unsigned keylen_bytes, |
- blink::WebCryptoKeyAlgorithm* key_algorithm) { |
- switch (algorithm.id()) { |
- case blink::WebCryptoAlgorithmIdHmac: { |
- blink::WebCryptoAlgorithm hash = GetInnerHashAlgorithm(algorithm); |
- if (hash.isNull()) |
- return false; |
- *key_algorithm = blink::WebCryptoKeyAlgorithm::adoptParamsAndCreate( |
- algorithm.id(), |
- new blink::WebCryptoHmacKeyAlgorithmParams(hash)); |
- return true; |
- } |
- case blink::WebCryptoAlgorithmIdAesKw: |
- case blink::WebCryptoAlgorithmIdAesCbc: |
- case blink::WebCryptoAlgorithmIdAesCtr: |
- case blink::WebCryptoAlgorithmIdAesGcm: |
- *key_algorithm = blink::WebCryptoKeyAlgorithm::adoptParamsAndCreate( |
- algorithm.id(), |
- new blink::WebCryptoAesKeyAlgorithmParams(keylen_bytes * 8)); |
- return true; |
- default: |
- return false; |
- } |
-} |
- |
-} // namespace webcrypto |
- |
-} // namespace content |