xref: /aosp_15_r20/external/tink/cc/hybrid/internal/hpke_util_boringssl_test.cc (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1 // Copyright 2021 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 ///////////////////////////////////////////////////////////////////////////////
16 
17 #include "tink/hybrid/internal/hpke_util_boringssl.h"
18 
19 #include <string>
20 
21 #include "gtest/gtest.h"
22 #include "openssl/base.h"
23 #include "openssl/hpke.h"
24 #include "tink/hybrid/internal/hpke_test_util.h"
25 #include "tink/hybrid/internal/hpke_util.h"
26 #include "tink/util/test_matchers.h"
27 #include "tink/util/test_util.h"
28 #include "proto/hpke.pb.h"
29 
30 namespace crypto {
31 namespace tink {
32 namespace internal {
33 namespace {
34 
35 using ::crypto::tink::test::IsOk;
36 using ::testing::Eq;
37 using ::testing::Not;
38 
TEST(HpkeUtilBoringSslTest,ValidParamsFromProto)39 TEST(HpkeUtilBoringSslTest, ValidParamsFromProto) {
40   google::crypto::tink::HpkeParams params =
41       CreateHpkeParams(google::crypto::tink::HpkeKem::DHKEM_X25519_HKDF_SHA256,
42                        google::crypto::tink::HpkeKdf::HKDF_SHA256,
43                        google::crypto::tink::HpkeAead::AES_256_GCM);
44 
45   util::StatusOr<const EVP_HPKE_KEM *> kem_from_enum =
46       KemParam(google::crypto::tink::HpkeKem::DHKEM_X25519_HKDF_SHA256);
47   ASSERT_THAT(kem_from_enum, IsOk());
48   EXPECT_THAT(EVP_HPKE_KEM_id(*kem_from_enum),
49               Eq(EVP_HPKE_DHKEM_X25519_HKDF_SHA256));
50 
51   util::StatusOr<const EVP_HPKE_KEM *> kem_from_proto = KemParam(params);
52   ASSERT_THAT(kem_from_proto, IsOk());
53   EXPECT_THAT(EVP_HPKE_KEM_id(*kem_from_proto),
54               Eq(EVP_HPKE_DHKEM_X25519_HKDF_SHA256));
55 
56   util::StatusOr<const EVP_HPKE_KDF *> kdf = KdfParam(params);
57   ASSERT_THAT(kdf, IsOk());
58   EXPECT_THAT(EVP_HPKE_KDF_id(*kdf), Eq(EVP_HPKE_HKDF_SHA256));
59 
60   util::StatusOr<const EVP_HPKE_AEAD *> aead = AeadParam(params);
61   ASSERT_THAT(aead, IsOk());
62   EXPECT_THAT(EVP_HPKE_AEAD_id(*aead), Eq(EVP_HPKE_AES_256_GCM));
63 }
64 
TEST(HpkeUtilBoringSslTest,ValidParamsFromStruct)65 TEST(HpkeUtilBoringSslTest, ValidParamsFromStruct) {
66   HpkeParams params = {HpkeKem::kX25519HkdfSha256, HpkeKdf::kHkdfSha256,
67                        HpkeAead::kAes256Gcm};
68 
69   util::StatusOr<const EVP_HPKE_KEM *> kem_from_proto = KemParam(params);
70   ASSERT_THAT(kem_from_proto, IsOk());
71   EXPECT_THAT(EVP_HPKE_KEM_id(*kem_from_proto),
72               Eq(EVP_HPKE_DHKEM_X25519_HKDF_SHA256));
73 
74   util::StatusOr<const EVP_HPKE_KDF *> kdf = KdfParam(params);
75   ASSERT_THAT(kdf, IsOk());
76   EXPECT_THAT(EVP_HPKE_KDF_id(*kdf), Eq(EVP_HPKE_HKDF_SHA256));
77 
78   util::StatusOr<const EVP_HPKE_AEAD *> aead = AeadParam(params);
79   ASSERT_THAT(aead, IsOk());
80   EXPECT_THAT(EVP_HPKE_AEAD_id(*aead), Eq(EVP_HPKE_AES_256_GCM));
81 }
82 
TEST(HpkeUtilBoringSslTest,UnknownKemParamFromProto)83 TEST(HpkeUtilBoringSslTest, UnknownKemParamFromProto) {
84   google::crypto::tink::HpkeParams params =
85       CreateHpkeParams(google::crypto::tink::HpkeKem::KEM_UNKNOWN,
86                        google::crypto::tink::HpkeKdf::HKDF_SHA256,
87                        google::crypto::tink::HpkeAead::AES_256_GCM);
88   EXPECT_THAT(KemParam(params), Not(IsOk()));
89   EXPECT_THAT(KdfParam(params), IsOk());
90   EXPECT_THAT(AeadParam(params), IsOk());
91 }
92 
TEST(HpkeUtilBoringSslTest,UnknownKemParamFromStruct)93 TEST(HpkeUtilBoringSslTest, UnknownKemParamFromStruct) {
94   HpkeParams params = {HpkeKem::kUnknownKem, HpkeKdf::kHkdfSha256,
95                        HpkeAead::kAes256Gcm};
96   EXPECT_THAT(KemParam(params), Not(IsOk()));
97   EXPECT_THAT(KdfParam(params), IsOk());
98   EXPECT_THAT(AeadParam(params), IsOk());
99 }
100 
TEST(HpkeUtilBoringSslTest,UnknownKdfParamFromProto)101 TEST(HpkeUtilBoringSslTest, UnknownKdfParamFromProto) {
102   google::crypto::tink::HpkeParams params =
103       CreateHpkeParams(google::crypto::tink::HpkeKem::DHKEM_X25519_HKDF_SHA256,
104                        google::crypto::tink::HpkeKdf::KDF_UNKNOWN,
105                        google::crypto::tink::HpkeAead::AES_256_GCM);
106   EXPECT_THAT(KemParam(params), IsOk());
107   EXPECT_THAT(KdfParam(params), Not(IsOk()));
108   EXPECT_THAT(AeadParam(params), IsOk());
109 }
110 
TEST(HpkeUtilBoringSslTest,UnknownKdfParamFromStruct)111 TEST(HpkeUtilBoringSslTest, UnknownKdfParamFromStruct) {
112   HpkeParams params = {HpkeKem::kX25519HkdfSha256, HpkeKdf::kUnknownKdf,
113                        HpkeAead::kAes256Gcm};
114   EXPECT_THAT(KemParam(params), IsOk());
115   EXPECT_THAT(KdfParam(params), Not(IsOk()));
116   EXPECT_THAT(AeadParam(params), IsOk());
117 }
118 
TEST(HpkeUtilBoringSslTest,UnknownAeadParamFromProto)119 TEST(HpkeUtilBoringSslTest, UnknownAeadParamFromProto) {
120   google::crypto::tink::HpkeParams params =
121       CreateHpkeParams(google::crypto::tink::HpkeKem::DHKEM_X25519_HKDF_SHA256,
122                        google::crypto::tink::HpkeKdf::HKDF_SHA256,
123                        google::crypto::tink::HpkeAead::AEAD_UNKNOWN);
124   EXPECT_THAT(KemParam(params), IsOk());
125   EXPECT_THAT(KdfParam(params), IsOk());
126   EXPECT_THAT(AeadParam(params), Not(IsOk()));
127 }
128 
TEST(HpkeUtilBoringSslTest,UnknownAeadParamFromStruct)129 TEST(HpkeUtilBoringSslTest, UnknownAeadParamFromStruct) {
130   HpkeParams params = {HpkeKem::kX25519HkdfSha256, HpkeKdf::kHkdfSha256,
131                        HpkeAead::kUnknownAead};
132   EXPECT_THAT(KemParam(params), IsOk());
133   EXPECT_THAT(KdfParam(params), IsOk());
134   EXPECT_THAT(AeadParam(params), Not(IsOk()));
135 }
136 
137 }  // namespace
138 }  // namespace internal
139 }  // namespace tink
140 }  // namespace crypto
141