charon-nm: Set DPD/close action to restart and enable indefinite keying tries
[strongswan.git] / src / libstrongswan / plugins / aesni / aesni_key.h
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_ @}*/