1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /***********************************************************************
3*758e9fbaSOystein Eftevaag * Copyright (c) 2017-2018, Intel Corporation
4*758e9fbaSOystein Eftevaag *
5*758e9fbaSOystein Eftevaag * All rights reserved.
6*758e9fbaSOystein Eftevaag ***********************************************************************/
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag
11*758e9fbaSOystein Eftevaag #include <stdarg.h>
12*758e9fbaSOystein Eftevaag #include <stddef.h>
13*758e9fbaSOystein Eftevaag #include <setjmp.h>
14*758e9fbaSOystein Eftevaag #include <cmocka.h>
15*758e9fbaSOystein Eftevaag #include <stdio.h>
16*758e9fbaSOystein Eftevaag #include "tss2_mu.h"
17*758e9fbaSOystein Eftevaag #include "util/tss2_endian.h"
18*758e9fbaSOystein Eftevaag
19*758e9fbaSOystein Eftevaag /*
20*758e9fbaSOystein Eftevaag * Success case
21*758e9fbaSOystein Eftevaag */
22*758e9fbaSOystein Eftevaag static void
tpma_marshal_success(void ** state)23*758e9fbaSOystein Eftevaag tpma_marshal_success(void **state)
24*758e9fbaSOystein Eftevaag {
25*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0}, *ptr;
26*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0}, *ptr2;
27*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg)] = { 0 };
28*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
29*758e9fbaSOystein Eftevaag uint8_t buffer2[sizeof(session)] = { 0 };
30*758e9fbaSOystein Eftevaag size_t buffer_size2 = sizeof(buffer2);
31*758e9fbaSOystein Eftevaag uint32_t alg_expected = HOST_TO_BE_32(TPMA_ALGORITHM_ASYMMETRIC | TPMA_ALGORITHM_SIGNING);
32*758e9fbaSOystein Eftevaag uint8_t session_expected = TPMA_SESSION_AUDIT | TPMA_SESSION_AUDITRESET | TPMA_SESSION_DECRYPT;
33*758e9fbaSOystein Eftevaag TSS2_RC rc;
34*758e9fbaSOystein Eftevaag
35*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
36*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
37*758e9fbaSOystein Eftevaag ptr = (TPMA_ALGORITHM *)buffer;
38*758e9fbaSOystein Eftevaag
39*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Marshal(alg, buffer, buffer_size, NULL);
40*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
41*758e9fbaSOystein Eftevaag assert_int_equal (*ptr, alg_expected);
42*758e9fbaSOystein Eftevaag
43*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
44*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
45*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
46*758e9fbaSOystein Eftevaag ptr2 = (TPMA_SESSION *)buffer2;
47*758e9fbaSOystein Eftevaag
48*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Marshal(session, buffer2, buffer_size2, NULL);
49*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
50*758e9fbaSOystein Eftevaag assert_int_equal (*ptr2, session_expected);
51*758e9fbaSOystein Eftevaag }
52*758e9fbaSOystein Eftevaag
53*758e9fbaSOystein Eftevaag /*
54*758e9fbaSOystein Eftevaag * Success case with a valid offset
55*758e9fbaSOystein Eftevaag */
56*758e9fbaSOystein Eftevaag static void
tpma_marshal_success_offset(void ** state)57*758e9fbaSOystein Eftevaag tpma_marshal_success_offset(void **state)
58*758e9fbaSOystein Eftevaag {
59*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0}, *ptr;
60*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0}, *ptr2;
61*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg) + 10] = { 0 };
62*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
63*758e9fbaSOystein Eftevaag uint8_t buffer2[sizeof(session) + 14] = { 0 };
64*758e9fbaSOystein Eftevaag size_t buffer_size2 = sizeof(buffer2);
65*758e9fbaSOystein Eftevaag size_t offset = 10;
66*758e9fbaSOystein Eftevaag uint32_t alg_expected = HOST_TO_BE_32(TPMA_ALGORITHM_ASYMMETRIC | TPMA_ALGORITHM_SIGNING);
67*758e9fbaSOystein Eftevaag uint8_t session_expected = TPMA_SESSION_AUDIT | TPMA_SESSION_AUDITRESET | TPMA_SESSION_DECRYPT;
68*758e9fbaSOystein Eftevaag TSS2_RC rc;
69*758e9fbaSOystein Eftevaag
70*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
71*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
72*758e9fbaSOystein Eftevaag ptr = (TPMA_ALGORITHM *)&buffer[10];
73*758e9fbaSOystein Eftevaag
74*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Marshal(alg, buffer, buffer_size, &offset);
75*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
76*758e9fbaSOystein Eftevaag assert_int_equal (*ptr, alg_expected);
77*758e9fbaSOystein Eftevaag assert_int_equal (offset, sizeof (buffer));
78*758e9fbaSOystein Eftevaag
79*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
80*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
81*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
82*758e9fbaSOystein Eftevaag ptr2 = (TPMA_SESSION *)&buffer2[14];
83*758e9fbaSOystein Eftevaag
84*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Marshal(session, buffer2, buffer_size2, &offset);
85*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
86*758e9fbaSOystein Eftevaag assert_int_equal (*ptr2, session_expected);
87*758e9fbaSOystein Eftevaag assert_int_equal (offset, sizeof (buffer2));
88*758e9fbaSOystein Eftevaag }
89*758e9fbaSOystein Eftevaag
90*758e9fbaSOystein Eftevaag /*
91*758e9fbaSOystein Eftevaag * Success case with a null buffer
92*758e9fbaSOystein Eftevaag */
93*758e9fbaSOystein Eftevaag static void
tpma_marshal_buffer_null_with_offset(void ** state)94*758e9fbaSOystein Eftevaag tpma_marshal_buffer_null_with_offset(void **state)
95*758e9fbaSOystein Eftevaag {
96*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
97*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
98*758e9fbaSOystein Eftevaag size_t offset = 100;
99*758e9fbaSOystein Eftevaag TSS2_RC rc;
100*758e9fbaSOystein Eftevaag
101*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
102*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
103*758e9fbaSOystein Eftevaag
104*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Marshal(alg, NULL, sizeof(alg), &offset);
105*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
106*758e9fbaSOystein Eftevaag assert_int_equal (offset, 100 + sizeof(alg));
107*758e9fbaSOystein Eftevaag
108*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
109*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
110*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
111*758e9fbaSOystein Eftevaag offset = 100;
112*758e9fbaSOystein Eftevaag
113*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Marshal(session, NULL, sizeof(session), &offset);
114*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
115*758e9fbaSOystein Eftevaag assert_int_equal (offset, 100 + sizeof(session));
116*758e9fbaSOystein Eftevaag }
117*758e9fbaSOystein Eftevaag
118*758e9fbaSOystein Eftevaag /*
119*758e9fbaSOystein Eftevaag * Invalid case with a null buffer and a null offset
120*758e9fbaSOystein Eftevaag */
121*758e9fbaSOystein Eftevaag static void
tpma_marshal_buffer_null_offset_null(void ** state)122*758e9fbaSOystein Eftevaag tpma_marshal_buffer_null_offset_null(void **state)
123*758e9fbaSOystein Eftevaag {
124*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
125*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
126*758e9fbaSOystein Eftevaag TSS2_RC rc;
127*758e9fbaSOystein Eftevaag
128*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
129*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
130*758e9fbaSOystein Eftevaag
131*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Marshal(alg, NULL, sizeof(alg), NULL);
132*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
133*758e9fbaSOystein Eftevaag
134*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
135*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
136*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
137*758e9fbaSOystein Eftevaag
138*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Marshal(session, NULL, sizeof(session), NULL);
139*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
140*758e9fbaSOystein Eftevaag }
141*758e9fbaSOystein Eftevaag
142*758e9fbaSOystein Eftevaag /*
143*758e9fbaSOystein Eftevaag * Invalid case with not big enough buffer
144*758e9fbaSOystein Eftevaag */
145*758e9fbaSOystein Eftevaag static void
tpma_marshal_buffer_size_lt_data_nad_lt_offset(void ** state)146*758e9fbaSOystein Eftevaag tpma_marshal_buffer_size_lt_data_nad_lt_offset(void **state)
147*758e9fbaSOystein Eftevaag {
148*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
149*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
150*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg)] = { 0 };
151*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
152*758e9fbaSOystein Eftevaag uint8_t buffer2[sizeof(session)] = { 0 };
153*758e9fbaSOystein Eftevaag size_t buffer_size2 = sizeof(buffer2);
154*758e9fbaSOystein Eftevaag size_t offset = 2;
155*758e9fbaSOystein Eftevaag TSS2_RC rc;
156*758e9fbaSOystein Eftevaag
157*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
158*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
159*758e9fbaSOystein Eftevaag
160*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Marshal(alg, buffer, buffer_size, &offset);
161*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
162*758e9fbaSOystein Eftevaag assert_int_equal (offset, 2);
163*758e9fbaSOystein Eftevaag
164*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
165*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
166*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
167*758e9fbaSOystein Eftevaag
168*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Marshal(session, buffer2, buffer_size2, &offset);
169*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
170*758e9fbaSOystein Eftevaag assert_int_equal (offset, 2);
171*758e9fbaSOystein Eftevaag }
172*758e9fbaSOystein Eftevaag
173*758e9fbaSOystein Eftevaag /*
174*758e9fbaSOystein Eftevaag * Success case
175*758e9fbaSOystein Eftevaag */
176*758e9fbaSOystein Eftevaag static void
tpma_unmarshal_success(void ** state)177*758e9fbaSOystein Eftevaag tpma_unmarshal_success(void **state)
178*758e9fbaSOystein Eftevaag {
179*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
180*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
181*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg) + sizeof(session)] = { 0 };
182*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
183*758e9fbaSOystein Eftevaag size_t offset = 0;
184*758e9fbaSOystein Eftevaag uint32_t alg_expected = HOST_TO_BE_32(TPMA_ALGORITHM_ASYMMETRIC | TPMA_ALGORITHM_SIGNING);
185*758e9fbaSOystein Eftevaag uint8_t session_expected = TPMA_SESSION_AUDIT | TPMA_SESSION_AUDITRESET | TPMA_SESSION_DECRYPT;
186*758e9fbaSOystein Eftevaag uint32_t *ptr;
187*758e9fbaSOystein Eftevaag uint8_t *ptr2;
188*758e9fbaSOystein Eftevaag TSS2_RC rc;
189*758e9fbaSOystein Eftevaag
190*758e9fbaSOystein Eftevaag ptr = (uint32_t *)buffer;
191*758e9fbaSOystein Eftevaag ptr2 = (uint8_t *)ptr + 4;
192*758e9fbaSOystein Eftevaag
193*758e9fbaSOystein Eftevaag *ptr = alg_expected;
194*758e9fbaSOystein Eftevaag *ptr2 = session_expected;
195*758e9fbaSOystein Eftevaag
196*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Unmarshal(buffer, buffer_size, &offset, &alg);
197*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
198*758e9fbaSOystein Eftevaag assert_int_equal (alg, BE_TO_HOST_32(alg_expected));
199*758e9fbaSOystein Eftevaag assert_int_equal (offset, 4);
200*758e9fbaSOystein Eftevaag
201*758e9fbaSOystein Eftevaag
202*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Unmarshal(buffer, buffer_size, &offset, &session);
203*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
204*758e9fbaSOystein Eftevaag assert_int_equal (session, session_expected);
205*758e9fbaSOystein Eftevaag assert_int_equal (offset, 5);
206*758e9fbaSOystein Eftevaag }
207*758e9fbaSOystein Eftevaag
208*758e9fbaSOystein Eftevaag /*
209*758e9fbaSOystein Eftevaag * Invalid test case with buffer null and dest null
210*758e9fbaSOystein Eftevaag */
211*758e9fbaSOystein Eftevaag static void
tpma_unmarshal_dest_null_buff_null(void ** state)212*758e9fbaSOystein Eftevaag tpma_unmarshal_dest_null_buff_null(void **state)
213*758e9fbaSOystein Eftevaag {
214*758e9fbaSOystein Eftevaag size_t offset = 0;
215*758e9fbaSOystein Eftevaag TSS2_RC rc;
216*758e9fbaSOystein Eftevaag
217*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Unmarshal(NULL, 20, &offset, NULL);
218*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
219*758e9fbaSOystein Eftevaag assert_int_equal (offset, 0);
220*758e9fbaSOystein Eftevaag
221*758e9fbaSOystein Eftevaag
222*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Unmarshal(NULL, 20, &offset, NULL);
223*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
224*758e9fbaSOystein Eftevaag assert_int_equal (offset, 0);
225*758e9fbaSOystein Eftevaag }
226*758e9fbaSOystein Eftevaag
227*758e9fbaSOystein Eftevaag /*
228*758e9fbaSOystein Eftevaag * Invalid test case with offset null and dest null
229*758e9fbaSOystein Eftevaag */
230*758e9fbaSOystein Eftevaag static void
tpma_unmarshal_buffer_null_offset_null(void ** state)231*758e9fbaSOystein Eftevaag tpma_unmarshal_buffer_null_offset_null(void **state)
232*758e9fbaSOystein Eftevaag {
233*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
234*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
235*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg) + sizeof(session)] = { 0 };
236*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
237*758e9fbaSOystein Eftevaag TSS2_RC rc;
238*758e9fbaSOystein Eftevaag
239*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Unmarshal(buffer, buffer_size, NULL, NULL);
240*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
241*758e9fbaSOystein Eftevaag
242*758e9fbaSOystein Eftevaag
243*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Unmarshal(buffer, buffer_size, NULL, NULL);
244*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
245*758e9fbaSOystein Eftevaag }
246*758e9fbaSOystein Eftevaag /*
247*758e9fbaSOystein Eftevaag * Test case ensures the offset is updated when dest is NULL
248*758e9fbaSOystein Eftevaag * and offset is valid
249*758e9fbaSOystein Eftevaag */
250*758e9fbaSOystein Eftevaag static void
tpma_unmarshal_dest_null_offset_valid(void ** state)251*758e9fbaSOystein Eftevaag tpma_unmarshal_dest_null_offset_valid(void **state)
252*758e9fbaSOystein Eftevaag {
253*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
254*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(TPMA_ALGORITHM) + sizeof(session)] = { 0 };
255*758e9fbaSOystein Eftevaag size_t buffer_size = sizeof(buffer);
256*758e9fbaSOystein Eftevaag size_t offset = 0;
257*758e9fbaSOystein Eftevaag uint32_t alg_expected = HOST_TO_BE_32(TPMA_ALGORITHM_ASYMMETRIC | TPMA_ALGORITHM_SIGNING);
258*758e9fbaSOystein Eftevaag uint8_t session_expected = TPMA_SESSION_AUDIT | TPMA_SESSION_AUDITRESET | TPMA_SESSION_DECRYPT;
259*758e9fbaSOystein Eftevaag uint32_t *ptr;
260*758e9fbaSOystein Eftevaag uint8_t *ptr2;
261*758e9fbaSOystein Eftevaag TSS2_RC rc;
262*758e9fbaSOystein Eftevaag
263*758e9fbaSOystein Eftevaag ptr = (uint32_t *)buffer;
264*758e9fbaSOystein Eftevaag ptr2 = (uint8_t *)ptr + 4;
265*758e9fbaSOystein Eftevaag
266*758e9fbaSOystein Eftevaag *ptr = alg_expected;
267*758e9fbaSOystein Eftevaag *ptr2 = session_expected;
268*758e9fbaSOystein Eftevaag
269*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Unmarshal(buffer, buffer_size, &offset, NULL);
270*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
271*758e9fbaSOystein Eftevaag assert_int_equal (offset, sizeof(TPMA_ALGORITHM));
272*758e9fbaSOystein Eftevaag
273*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Unmarshal(buffer, buffer_size, &offset, NULL);
274*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_RC_SUCCESS);
275*758e9fbaSOystein Eftevaag assert_int_equal (offset, sizeof(buffer));
276*758e9fbaSOystein Eftevaag }
277*758e9fbaSOystein Eftevaag /*
278*758e9fbaSOystein Eftevaag * Invalid case with not big enough buffer
279*758e9fbaSOystein Eftevaag */
280*758e9fbaSOystein Eftevaag static void
tpma_unmarshal_buffer_size_lt_data_nad_lt_offset(void ** state)281*758e9fbaSOystein Eftevaag tpma_unmarshal_buffer_size_lt_data_nad_lt_offset(void **state)
282*758e9fbaSOystein Eftevaag {
283*758e9fbaSOystein Eftevaag TPMA_ALGORITHM alg = {0};
284*758e9fbaSOystein Eftevaag TPMA_SESSION session = {0};
285*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(alg) + sizeof(session)] = { 0 };
286*758e9fbaSOystein Eftevaag size_t offset = 1;
287*758e9fbaSOystein Eftevaag TSS2_RC rc;
288*758e9fbaSOystein Eftevaag
289*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_ASYMMETRIC;
290*758e9fbaSOystein Eftevaag alg |= TPMA_ALGORITHM_SIGNING;
291*758e9fbaSOystein Eftevaag
292*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_ALGORITHM_Unmarshal(buffer, sizeof(alg), &offset, &alg);
293*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
294*758e9fbaSOystein Eftevaag assert_int_equal (offset, 1);
295*758e9fbaSOystein Eftevaag
296*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDIT;
297*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_DECRYPT;
298*758e9fbaSOystein Eftevaag session |= TPMA_SESSION_AUDITRESET;
299*758e9fbaSOystein Eftevaag
300*758e9fbaSOystein Eftevaag rc = Tss2_MU_TPMA_SESSION_Unmarshal(buffer, 1, &offset, &session);
301*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
302*758e9fbaSOystein Eftevaag assert_int_equal (offset, 1);
303*758e9fbaSOystein Eftevaag }
304*758e9fbaSOystein Eftevaag
main(void)305*758e9fbaSOystein Eftevaag int main(void) {
306*758e9fbaSOystein Eftevaag const struct CMUnitTest tests[] = {
307*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_marshal_success),
308*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_marshal_success_offset),
309*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_marshal_buffer_null_with_offset),
310*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_marshal_buffer_null_offset_null),
311*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_marshal_buffer_size_lt_data_nad_lt_offset),
312*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_unmarshal_success),
313*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_unmarshal_dest_null_buff_null),
314*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_unmarshal_buffer_null_offset_null),
315*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_unmarshal_dest_null_offset_valid),
316*758e9fbaSOystein Eftevaag cmocka_unit_test (tpma_unmarshal_buffer_size_lt_data_nad_lt_offset),
317*758e9fbaSOystein Eftevaag };
318*758e9fbaSOystein Eftevaag return cmocka_run_group_tests(tests, NULL, NULL);
319*758e9fbaSOystein Eftevaag }
320