1 /*
2 * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6 #include <psa/crypto.h>
7 #include <service/crypto/protobuf/key_attributes.pb.h>
8 #include <CppUTest/TestHarness.h>
9
10 /*
11 * Check alignment of Crypto service protobuf protocol definitions for
12 * alignment with PSA C API definitions.
13 */
TEST_GROUP(CryptoProtocolProtobufChecks)14 TEST_GROUP(CryptoProtocolProtobufChecks)
15 {
16
17 };
18
TEST(CryptoProtocolProtobufChecks,checkKeyType)19 TEST(CryptoProtocolProtobufChecks, checkKeyType)
20 {
21 /*
22 * Check alignment between PSA and protobuf key type definitions
23 */
24 CHECK_EQUAL(PSA_KEY_TYPE_RAW_DATA, ts_crypto_KeyType_KEY_TYPE_RAW_DATA);
25 CHECK_EQUAL(PSA_KEY_TYPE_HMAC, ts_crypto_KeyType_KEY_TYPE_HMAC);
26 CHECK_EQUAL(PSA_KEY_TYPE_DERIVE, ts_crypto_KeyType_KEY_TYPE_DERIVE);
27 CHECK_EQUAL(PSA_KEY_TYPE_AES, ts_crypto_KeyType_KEY_TYPE_AES);
28 CHECK_EQUAL(PSA_KEY_TYPE_DES, ts_crypto_KeyType_KEY_TYPE_DES);
29 CHECK_EQUAL(PSA_KEY_TYPE_CAMELLIA, ts_crypto_KeyType_KEY_TYPE_CAMELLIA);
30 CHECK_EQUAL(PSA_KEY_TYPE_CHACHA20, ts_crypto_KeyType_KEY_TYPE_CHACHA20);
31 CHECK_EQUAL(PSA_KEY_TYPE_RSA_PUBLIC_KEY, ts_crypto_KeyType_KEY_TYPE_RSA_PUBLIC_KEY);
32 CHECK_EQUAL(PSA_KEY_TYPE_RSA_KEY_PAIR, ts_crypto_KeyType_KEY_TYPE_RSA_KEY_PAIR);
33 }
34
TEST(CryptoProtocolProtobufChecks,checkEccCurve)35 TEST(CryptoProtocolProtobufChecks, checkEccCurve)
36 {
37 /*
38 * ECC curves for use with ECC Key types
39 */
40 CHECK_EQUAL(PSA_ECC_FAMILY_SECP_K1, ts_crypto_EccCurve_ECC_FAMILY_SECP_K1);
41 CHECK_EQUAL(PSA_ECC_FAMILY_SECP_R1, ts_crypto_EccCurve_ECC_FAMILY_SECP_R1);
42 CHECK_EQUAL(PSA_ECC_FAMILY_SECP_R2, ts_crypto_EccCurve_ECC_FAMILY_SECP_R2);
43 CHECK_EQUAL(PSA_ECC_FAMILY_SECT_K1, ts_crypto_EccCurve_ECC_FAMILY_SECT_K1);
44 CHECK_EQUAL(PSA_ECC_FAMILY_SECT_R1, ts_crypto_EccCurve_ECC_FAMILY_SECT_R1);
45 CHECK_EQUAL(PSA_ECC_FAMILY_SECT_R2, ts_crypto_EccCurve_ECC_FAMILY_SECT_R2);
46 CHECK_EQUAL(PSA_ECC_FAMILY_BRAINPOOL_P_R1, ts_crypto_EccCurve_ECC_FAMILY_BRAINPOOL_P_R1);
47 CHECK_EQUAL(PSA_ECC_FAMILY_MONTGOMERY, ts_crypto_EccCurve_ECC_FAMILY_MONTGOMERY);
48 }
49
TEST(CryptoProtocolProtobufChecks,checkDhGroup)50 TEST(CryptoProtocolProtobufChecks, checkDhGroup)
51 {
52 /*
53 * Diffie-Hellman groups for use with DH key types
54 */
55 CHECK_EQUAL(PSA_DH_FAMILY_RFC7919, ts_crypto_DhGroup_DH_FAMILY_RFC7919);
56 }
57
TEST(CryptoProtocolProtobufChecks,checkAlg)58 TEST(CryptoProtocolProtobufChecks, checkAlg)
59 {
60 /*
61 * Crypto algorithms
62 */
63 CHECK_EQUAL(PSA_ALG_MD5, ts_crypto_Alg_ALG_MD5);
64 CHECK_EQUAL(PSA_ALG_RIPEMD160, ts_crypto_Alg_ALG_RIPEMD160);
65 CHECK_EQUAL(PSA_ALG_SHA_1, ts_crypto_Alg_ALG_SHA_1);
66 CHECK_EQUAL(PSA_ALG_SHA_224, ts_crypto_Alg_ALG_SHA_224);
67 CHECK_EQUAL(PSA_ALG_SHA_256, ts_crypto_Alg_ALG_SHA_256);
68 CHECK_EQUAL(PSA_ALG_SHA_384, ts_crypto_Alg_ALG_SHA_384);
69 CHECK_EQUAL(PSA_ALG_SHA_512, ts_crypto_Alg_ALG_SHA_512);
70 CHECK_EQUAL(PSA_ALG_SHA_512_224, ts_crypto_Alg_ALG_SHA_512_224);
71 CHECK_EQUAL(PSA_ALG_SHA_512_256, ts_crypto_Alg_ALG_SHA_512_256);
72 CHECK_EQUAL(PSA_ALG_SHA3_224, ts_crypto_Alg_ALG_SHA3_224);
73 CHECK_EQUAL(PSA_ALG_SHA3_256, ts_crypto_Alg_ALG_SHA3_256);
74 CHECK_EQUAL(PSA_ALG_SHA3_384, ts_crypto_Alg_ALG_SHA3_384);
75 CHECK_EQUAL(PSA_ALG_SHA3_512, ts_crypto_Alg_ALG_SHA3_512);
76 CHECK_EQUAL(PSA_ALG_CBC_MAC, ts_crypto_Alg_ALG_CBC_MAC);
77 CHECK_EQUAL(PSA_ALG_CMAC, ts_crypto_Alg_ALG_CMAC);
78 CHECK_EQUAL(PSA_ALG_STREAM_CIPHER, ts_crypto_Alg_ALG_STREAM_CIPHER);
79 CHECK_EQUAL(PSA_ALG_CTR, ts_crypto_Alg_ALG_CTR);
80 CHECK_EQUAL(PSA_ALG_CFB, ts_crypto_Alg_ALG_CFB);
81 CHECK_EQUAL(PSA_ALG_OFB, ts_crypto_Alg_ALG_OFB);
82 CHECK_EQUAL(PSA_ALG_XTS, ts_crypto_Alg_ALG_XTS);
83 CHECK_EQUAL(PSA_ALG_CBC_NO_PADDING, ts_crypto_Alg_ALG_CBC_NO_PADDING);
84 CHECK_EQUAL(PSA_ALG_CBC_PKCS7, ts_crypto_Alg_ALG_CBC_PKCS7);
85 CHECK_EQUAL(PSA_ALG_CCM, ts_crypto_Alg_ALG_CCM);
86 CHECK_EQUAL(PSA_ALG_GCM, ts_crypto_Alg_ALG_GCM);
87 CHECK_EQUAL(PSA_ALG_CHACHA20_POLY1305, ts_crypto_Alg_ALG_CHACHA20_POLY1305);
88 CHECK_EQUAL(PSA_ALG_RSA_PKCS1V15_CRYPT, ts_crypto_Alg_ALG_RSA_PKCS1V15_CRYPT);
89 CHECK_EQUAL(PSA_ALG_FFDH, ts_crypto_Alg_ALG_FFDH);
90 CHECK_EQUAL(PSA_ALG_ECDH, ts_crypto_Alg_ALG_ECDH);
91 }
92
TEST(CryptoProtocolProtobufChecks,checkKeyLifetime)93 TEST(CryptoProtocolProtobufChecks, checkKeyLifetime)
94 {
95 /*
96 * Key lifetime
97 */
98 CHECK_EQUAL(PSA_KEY_LIFETIME_VOLATILE, ts_crypto_KeyLifetime_KEY_LIFETIME_VOLATILE);
99 CHECK_EQUAL(PSA_KEY_LIFETIME_PERSISTENT, ts_crypto_KeyLifetime_KEY_LIFETIME_PERSISTENT);
100 }
101
TEST(CryptoProtocolProtobufChecks,checkKeyUsage)102 TEST(CryptoProtocolProtobufChecks, checkKeyUsage)
103 {
104 /*
105 * Key usage constraints
106 */
107 CHECK_EQUAL(PSA_KEY_USAGE_EXPORT, ts_crypto_KeyUsage_KEY_USAGE_EXPORT);
108 CHECK_EQUAL(PSA_KEY_USAGE_COPY, ts_crypto_KeyUsage_KEY_USAGE_COPY);
109 CHECK_EQUAL(PSA_KEY_USAGE_ENCRYPT, ts_crypto_KeyUsage_KEY_USAGE_ENCRYPT);
110 CHECK_EQUAL(PSA_KEY_USAGE_DECRYPT, ts_crypto_KeyUsage_KEY_USAGE_DECRYPT);
111 CHECK_EQUAL(PSA_KEY_USAGE_SIGN_HASH, ts_crypto_KeyUsage_KEY_USAGE_SIGN_HASH);
112 CHECK_EQUAL(PSA_KEY_USAGE_VERIFY_HASH, ts_crypto_KeyUsage_KEY_USAGE_VERIFY_HASH);
113 CHECK_EQUAL(PSA_KEY_USAGE_DERIVE, ts_crypto_KeyUsage_KEY_USAGE_DERIVE);
114 }
115