Return to aesni_key.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / plugins / aesni |
1.1 misho 1: /* 2: * Copyright (C) 2015 Martin Willi 3: * Copyright (C) 2015 revosec AG 4: * 5: * This program is free software; you can redistribute it and/or modify it 6: * under the terms of the GNU General Public License as published by the 7: * Free Software Foundation; either version 2 of the License, or (at your 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. 9: * 10: * This program is distributed in the hope that it will be useful, but 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13: * for more details. 14: */ 15: 16: /** 17: * @defgroup aesni_key aesni_key 18: * @{ @ingroup aesni 19: */ 20: 21: #ifndef AESNI_KEY_H_ 22: #define AESNI_KEY_H_ 23: 24: #include <library.h> 25: 26: #include <wmmintrin.h> 27: 28: /** 29: * AES block size, in bytes 30: */ 31: #define AES_BLOCK_SIZE 16 32: 33: typedef struct aesni_key_t aesni_key_t; 34: 35: /** 36: * Key schedule for encryption/decryption using on AES-NI. 37: */ 38: struct aesni_key_t { 39: 40: /** 41: * Destroy a aesni_key_t. 42: */ 43: void (*destroy)(aesni_key_t *this); 44: 45: /** 46: * Number of AES rounds (10, 12, 14) 47: */ 48: int rounds; 49: 50: /** 51: * Key schedule, for each round + the round 0 (whitening) 52: */ 53: __attribute__((aligned(sizeof(__m128i)))) __m128i schedule[]; 54: }; 55: 56: /** 57: * Create a AESNI key schedule instance. 58: * 59: * @param encrypt TRUE for encryption schedule, FALSE for decryption 60: * @param key non-expanded crypto key, 16, 24 or 32 bytes 61: * @return key schedule, NULL on invalid key size 62: */ 63: aesni_key_t *aesni_key_create(bool encrypt, chunk_t key); 64: 65: #endif /** AESNI_KEY_H_ @}*/