19d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * AES-based functions 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * - AES Key Wrap Algorithm (RFC3394) 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * - One-Key CBC MAC (OMAC1) hash with AES-128 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * - AES-128 CTR mode encryption 79d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * - AES-128 EAX mode encryption/decryption 89d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * - AES-128 CBC 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * - AES-GCM 109d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * - AES-CCM 119d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * 1269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi> 139d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org * 14181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com * This software may be distributed under the terms of the BSD license. 15383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com * See README for more details. 16383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com */ 17181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com 18181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#ifndef AES_WRAP_H 19181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#define AES_WRAP_H 20181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com 21181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.comint __must_check aes_wrap(const u8 *kek, size_t kek_len, int n, const u8 *plain, 22181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com u8 *cipher); 23383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comint __must_check aes_unwrap(const u8 *kek, size_t kek_len, int n, 24383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com const u8 *cipher, u8 *plain); 25383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comint __must_check omac1_aes_128_vector(const u8 *key, size_t num_elem, 26383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com const u8 *addr[], const size_t *len, 27383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com u8 *mac); 28383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comint __must_check omac1_aes_128(const u8 *key, const u8 *data, size_t data_len, 29383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com u8 *mac); 30383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comint __must_check aes_128_encrypt_block(const u8 *key, const u8 *in, u8 *out); 31383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comint __must_check aes_128_ctr_encrypt(const u8 *key, const u8 *nonce, 32181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com u8 *data, size_t data_len); 33181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.comint __must_check aes_128_eax_encrypt(const u8 *key, 34181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com const u8 *nonce, size_t nonce_len, 35181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com const u8 *hdr, size_t hdr_len, 36181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com u8 *data, size_t data_len, u8 *tag); 37b5b3168a645802f66233234a06dd5a3764f18018bsalomon@google.comint __must_check aes_128_eax_decrypt(const u8 *key, 38181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com const u8 *nonce, size_t nonce_len, 399d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org const u8 *hdr, size_t hdr_len, 409d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org u8 *data, size_t data_len, const u8 *tag); 41c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.comint __must_check aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, 42c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com size_t data_len); 43afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.comint __must_check aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, 44c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com size_t data_len); 45c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.comint __must_check aes_gcm_ae(const u8 *key, size_t key_len, 46c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com const u8 *iv, size_t iv_len, 479d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org const u8 *plain, size_t plain_len, 48c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com const u8 *aad, size_t aad_len, 499d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org u8 *crypt, u8 *tag); 509d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgint __must_check aes_gcm_ad(const u8 *key, size_t key_len, 519d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org const u8 *iv, size_t iv_len, 529d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org const u8 *crypt, size_t crypt_len, 539d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org const u8 *aad, size_t aad_len, const u8 *tag, 549d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org u8 *plain); 552047f00e4698f83499ab91911999a65c21a951c9epoger@google.comint __must_check aes_gmac(const u8 *key, size_t key_len, 5661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com const u8 *iv, size_t iv_len, 5761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com const u8 *aad, size_t aad_len, u8 *tag); 5861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comint __must_check aes_ccm_ae(const u8 *key, size_t key_len, const u8 *nonce, 5961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com size_t M, const u8 *plain, size_t plain_len, 6061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com const u8 *aad, size_t aad_len, u8 *crypt, u8 *auth); 6161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comint __must_check aes_ccm_ad(const u8 *key, size_t key_len, const u8 *nonce, 6261f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com size_t M, const u8 *crypt, size_t crypt_len, 6361f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com const u8 *aad, size_t aad_len, const u8 *auth, 649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org u8 *plain); 659d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org 669d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#endif /* AES_WRAP_H */ 679d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org