Print this page
5072963 Need an optimized AES implementation for amd64

*** 24,45 **** */ #ifndef _AES_IMPL_H #define _AES_IMPL_H ! #pragma ident "@(#)aes_impl.h 1.3 08/02/26 SMI" /* * Common definitions used by AES. */ #ifdef __cplusplus extern "C" { #endif ! #define AES_BLOCK_LEN 16 #define AES_COPY_BLOCK(src, dst) \ (dst)[0] = (src)[0]; \ (dst)[1] = (src)[1]; \ (dst)[2] = (src)[2]; \ (dst)[3] = (src)[3]; \ --- 24,53 ---- */ #ifndef _AES_IMPL_H #define _AES_IMPL_H ! #pragma ident "@(#)aes_impl.h 1.4 08/05/19 SMI" /* * Common definitions used by AES. */ #ifdef __cplusplus extern "C" { #endif ! #include <sys/types.h> + /* Similar to sysmacros.h IS_P2ALIGNED, but checks two pointers: */ + #define IS_P2ALIGNED2(v, w, a) \ + ((((uintptr_t)(v) | (uintptr_t)(w)) & ((uintptr_t)(a) - 1)) == 0) + + #define AES_BLOCK_LEN 16 /* bytes */ + /* Round constant length, in number of 32-bit elements: */ + #define RC_LENGTH (5 * ((AES_BLOCK_LEN) / 4 - 2)) + #define AES_COPY_BLOCK(src, dst) \ (dst)[0] = (src)[0]; \ (dst)[1] = (src)[1]; \ (dst)[2] = (src)[2]; \ (dst)[3] = (src)[3]; \
*** 72,99 **** (dst)[12] ^= (src)[12]; \ (dst)[13] ^= (src)[13]; \ (dst)[14] ^= (src)[14]; \ (dst)[15] ^= (src)[15] #define AES_MINBITS 128 ! #define AES_MINBYTES (AES_MINBITS >> 3) #define AES_MAXBITS 256 ! #define AES_MAXBYTES (AES_MAXBITS >> 3) ! #define AES_MIN_KEY_BYTES (AES_MINBITS >> 3) ! #define AES_MAX_KEY_BYTES (AES_MAXBITS >> 3) #define AES_192_KEY_BYTES 24 #define AES_IV_LEN 16 #define AES_32BIT_KS 32 #define AES_64BIT_KS 64 ! #define MAX_AES_NR 14 typedef union { ! uint64_t ks64[(MAX_AES_NR + 1) * 4]; ! uint32_t ks32[(MAX_AES_NR + 1) * 4]; } aes_ks_t; typedef struct aes_key aes_key_t; struct aes_key { int nr; --- 80,112 ---- (dst)[12] ^= (src)[12]; \ (dst)[13] ^= (src)[13]; \ (dst)[14] ^= (src)[14]; \ (dst)[15] ^= (src)[15] + /* AES key size definitions */ #define AES_MINBITS 128 ! #define AES_MINBYTES ((AES_MINBITS) >> 3) #define AES_MAXBITS 256 ! #define AES_MAXBYTES ((AES_MAXBITS) >> 3) ! #define AES_MIN_KEY_BYTES ((AES_MINBITS) >> 3) ! #define AES_MAX_KEY_BYTES ((AES_MAXBITS) >> 3) #define AES_192_KEY_BYTES 24 #define AES_IV_LEN 16 + /* AES key schedule may be implemented with 32- or 64-bit elements: */ #define AES_32BIT_KS 32 #define AES_64BIT_KS 64 ! #define MAX_AES_NR 14 /* Maximum number of rounds */ ! #define MAX_AES_NB 4 /* Number of columns comprising a state */ typedef union { ! #ifdef sun4u ! uint64_t ks64[((MAX_AES_NR) + 1) * (MAX_AES_NB)]; ! #endif ! uint32_t ks32[((MAX_AES_NR) + 1) * (MAX_AES_NB)]; } aes_ks_t; typedef struct aes_key aes_key_t; struct aes_key { int nr;
*** 100,117 **** int type; aes_ks_t encr_ks; aes_ks_t decr_ks; }; ! extern void aes_encrypt_block(void *, uint8_t *, uint8_t *); ! extern void aes_decrypt_block(void *, uint8_t *, uint8_t *); ! extern void aes_init_keysched(uint8_t *, uint_t, void *); ! extern void *aes_alloc_keysched(size_t *, int); ! extern void aes_encrypt_impl(const aes_ks_t *ks, int Nr, const uint32_t pt[4], ! uint32_t ct[4]); ! extern void aes_decrypt_impl(const aes_ks_t *ks, int Nr, const uint32_t ct[4], ! uint32_t pt[4]); #ifdef __cplusplus } #endif --- 113,127 ---- int type; aes_ks_t encr_ks; aes_ks_t decr_ks; }; ! extern void aes_encrypt_block(const void *ks, const uint8_t *pt, uint8_t *ct); ! extern void aes_decrypt_block(const void *ks, const uint8_t *ct, uint8_t *pt); ! extern void aes_init_keysched(const uint8_t *cipherKey, uint_t keyBits, ! void *keysched); ! extern void *aes_alloc_keysched(size_t *size, int kmflag); #ifdef __cplusplus } #endif