1 /*
2 * Copyright (c) 2023, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7
8 #include <CppUTestExt/MockSupport.h>
9 #include "rpmb_platform_mock.h"
10
rpmb_platform_mock_expect_derive_key(void * context,const uint8_t * data,size_t data_length,const uint8_t * key,size_t key_length,psa_status_t result)11 void rpmb_platform_mock_expect_derive_key(void *context, const uint8_t *data, size_t data_length,
12 const uint8_t *key, size_t key_length,
13 psa_status_t result)
14 {
15 mock().expectOneCall("derive_key").
16 onObject(context).
17 withMemoryBufferParameter("data", data, data_length).
18 withOutputParameterReturning("key", key, key_length).
19 withUnsignedIntParameter("key_length", key_length).
20 andReturnValue(result);
21 }
22
rpmb_platform_derive_key(void * context,const uint8_t * data,size_t data_length,uint8_t * key,size_t key_length)23 static psa_status_t rpmb_platform_derive_key(void *context, const uint8_t *data, size_t data_length,
24 uint8_t *key, size_t key_length)
25 {
26 return mock().actualCall("derive_key").
27 onObject(context).
28 withMemoryBufferParameter("data", data, data_length).
29 withOutputParameter("key", key).
30 withUnsignedIntParameter("key_length", key_length).
31 returnIntValue();
32 }
33
rpmb_platform_mock_expect_get_nonce(void * context,const uint8_t * nonce,size_t nonce_length,psa_status_t result)34 void rpmb_platform_mock_expect_get_nonce(void *context, const uint8_t *nonce, size_t nonce_length,
35 psa_status_t result)
36 {
37 mock().expectOneCall("get_nonce").
38 onObject(context).
39 withOutputParameterReturning("nonce", nonce, nonce_length).
40 withUnsignedIntParameter("nonce_length", nonce_length).
41 andReturnValue(result);
42 }
43
rpmb_platform_get_nonce(void * context,uint8_t * nonce,size_t nonce_length)44 static psa_status_t rpmb_platform_get_nonce(void *context, uint8_t *nonce, size_t nonce_length)
45 {
46 return mock().actualCall("get_nonce").
47 onObject(context).
48 withOutputParameter("nonce", nonce).
49 withUnsignedIntParameter("nonce_length", nonce_length).
50 returnIntValue();
51 }
52
rpmb_platform_mock_expect_calculate_mac(void * context,const uint8_t * key,size_t key_length,const struct rpmb_data_frame * frames,size_t frame_count,const uint8_t * mac,size_t mac_length,psa_status_t result)53 void rpmb_platform_mock_expect_calculate_mac(void *context, const uint8_t *key, size_t key_length,
54 const struct rpmb_data_frame *frames,
55 size_t frame_count, const uint8_t *mac,
56 size_t mac_length, psa_status_t result)
57 {
58 mock().expectOneCall("calculate_mac").
59 onObject(context).
60 withMemoryBufferParameter("key", key, key_length).
61 withMemoryBufferParameter("frames", (const unsigned char *)frames, sizeof(*frames) * frame_count).
62 withOutputParameterReturning("mac", mac, mac_length).
63 withUnsignedIntParameter("mac_length", mac_length).
64 andReturnValue(result);
65 }
66
rpmb_platform_calculate_mac(void * context,const uint8_t * key,size_t key_length,const struct rpmb_data_frame * frames,size_t frame_count,uint8_t * mac,size_t mac_length)67 static psa_status_t rpmb_platform_calculate_mac(void *context, const uint8_t *key,
68 size_t key_length,
69 const struct rpmb_data_frame *frames,
70 size_t frame_count, uint8_t *mac, size_t mac_length)
71 {
72 return mock().actualCall("calculate_mac").
73 onObject(context).
74 withMemoryBufferParameter("key", key, key_length).
75 withMemoryBufferParameter("frames", (const unsigned char *)frames, sizeof(*frames) * frame_count).
76 withOutputParameter("mac", mac).
77 withUnsignedIntParameter("mac_length", mac_length).
78 returnIntValue();
79 }
80
rpmb_platform_mock_init(struct rpmb_platform_mock * context)81 struct rpmb_platform *rpmb_platform_mock_init(struct rpmb_platform_mock *context)
82 {
83 static struct rpmb_platform_interface interface = {
84 rpmb_platform_derive_key,
85 rpmb_platform_get_nonce,
86 rpmb_platform_calculate_mac
87 };
88
89 if (!context)
90 return NULL;
91
92 context->platform.context = context;
93 context->platform.interface = &interface;
94
95 return &context->platform;
96 }
97
rpmb_platform_mock_deinit(struct rpmb_platform_mock * context)98 void rpmb_platform_mock_deinit(struct rpmb_platform_mock *context)
99 {
100 *context = (struct rpmb_platform_mock) { 0 };
101 }
102