diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 23:27:52 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 23:27:52 +0000 |
commit | 96608acf8661dfe96f97146a31e7ffe49346ba72 (patch) | |
tree | 339c7a50292b86aab7ee9d7020fdc7e7beaae289 /content/child | |
parent | 431a075a671f8c7f1f31a90282f76af6e0cc94ff (diff) | |
download | chromium_src-96608acf8661dfe96f97146a31e7ffe49346ba72.zip chromium_src-96608acf8661dfe96f97146a31e7ffe49346ba72.tar.gz chromium_src-96608acf8661dfe96f97146a31e7ffe49346ba72.tar.bz2 |
[refactor] Remove WebArrayBuffer from unittests, since now using std::vector.
This is a cleanup following https://codereview.chromium.org/233733004/.
BUG=245025
Review URL: https://codereview.chromium.org/251213006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267375 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/child')
-rw-r--r-- | content/child/webcrypto/crypto_data.cc | 6 | ||||
-rw-r--r-- | content/child/webcrypto/crypto_data.h | 7 | ||||
-rw-r--r-- | content/child/webcrypto/platform_crypto_openssl.cc | 1 | ||||
-rw-r--r-- | content/child/webcrypto/shared_crypto.h | 1 | ||||
-rw-r--r-- | content/child/webcrypto/shared_crypto_unittest.cc | 422 |
5 files changed, 160 insertions, 277 deletions
diff --git a/content/child/webcrypto/crypto_data.cc b/content/child/webcrypto/crypto_data.cc index 47de0be..2973641 100644 --- a/content/child/webcrypto/crypto_data.cc +++ b/content/child/webcrypto/crypto_data.cc @@ -4,8 +4,6 @@ #include "content/child/webcrypto/crypto_data.h" -#include "third_party/WebKit/public/platform/WebArrayBuffer.h" - namespace content { namespace webcrypto { @@ -23,10 +21,6 @@ CryptoData::CryptoData(const std::string& bytes) : NULL), byte_length_(bytes.size()) {} -CryptoData::CryptoData(const blink::WebArrayBuffer& buffer) - : bytes_(reinterpret_cast<const unsigned char*>(buffer.data())), - byte_length_(buffer.byteLength()) {} - CryptoData::CryptoData(const blink::WebVector<unsigned char>& bytes) : bytes_(bytes.data()), byte_length_(bytes.size()) {} diff --git a/content/child/webcrypto/crypto_data.h b/content/child/webcrypto/crypto_data.h index d12d116..2433dd7 100644 --- a/content/child/webcrypto/crypto_data.h +++ b/content/child/webcrypto/crypto_data.h @@ -12,10 +12,6 @@ #include "content/common/content_export.h" #include "third_party/WebKit/public/platform/WebVector.h" -namespace blink { -class WebArrayBuffer; -} - namespace content { namespace webcrypto { @@ -36,7 +32,6 @@ class CONTENT_EXPORT CryptoData { // remain valid for the lifetime of CryptoData. explicit CryptoData(const std::vector<unsigned char>& bytes); explicit CryptoData(const std::string& bytes); - explicit CryptoData(const blink::WebArrayBuffer& buffer); explicit CryptoData(const blink::WebVector<unsigned char>& bytes); const unsigned char* bytes() const { return bytes_; } @@ -45,8 +40,6 @@ class CONTENT_EXPORT CryptoData { private: const unsigned char* const bytes_; const unsigned int byte_length_; - - DISALLOW_COPY_AND_ASSIGN(CryptoData); }; } // namespace webcrypto diff --git a/content/child/webcrypto/platform_crypto_openssl.cc b/content/child/webcrypto/platform_crypto_openssl.cc index 34abcd8..1f2bebe 100644 --- a/content/child/webcrypto/platform_crypto_openssl.cc +++ b/content/child/webcrypto/platform_crypto_openssl.cc @@ -17,7 +17,6 @@ #include "content/child/webcrypto/status.h" #include "content/child/webcrypto/webcrypto_util.h" #include "crypto/openssl_util.h" -#include "third_party/WebKit/public/platform/WebArrayBuffer.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" diff --git a/content/child/webcrypto/shared_crypto.h b/content/child/webcrypto/shared_crypto.h index 3be2612..d2eaa91 100644 --- a/content/child/webcrypto/shared_crypto.h +++ b/content/child/webcrypto/shared_crypto.h @@ -11,7 +11,6 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "content/common/content_export.h" -#include "third_party/WebKit/public/platform/WebArrayBuffer.h" #include "third_party/WebKit/public/platform/WebCrypto.h" #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" diff --git a/content/child/webcrypto/shared_crypto_unittest.cc b/content/child/webcrypto/shared_crypto_unittest.cc index 43ff8d8..3beadc4 100644 --- a/content/child/webcrypto/shared_crypto_unittest.cc +++ b/content/child/webcrypto/shared_crypto_unittest.cc @@ -23,7 +23,6 @@ #include "content/child/webcrypto/webcrypto_util.h" #include "content/public/common/content_paths.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/WebKit/public/platform/WebArrayBuffer.h" #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h" #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" #include "third_party/WebKit/public/platform/WebCryptoKey.h" @@ -38,10 +37,19 @@ #define MAYBE(test_name) test_name #endif +#define EXPECT_BYTES_EQ(expected, actual) \ + EXPECT_EQ(CryptoData(expected), CryptoData(actual)) + +#define EXPECT_BYTES_EQ_HEX(expected_hex, actual_bytes) \ + EXPECT_BYTES_EQ(HexStringToBytes(expected_hex), actual_bytes) + namespace content { namespace webcrypto { +// These functions are used by GTEST to support EXPECT_EQ() for +// webcrypto::Status and webcrypto::CryptoData + void PrintTo(const Status& status, ::std::ostream* os) { if (status.IsSuccess()) *os << "Success"; @@ -65,88 +73,17 @@ bool operator!=(const content::webcrypto::Status& a, return !(a == b); } -namespace { - -// ----------------------------------------------------------------------------- -// TODO(eroman): Remove these helpers and convert all of the tests to using the -// std::vector<> flavor of functions directly. -// ----------------------------------------------------------------------------- - -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; +void PrintTo(const CryptoData& data, ::std::ostream* os) { + *os << "[" << base::HexEncode(data.bytes(), data.byte_length()) << "]"; } -void AssignWebArrayBuffer(const std::vector<uint8>& in, - blink::WebArrayBuffer* out) { - *out = CreateArrayBuffer(Uint8VectorStart(in), in.size()); +bool operator==(const content::webcrypto::CryptoData& a, + const content::webcrypto::CryptoData& b) { + return a.byte_length() == b.byte_length() && + memcmp(a.bytes(), b.bytes(), a.byte_length()) == 0; } -Status Encrypt(const blink::WebCryptoAlgorithm& algorithm, - const blink::WebCryptoKey& key, - const CryptoData& data, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - Status status = Encrypt(algorithm, key, data, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} - -Status Decrypt(const blink::WebCryptoAlgorithm& algorithm, - const blink::WebCryptoKey& key, - const CryptoData& data, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - Status status = Decrypt(algorithm, key, data, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} - -Status Digest(const blink::WebCryptoAlgorithm& algorithm, - const CryptoData& data, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - Status status = Digest(algorithm, data, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} - -Status ExportKey(blink::WebCryptoKeyFormat format, - const blink::WebCryptoKey& key, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - Status status = webcrypto::ExportKey(format, key, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} - -Status Sign(const blink::WebCryptoAlgorithm& algorithm, - const blink::WebCryptoKey& key, - const CryptoData& data, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - - Status status = Sign(algorithm, key, data, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} - -Status WrapKey(blink::WebCryptoKeyFormat format, - const blink::WebCryptoKey& wrapping_key, - const blink::WebCryptoKey& key_to_wrap, - const blink::WebCryptoAlgorithm& wrapping_algorithm, - blink::WebArrayBuffer* web_buffer) { - std::vector<uint8> buffer; - - Status status = webcrypto::WrapKey( - format, wrapping_key, key_to_wrap, wrapping_algorithm, &buffer); - AssignWebArrayBuffer(buffer, web_buffer); - return status; -} +namespace { // ----------------------------------------------------------------------------- @@ -255,34 +192,6 @@ std::vector<uint8> HexStringToBytes(const std::string& hex) { return bytes; } -::testing::AssertionResult ArrayBufferMatches( - const std::vector<uint8>& expected, - const blink::WebArrayBuffer& actual) { - if (base::HexEncode(webcrypto::Uint8VectorStart(expected), expected.size()) == - base::HexEncode(actual.data(), actual.byteLength())) - return ::testing::AssertionSuccess(); - return ::testing::AssertionFailure(); -} - -void ExpectCryptoDataMatchesHex(const std::string& expected_hex, - const CryptoData& actual) { - EXPECT_STRCASEEQ( - expected_hex.c_str(), - base::HexEncode(actual.bytes(), actual.byte_length()).c_str()); -} - -void ExpectArrayBufferMatchesHex(const std::string& expected_hex, - const blink::WebArrayBuffer& array_buffer) { - ExpectCryptoDataMatchesHex(expected_hex, CryptoData(array_buffer)); -} - -void ExpectVectorMatches(const std::vector<uint8>& expected, - const std::vector<uint8>& actual) { - EXPECT_EQ( - base::HexEncode(webcrypto::Uint8VectorStart(expected), expected.size()), - base::HexEncode(webcrypto::Uint8VectorStart(actual), actual.size())); -} - std::vector<uint8> MakeJsonVector(const std::string& json_string) { return std::vector<uint8>(json_string.begin(), json_string.end()); } @@ -378,10 +287,12 @@ blink::WebCryptoAlgorithm GetDigestAlgorithm(base::DictionaryValue* dict, struct { const char* name; blink::WebCryptoAlgorithmId id; - } kDigestNameToId[] = {{"sha-1", blink::WebCryptoAlgorithmIdSha1}, - {"sha-256", blink::WebCryptoAlgorithmIdSha256}, - {"sha-384", blink::WebCryptoAlgorithmIdSha384}, - {"sha-512", blink::WebCryptoAlgorithmIdSha512}, }; + } kDigestNameToId[] = { + {"sha-1", blink::WebCryptoAlgorithmIdSha1}, + {"sha-256", blink::WebCryptoAlgorithmIdSha256}, + {"sha-384", blink::WebCryptoAlgorithmIdSha384}, + {"sha-512", blink::WebCryptoAlgorithmIdSha512}, + }; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kDigestNameToId); ++i) { if (kDigestNameToId[i].name == algorithm_name) @@ -418,18 +329,13 @@ void RestoreJwkRsaDictionary(base::DictionaryValue* dict) { dict->SetString("e", "AQAB"); } -// Determines if two ArrayBuffers have identical content. -bool ArrayBuffersEqual(const blink::WebArrayBuffer& a, - const blink::WebArrayBuffer& b) { - return a.byteLength() == b.byteLength() && - memcmp(a.data(), b.data(), a.byteLength()) == 0; -} - -// Given a vector of WebArrayBuffers, determines if there are any copies. -bool CopiesExist(std::vector<blink::WebArrayBuffer> bufs) { +// Returns true if any of the vectors in the input list have identical content. +// Dumb O(n^2) implementation but should be fast enough for the input sizes that +// are used. +bool CopiesExist(const std::vector<std::vector<uint8> >& bufs) { for (size_t i = 0; i < bufs.size(); ++i) { for (size_t j = i + 1; j < bufs.size(); ++j) { - if (ArrayBuffersEqual(bufs[i], bufs[j])) + if (CryptoData(bufs[i]) == CryptoData(bufs[j])) return true; } } @@ -573,23 +479,28 @@ Status AesGcmEncrypt(const blink::WebCryptoKey& key, blink::WebCryptoAlgorithm algorithm = CreateAesGcmAlgorithm(iv, additional_data, tag_length_bits); - blink::WebArrayBuffer output; + std::vector<uint8> output; Status status = Encrypt(algorithm, key, CryptoData(plain_text), &output); if (status.IsError()) return status; - if (output.byteLength() * 8 < tag_length_bits) { - EXPECT_TRUE(false); + if ((tag_length_bits % 8) != 0) { + EXPECT_TRUE(false) << "Encrypt should have failed."; + return Status::OperationError(); + } + + size_t tag_length_bytes = tag_length_bits / 8; + + if (tag_length_bytes > output.size()) { + EXPECT_TRUE(false) << "tag length is larger than output"; return Status::OperationError(); } // The encryption result is cipher text with authentication tag appended. - cipher_text->assign(static_cast<uint8*>(output.data()), - static_cast<uint8*>(output.data()) + - (output.byteLength() - tag_length_bits / 8)); - authentication_tag->assign( - static_cast<uint8*>(output.data()) + cipher_text->size(), - static_cast<uint8*>(output.data()) + output.byteLength()); + cipher_text->assign(output.begin(), + output.begin() + (output.size() - tag_length_bytes)); + authentication_tag->assign(output.begin() + cipher_text->size(), + output.end()); return Status::Success(); } @@ -600,7 +511,7 @@ Status AesGcmDecrypt(const blink::WebCryptoKey& key, unsigned int tag_length_bits, const std::vector<uint8>& cipher_text, const std::vector<uint8>& authentication_tag, - blink::WebArrayBuffer* plain_text) { + std::vector<uint8>* plain_text) { EXPECT_TRUE(SupportsAesGcm()); blink::WebCryptoAlgorithm algorithm = CreateAesGcmAlgorithm(iv, additional_data, tag_length_bits); @@ -642,11 +553,11 @@ Status ImportKeyJwkFromDict(const base::DictionaryValue& dict, key); } -// Parses an ArrayBuffer of JSON into a dictionary. +// Parses a vector of JSON into a dictionary. scoped_ptr<base::DictionaryValue> GetJwkDictionary( - const blink::WebArrayBuffer& json) { - base::StringPiece json_string(reinterpret_cast<const char*>(json.data()), - json.byteLength()); + const std::vector<uint8>& json) { + base::StringPiece json_string( + reinterpret_cast<const char*>(Uint8VectorStart(json)), json.size()); base::Value* value = base::JSONReader::Read(json_string); EXPECT_TRUE(value); base::DictionaryValue* dict_value = NULL; @@ -703,10 +614,10 @@ scoped_ptr<base::DictionaryValue> GetJwkDictionary( return ::testing::AssertionSuccess(); } -// Verifies that the JSON in the input ArrayBuffer contains the provided +// Verifies that the JSON in the input vector contains the provided // expected values. Exact matches are required on the fields examined. ::testing::AssertionResult VerifySecretJwk( - const blink::WebArrayBuffer& json, + const std::vector<uint8>& json, const std::string& alg_expected, const std::string& k_expected_hex, blink::WebCryptoKeyUsageMask use_mask_expected) { @@ -731,10 +642,10 @@ scoped_ptr<base::DictionaryValue> GetJwkDictionary( return VerifyJwk(dict, "oct", alg_expected, use_mask_expected); } -// Verifies that the JSON in the input ArrayBuffer contains the provided +// Verifies that the JSON in the input vector contains the provided // expected values. Exact matches are required on the fields examined. ::testing::AssertionResult VerifyPublicJwk( - const blink::WebArrayBuffer& json, + const std::vector<uint8>& json, const std::string& alg_expected, const std::string& n_expected_hex, const std::string& e_expected_hex, @@ -849,10 +760,10 @@ TEST_F(SharedCryptoTest, DigestSampleSets) { std::vector<uint8> test_input = GetBytesFromHexString(test, "input"); std::vector<uint8> test_output = GetBytesFromHexString(test, "output"); - blink::WebArrayBuffer output; + std::vector<uint8> output; ASSERT_EQ(Status::Success(), Digest(test_algorithm, CryptoData(test_input), &output)); - EXPECT_TRUE(ArrayBufferMatches(test_output, output)); + EXPECT_BYTES_EQ(test_output, output); } } @@ -889,8 +800,7 @@ TEST_F(SharedCryptoTest, DigestSampleSetsInChunks) { begin = begin + chunk_length; } EXPECT_TRUE(digestor->finish(output, output_length)); - ExpectVectorMatches(test_output, - std::vector<uint8>(output, output + output_length)); + EXPECT_BYTES_EQ(test_output, CryptoData(output, output_length)); } } @@ -924,17 +834,17 @@ TEST_F(SharedCryptoTest, HMACSampleSets) { EXPECT_EQ(test_key.size() * 8, key.algorithm().hmacParams()->lengthBits()); // Verify exported raw key is identical to the imported data - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(test_key, raw_key)); + EXPECT_BYTES_EQ(test_key, raw_key); - blink::WebArrayBuffer output; + std::vector<uint8> output; ASSERT_EQ(Status::Success(), Sign(algorithm, key, CryptoData(test_message), &output)); - EXPECT_TRUE(ArrayBufferMatches(test_mac, output)); + EXPECT_BYTES_EQ(test_mac, output); bool signature_match = false; EXPECT_EQ(Status::Success(), @@ -946,14 +856,13 @@ TEST_F(SharedCryptoTest, HMACSampleSets) { EXPECT_TRUE(signature_match); // Ensure truncated signature does not verify by passing one less byte. - EXPECT_EQ(Status::Success(), - VerifySignature( - algorithm, - key, - CryptoData(static_cast<const unsigned char*>(output.data()), - output.byteLength() - 1), - CryptoData(test_message), - &signature_match)); + EXPECT_EQ( + Status::Success(), + VerifySignature(algorithm, + key, + CryptoData(Uint8VectorStart(output), output.size() - 1), + CryptoData(test_message), + &signature_match)); EXPECT_FALSE(signature_match); // Ensure truncated signature does not verify by passing no bytes. @@ -986,12 +895,12 @@ TEST_F(SharedCryptoTest, AesCbcFailures) { blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt); // Verify exported raw key is identical to the imported data - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - ExpectArrayBufferMatchesHex(key_hex, raw_key); + EXPECT_BYTES_EQ_HEX(key_hex, raw_key); - blink::WebArrayBuffer output; + std::vector<uint8> output; // Use an invalid |iv| (fewer than 16 bytes) { @@ -1088,12 +997,12 @@ TEST_F(SharedCryptoTest, MAYBE(AesCbcSampleSets)) { EXPECT_EQ(test_key.size() * 8, key.algorithm().aesParams()->lengthBits()); // Verify exported raw key is identical to the imported data - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(test_key, raw_key)); + EXPECT_BYTES_EQ(test_key, raw_key); - blink::WebArrayBuffer output; + std::vector<uint8> output; // Test encryption. EXPECT_EQ(Status::Success(), @@ -1101,7 +1010,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesCbcSampleSets)) { key, CryptoData(test_plain_text), &output)); - EXPECT_TRUE(ArrayBufferMatches(test_cipher_text, output)); + EXPECT_BYTES_EQ(test_cipher_text, output); // Test decryption. EXPECT_EQ(Status::Success(), @@ -1109,7 +1018,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesCbcSampleSets)) { key, CryptoData(test_cipher_text), &output)); - EXPECT_TRUE(ArrayBufferMatches(test_plain_text, output)); + EXPECT_BYTES_EQ(test_plain_text, output); const unsigned int kAesCbcBlockSize = 16; @@ -1149,8 +1058,8 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyAes)) { algorithm.push_back(CreateAesGcmKeyGenAlgorithm(kKeyLength[i])); } blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); - std::vector<blink::WebArrayBuffer> keys; - blink::WebArrayBuffer key_bytes; + std::vector<std::vector<uint8> > keys; + std::vector<uint8> key_bytes; for (size_t i = 0; i < algorithm.size(); ++i) { SCOPED_TRACE(i); // Generate a small sample of keys. @@ -1162,7 +1071,7 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyAes)) { EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type()); ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_bytes)); - EXPECT_EQ(key_bytes.byteLength() * 8, + EXPECT_EQ(key_bytes.size() * 8, key.algorithm().aesParams()->lengthBits()); keys.push_back(key_bytes); } @@ -1193,9 +1102,9 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyAesBadLength)) { TEST_F(SharedCryptoTest, MAYBE(GenerateKeyHmac)) { // Generate a small sample of HMAC keys. - std::vector<blink::WebArrayBuffer> keys; + std::vector<std::vector<uint8> > keys; for (int i = 0; i < 16; ++i) { - blink::WebArrayBuffer key_bytes; + std::vector<uint8> key_bytes; blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); blink::WebCryptoAlgorithm algorithm = CreateHmacKeyGenAlgorithm(blink::WebCryptoAlgorithmIdSha1, 512); @@ -1208,10 +1117,10 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyHmac)) { key.algorithm().hmacParams()->hash().id()); EXPECT_EQ(512u, key.algorithm().hmacParams()->lengthBits()); - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_EQ(64U, raw_key.byteLength()); + EXPECT_EQ(64U, raw_key.size()); keys.push_back(raw_key); } // Ensure all entries in the key sample set are unique. This is a simplistic @@ -1231,10 +1140,10 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyHmacNoLength)) { EXPECT_EQ(blink::WebCryptoAlgorithmIdSha1, key.algorithm().hmacParams()->hash().id()); EXPECT_EQ(512u, key.algorithm().hmacParams()->lengthBits()); - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_EQ(64U, raw_key.byteLength()); + EXPECT_EQ(64U, raw_key.size()); // The block size for HMAC SHA-512 is larger. algorithm = CreateHmacKeyGenAlgorithm(blink::WebCryptoAlgorithmIdSha512, 0); @@ -1245,7 +1154,7 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyHmacNoLength)) { EXPECT_EQ(1024u, key.algorithm().hmacParams()->lengthBits()); ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_EQ(128U, raw_key.byteLength()); + EXPECT_EQ(128U, raw_key.size()); } TEST_F(SharedCryptoTest, ImportJwkKeyUsage) { @@ -1586,7 +1495,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkRsaPublicKey)) { &public_key)); // Export the public key as JWK and verify its contents - blink::WebArrayBuffer jwk; + std::vector<uint8> jwk; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatJwk, public_key, &jwk)); EXPECT_TRUE(VerifyPublicJwk(jwk, test.jwk_alg, n_hex, e_hex, test.usage)); @@ -1603,10 +1512,10 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkRsaPublicKey)) { EXPECT_EQ(test.algorithm.id(), public_key2.algorithm().id()); // Export the new key as spki and compare to the original. - blink::WebArrayBuffer spki; + std::vector<uint8> spki; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatSpki, public_key2, &spki)); - ExpectCryptoDataMatchesHex(kPublicKeySpkiDerHex, CryptoData(spki)); + EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, CryptoData(spki)); } } @@ -1818,7 +1727,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkHappy)) { "d1b0ae933c65eb06a03c9c935c2bad0459810241347ab87e9f11adb30415424c6c7f5f" "22a003b8ab8de54f6ded0e3ab9245fa79568451dfa258e"); - blink::WebArrayBuffer output; + std::vector<uint8> output; ASSERT_EQ(Status::Success(), Sign(CreateAlgorithm(blink::WebCryptoAlgorithmIdHmac), @@ -1829,7 +1738,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportJwkHappy)) { const std::string mac_raw = "769f00d3e6a6cc1fb426a14a4f76c6462e6149726e0dee0ec0cf97a16605ac8b"; - ExpectArrayBufferMatchesHex(mac_raw, output); + EXPECT_BYTES_EQ_HEX(mac_raw, output); // TODO(padolph): Import an RSA public key JWK and use it } @@ -1919,7 +1828,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkSymmetricKey)) { // Round-trip import/export each key. blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); - blink::WebArrayBuffer json; + std::vector<uint8> json; for (size_t test_index = 0; test_index < ARRAYSIZE_UNSAFE(kTests); ++test_index) { SCOPED_TRACE(test_index); @@ -1951,10 +1860,10 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportJwkSymmetricKey)) { EXPECT_EQ(test.usage, key.usages()); // Export the key in raw format and compare to the original. - blink::WebArrayBuffer key_raw_out; + std::vector<uint8> key_raw_out; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out)); - ExpectArrayBufferMatchesHex(test.key_hex, key_raw_out); + EXPECT_BYTES_EQ_HEX(test.key_hex, key_raw_out); } } @@ -1972,7 +1881,7 @@ TEST_F(SharedCryptoTest, MAYBE(ExportJwkEmptySymmetricKey)) { EXPECT_EQ(0u, key.algorithm().hmacParams()->lengthBits()); // Export the key in JWK format and validate. - blink::WebArrayBuffer json; + std::vector<uint8> json; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatJwk, key, &json)); EXPECT_TRUE(VerifySecretJwk(json, "HS1", key_data_hex, usages)); @@ -1990,11 +1899,11 @@ TEST_F(SharedCryptoTest, MAYBE(ExportJwkEmptySymmetricKey)) { EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type()); EXPECT_EQ(0u, key.algorithm().hmacParams()->lengthBits()); - blink::WebArrayBuffer exported_key_data; + std::vector<uint8> exported_key_data; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &exported_key_data)); - EXPECT_EQ(0u, exported_key_data.byteLength()); + EXPECT_EQ(0u, exported_key_data.size()); } TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) { @@ -2014,7 +1923,7 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) { EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, key.usages()); EXPECT_EQ(kModulusLengthBits, key.algorithm().rsaParams()->modulusLengthBits()); - ExpectCryptoDataMatchesHex( + EXPECT_BYTES_EQ_HEX( "010001", CryptoData(key.algorithm().rsaParams()->publicExponent())); // Failing case: Empty SPKI data @@ -2048,10 +1957,10 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) { // Passing case: Export a previously imported RSA public key in SPKI format // and compare to original data. - blink::WebArrayBuffer output; + std::vector<uint8> output; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatSpki, key, &output)); - ExpectArrayBufferMatchesHex(kPublicKeySpkiDerHex, output); + EXPECT_BYTES_EQ_HEX(kPublicKeySpkiDerHex, output); // Failing case: Try to export a previously imported RSA public key in raw // format (not allowed for a public key). @@ -2093,14 +2002,14 @@ TEST_F(SharedCryptoTest, MAYBE(ImportExportPkcs8)) { key.algorithm().rsaHashedParams()->hash().id()); EXPECT_EQ(kModulusLengthBits, key.algorithm().rsaHashedParams()->modulusLengthBits()); - ExpectCryptoDataMatchesHex( + EXPECT_BYTES_EQ_HEX( "010001", CryptoData(key.algorithm().rsaHashedParams()->publicExponent())); - blink::WebArrayBuffer exported_key; + std::vector<uint8> exported_key; ASSERT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatPkcs8, key, &exported_key)); - ExpectArrayBufferMatchesHex(kPrivateKeyPkcs8DerHex, exported_key); + EXPECT_BYTES_EQ_HEX(kPrivateKeyPkcs8DerHex, exported_key); // Failing case: Empty PKCS#8 data EXPECT_EQ(Status::ErrorImportEmptyKeyData(), @@ -2161,7 +2070,7 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) { // Try exporting the generated key pair, and then re-importing to verify that // the exported data was valid. - blink::WebArrayBuffer public_key_spki; + std::vector<uint8> public_key_spki; EXPECT_EQ( Status::Success(), ExportKey(blink::WebCryptoKeyFormatSpki, public_key, &public_key_spki)); @@ -2177,7 +2086,7 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) { EXPECT_EQ(modulus_length, public_key.algorithm().rsaParams()->modulusLengthBits()); - blink::WebArrayBuffer private_key_pkcs8; + std::vector<uint8> private_key_pkcs8; EXPECT_EQ( Status::Success(), ExportKey( @@ -2306,7 +2215,7 @@ TEST_F(SharedCryptoTest, MAYBE(GenerateKeyPairRsa)) { // Exporting a private key as SPKI format doesn't make sense. However this // will first fail because the key is not extractable. - blink::WebArrayBuffer output; + std::vector<uint8> output; EXPECT_EQ(Status::ErrorKeyNotExtractable(), ExportKey(blink::WebCryptoKeyFormatSpki, private_key, &output)); @@ -2348,8 +2257,8 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRoundTrip)) { algorithm = CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5); const char* const kTestDataHex[] = {"ff", "0102030405060708090a0b0c0d0e0f", max_data_hex}; - blink::WebArrayBuffer encrypted_data; - blink::WebArrayBuffer decrypted_data; + std::vector<uint8> encrypted_data; + std::vector<uint8> decrypted_data; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestDataHex); ++i) { SCOPED_TRACE(i); EXPECT_EQ(Status::Success(), @@ -2357,13 +2266,13 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRoundTrip)) { public_key, CryptoData(HexStringToBytes(kTestDataHex[i])), &encrypted_data)); - EXPECT_EQ(kModulusLengthBits / 8, encrypted_data.byteLength()); + EXPECT_EQ(kModulusLengthBits / 8, encrypted_data.size()); ASSERT_EQ(Status::Success(), Decrypt(algorithm, private_key, CryptoData(encrypted_data), &decrypted_data)); - ExpectArrayBufferMatchesHex(kTestDataHex[i], decrypted_data); + EXPECT_BYTES_EQ_HEX(kTestDataHex[i], decrypted_data); } } @@ -2404,30 +2313,28 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsKnownAnswer)) { // Decrypt the known-good ciphertext with the private key. As a check we must // get the known original cleartext. - blink::WebArrayBuffer decrypted_data; + std::vector<uint8> decrypted_data; ASSERT_EQ( Status::Success(), Decrypt(algorithm, private_key, CryptoData(ciphertext), &decrypted_data)); - EXPECT_FALSE(decrypted_data.isNull()); - EXPECT_TRUE(ArrayBufferMatches(cleartext, decrypted_data)); + EXPECT_BYTES_EQ(cleartext, decrypted_data); // Encrypt this decrypted data with the public key. - blink::WebArrayBuffer encrypted_data; + std::vector<uint8> encrypted_data; ASSERT_EQ( Status::Success(), Encrypt( algorithm, public_key, CryptoData(decrypted_data), &encrypted_data)); - EXPECT_EQ(128u, encrypted_data.byteLength()); + EXPECT_EQ(128u, encrypted_data.size()); // Finally, decrypt the newly encrypted result with the private key, and // compare to the known original cleartext. - decrypted_data.reset(); + decrypted_data.clear(); ASSERT_EQ( Status::Success(), Decrypt( algorithm, private_key, CryptoData(encrypted_data), &decrypted_data)); - EXPECT_FALSE(decrypted_data.isNull()); - EXPECT_TRUE(ArrayBufferMatches(cleartext, decrypted_data)); + EXPECT_EQ(cleartext, decrypted_data); } TEST_F(SharedCryptoTest, MAYBE(RsaEsFailures)) { @@ -2446,7 +2353,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsFailures)) { &private_key); // Fail encrypt with a private key. - blink::WebArrayBuffer encrypted_data; + std::vector<uint8> encrypted_data; const std::string message_hex_str("0102030405060708090a0b0c0d0e0f"); const std::vector<uint8> message_hex(HexStringToBytes(message_hex_str)); EXPECT_EQ( @@ -2476,21 +2383,18 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsFailures)) { Encrypt(algorithm, public_key, CryptoData(message_hex), &encrypted_data)); // Fail decrypt with a public key. - blink::WebArrayBuffer decrypted_data; + std::vector<uint8> decrypted_data; EXPECT_EQ( Status::ErrorUnexpectedKeyType(), Decrypt( algorithm, public_key, CryptoData(encrypted_data), &decrypted_data)); // Corrupt encrypted data; ensure decrypt fails because padding was disrupted. - std::vector<uint8> corrupted_data( - static_cast<uint8*>(encrypted_data.data()), - static_cast<uint8*>(encrypted_data.data()) + encrypted_data.byteLength()); - corrupted_data[corrupted_data.size() / 2] ^= 0x01; - EXPECT_EQ( - Status::OperationError(), - Decrypt( - algorithm, private_key, CryptoData(corrupted_data), &decrypted_data)); + EXPECT_EQ(Status::OperationError(), + Decrypt(algorithm, + private_key, + CryptoData(Corrupted(encrypted_data)), + &decrypted_data)); // TODO(padolph): Are there other specific data corruption scenarios to // consider? @@ -2500,7 +2404,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsFailures)) { Status::Success(), Decrypt( algorithm, private_key, CryptoData(encrypted_data), &decrypted_data)); - ExpectArrayBufferMatchesHex(message_hex_str, decrypted_data); + EXPECT_BYTES_EQ_HEX(message_hex_str, decrypted_data); } TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) { @@ -2523,7 +2427,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) { blink::WebCryptoAlgorithm algorithm = CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5); - blink::WebArrayBuffer signature; + std::vector<uint8> signature; bool signature_match; // Compute a signature. @@ -2532,15 +2436,13 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) { Sign(algorithm, private_key, CryptoData(data), &signature)); // Ensure truncated signature does not verify by passing one less byte. - EXPECT_EQ( - Status::Success(), - VerifySignature( - algorithm, - public_key, - CryptoData(reinterpret_cast<const unsigned char*>(signature.data()), - signature.byteLength() - 1), - CryptoData(data), - &signature_match)); + EXPECT_EQ(Status::Success(), + VerifySignature( + algorithm, + public_key, + CryptoData(Uint8VectorStart(signature), signature.size() - 1), + CryptoData(data), + &signature_match)); EXPECT_FALSE(signature_match); // Ensure truncated signature does not verify by passing no bytes. @@ -2553,9 +2455,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSsaSignVerifyFailures)) { EXPECT_FALSE(signature_match); // Ensure corrupted signature does not verify. - std::vector<uint8> corrupt_sig( - static_cast<uint8*>(signature.data()), - static_cast<uint8*>(signature.data()) + signature.byteLength()); + std::vector<uint8> corrupt_sig = signature; corrupt_sig[corrupt_sig.size() / 2] ^= 0x1; EXPECT_EQ(Status::Success(), VerifySignature(algorithm, @@ -2672,7 +2572,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSignVerifyKnownAnswer)) { CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5); // Validate the signatures are computed and verified as expected. - blink::WebArrayBuffer signature; + std::vector<uint8> signature; for (size_t test_index = 0; test_index < tests->GetSize(); ++test_index) { SCOPED_TRACE(test_index); @@ -2684,11 +2584,11 @@ TEST_F(SharedCryptoTest, MAYBE(RsaSignVerifyKnownAnswer)) { std::vector<uint8> test_signature = GetBytesFromHexString(test, "signature_hex"); - signature.reset(); + signature.clear(); ASSERT_EQ( Status::Success(), Sign(algorithm, private_key, CryptoData(test_message), &signature)); - EXPECT_TRUE(ArrayBufferMatches(test_signature, signature)); + EXPECT_BYTES_EQ(test_signature, signature); bool is_match = false; ASSERT_EQ(Status::Success(), @@ -2715,10 +2615,10 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwKeyImport)) { true, blink::WebCryptoKeyUsageWrapKey, &key)); - blink::WebArrayBuffer key_raw_out; + std::vector<uint8> key_raw_out; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out)); - ExpectArrayBufferMatchesHex(key_raw_hex_in, key_raw_out); + EXPECT_BYTES_EQ_HEX(key_raw_hex_in, key_raw_out); // Import a 192-bit KEK key_raw_hex_in = "c0192c6466b2370decbb62b2cfef4384544ffeb4d2fbc103"; @@ -2731,7 +2631,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwKeyImport)) { &key)); EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out)); - ExpectArrayBufferMatchesHex(key_raw_hex_in, key_raw_out); + EXPECT_BYTES_EQ_HEX(key_raw_hex_in, key_raw_out); // Import a 256-bit Key Encryption Key (KEK) key_raw_hex_in = @@ -2745,7 +2645,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwKeyImport)) { &key)); EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out)); - ExpectArrayBufferMatchesHex(key_raw_hex_in, key_raw_out); + EXPECT_BYTES_EQ_HEX(key_raw_hex_in, key_raw_out); // Fail import of 0 length key EXPECT_EQ(Status::ErrorImportAesKeyLength(), @@ -2861,14 +2761,14 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapKnownAnswer)) { blink::WebCryptoKeyUsageEncrypt); // Wrap the key and verify the ciphertext result against the known answer. - blink::WebArrayBuffer wrapped_key; + std::vector<uint8> wrapped_key; ASSERT_EQ(Status::Success(), WrapKey(blink::WebCryptoKeyFormatRaw, wrapping_key, key, wrapping_algorithm, &wrapped_key)); - EXPECT_TRUE(ArrayBufferMatches(test_ciphertext, wrapped_key)); + EXPECT_BYTES_EQ(test_ciphertext, wrapped_key); // Unwrap the known ciphertext to get a new test_key. blink::WebCryptoKey unwrapped_key = blink::WebCryptoKey::createNull(); @@ -2892,10 +2792,10 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwRawSymkeyWrapUnwrapKnownAnswer)) { EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, key.usages()); // Export the new key and compare its raw bytes with the original known key. - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(test_key, raw_key)); + EXPECT_BYTES_EQ(test_key, raw_key); } } @@ -3035,10 +2935,10 @@ TEST_F(SharedCryptoTest, MAYBE(AesKwJwkSymkeyUnwrapKnownData)) { EXPECT_EQ(blink::WebCryptoKeyUsageVerify, unwrapped_key.usages()); // Export the new key's raw data and compare to the known original. - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(key_data, raw_key)); + EXPECT_BYTES_EQ(key_data, raw_key); } // TODO(eroman): @@ -3079,11 +2979,11 @@ TEST_F(SharedCryptoTest, MAYBE(AesGcmSampleSets)) { blink::WebCryptoKeyUsageEncrypt | blink::WebCryptoKeyUsageDecrypt); // Verify exported raw key is identical to the imported data - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(test_key, raw_key)); + EXPECT_BYTES_EQ(test_key, raw_key); // Test encryption. std::vector<uint8> cipher_text; @@ -3097,11 +2997,11 @@ TEST_F(SharedCryptoTest, MAYBE(AesGcmSampleSets)) { &cipher_text, &authentication_tag)); - ExpectVectorMatches(test_cipher_text, cipher_text); - ExpectVectorMatches(test_authentication_tag, authentication_tag); + EXPECT_BYTES_EQ(test_cipher_text, cipher_text); + EXPECT_BYTES_EQ(test_authentication_tag, authentication_tag); // Test decryption. - blink::WebArrayBuffer plain_text; + std::vector<uint8> plain_text; EXPECT_EQ(Status::Success(), AesGcmDecrypt(key, test_iv, @@ -3110,7 +3010,7 @@ TEST_F(SharedCryptoTest, MAYBE(AesGcmSampleSets)) { test_cipher_text, test_authentication_tag, &plain_text)); - EXPECT_TRUE(ArrayBufferMatches(test_plain_text, plain_text)); + EXPECT_BYTES_EQ(test_plain_text, plain_text); // Decryption should fail if any of the inputs are tampered with. EXPECT_EQ(Status::OperationError(), @@ -3204,7 +3104,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapKnownAnswer)) { &key)); // Wrap the symmetric key with raw format. - blink::WebArrayBuffer wrapped_key; + std::vector<uint8> wrapped_key; ASSERT_EQ(Status::Success(), WrapKey(blink::WebCryptoKeyFormatRaw, public_key, @@ -3231,10 +3131,10 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapKnownAnswer)) { EXPECT_EQ(blink::WebCryptoKeyUsageSign, key.usages()); // Export the new key and compare its raw bytes with the original known data. - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(cleartext, raw_key)); + EXPECT_BYTES_EQ(cleartext, raw_key); // Unwrap the known wrapped key and compare to the known cleartext. ASSERT_EQ(Status::Success(), @@ -3248,7 +3148,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapKnownAnswer)) { &unwrapped_key)); EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(cleartext, raw_key)); + EXPECT_BYTES_EQ(cleartext, raw_key); } TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapErrors)) { @@ -3281,7 +3181,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsRawSymkeyWrapUnwrapErrors)) { &key)); // Wrapping with a private key should fail. - blink::WebArrayBuffer wrapped_key; + std::vector<uint8> wrapped_key; EXPECT_EQ(Status::ErrorUnexpectedKeyType(), WrapKey(blink::WebCryptoKeyFormatRaw, private_key, @@ -3393,10 +3293,10 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyUnwrapKnownAnswer)) { EXPECT_EQ(blink::WebCryptoKeyUsageEncrypt, unwrapped_key.usages()); // Export the unwrapped key and compare to the original. - blink::WebArrayBuffer raw_key; + std::vector<uint8> raw_key; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key)); - EXPECT_TRUE(ArrayBufferMatches(key_data, raw_key)); + EXPECT_BYTES_EQ(key_data, raw_key); } TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapRoundTrip)) { @@ -3424,7 +3324,7 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapRoundTrip)) { &private_wrapping_key); // Wrap the symkey in JWK format, using the public wrapping key. - blink::WebArrayBuffer wrapped_data; + std::vector<uint8> wrapped_data; ASSERT_EQ(Status::Success(), WrapKey(blink::WebCryptoKeyFormatJwk, public_wrapping_key, @@ -3445,12 +3345,12 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapRoundTrip)) { &unwrapped_key)); // Export the original symkey and the unwrapped key and compare. - blink::WebArrayBuffer raw_key1, raw_key2; + std::vector<uint8> raw_key1, raw_key2; EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, key_to_wrap, &raw_key1)); EXPECT_EQ(Status::Success(), ExportKey(blink::WebCryptoKeyFormatRaw, unwrapped_key, &raw_key2)); - EXPECT_TRUE(ArrayBuffersEqual(raw_key1, raw_key2)); + EXPECT_BYTES_EQ(raw_key1, raw_key2); } TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapErrors)) { @@ -3489,15 +3389,13 @@ TEST_F(SharedCryptoTest, MAYBE(RsaEsJwkSymkeyWrapUnwrapErrors)) { // Decrypt the ciphertext and validate the result, to prove that decryption is // successful. - blink::WebArrayBuffer decrypted_data; + std::vector<uint8> decrypted_data; ASSERT_EQ(Status::Success(), Decrypt(algorithm, private_decryption_key, CryptoData(ciphertext), &decrypted_data)); - const std::string decrypted(static_cast<const char*>(decrypted_data.data()), - decrypted_data.byteLength()); - EXPECT_EQ(cleartext, decrypted); + EXPECT_BYTES_EQ(cleartext, decrypted_data); // Import the private wrapping key. Note this is the same underlying keying // material used for private_decryption_key above. The only difference is that |