Skip to content

Commit bb55129

Browse files
committed
Update pkg/cifra/psa_cifra/aes_ccm.c
1 parent 3f05269 commit bb55129

File tree

1 file changed

+103
-23
lines changed

1 file changed

+103
-23
lines changed

pkg/cifra/psa_cifra/aes_ccm.c

Lines changed: 103 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@
2222
#include "modes.h"
2323
#include <assert.h>
2424

25-
psa_status_t psa_aead_encrypt_aes_ccm( const psa_key_attributes_t *attributes,
26-
uint8_t *key_buffer, size_t key_buffer_length,
27-
uint8_t tag_length, const uint8_t *nonce,
28-
size_t nonce_length, const uint8_t *additional_data,
29-
size_t additional_data_length, const uint8_t *plaintext,
30-
size_t plaintext_length, uint8_t *ciphertext,
31-
size_t ciphertext_size, size_t *ciphertext_length)
25+
psa_status_t psa_aead_encrypt_aes_ccm(const psa_key_attributes_t *attributes,
26+
uint8_t *key_buffer, size_t key_buffer_length,
27+
uint8_t tag_length, const uint8_t *nonce,
28+
size_t nonce_length, const uint8_t *additional_data,
29+
size_t additional_data_length, const uint8_t *plaintext,
30+
size_t plaintext_length, uint8_t *ciphertext,
31+
size_t ciphertext_size, size_t *ciphertext_length)
3232
{
3333
(void)attributes;
34-
assert(key_buffer_length == 16 || key_buffer_length == 24 || key_buffer_length == 32);
34+
/* This should already have been checked by PSA. */
3535
assert(ciphertext_size >= plaintext_length + tag_length);
3636

37-
uint8_t tag[PSA_AEAD_TAG_MAX_SIZE];
37+
uint8_t tag[PSA_AES_CCM_TAG_MAX_SIZE];
3838

3939
cf_aes_context ctx;
4040
cf_aes_init(&ctx, key_buffer, key_buffer_length);
4141

4242
cf_ccm_encrypt(&cf_aes, &ctx, plaintext, plaintext_length,
43-
15 - nonce_length, additional_data, additional_data_length,
44-
nonce, nonce_length, ciphertext, tag, tag_length);
43+
15 - nonce_length, additional_data, additional_data_length,
44+
nonce, nonce_length, ciphertext, tag, tag_length);
4545

4646
memcpy(&ciphertext[plaintext_length], tag, tag_length);
4747

@@ -50,34 +50,114 @@ psa_status_t psa_aead_encrypt_aes_ccm( const psa_key_attributes_t *attributes,
5050
return PSA_SUCCESS;
5151
}
5252

53-
psa_status_t psa_aead_decrypt_aes_ccm( const psa_key_attributes_t *attributes,
54-
uint8_t *key_buffer, size_t key_buffer_length,
55-
uint8_t tag_length, const uint8_t *nonce,
56-
size_t nonce_length, const uint8_t *additional_data,
57-
size_t additional_data_length, const uint8_t *ciphertext,
58-
size_t ciphertext_length, uint8_t *plaintext,
59-
size_t plaintext_size, size_t *plaintext_length)
53+
psa_status_t psa_aead_decrypt_aes_ccm(const psa_key_attributes_t *attributes,
54+
uint8_t *key_buffer, size_t key_buffer_length,
55+
uint8_t tag_length, const uint8_t *nonce,
56+
size_t nonce_length, const uint8_t *additional_data,
57+
size_t additional_data_length, const uint8_t *ciphertext,
58+
size_t ciphertext_length, uint8_t *plaintext,
59+
size_t plaintext_size, size_t *plaintext_length)
6060
{
6161
(void)attributes;
62-
assert(key_buffer_length == 16 || key_buffer_length == 24 || key_buffer_length == 32);
62+
/* This should already have been checked by PSA. */
6363
assert(plaintext_size >= ciphertext_length - tag_length);
6464

6565
int ret;
66-
uint8_t tag[PSA_AEAD_TAG_MAX_SIZE];
66+
uint8_t tag[PSA_AES_CCM_TAG_MAX_SIZE];
6767
memcpy(tag, &ciphertext[plaintext_size], tag_length);
6868

6969
cf_aes_context ctx;
7070
cf_aes_init(&ctx, key_buffer, key_buffer_length);
7171

7272
ret = cf_ccm_decrypt(&cf_aes, &ctx, ciphertext, plaintext_size,
73-
15 - nonce_length, additional_data, additional_data_length,
74-
nonce, nonce_length, tag, tag_length, plaintext);
73+
15 - nonce_length, additional_data, additional_data_length,
74+
nonce, nonce_length, tag, tag_length, plaintext);
7575

7676
if (ret != 0) {
77-
return PSA_ERROR_GENERIC_ERROR;
77+
return PSA_ERROR_INVALID_SIGNATURE;
7878
}
7979

8080
*plaintext_length = ciphertext_length - tag_length;
8181

8282
return PSA_SUCCESS;
8383
}
84+
85+
psa_status_t psa_aead_aes_128_ccm_encrypt(const psa_key_attributes_t *attributes,
86+
uint8_t *key_buffer, size_t key_buffer_length,
87+
uint8_t tag_length, const uint8_t *nonce,
88+
size_t nonce_length, const uint8_t *additional_data,
89+
size_t additional_data_length, const uint8_t *plaintext,
90+
size_t plaintext_length, uint8_t *ciphertext,
91+
size_t ciphertext_size, size_t *ciphertext_length)
92+
{
93+
return psa_aead_encrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
94+
tag_length, nonce, nonce_length, additional_data,
95+
additional_data_length, plaintext, plaintext_length,
96+
ciphertext, ciphertext_size, ciphertext_length);
97+
}
98+
99+
psa_status_t psa_aead_aes_128_ccm_decrypt(const psa_key_attributes_t *attributes,
100+
uint8_t *key_buffer, size_t key_buffer_length,
101+
uint8_t tag_length, const uint8_t *nonce,
102+
size_t nonce_length, const uint8_t *additional_data,
103+
size_t additional_data_length, const uint8_t *ciphertext,
104+
size_t ciphertext_length, uint8_t *plaintext,
105+
size_t plaintext_size, size_t *plaintext_length)
106+
{
107+
return psa_aead_decrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
108+
tag_length, nonce, nonce_length, additional_data,
109+
additional_data_length, ciphertext, ciphertext_length,
110+
plaintext, plaintext_size, plaintext_length);
111+
}
112+
psa_status_t psa_aead_aes_192_ccm_encrypt(const psa_key_attributes_t *attributes,
113+
uint8_t *key_buffer, size_t key_buffer_length,
114+
uint8_t tag_length, const uint8_t *nonce,
115+
size_t nonce_length, const uint8_t *additional_data,
116+
size_t additional_data_length, const uint8_t *plaintext,
117+
size_t plaintext_length, uint8_t *ciphertext,
118+
size_t ciphertext_size, size_t *ciphertext_length)
119+
{
120+
return psa_aead_encrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
121+
tag_length, nonce, nonce_length, additional_data,
122+
additional_data_length, plaintext, plaintext_length,
123+
ciphertext, ciphertext_size, ciphertext_length);
124+
}
125+
psa_status_t psa_aead_aes_192_ccm_decrypt(const psa_key_attributes_t *attributes,
126+
uint8_t *key_buffer, size_t key_buffer_length,
127+
uint8_t tag_length, const uint8_t *nonce,
128+
size_t nonce_length, const uint8_t *additional_data,
129+
size_t additional_data_length, const uint8_t *ciphertext,
130+
size_t ciphertext_length, uint8_t *plaintext,
131+
size_t plaintext_size, size_t *plaintext_length)
132+
{
133+
return psa_aead_decrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
134+
tag_length, nonce, nonce_length, additional_data,
135+
additional_data_length, ciphertext, ciphertext_length,
136+
plaintext, plaintext_size, plaintext_length);
137+
}
138+
psa_status_t psa_aead_aes_256_ccm_encrypt(const psa_key_attributes_t *attributes,
139+
uint8_t *key_buffer, size_t key_buffer_length,
140+
uint8_t tag_length, const uint8_t *nonce,
141+
size_t nonce_length, const uint8_t *additional_data,
142+
size_t additional_data_length, const uint8_t *plaintext,
143+
size_t plaintext_length, uint8_t *ciphertext,
144+
size_t ciphertext_size, size_t *ciphertext_length)
145+
{
146+
return psa_aead_encrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
147+
tag_length, nonce, nonce_length, additional_data,
148+
additional_data_length, plaintext, plaintext_length,
149+
ciphertext, ciphertext_size, ciphertext_length);
150+
}
151+
psa_status_t psa_aead_aes_256_ccm_decrypt(const psa_key_attributes_t *attributes,
152+
uint8_t *key_buffer, size_t key_buffer_length,
153+
uint8_t tag_length, const uint8_t *nonce,
154+
size_t nonce_length, const uint8_t *additional_data,
155+
size_t additional_data_length, const uint8_t *ciphertext,
156+
size_t ciphertext_length, uint8_t *plaintext,
157+
size_t plaintext_size, size_t *plaintext_length)
158+
{
159+
return psa_aead_decrypt_aes_ccm(attributes, key_buffer, key_buffer_length,
160+
tag_length, nonce, nonce_length, additional_data,
161+
additional_data_length, ciphertext, ciphertext_length,
162+
plaintext, plaintext_size, plaintext_length);
163+
}

0 commit comments

Comments
 (0)