1e5b75505Sopenharmony_ci/* 2e5b75505Sopenharmony_ci * AES-based functions 3e5b75505Sopenharmony_ci * 4e5b75505Sopenharmony_ci * - AES Key Wrap Algorithm (RFC3394) 5e5b75505Sopenharmony_ci * - One-Key CBC MAC (OMAC1) hash with AES-128 and AES-256 6e5b75505Sopenharmony_ci * - AES-128/192/256 CTR mode encryption 7e5b75505Sopenharmony_ci * - AES-128 EAX mode encryption/decryption 8e5b75505Sopenharmony_ci * - AES-128 CBC 9e5b75505Sopenharmony_ci * - AES-GCM 10e5b75505Sopenharmony_ci * - AES-CCM 11e5b75505Sopenharmony_ci * 12e5b75505Sopenharmony_ci * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 13e5b75505Sopenharmony_ci * 14e5b75505Sopenharmony_ci * This software may be distributed under the terms of the BSD license. 15e5b75505Sopenharmony_ci * See README for more details. 16e5b75505Sopenharmony_ci */ 17e5b75505Sopenharmony_ci 18e5b75505Sopenharmony_ci#ifndef AES_WRAP_H 19e5b75505Sopenharmony_ci#define AES_WRAP_H 20e5b75505Sopenharmony_ci 21e5b75505Sopenharmony_ciint __must_check aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, 22e5b75505Sopenharmony_ci u8 *cipher); 23e5b75505Sopenharmony_ciint __must_check aes_unwrap(const u8 *kek, size_t kek_len, int n, 24e5b75505Sopenharmony_ci const u8 *cipher, u8 *plain); 25e5b75505Sopenharmony_ciint __must_check omac1_aes_vector(const u8 *key, size_t key_len, 26e5b75505Sopenharmony_ci size_t num_elem, const u8 *addr[], 27e5b75505Sopenharmony_ci const size_t *len, u8 *mac); 28e5b75505Sopenharmony_ciint __must_check omac1_aes_128_vector(const u8 *key, size_t num_elem, 29e5b75505Sopenharmony_ci const u8 *addr[], const size_t *len, 30e5b75505Sopenharmony_ci u8 *mac); 31e5b75505Sopenharmony_ciint __must_check omac1_aes_128(const u8 *key, const u8 *data, size_t data_len, 32e5b75505Sopenharmony_ci u8 *mac); 33e5b75505Sopenharmony_ciint __must_check omac1_aes_256(const u8 *key, const u8 *data, size_t data_len, 34e5b75505Sopenharmony_ci u8 *mac); 35e5b75505Sopenharmony_ciint __must_check aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out); 36e5b75505Sopenharmony_ciint __must_check aes_ctr_encrypt(const u8 *key, size_t key_len, const u8 *nonce, 37e5b75505Sopenharmony_ci u8 *data, size_t data_len); 38e5b75505Sopenharmony_ciint __must_check aes_128_ctr_encrypt(const u8 *key, const u8 *nonce, 39e5b75505Sopenharmony_ci u8 *data, size_t data_len); 40e5b75505Sopenharmony_ciint __must_check aes_128_eax_encrypt(const u8 *key, 41e5b75505Sopenharmony_ci const u8 *nonce, size_t nonce_len, 42e5b75505Sopenharmony_ci const u8 *hdr, size_t hdr_len, 43e5b75505Sopenharmony_ci u8 *data, size_t data_len, u8 *tag); 44e5b75505Sopenharmony_ciint __must_check aes_128_eax_decrypt(const u8 *key, 45e5b75505Sopenharmony_ci const u8 *nonce, size_t nonce_len, 46e5b75505Sopenharmony_ci const u8 *hdr, size_t hdr_len, 47e5b75505Sopenharmony_ci u8 *data, size_t data_len, const u8 *tag); 48e5b75505Sopenharmony_ciint __must_check aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, 49e5b75505Sopenharmony_ci size_t data_len); 50e5b75505Sopenharmony_ciint __must_check aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, 51e5b75505Sopenharmony_ci size_t data_len); 52e5b75505Sopenharmony_ciint __must_check aes_gcm_ae(const u8 *key, size_t key_len, 53e5b75505Sopenharmony_ci const u8 *iv, size_t iv_len, 54e5b75505Sopenharmony_ci const u8 *plain, size_t plain_len, 55e5b75505Sopenharmony_ci const u8 *aad, size_t aad_len, 56e5b75505Sopenharmony_ci u8 *crypt, u8 *tag); 57e5b75505Sopenharmony_ciint __must_check aes_gcm_ad(const u8 *key, size_t key_len, 58e5b75505Sopenharmony_ci const u8 *iv, size_t iv_len, 59e5b75505Sopenharmony_ci const u8 *crypt, size_t crypt_len, 60e5b75505Sopenharmony_ci const u8 *aad, size_t aad_len, const u8 *tag, 61e5b75505Sopenharmony_ci u8 *plain); 62e5b75505Sopenharmony_ciint __must_check aes_gmac(const u8 *key, size_t key_len, 63e5b75505Sopenharmony_ci const u8 *iv, size_t iv_len, 64e5b75505Sopenharmony_ci const u8 *aad, size_t aad_len, u8 *tag); 65e5b75505Sopenharmony_ciint __must_check aes_ccm_ae(const u8 *key, size_t key_len, const u8 *nonce, 66e5b75505Sopenharmony_ci size_t M, const u8 *plain, size_t plain_len, 67e5b75505Sopenharmony_ci const u8 *aad, size_t aad_len, u8 *crypt, u8 *auth); 68e5b75505Sopenharmony_ciint __must_check aes_ccm_ad(const u8 *key, size_t key_len, const u8 *nonce, 69e5b75505Sopenharmony_ci size_t M, const u8 *crypt, size_t crypt_len, 70e5b75505Sopenharmony_ci const u8 *aad, size_t aad_len, const u8 *auth, 71e5b75505Sopenharmony_ci u8 *plain); 72e5b75505Sopenharmony_ci 73e5b75505Sopenharmony_ci#endif /* AES_WRAP_H */ 74