1 /*
2  * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef TS_CRYPTO_KEY_ATTRIBUTES_H
7 #define TS_CRYPTO_KEY_ATTRIBUTES_H
8 
9 #include <stdint.h>
10 
11 /* Key types */
12 #define TS_CRYPTO_KEY_TYPE_NONE                   (0x0000)
13 #define TS_CRYPTO_KEY_TYPE_RAW_DATA               (0x1001)
14 #define TS_CRYPTO_KEY_TYPE_HMAC                   (0x1100)
15 #define TS_CRYPTO_KEY_TYPE_DERIVE                 (0x1200)
16 #define TS_CRYPTO_KEY_TYPE_AES                    (0x2400)
17 #define TS_CRYPTO_KEY_TYPE_DES                    (0x2301)
18 #define TS_CRYPTO_KEY_TYPE_CAMELLIA               (0x2403)
19 #define TS_CRYPTO_KEY_TYPE_CHACHA20               (0x2004)
20 #define TS_CRYPTO_KEY_TYPE_RSA_PUBLIC_KEY         (0x4001)
21 #define TS_CRYPTO_KEY_TYPE_RSA_KEY_PAIR           (0x7001)
22 
23 /* ECC curves for use with ECC Key types */
24 #define TS_CRYPTO_ECC_FAMILY_NONE                 (0x00)
25 #define TS_CRYPTO_ECC_FAMILY_SECP_K1              (0x17)
26 #define TS_CRYPTO_ECC_FAMILY_SECP_R1              (0x12)
27 #define TS_CRYPTO_ECC_FAMILY_SECP_R2              (0x1b)
28 #define TS_CRYPTO_ECC_FAMILY_SECT_K1              (0x27)
29 #define TS_CRYPTO_ECC_FAMILY_SECT_R1              (0x22)
30 #define TS_CRYPTO_ECC_FAMILY_SECT_R2              (0x2b)
31 #define TS_CRYPTO_ECC_FAMILY_BRAINPOOL_P_R1       (0x30)
32 #define TS_CRYPTO_ECC_FAMILY_MONTGOMERY           (0x41)
33 
34 /* Diffie-Hellman groups for use with DH key types */
35 #define TS_CRYPTO_DH_FAMILY_NONE                  (0x00)
36 #define TS_CRYPTO_DH_FAMILY_RFC7919               (0x03)
37 
38 /* Crypto algorithms */
39 #define TS_CRYPTO_ALG_NONE                        (0x00000000)
40 #define TS_CRYPTO_ALG_MD5                         (0x02000003)
41 #define TS_CRYPTO_ALG_RIPEMD160                   (0x02000004)
42 #define TS_CRYPTO_ALG_SHA_1                       (0x02000005)
43 #define TS_CRYPTO_ALG_SHA_224                     (0x02000008)
44 #define TS_CRYPTO_ALG_SHA_256                     (0x02000009)
45 #define TS_CRYPTO_ALG_SHA_384                     (0x0200000a)
46 #define TS_CRYPTO_ALG_SHA_512                     (0x0200000b)
47 #define TS_CRYPTO_ALG_SHA_512_224                 (0x0200000c)
48 #define TS_CRYPTO_ALG_SHA_512_256                 (0x0200000d)
49 #define TS_CRYPTO_ALG_SHA3_224                    (0x02000010)
50 #define TS_CRYPTO_ALG_SHA3_256                    (0x02000011)
51 #define TS_CRYPTO_ALG_SHA3_384                    (0x02000012)
52 #define TS_CRYPTO_ALG_SHA3_512                    (0x02000013)
53 #define TS_CRYPTO_ALG_CBC_MAC                     (0x03c00100)
54 #define TS_CRYPTO_ALG_CMAC                        (0x03c00200)
55 #define TS_CRYPTO_ALG_STREAM_CIPHER               (0x04800100)
56 #define TS_CRYPTO_ALG_CTR                         (0x04c01000)
57 #define TS_CRYPTO_ALG_CFB                         (0x04c01100)
58 #define TS_CRYPTO_ALG_OFB                         (0x04c01200)
59 #define TS_CRYPTO_ALG_XTS                         (0x0440ff00)
60 #define TS_CRYPTO_ALG_CBC_NO_PADDING              (0x04404000)
61 #define TS_CRYPTO_ALG_CBC_PKCS7                   (0x04404100)
62 #define TS_CRYPTO_ALG_CCM                         (0x05500100)
63 #define TS_CRYPTO_ALG_GCM                         (0x05500200)
64 #define TS_CRYPTO_ALG_CHACHA20_POLY1305           (0x05100500)
65 #define TS_CRYPTO_ALG_RSA_PKCS1V15_CRYPT          (0x07000200)
66 #define TS_CRYPTO_ALG_FFDH                        (0x09010000)
67 #define TS_CRYPTO_ALG_ECDH                        (0x09020000)
68 
69 /* Key lifetime */
70 #define TS_CRYPTO_KEY_LIFETIME_VOLATILE           (0x00000000)
71 #define TS_CRYPTO_KEY_LIFETIME_PERSISTENT         (0x00000001)
72 
73 /* Key usage constraints */
74 #define TS_CRYPTO_KEY_USAGE_NONE                  (0x00000000)
75 #define TS_CRYPTO_KEY_USAGE_EXPORT                (0x00000001)
76 #define TS_CRYPTO_KEY_USAGE_COPY                  (0x00000002)
77 #define TS_CRYPTO_KEY_USAGE_ENCRYPT               (0x00000100)
78 #define TS_CRYPTO_KEY_USAGE_DECRYPT               (0x00000200)
79 #define TS_CRYPTO_KEY_USAGE_SIGN_HASH             (0x00001000)
80 #define TS_CRYPTO_KEY_USAGE_VERIFY_HASH           (0x00002000)
81 #define TS_CRYPTO_KEY_USAGE_DERIVE                (0x00004000)
82 
83 /* Key policy to define what key can be used for */
84 struct __attribute__ ((__packed__)) ts_crypto_key_policy
85 {
86   uint32_t usage;
87   uint32_t alg;
88 };
89 
90 /* Key attributes object */
91 struct __attribute__ ((__packed__)) ts_crypto_key_attributes
92 {
93   uint32_t type;
94   uint32_t key_bits;
95   uint32_t lifetime;
96   uint32_t id;
97   struct ts_crypto_key_policy policy;
98 };
99 
100 #endif /* TS_CRYPTO_KEY_ATTRIBUTES_H */
101