| Index: trunk/src/content/child/webcrypto/platform_crypto_openssl.cc
|
| ===================================================================
|
| --- trunk/src/content/child/webcrypto/platform_crypto_openssl.cc (revision 266902)
|
| +++ trunk/src/content/child/webcrypto/platform_crypto_openssl.cc (working copy)
|
| @@ -36,11 +36,6 @@
|
| virtual SymKey* AsSymKey() OVERRIDE { return this; }
|
| virtual PublicKey* AsPublicKey() OVERRIDE { return NULL; }
|
| virtual PrivateKey* AsPrivateKey() OVERRIDE { return NULL; }
|
| - virtual bool ThreadSafeSerializeForClone(
|
| - blink::WebVector<uint8>* key_data) OVERRIDE {
|
| - key_data->assign(Uint8VectorStart(key_), key_.size());
|
| - return true;
|
| - }
|
|
|
| const std::vector<unsigned char>& key() const { return key_; }
|
|
|
| @@ -88,7 +83,7 @@
|
| SymKey* key,
|
| const CryptoData& iv,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| CipherOperation cipher_operation =
|
| (mode == ENCRYPT) ? kDoEncrypt : kDoDecrypt;
|
|
|
| @@ -127,9 +122,10 @@
|
| output_max_len += AES_BLOCK_SIZE - remainder;
|
| DCHECK_GT(output_max_len, data.byte_length());
|
|
|
| - buffer->resize(output_max_len);
|
| + *buffer = blink::WebArrayBuffer::create(output_max_len, 1);
|
|
|
| - unsigned char* const buffer_data = Uint8VectorStart(buffer);
|
| + unsigned char* const buffer_data =
|
| + reinterpret_cast<unsigned char*>(buffer->data());
|
|
|
| int output_len = 0;
|
| if (!EVP_CipherUpdate(context.get(),
|
| @@ -149,7 +145,7 @@
|
| static_cast<unsigned int>(final_output_chunk_len);
|
| DCHECK_LE(final_output_len, output_max_len);
|
|
|
| - buffer->resize(final_output_len);
|
| + ShrinkBuffer(buffer, final_output_len);
|
|
|
| return Status::Success();
|
| }
|
| @@ -188,12 +184,16 @@
|
| return true;
|
| }
|
|
|
| - Status FinishWithVectorAndStatus(std::vector<uint8>* result) {
|
| + Status FinishWithWebArrayAndStatus(blink::WebArrayBuffer* result) {
|
| const int hash_expected_size = EVP_MD_CTX_size(digest_context_.get());
|
| - result->resize(hash_expected_size);
|
| - unsigned char* const hash_buffer = Uint8VectorStart(result);
|
| + *result = blink::WebArrayBuffer::create(hash_expected_size, 1);
|
| + unsigned char* const hash_buffer =
|
| + static_cast<unsigned char* const>(result->data());
|
| unsigned int hash_buffer_size; // ignored
|
| - return FinishInternal(hash_buffer, &hash_buffer_size);
|
| + Status error = FinishInternal(hash_buffer, &hash_buffer_size);
|
| + if (!error.IsSuccess())
|
| + result->reset();
|
| + return error;
|
| }
|
|
|
| private:
|
| @@ -239,8 +239,8 @@
|
| unsigned char result_[EVP_MAX_MD_SIZE];
|
| };
|
|
|
| -Status ExportKeyRaw(SymKey* key, std::vector<uint8>* buffer) {
|
| - *buffer = key->key();
|
| +Status ExportKeyRaw(SymKey* key, blink::WebArrayBuffer* buffer) {
|
| + *buffer = CreateArrayBuffer(Uint8VectorStart(key->key()), key->key().size());
|
| return Status::Success();
|
| }
|
|
|
| @@ -250,19 +250,19 @@
|
| SymKey* key,
|
| const CryptoData& data,
|
| const CryptoData& iv,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): inline the function here.
|
| return AesCbcEncryptDecrypt(mode, key, iv, data, buffer);
|
| }
|
|
|
| Status DigestSha(blink::WebCryptoAlgorithmId algorithm,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| DigestorOpenSSL digestor(algorithm);
|
| Status error = digestor.ConsumeWithStatus(data.bytes(), data.byte_length());
|
| if (!error.IsSuccess())
|
| return error;
|
| - return digestor.FinishWithVectorAndStatus(buffer);
|
| + return digestor.FinishWithWebArrayAndStatus(buffer);
|
| }
|
|
|
| scoped_ptr<blink::WebCryptoDigestor> CreateDigestor(
|
| @@ -335,7 +335,9 @@
|
| Status SignHmac(SymKey* key,
|
| const blink::WebCryptoAlgorithm& hash,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| + blink::WebArrayBuffer result;
|
| +
|
| const EVP_MD* digest_algorithm = GetDigest(hash.id());
|
| if (!digest_algorithm)
|
| return Status::ErrorUnsupported();
|
| @@ -351,9 +353,9 @@
|
| const unsigned char null_key[] = {};
|
| const void* const raw_key_voidp = raw_key.size() ? &raw_key[0] : null_key;
|
|
|
| - buffer->resize(hmac_expected_length);
|
| + result = blink::WebArrayBuffer::create(hmac_expected_length, 1);
|
| crypto::ScopedOpenSSLSafeSizeBuffer<EVP_MAX_MD_SIZE> hmac_result(
|
| - Uint8VectorStart(buffer), hmac_expected_length);
|
| + reinterpret_cast<unsigned char*>(result.data()), hmac_expected_length);
|
|
|
| crypto::OpenSSLErrStackTracer(FROM_HERE);
|
|
|
| @@ -368,6 +370,7 @@
|
| if (!success || hmac_actual_length != hmac_expected_length)
|
| return Status::OperationError();
|
|
|
| + *buffer = result;
|
| return Status::Success();
|
| }
|
|
|
| @@ -388,7 +391,7 @@
|
| const CryptoData& iv,
|
| const CryptoData& additional_data,
|
| unsigned int tag_length_bits,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -396,14 +399,14 @@
|
| // Guaranteed that key is valid.
|
| Status EncryptRsaEsPkcs1v1_5(PublicKey* key,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
|
|
| Status DecryptRsaEsPkcs1v1_5(PrivateKey* key,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -411,7 +414,7 @@
|
| Status SignRsaSsaPkcs1v1_5(PrivateKey* key,
|
| const blink::WebCryptoAlgorithm& hash,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -444,14 +447,14 @@
|
| return Status::ErrorUnsupported();
|
| }
|
|
|
| -Status ExportKeySpki(PublicKey* key, std::vector<uint8>* buffer) {
|
| +Status ExportKeySpki(PublicKey* key, blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
|
|
| Status ExportKeyPkcs8(PrivateKey* key,
|
| const blink::WebCryptoKeyAlgorithm& key_algorithm,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -465,7 +468,7 @@
|
|
|
| Status WrapSymKeyAesKw(SymKey* wrapping_key,
|
| SymKey* key,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -482,14 +485,14 @@
|
|
|
| Status DecryptAesKw(SymKey* key,
|
| const CryptoData& data,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
|
|
| Status WrapSymKeyRsaEs(PublicKey* wrapping_key,
|
| SymKey* key,
|
| - std::vector<uint8>* buffer) {
|
| + blink::WebArrayBuffer* buffer) {
|
| // TODO(eroman): http://crbug.com/267888
|
| return Status::ErrorUnsupported();
|
| }
|
| @@ -504,17 +507,6 @@
|
| return Status::ErrorUnsupported();
|
| }
|
|
|
| -bool ThreadSafeDeserializeKeyForClone(
|
| - const blink::WebCryptoKeyAlgorithm& algorithm,
|
| - blink::WebCryptoKeyType type,
|
| - bool extractable,
|
| - blink::WebCryptoKeyUsageMask usages,
|
| - const CryptoData& key_data,
|
| - blink::WebCryptoKey* key) {
|
| - // TODO(eroman): http://crbug.com/267888
|
| - return false;
|
| -}
|
| -
|
| } // namespace platform
|
|
|
| } // namespace webcrypto
|
|
|