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