1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/crosapi/cpp/keystore_service_util.h"
#include <optional>
#include "base/numerics/safe_math.h"
#include "base/values.h"
#include "chromeos/crosapi/mojom/keystore_service.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace crosapi {
namespace keystore_service_util {
static constexpr unsigned int kModulusLength = 1024;
static constexpr bool kSoftwareBacked = true;
// Equals to 65537.
static constexpr uint8_t kDefaultPublicExponent[] = {0x01, 0x00, 0x01};
TEST(KeystoreServiceUtil, EcdsaDictionary) {
base::Value::Dict value;
value.Set("name", kWebCryptoEcdsa);
value.Set("namedCurve", kWebCryptoNamedCurveP256);
std::optional<crosapi::mojom::KeystoreAlgorithmPtr> ptr =
MakeKeystoreAlgorithmFromDictionary(value);
ASSERT_TRUE(ptr);
std::optional<base::Value::Dict> value2 =
MakeDictionaryFromKeystoreAlgorithm(ptr.value());
ASSERT_TRUE(value2);
EXPECT_EQ(value, value2);
}
TEST(KeystoreServiceUtil, RsassaPkcs1v15Dictionary) {
base::Value::Dict value;
value.Set("name", kWebCryptoRsassaPkcs1v15);
value.Set("modulusLength", base::checked_cast<int>(kModulusLength));
value.Set("publicExponent",
base::Value::BlobStorage(std::begin(kDefaultPublicExponent),
std::end(kDefaultPublicExponent)));
std::optional<crosapi::mojom::KeystoreAlgorithmPtr> ptr =
MakeKeystoreAlgorithmFromDictionary(value);
ASSERT_TRUE(ptr);
std::optional<base::Value::Dict> value2 =
MakeDictionaryFromKeystoreAlgorithm(ptr.value());
ASSERT_TRUE(value2);
EXPECT_EQ(value, value2);
}
TEST(KeystoreServiceUtil, RsaOaepDictionary) {
base::Value::Dict value;
value.Set("name", kWebCryptoRsaOaep);
value.Set("modulusLength", base::checked_cast<int>(kModulusLength));
value.Set("publicExponent",
base::Value::BlobStorage(std::begin(kDefaultPublicExponent),
std::end(kDefaultPublicExponent)));
std::optional<crosapi::mojom::KeystoreAlgorithmPtr> ptr =
MakeKeystoreAlgorithmFromDictionary(value);
ASSERT_TRUE(ptr);
std::optional<base::Value::Dict> value2 =
MakeDictionaryFromKeystoreAlgorithm(ptr.value());
ASSERT_TRUE(value2);
EXPECT_EQ(value, value2);
}
TEST(KeystoreServiceUtil, MakeRsassaPkcs1v15KeystoreAlgorithm) {
crosapi::mojom::KeystoreAlgorithmPtr algorithm_ptr =
MakeRsassaPkcs1v15KeystoreAlgorithm(kModulusLength, kSoftwareBacked);
EXPECT_EQ(algorithm_ptr->which(),
crosapi::mojom::KeystoreAlgorithm::Tag::kRsassaPkcs115);
EXPECT_EQ(algorithm_ptr->get_rsassa_pkcs115()->modulus_length,
kModulusLength);
EXPECT_TRUE(algorithm_ptr->get_rsassa_pkcs115()->sw_backed);
}
TEST(KeystoreServiceUtil, MakeRsaOaepKeystoreAlgorithm) {
crosapi::mojom::KeystoreAlgorithmPtr algorithm_ptr =
MakeRsaOaepKeystoreAlgorithm(kModulusLength, kSoftwareBacked);
EXPECT_EQ(algorithm_ptr->which(),
crosapi::mojom::KeystoreAlgorithm::Tag::kRsaOaep);
EXPECT_EQ(algorithm_ptr->get_rsa_oaep()->modulus_length, kModulusLength);
EXPECT_TRUE(algorithm_ptr->get_rsa_oaep()->sw_backed);
}
TEST(KeystoreServiceUtil, MakeEcdsaKeystoreAlgorithm) {
crosapi::mojom::KeystoreAlgorithmPtr algorithm_ptr =
MakeEcdsaKeystoreAlgorithm(kWebCryptoNamedCurveP256);
EXPECT_EQ(algorithm_ptr->which(),
crosapi::mojom::KeystoreAlgorithm::Tag::kEcdsa);
EXPECT_EQ(algorithm_ptr->get_ecdsa()->named_curve, kWebCryptoNamedCurveP256);
}
} // namespace keystore_service_util
} // namespace crosapi
|