| Index: content/child/webcrypto/test/status_unittest.cc
|
| diff --git a/content/child/webcrypto/openssl/aes_gcm_openssl.cc b/content/child/webcrypto/test/status_unittest.cc
|
| similarity index 18%
|
| copy from content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| copy to content/child/webcrypto/test/status_unittest.cc
|
| index a3e1cd31a5591646b06a696aece119664f7a6e97..11d014e482532e803eb52394828217395a62c47a 100644
|
| --- a/content/child/webcrypto/openssl/aes_gcm_openssl.cc
|
| +++ b/content/child/webcrypto/test/status_unittest.cc
|
| @@ -2,20 +2,15 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include <vector>
|
| -#include <openssl/evp.h>
|
| -
|
| -#include "base/logging.h"
|
| #include "base/stl_util.h"
|
| +#include "content/child/webcrypto/algorithm_dispatch.h"
|
| #include "content/child/webcrypto/crypto_data.h"
|
| -#include "content/child/webcrypto/openssl/aes_key_openssl.h"
|
| -#include "content/child/webcrypto/openssl/key_openssl.h"
|
| -#include "content/child/webcrypto/openssl/util_openssl.h"
|
| #include "content/child/webcrypto/status.h"
|
| +#include "content/child/webcrypto/test/test_helpers.h"
|
| #include "content/child/webcrypto/webcrypto_util.h"
|
| -#include "crypto/openssl_util.h"
|
| -#include "crypto/scoped_openssl_types.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 {
|
|
|
| @@ -23,66 +18,61 @@ namespace webcrypto {
|
|
|
| namespace {
|
|
|
| -const EVP_AEAD* GetAesGcmAlgorithmFromKeySize(unsigned int key_size_bytes) {
|
| - switch (key_size_bytes) {
|
| - case 16:
|
| - return EVP_aead_aes_128_gcm();
|
| - case 32:
|
| - return EVP_aead_aes_256_gcm();
|
| - default:
|
| - return NULL;
|
| - }
|
| -}
|
| -
|
| -Status AesGcmEncryptDecrypt(EncryptOrDecrypt mode,
|
| - const blink::WebCryptoAlgorithm& algorithm,
|
| - const blink::WebCryptoKey& key,
|
| - const CryptoData& data,
|
| - std::vector<uint8_t>* buffer) {
|
| - const std::vector<uint8_t>& raw_key =
|
| - SymKeyOpenSsl::Cast(key)->raw_key_data();
|
| - const blink::WebCryptoAesGcmParams* params = algorithm.aesGcmParams();
|
| -
|
| - unsigned int tag_length_bits;
|
| - Status status = GetAesGcmTagLengthInBits(params, &tag_length_bits);
|
| - if (status.IsError())
|
| - return status;
|
| -
|
| - return AeadEncryptDecrypt(mode,
|
| - raw_key,
|
| - data,
|
| - tag_length_bits / 8,
|
| - CryptoData(params->iv()),
|
| - CryptoData(params->optionalAdditionalData()),
|
| - GetAesGcmAlgorithmFromKeySize(raw_key.size()),
|
| - buffer);
|
| +// Tests several Status objects against their expected hard coded values, as
|
| +// well as ensuring that comparison of Status objects works.
|
| +// Comparison should take into account both the error details, as well as the
|
| +// error type.
|
| +TEST(WebCryptoStatusTest, Basic) {
|
| + // Even though the error message is the same, these should not be considered
|
| + // the same by the tests because the error type is different.
|
| + EXPECT_NE(Status::DataError(), Status::OperationError());
|
| + EXPECT_NE(Status::Success(), Status::OperationError());
|
| +
|
| + EXPECT_EQ(Status::Success(), Status::Success());
|
| + EXPECT_EQ(Status::ErrorJwkPropertyWrongType("kty", "string"),
|
| + Status::ErrorJwkPropertyWrongType("kty", "string"));
|
| +
|
| + Status status = Status::Success();
|
| +
|
| + EXPECT_FALSE(status.IsError());
|
| + EXPECT_EQ("", status.error_details());
|
| +
|
| + status = Status::OperationError();
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("", status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeOperation, status.error_type());
|
| +
|
| + status = Status::DataError();
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("", status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeData, status.error_type());
|
| +
|
| + status = Status::ErrorUnsupported();
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("The requested operation is unsupported", status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeNotSupported, status.error_type());
|
| +
|
| + status = Status::ErrorJwkPropertyMissing("kty");
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("The required JWK property \"kty\" was missing",
|
| + status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeData, status.error_type());
|
| +
|
| + status = Status::ErrorJwkPropertyWrongType("kty", "string");
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("The JWK property \"kty\" must be a string",
|
| + status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeData, status.error_type());
|
| +
|
| + status = Status::ErrorJwkBase64Decode("n");
|
| + EXPECT_TRUE(status.IsError());
|
| + EXPECT_EQ("The JWK property \"n\" could not be base64 decoded",
|
| + status.error_details());
|
| + EXPECT_EQ(blink::WebCryptoErrorTypeData, status.error_type());
|
| }
|
|
|
| -class AesGcmImplementation : public AesAlgorithm {
|
| - public:
|
| - AesGcmImplementation() : AesAlgorithm("GCM") {}
|
| -
|
| - virtual Status Encrypt(const blink::WebCryptoAlgorithm& algorithm,
|
| - const blink::WebCryptoKey& key,
|
| - const CryptoData& data,
|
| - std::vector<uint8_t>* buffer) const OVERRIDE {
|
| - return AesGcmEncryptDecrypt(ENCRYPT, algorithm, key, data, buffer);
|
| - }
|
| -
|
| - virtual Status Decrypt(const blink::WebCryptoAlgorithm& algorithm,
|
| - const blink::WebCryptoKey& key,
|
| - const CryptoData& data,
|
| - std::vector<uint8_t>* buffer) const OVERRIDE {
|
| - return AesGcmEncryptDecrypt(DECRYPT, algorithm, key, data, buffer);
|
| - }
|
| -};
|
| -
|
| } // namespace
|
|
|
| -AlgorithmImplementation* CreatePlatformAesGcmImplementation() {
|
| - return new AesGcmImplementation;
|
| -}
|
| -
|
| } // namespace webcrypto
|
|
|
| } // namespace content
|
|
|