123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- * Copyright (c) 2017 The Linux Foundation. All rights reserved.
- */
- /*
- * AES-128/192/256 CTR
- *
- * Copyright (c) 2003-2007, Jouni Malinen <[email protected]>
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
- #ifdef WLAN_SUPPORT_FILS
- #include <qdf_crypto.h>
- #include "wlan_crypto_aes_i.h"
- int32_t wlan_crypto_aes_ctr_encrypt(const uint8_t *key, size_t key_len,
- const uint8_t *nonce, uint8_t *data,
- size_t data_len)
- {
- void *ctx;
- size_t j, len, left = data_len;
- int32_t i;
- uint8_t *pos = data;
- uint8_t counter[AES_BLOCK_SIZE], buf[AES_BLOCK_SIZE];
- int32_t status = -1;
- ctx = wlan_crypto_aes_encrypt_init(key, key_len);
- if (!ctx)
- return status;
- qdf_mem_copy(counter, nonce, AES_BLOCK_SIZE);
- while (left > 0) {
- wlan_crypto_aes_encrypt(ctx, counter, buf);
- len = (left < AES_BLOCK_SIZE) ? left : AES_BLOCK_SIZE;
- for (j = 0; j < len; j++)
- pos[j] ^= buf[j];
- pos += len;
- left -= len;
- for (i = AES_BLOCK_SIZE - 1; i >= 0; i--) {
- counter[i]++;
- if (counter[i])
- break;
- }
- }
- wlan_crypto_aes_encrypt_deinit(ctx);
- return 0;
- }
- int32_t wlan_crypto_aes_128_ctr_encrypt(const uint8_t *key,
- const uint8_t *nonce, uint8_t *data,
- size_t data_len)
- {
- return wlan_crypto_aes_ctr_encrypt(key, 16, nonce, data, data_len);
- }
- #endif /* WLAN_SUPPORT_FILS */
|