CryptoAuthLib
Microchip CryptoAuthentication Library
atca_basic_aes_gcm.h
Go to the documentation of this file.
1 
27 #ifndef ATCA_BASIC_AES_GCM_H_
28 #define ATCA_BASIC_AES_GCM_H_
29 
30 #include "cryptoauthlib.h"
31 
32 extern const char* atca_basic_aes_gcm_version;
33 
36 typedef struct atca_aes_gcm_ctx
37 {
38  uint16_t key_id;
39  uint8_t key_block;
40  uint8_t cb[AES_DATA_SIZE];
41  uint32_t data_size;
42  uint32_t aad_size;
43  uint8_t h[AES_DATA_SIZE];
44  uint8_t j0[AES_DATA_SIZE];
45  uint8_t y[AES_DATA_SIZE];
47  uint32_t partial_aad_size;
48  uint8_t enc_cb[AES_DATA_SIZE];
51 
52 ATCA_STATUS atcab_aes_gcm_init(atca_aes_gcm_ctx_t* ctx, uint16_t key_id, uint8_t key_block, const uint8_t* iv, size_t iv_size);
53 ATCA_STATUS atcab_aes_gcm_init_rand(atca_aes_gcm_ctx_t* ctx, uint16_t key_id, uint8_t key_block, size_t rand_size,
54  const uint8_t* free_field, size_t free_field_size, uint8_t* iv);
55 ATCA_STATUS atcab_aes_gcm_aad_update(atca_aes_gcm_ctx_t* ctx, const uint8_t* aad, uint32_t aad_size);
56 ATCA_STATUS atcab_aes_gcm_encrypt_update(atca_aes_gcm_ctx_t* ctx, const uint8_t* plaintext, uint32_t plaintext_size, uint8_t* ciphertext);
57 ATCA_STATUS atcab_aes_gcm_encrypt_finish(atca_aes_gcm_ctx_t* ctx, uint8_t* tag, size_t tag_size);
58 ATCA_STATUS atcab_aes_gcm_decrypt_update(atca_aes_gcm_ctx_t* ctx, const uint8_t* ciphertext, uint32_t ciphertext_size, uint8_t* plaintext);
59 ATCA_STATUS atcab_aes_gcm_decrypt_finish(atca_aes_gcm_ctx_t* ctx, const uint8_t* tag, size_t tag_size, bool* is_verified);
60 
61 #endif
uint8_t h[AES_DATA_SIZE]
Subkey for ghash functions in GCM.
Definition: atca_basic_aes_gcm.h:43
uint32_t aad_size
Size of the additional authenticated data in bytes.
Definition: atca_basic_aes_gcm.h:42
ATCA_STATUS atcab_aes_gcm_init_rand(atca_aes_gcm_ctx_t *ctx, uint16_t key_id, uint8_t key_block, size_t rand_size, const uint8_t *free_field, size_t free_field_size, uint8_t *iv)
Initialize context for AES GCM operation with a IV composed of a random and optional fixed(free) fiel...
Definition: atca_basic_aes_gcm.c:227
uint32_t partial_aad_size
Amount of data in the partial block buffer.
Definition: atca_basic_aes_gcm.h:47
ATCA_STATUS
Definition: atca_status.h:41
ATCA_STATUS atcab_aes_gcm_init(atca_aes_gcm_ctx_t *ctx, uint16_t key_id, uint8_t key_block, const uint8_t *iv, size_t iv_size)
Initialize context for AES GCM operation with an existing IV, which is common when starting a decrypt...
Definition: atca_basic_aes_gcm.c:152
ATCA_STATUS atcab_aes_gcm_decrypt_finish(atca_aes_gcm_ctx_t *ctx, const uint8_t *tag, size_t tag_size, bool *is_verified)
Complete a GCM decrypt operation verifying the authentication tag.
Definition: atca_basic_aes_gcm.c:542
uint8_t j0[AES_DATA_SIZE]
Precounter block generated from IV.
Definition: atca_basic_aes_gcm.h:44
uint8_t y[AES_DATA_SIZE]
Current GHASH output.
Definition: atca_basic_aes_gcm.h:45
Single aggregation point for all CryptoAuthLib header files.
ATCA_STATUS atcab_aes_gcm_aad_update(atca_aes_gcm_ctx_t *ctx, const uint8_t *aad, uint32_t aad_size)
Process Additional Authenticated Data (AAD) using GCM mode and a key within the ATECC608A device...
Definition: atca_basic_aes_gcm.c:272
ATCA_STATUS atcab_aes_gcm_decrypt_update(atca_aes_gcm_ctx_t *ctx, const uint8_t *ciphertext, uint32_t ciphertext_size, uint8_t *plaintext)
Decrypt data using GCM mode and a key within the ATECC608A device. atcab_aes_gcm_init() or atcab_aes_...
Definition: atca_basic_aes_gcm.c:528
uint8_t cb[AES_DATA_SIZE]
Counter block, comprises of nonce + count value (16 bytes).
Definition: atca_basic_aes_gcm.h:40
uint8_t enc_cb[AES_DATA_SIZE]
Last encrypted counter block.
Definition: atca_basic_aes_gcm.h:48
uint8_t partial_aad[AES_DATA_SIZE]
Partial blocks of data waiting to be processed.
Definition: atca_basic_aes_gcm.h:46
const char * atca_basic_aes_gcm_version
Definition: atca_basic_aes_gcm.c:38
struct atca_aes_gcm_ctx atca_aes_gcm_ctx_t
#define AES_DATA_SIZE
size of AES encrypt/decrypt data
Definition: atca_command.h:306
uint8_t ciphertext_block[AES_DATA_SIZE]
Last ciphertext block.
Definition: atca_basic_aes_gcm.h:49
ATCA_STATUS atcab_aes_gcm_encrypt_update(atca_aes_gcm_ctx_t *ctx, const uint8_t *plaintext, uint32_t plaintext_size, uint8_t *ciphertext)
Encrypt data using GCM mode and a key within the ATECC608A device. atcab_aes_gcm_init() or atcab_aes_...
Definition: atca_basic_aes_gcm.c:416
Definition: atca_basic_aes_gcm.h:36
uint16_t key_id
Key location. Can either be a slot number or ATCA_TEMPKEY_KEYID for TempKey.
Definition: atca_basic_aes_gcm.h:38
uint32_t data_size
Size of the data being encrypted/decrypted in bytes.
Definition: atca_basic_aes_gcm.h:41
ATCA_STATUS atcab_aes_gcm_encrypt_finish(atca_aes_gcm_ctx_t *ctx, uint8_t *tag, size_t tag_size)
Complete a GCM encrypt operation returning the authentication tag.
Definition: atca_basic_aes_gcm.c:484
uint8_t key_block
Index of the 16-byte block to use within the key location for the actual key.
Definition: atca_basic_aes_gcm.h:39