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 <protocols/service/crypto/packed-c/key_attributes.h>
8 #include <CppUTest/TestHarness.h>
9 
10 /*
11  * Check alignment of Crypto service packed-c protocol definitions for
12  * alignment with PSA C API definitions.
13  */
TEST_GROUP(CryptoProtocolPackedcChecks)14 TEST_GROUP(CryptoProtocolPackedcChecks)
15 {
16 
17 };
18 
TEST(CryptoProtocolPackedcChecks,checkKeyType)19 TEST(CryptoProtocolPackedcChecks, checkKeyType)
20 {
21     /*
22      * Check alignment between PSA and protobuf key type definitions
23      */
24     CHECK_EQUAL(PSA_KEY_TYPE_RAW_DATA, TS_CRYPTO_KEY_TYPE_RAW_DATA);
25     CHECK_EQUAL(PSA_KEY_TYPE_HMAC, TS_CRYPTO_KEY_TYPE_HMAC);
26     CHECK_EQUAL(PSA_KEY_TYPE_DERIVE, TS_CRYPTO_KEY_TYPE_DERIVE);
27     CHECK_EQUAL(PSA_KEY_TYPE_AES, TS_CRYPTO_KEY_TYPE_AES);
28     CHECK_EQUAL(PSA_KEY_TYPE_DES, TS_CRYPTO_KEY_TYPE_DES);
29     CHECK_EQUAL(PSA_KEY_TYPE_CAMELLIA, TS_CRYPTO_KEY_TYPE_CAMELLIA);
30     CHECK_EQUAL(PSA_KEY_TYPE_CHACHA20, TS_CRYPTO_KEY_TYPE_CHACHA20);
31     CHECK_EQUAL(PSA_KEY_TYPE_RSA_PUBLIC_KEY, TS_CRYPTO_KEY_TYPE_RSA_PUBLIC_KEY);
32     CHECK_EQUAL(PSA_KEY_TYPE_RSA_KEY_PAIR, TS_CRYPTO_KEY_TYPE_RSA_KEY_PAIR);
33 }
34 
TEST(CryptoProtocolPackedcChecks,checkEccCurve)35 TEST(CryptoProtocolPackedcChecks, checkEccCurve)
36 {
37     /*
38      * ECC curves for use with ECC Key types
39      */
40     CHECK_EQUAL(PSA_ECC_FAMILY_SECP_K1, TS_CRYPTO_ECC_FAMILY_SECP_K1);
41     CHECK_EQUAL(PSA_ECC_FAMILY_SECP_R1, TS_CRYPTO_ECC_FAMILY_SECP_R1);
42     CHECK_EQUAL(PSA_ECC_FAMILY_SECP_R2, TS_CRYPTO_ECC_FAMILY_SECP_R2);
43     CHECK_EQUAL(PSA_ECC_FAMILY_SECT_K1, TS_CRYPTO_ECC_FAMILY_SECT_K1);
44     CHECK_EQUAL(PSA_ECC_FAMILY_SECT_R1, TS_CRYPTO_ECC_FAMILY_SECT_R1);
45     CHECK_EQUAL(PSA_ECC_FAMILY_SECT_R2, TS_CRYPTO_ECC_FAMILY_SECT_R2);
46     CHECK_EQUAL(PSA_ECC_FAMILY_BRAINPOOL_P_R1, TS_CRYPTO_ECC_FAMILY_BRAINPOOL_P_R1);
47     CHECK_EQUAL(PSA_ECC_FAMILY_MONTGOMERY, TS_CRYPTO_ECC_FAMILY_MONTGOMERY);
48 }
49 
TEST(CryptoProtocolPackedcChecks,checkDhGroup)50 TEST(CryptoProtocolPackedcChecks, checkDhGroup)
51 {
52     /*
53      * Diffie-Hellman groups for use with DH key types
54      */
55     CHECK_EQUAL(PSA_DH_FAMILY_RFC7919, TS_CRYPTO_DH_FAMILY_RFC7919);
56 }
57 
TEST(CryptoProtocolPackedcChecks,checkAlg)58 TEST(CryptoProtocolPackedcChecks, checkAlg)
59 {
60     /*
61      * Crypto algorithms
62      */
63     CHECK_EQUAL(PSA_ALG_MD5, TS_CRYPTO_ALG_MD5);
64     CHECK_EQUAL(PSA_ALG_RIPEMD160, TS_CRYPTO_ALG_RIPEMD160);
65     CHECK_EQUAL(PSA_ALG_SHA_1, TS_CRYPTO_ALG_SHA_1);
66     CHECK_EQUAL(PSA_ALG_SHA_224, TS_CRYPTO_ALG_SHA_224);
67     CHECK_EQUAL(PSA_ALG_SHA_256, TS_CRYPTO_ALG_SHA_256);
68     CHECK_EQUAL(PSA_ALG_SHA_384, TS_CRYPTO_ALG_SHA_384);
69     CHECK_EQUAL(PSA_ALG_SHA_512, TS_CRYPTO_ALG_SHA_512);
70     CHECK_EQUAL(PSA_ALG_SHA_512_224, TS_CRYPTO_ALG_SHA_512_224);
71     CHECK_EQUAL(PSA_ALG_SHA_512_256, TS_CRYPTO_ALG_SHA_512_256);
72     CHECK_EQUAL(PSA_ALG_SHA3_224, TS_CRYPTO_ALG_SHA3_224);
73     CHECK_EQUAL(PSA_ALG_SHA3_256, TS_CRYPTO_ALG_SHA3_256);
74     CHECK_EQUAL(PSA_ALG_SHA3_384, TS_CRYPTO_ALG_SHA3_384);
75     CHECK_EQUAL(PSA_ALG_SHA3_512, TS_CRYPTO_ALG_SHA3_512);
76     CHECK_EQUAL(PSA_ALG_CBC_MAC, TS_CRYPTO_ALG_CBC_MAC);
77     CHECK_EQUAL(PSA_ALG_CMAC, TS_CRYPTO_ALG_CMAC);
78     CHECK_EQUAL(PSA_ALG_STREAM_CIPHER, TS_CRYPTO_ALG_STREAM_CIPHER);
79     CHECK_EQUAL(PSA_ALG_CTR, TS_CRYPTO_ALG_CTR);
80     CHECK_EQUAL(PSA_ALG_CFB, TS_CRYPTO_ALG_CFB);
81     CHECK_EQUAL(PSA_ALG_OFB, TS_CRYPTO_ALG_OFB);
82     CHECK_EQUAL(PSA_ALG_XTS, TS_CRYPTO_ALG_XTS);
83     CHECK_EQUAL(PSA_ALG_CBC_NO_PADDING, TS_CRYPTO_ALG_CBC_NO_PADDING);
84     CHECK_EQUAL(PSA_ALG_CBC_PKCS7, TS_CRYPTO_ALG_CBC_PKCS7);
85     CHECK_EQUAL(PSA_ALG_CCM, TS_CRYPTO_ALG_CCM);
86     CHECK_EQUAL(PSA_ALG_GCM, TS_CRYPTO_ALG_GCM);
87     CHECK_EQUAL(PSA_ALG_CHACHA20_POLY1305, TS_CRYPTO_ALG_CHACHA20_POLY1305);
88     CHECK_EQUAL(PSA_ALG_RSA_PKCS1V15_CRYPT, TS_CRYPTO_ALG_RSA_PKCS1V15_CRYPT);
89     CHECK_EQUAL(PSA_ALG_FFDH, TS_CRYPTO_ALG_FFDH);
90     CHECK_EQUAL(PSA_ALG_ECDH, TS_CRYPTO_ALG_ECDH);
91 }
92 
TEST(CryptoProtocolPackedcChecks,checkKeyLifetime)93 TEST(CryptoProtocolPackedcChecks, checkKeyLifetime)
94 {
95     /*
96      * Key lifetime
97      */
98     CHECK_EQUAL(PSA_KEY_LIFETIME_VOLATILE, TS_CRYPTO_KEY_LIFETIME_VOLATILE);
99     CHECK_EQUAL(PSA_KEY_LIFETIME_PERSISTENT, TS_CRYPTO_KEY_LIFETIME_PERSISTENT);
100 }
101 
TEST(CryptoProtocolPackedcChecks,checkKeyUsage)102 TEST(CryptoProtocolPackedcChecks, checkKeyUsage)
103 {
104     /*
105      * Key usage constraints
106      */
107     CHECK_EQUAL(PSA_KEY_USAGE_EXPORT, TS_CRYPTO_KEY_USAGE_EXPORT);
108     CHECK_EQUAL(PSA_KEY_USAGE_COPY, TS_CRYPTO_KEY_USAGE_COPY);
109     CHECK_EQUAL(PSA_KEY_USAGE_ENCRYPT, TS_CRYPTO_KEY_USAGE_ENCRYPT);
110     CHECK_EQUAL(PSA_KEY_USAGE_DECRYPT, TS_CRYPTO_KEY_USAGE_DECRYPT);
111     CHECK_EQUAL(PSA_KEY_USAGE_SIGN_HASH, TS_CRYPTO_KEY_USAGE_SIGN_HASH);
112     CHECK_EQUAL(PSA_KEY_USAGE_VERIFY_HASH, TS_CRYPTO_KEY_USAGE_VERIFY_HASH);
113     CHECK_EQUAL(PSA_KEY_USAGE_DERIVE, TS_CRYPTO_KEY_USAGE_DERIVE);
114 }
115