Annotation of embedaddon/strongswan/src/libstrongswan/plugins/aesni/aesni_key.h, revision 1.1.1.1

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_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>