xref: /rk3399_ARM-atf/lib/psa/delegated_attestation.c (revision f4b8470feee4437fb3984baeee8c61ed91f63f51)
1 /*
2  * Copyright (c) 2022, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #include <string.h>
9 
10 #include <delegated_attestation.h>
11 #include <psa/client.h>
12 #include <psa_manifest/sid.h>
13 
14 #if !PLAT_RSS_NOT_SUPPORTED
15 psa_status_t
16 rss_delegated_attest_get_delegated_key(uint8_t   ecc_curve,
17 				       uint32_t  key_bits,
18 				       uint8_t  *key_buf,
19 				       size_t    key_buf_size,
20 				       size_t   *key_size,
21 				       uint32_t  hash_algo)
22 {
23 	psa_status_t status;
24 	psa_invec in_vec[] = {
25 		{&ecc_curve, sizeof(ecc_curve)},
26 		{&key_bits,  sizeof(key_bits)},
27 		{&hash_algo, sizeof(hash_algo)}
28 	};
29 	psa_outvec out_vec[] = {
30 		{key_buf, key_buf_size}
31 	};
32 
33 	if (key_size == NULL) {
34 		return PSA_ERROR_INVALID_ARGUMENT;
35 	}
36 
37 	status = psa_call(RSS_DELEGATED_SERVICE_HANDLE,
38 			  RSS_DELEGATED_ATTEST_GET_DELEGATED_KEY,
39 			  in_vec,  IOVEC_LEN(in_vec),
40 			  out_vec, IOVEC_LEN(out_vec));
41 	if (status == PSA_SUCCESS) {
42 		*key_size = out_vec[0].len;
43 	}
44 
45 	return status;
46 }
47 
48 psa_status_t
49 rss_delegated_attest_get_token(const uint8_t *dak_pub_hash,
50 			       size_t         dak_pub_hash_size,
51 			       uint8_t       *token_buf,
52 			       size_t         token_buf_size,
53 			       size_t        *token_size)
54 {
55 	psa_status_t status;
56 	psa_invec in_vec[] = {
57 		{dak_pub_hash, dak_pub_hash_size}
58 	};
59 	psa_outvec out_vec[] = {
60 		{token_buf, token_buf_size}
61 	};
62 
63 	if (token_size == NULL) {
64 		return PSA_ERROR_INVALID_ARGUMENT;
65 	}
66 
67 	status = psa_call(RSS_DELEGATED_SERVICE_HANDLE,
68 			  RSS_DELEGATED_ATTEST_GET_PLATFORM_TOKEN,
69 			  in_vec, IOVEC_LEN(in_vec),
70 			  out_vec, IOVEC_LEN(out_vec));
71 	if (status == PSA_SUCCESS) {
72 		*token_size = out_vec[0].len;
73 	}
74 
75 	return status;
76 }
77 
78 
79 #else /* !PLAT_RSS_NOT_SUPPORTED */
80 
81 static const uint8_t delegated_key[] = {
82 	0x20, 0x11, 0xC7, 0xF0, 0x3C, 0xEE, 0x43, 0x25, 0x17, 0x6E,
83 	0x52, 0x4F, 0x03, 0x3C, 0x0C, 0xE1, 0xE2, 0x1A, 0x76, 0xE6,
84 	0xC1, 0xA4, 0xF0, 0xB8, 0x39, 0xAA, 0x1D, 0xF6, 0x1E, 0x0E,
85 	0x8A, 0x5C, 0x8A, 0x05, 0x74, 0x0F, 0x9B, 0x69, 0xEF, 0xA7,
86 	0xEB, 0x1A, 0x41, 0x85, 0xBD, 0x11, 0x7F, 0x68
87 };
88 
89 static const uint8_t platform_token[] = {
90 	0xD2, 0x84, 0x43, 0xA1, 0x01, 0x26, 0xA0, 0x59,
91 	0x02, 0xBE, 0xAA, 0x3A, 0x00, 0x01, 0x24, 0xFF,
92 	0x58, 0x20, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
93 	0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
94 	0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
95 	0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
96 	0xAB, 0xAB, 0x3A, 0x00, 0x01, 0x24, 0xFB, 0x58,
97 	0x20, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
98 	0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,
99 	0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
100 	0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
101 	0xBF, 0x3A, 0x00, 0x01, 0x25, 0x00, 0x58, 0x21,
102 	0x01, 0xFA, 0x58, 0x75, 0x5F, 0x65, 0x86, 0x27,
103 	0xCE, 0x54, 0x60, 0xF2, 0x9B, 0x75, 0x29, 0x67,
104 	0x13, 0x24, 0x8C, 0xAE, 0x7A, 0xD9, 0xE2, 0x98,
105 	0x4B, 0x90, 0x28, 0x0E, 0xFC, 0xBC, 0xB5, 0x02,
106 	0x48, 0x3A, 0x00, 0x01, 0x24, 0xFA, 0x58, 0x20,
107 	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
108 	0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
109 	0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
110 	0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
111 	0x3A, 0x00, 0x01, 0x24, 0xF8, 0x20, 0x3A, 0x00,
112 	0x01, 0x24, 0xF9, 0x00, 0x3A, 0x00, 0x01, 0x24,
113 	0xFD, 0x85, 0xA5, 0x05, 0x58, 0x20, 0x00, 0x00,
114 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x60,
118 	0x01, 0x65, 0x42, 0x4C, 0x31, 0x5F, 0x32, 0x06,
119 	0x66, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x02,
120 	0x58, 0x20, 0xF8, 0xB7, 0xCE, 0xAD, 0x9B, 0xE4,
121 	0x5A, 0x8F, 0x5C, 0x52, 0x6F, 0x0C, 0x05, 0x25,
122 	0x8F, 0xF3, 0xE9, 0x81, 0xDC, 0xBC, 0xF2, 0x05,
123 	0x7F, 0x33, 0xF6, 0xBB, 0xDC, 0xD9, 0x4D, 0xA2,
124 	0x34, 0x3A, 0xA5, 0x05, 0x58, 0x20, 0x00, 0x00,
125 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x67,
129 	0x31, 0x2E, 0x37, 0x2E, 0x32, 0x2B, 0x30, 0x01,
130 	0x63, 0x42, 0x4C, 0x32, 0x06, 0x66, 0x53, 0x48,
131 	0x41, 0x32, 0x35, 0x36, 0x02, 0x58, 0x20, 0x3A,
132 	0xE5, 0x9E, 0x40, 0xA9, 0x6B, 0xD5, 0x29, 0x1C,
133 	0xAB, 0x7A, 0x5F, 0xBD, 0x1F, 0x9A, 0xA6, 0x52,
134 	0xFB, 0x77, 0x7D, 0xA3, 0xEC, 0x9C, 0x29, 0xBC,
135 	0xE6, 0x5B, 0x3B, 0x43, 0xFC, 0x9D, 0x26, 0xA5,
136 	0x05, 0x58, 0x20, 0xBF, 0xE6, 0xD8, 0x6F, 0x88,
137 	0x26, 0xF4, 0xFF, 0x97, 0xFB, 0x96, 0xC4, 0xE6,
138 	0xFB, 0xC4, 0x99, 0x3E, 0x46, 0x19, 0xFC, 0x56,
139 	0x5D, 0xA2, 0x6A, 0xDF, 0x34, 0xC3, 0x29, 0x48,
140 	0x9A, 0xDC, 0x38, 0x04, 0x67, 0x31, 0x2E, 0x35,
141 	0x2E, 0x30, 0x2B, 0x30, 0x01, 0x64, 0x52, 0x54,
142 	0x5F, 0x30, 0x06, 0x66, 0x53, 0x48, 0x41, 0x32,
143 	0x35, 0x36, 0x02, 0x58, 0x20, 0x47, 0x94, 0x9D,
144 	0x27, 0x33, 0x82, 0x45, 0x1A, 0xDD, 0x25, 0xF4,
145 	0x9A, 0x89, 0x6F, 0x5F, 0xD9, 0xB0, 0xE8, 0x14,
146 	0xD3, 0xA4, 0x9B, 0x53, 0xB0, 0x44, 0x0B, 0xCF,
147 	0x32, 0x1A, 0xC4, 0xD2, 0x65, 0xA5, 0x05, 0x58,
148 	0x20, 0xB3, 0x60, 0xCA, 0xF5, 0xC9, 0x8C, 0x6B,
149 	0x94, 0x2A, 0x48, 0x82, 0xFA, 0x9D, 0x48, 0x23,
150 	0xEF, 0xB1, 0x66, 0xA9, 0xEF, 0x6A, 0x6E, 0x4A,
151 	0xA3, 0x7C, 0x19, 0x19, 0xED, 0x1F, 0xCC, 0xC0,
152 	0x49, 0x04, 0x67, 0x30, 0x2E, 0x30, 0x2E, 0x37,
153 	0x2B, 0x30, 0x01, 0x64, 0x52, 0x54, 0x5F, 0x31,
154 	0x06, 0x66, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36,
155 	0x02, 0x58, 0x20, 0xCD, 0x38, 0xBE, 0xC8, 0xB7,
156 	0xC0, 0x9E, 0xD5, 0x24, 0x30, 0xFE, 0xC8, 0xD0,
157 	0x19, 0x12, 0x56, 0xB2, 0x7A, 0xA5, 0x53, 0x6F,
158 	0xBC, 0x7D, 0x09, 0xCA, 0x11, 0xDD, 0x90, 0xD7,
159 	0xD6, 0x70, 0xFD, 0xA5, 0x05, 0x58, 0x20, 0xAA,
160 	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
161 	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
162 	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
163 	0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x04,
164 	0x60, 0x01, 0x60, 0x06, 0x66, 0x53, 0x48, 0x41,
165 	0x32, 0x35, 0x36, 0x02, 0x58, 0x20, 0x28, 0x3D,
166 	0x0C, 0x25, 0x22, 0x0C, 0x87, 0x46, 0xA0, 0x58,
167 	0x64, 0x6C, 0x0B, 0x14, 0x37, 0x39, 0x40, 0x9D,
168 	0x2D, 0x11, 0xD1, 0xCC, 0x54, 0x51, 0xB4, 0x29,
169 	0x22, 0xCD, 0x70, 0x92, 0x71, 0xC3, 0x3A, 0x00,
170 	0x01, 0x25, 0x01, 0x77, 0x77, 0x77, 0x77, 0x2E,
171 	0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x66,
172 	0x69, 0x72, 0x6D, 0x77, 0x61, 0x72, 0x65, 0x2E,
173 	0x6F, 0x72, 0x67, 0x3A, 0x00, 0x01, 0x24, 0xF7,
174 	0x71, 0x50, 0x53, 0x41, 0x5F, 0x49, 0x4F, 0x54,
175 	0x5F, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45,
176 	0x5F, 0x31, 0x3A, 0x00, 0x01, 0x24, 0xFC, 0x70,
177 	0x30, 0x36, 0x30, 0x34, 0x35, 0x36, 0x35, 0x32,
178 	0x37, 0x32, 0x38, 0x32, 0x39, 0x31, 0x30, 0x30,
179 	0x58, 0x40, 0x1E, 0x0D, 0x2B, 0xD8, 0x7A, 0xC9,
180 	0x2D, 0xCB, 0x73, 0xD1, 0x42, 0x2F, 0xBF, 0xDA,
181 	0x24, 0x71, 0xE2, 0xAF, 0xEA, 0x48, 0x60, 0x17,
182 	0x23, 0x75, 0x64, 0xAC, 0xCC, 0x23, 0xA2, 0x67,
183 	0xC4, 0xE7, 0x8F, 0x1C, 0x7C, 0x68, 0x49, 0x42,
184 	0x4D, 0xDA, 0xC6, 0xD6, 0x21, 0x1C, 0xAA, 0x00,
185 	0xDA, 0x1E, 0x68, 0x56, 0xA3, 0x48, 0xEE, 0xA7,
186 	0x92, 0xA9, 0x09, 0x83, 0x42, 0x04, 0x06, 0x9E,
187 	0x62, 0xBB
188 };
189 
190 psa_status_t
191 rss_delegated_attest_get_delegated_key(uint8_t   ecc_curve,
192 				       uint32_t  key_bits,
193 				       uint8_t  *key_buf,
194 				       size_t    key_buf_size,
195 				       size_t   *key_size,
196 				       uint32_t  hash_algo)
197 {
198 	(void)ecc_curve;
199 	(void)key_bits;
200 	(void)hash_algo;
201 
202 	if (key_buf_size < sizeof(delegated_key)) {
203 		return PSA_ERROR_BUFFER_TOO_SMALL;
204 	}
205 
206 	(void)memcpy(key_buf, delegated_key, sizeof(delegated_key));
207 	*key_size = sizeof(delegated_key);
208 
209 	return PSA_SUCCESS;
210 }
211 psa_status_t
212 rss_delegated_attest_get_token(const uint8_t *dak_pub_hash,
213 			       size_t         dak_pub_hash_size,
214 			       uint8_t       *token_buf,
215 			       size_t         token_buf_size,
216 			       size_t        *token_size)
217 {
218 	(void)dak_pub_hash;
219 	(void)dak_pub_hash_size;
220 
221 	if (token_buf_size < sizeof(platform_token)) {
222 		return PSA_ERROR_BUFFER_TOO_SMALL;
223 	}
224 
225 	(void)memcpy(token_buf, platform_token, sizeof(platform_token));
226 	*token_size = sizeof(platform_token);
227 
228 	return PSA_SUCCESS;
229 }
230 #endif /* !PLAT_RSS_NOT_SUPPORTED */
231