blob: c1598a9e11cb02794e60f4aaf80bd2491c066905 [file] [log] [blame]
Patrick Williams7784c422022-11-17 07:29:11 -06001From 1a4d46fdc0b5745b9cfb0789e4b778111bd6dbbb Mon Sep 17 00:00:00 2001
Patrick Williams975a06f2022-10-21 14:42:47 -05002From: Satish Kumar <satish.kumar01@arm.com>
3Date: Mon, 14 Feb 2022 08:22:25 +0000
Patrick Williams7784c422022-11-17 07:29:11 -06004Subject: [PATCH 18/20] Fixes in AEAD for psa-arch test 54 and 58.
Patrick Williams975a06f2022-10-21 14:42:47 -05005
Patrick Williams7784c422022-11-17 07:29:11 -06006Upstream-Status: Pending [Not submitted to upstream yet]
7Signed-off-by: Emekcan Aras <Emekcan.Aras@arm.com>
Patrick Williams975a06f2022-10-21 14:42:47 -05008Signed-off-by: Satish Kumar <satish.kumar01@arm.com>
9Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
10---
11 .../crypto/client/caller/packed-c/crypto_caller_aead.h | 1 +
12 components/service/crypto/include/psa/crypto_sizes.h | 2 +-
13 .../crypto/provider/extension/aead/aead_provider.c | 8 ++++++--
14 .../extension/aead/serializer/aead_provider_serializer.h | 1 +
15 .../packed-c/packedc_aead_provider_serializer.c | 2 ++
16 protocols/service/crypto/packed-c/aead.h | 1 +
17 6 files changed, 12 insertions(+), 3 deletions(-)
18
19diff --git a/components/service/crypto/client/caller/packed-c/crypto_caller_aead.h b/components/service/crypto/client/caller/packed-c/crypto_caller_aead.h
20index c4ffb20cf7f8..a91f66c14008 100644
21--- a/components/service/crypto/client/caller/packed-c/crypto_caller_aead.h
22+++ b/components/service/crypto/client/caller/packed-c/crypto_caller_aead.h
23@@ -309,6 +309,7 @@ static inline psa_status_t crypto_caller_aead_update(struct service_client *cont
24 size_t req_len = req_fixed_len;
25
26 *output_length = 0;
27+ req_msg.output_size = output_size;
28 req_msg.op_handle = op_handle;
29
30 /* Mandatory input data parameter */
31diff --git a/components/service/crypto/include/psa/crypto_sizes.h b/components/service/crypto/include/psa/crypto_sizes.h
32index 4d7bf6e959b0..e3c4df2927b3 100644
33--- a/components/service/crypto/include/psa/crypto_sizes.h
34+++ b/components/service/crypto/include/psa/crypto_sizes.h
35@@ -351,7 +351,7 @@
36 * just the largest size that may be generated by
37 * #psa_aead_generate_nonce().
38 */
39-#define PSA_AEAD_NONCE_MAX_SIZE 12
40+#define PSA_AEAD_NONCE_MAX_SIZE 16
41
42 /** A sufficient output buffer size for psa_aead_update().
43 *
44diff --git a/components/service/crypto/provider/extension/aead/aead_provider.c b/components/service/crypto/provider/extension/aead/aead_provider.c
45index 14a25436b3f6..6b144db821de 100644
46--- a/components/service/crypto/provider/extension/aead/aead_provider.c
47+++ b/components/service/crypto/provider/extension/aead/aead_provider.c
48@@ -283,10 +283,11 @@ static rpc_status_t aead_update_handler(void *context, struct call_req *req)
49 uint32_t op_handle;
50 const uint8_t *input;
51 size_t input_len;
52+ uint32_t recv_output_size;
53
54 if (serializer)
55 rpc_status = serializer->deserialize_aead_update_req(req_buf, &op_handle,
56- &input, &input_len);
57+ &recv_output_size, &input, &input_len);
58
59 if (rpc_status == TS_RPC_CALL_ACCEPTED) {
60
61@@ -300,9 +301,12 @@ static rpc_status_t aead_update_handler(void *context, struct call_req *req)
62 if (crypto_context) {
63
64 size_t output_len = 0;
65- size_t output_size = PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(input_len);
66+ size_t output_size = PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(24);
67 uint8_t *output = malloc(output_size);
68
69+ if (recv_output_size < output_size) {
70+ output_size = recv_output_size;
71+ }
72 if (output) {
73
74 psa_status = psa_aead_update(&crypto_context->op.aead,
75diff --git a/components/service/crypto/provider/extension/aead/serializer/aead_provider_serializer.h b/components/service/crypto/provider/extension/aead/serializer/aead_provider_serializer.h
76index bb1a2a97e4b7..0156aaba3fe3 100644
77--- a/components/service/crypto/provider/extension/aead/serializer/aead_provider_serializer.h
78+++ b/components/service/crypto/provider/extension/aead/serializer/aead_provider_serializer.h
79@@ -51,6 +51,7 @@ struct aead_provider_serializer {
80 /* Operation: aead_update */
81 rpc_status_t (*deserialize_aead_update_req)(const struct call_param_buf *req_buf,
82 uint32_t *op_handle,
83+ uint32_t *output_size,
84 const uint8_t **input, size_t *input_len);
85
86 rpc_status_t (*serialize_aead_update_resp)(struct call_param_buf *resp_buf,
87diff --git a/components/service/crypto/provider/extension/aead/serializer/packed-c/packedc_aead_provider_serializer.c b/components/service/crypto/provider/extension/aead/serializer/packed-c/packedc_aead_provider_serializer.c
88index 6f00b3e3f6f1..45c739abcbb4 100644
89--- a/components/service/crypto/provider/extension/aead/serializer/packed-c/packedc_aead_provider_serializer.c
90+++ b/components/service/crypto/provider/extension/aead/serializer/packed-c/packedc_aead_provider_serializer.c
91@@ -192,6 +192,7 @@ static rpc_status_t deserialize_aead_update_ad_req(const struct call_param_buf *
92 /* Operation: aead_update */
93 static rpc_status_t deserialize_aead_update_req(const struct call_param_buf *req_buf,
94 uint32_t *op_handle,
95+ uint32_t *output_size,
96 const uint8_t **input, size_t *input_len)
97 {
98 rpc_status_t rpc_status = TS_RPC_ERROR_INVALID_REQ_BODY;
99@@ -208,6 +209,7 @@ static rpc_status_t deserialize_aead_update_req(const struct call_param_buf *req
100 memcpy(&recv_msg, req_buf->data, expected_fixed_len);
101
102 *op_handle = recv_msg.op_handle;
103+ *output_size = recv_msg.output_size;
104
105 tlv_const_iterator_begin(&req_iter,
106 (uint8_t*)req_buf->data + expected_fixed_len,
107diff --git a/protocols/service/crypto/packed-c/aead.h b/protocols/service/crypto/packed-c/aead.h
108index 0be266b52403..435fd3b523ce 100644
109--- a/protocols/service/crypto/packed-c/aead.h
110+++ b/protocols/service/crypto/packed-c/aead.h
111@@ -98,6 +98,7 @@ enum
112 struct __attribute__ ((__packed__)) ts_crypto_aead_update_in
113 {
114 uint32_t op_handle;
115+ uint32_t output_size;
116 };
117
118 /* Variable length input parameter tags */
119--
Patrick Williams7784c422022-11-17 07:29:11 -06001202.38.1
Patrick Williams975a06f2022-10-21 14:42:47 -0500121