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