77#include <linux/crc32poly.h>
88#include <drv_types.h>
99#include <rtw_debug.h>
10+ #include <crypto/aes.h>
1011
1112static const char * const _security_type_str [] = {
1213 "N/A" ,
@@ -1931,99 +1932,6 @@ const u8 rcons[] = {
19311932 /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
19321933};
19331934
1934- /*
1935- * Expand the cipher key into the encryption key schedule.
1936- *
1937- * @return the number of rounds for the given cipher key size.
1938- */
1939- static void rijndaelKeySetupEnc (u32 rk [/*44*/ ], const u8 cipherKey [])
1940- {
1941- int i ;
1942- u32 temp ;
1943-
1944- rk [0 ] = GETU32 (cipherKey );
1945- rk [1 ] = GETU32 (cipherKey + 4 );
1946- rk [2 ] = GETU32 (cipherKey + 8 );
1947- rk [3 ] = GETU32 (cipherKey + 12 );
1948- for (i = 0 ; i < 10 ; i ++ ) {
1949- temp = rk [3 ];
1950- rk [4 ] = rk [0 ] ^
1951- TE421 (temp ) ^ TE432 (temp ) ^ TE443 (temp ) ^ TE414 (temp ) ^
1952- RCON (i );
1953- rk [5 ] = rk [1 ] ^ rk [4 ];
1954- rk [6 ] = rk [2 ] ^ rk [5 ];
1955- rk [7 ] = rk [3 ] ^ rk [6 ];
1956- rk += 4 ;
1957- }
1958- }
1959-
1960- static void rijndaelEncrypt (u32 rk [/*44*/ ], u8 pt [16 ], u8 ct [16 ])
1961- {
1962- u32 s0 , s1 , s2 , s3 , t0 , t1 , t2 , t3 ;
1963- int Nr = 10 ;
1964- int r ;
1965-
1966- /*
1967- * map byte array block to cipher state
1968- * and add initial round key:
1969- */
1970- s0 = GETU32 (pt ) ^ rk [0 ];
1971- s1 = GETU32 (pt + 4 ) ^ rk [1 ];
1972- s2 = GETU32 (pt + 8 ) ^ rk [2 ];
1973- s3 = GETU32 (pt + 12 ) ^ rk [3 ];
1974-
1975- #define ROUND (i , d , s ) \
1976- do { \
1977- d##0 = TE0(s##0) ^ TE1(s##1) ^ TE2(s##2) ^ TE3(s##3) ^ rk[4 * i]; \
1978- d##1 = TE0(s##1) ^ TE1(s##2) ^ TE2(s##3) ^ TE3(s##0) ^ rk[4 * i + 1]; \
1979- d##2 = TE0(s##2) ^ TE1(s##3) ^ TE2(s##0) ^ TE3(s##1) ^ rk[4 * i + 2]; \
1980- d##3 = TE0(s##3) ^ TE1(s##0) ^ TE2(s##1) ^ TE3(s##2) ^ rk[4 * i + 3]; \
1981- } while (0)
1982-
1983- /* Nr - 1 full rounds: */
1984- r = Nr >> 1 ;
1985- for (;;) {
1986- ROUND (1 , t , s );
1987- rk += 8 ;
1988- if (-- r == 0 )
1989- break ;
1990- ROUND (0 , s , t );
1991- }
1992-
1993- #undef ROUND
1994-
1995- /*
1996- * apply last round and
1997- * map cipher state to byte array block:
1998- */
1999- s0 = TE41 (t0 ) ^ TE42 (t1 ) ^ TE43 (t2 ) ^ TE44 (t3 ) ^ rk [0 ];
2000- PUTU32 (ct , s0 );
2001- s1 = TE41 (t1 ) ^ TE42 (t2 ) ^ TE43 (t3 ) ^ TE44 (t0 ) ^ rk [1 ];
2002- PUTU32 (ct + 4 , s1 );
2003- s2 = TE41 (t2 ) ^ TE42 (t3 ) ^ TE43 (t0 ) ^ TE44 (t1 ) ^ rk [2 ];
2004- PUTU32 (ct + 8 , s2 );
2005- s3 = TE41 (t3 ) ^ TE42 (t0 ) ^ TE43 (t1 ) ^ TE44 (t2 ) ^ rk [3 ];
2006- PUTU32 (ct + 12 , s3 );
2007- }
2008-
2009- static void * aes_encrypt_init (u8 * key , size_t len )
2010- {
2011- u32 * rk ;
2012-
2013- if (len != 16 )
2014- return NULL ;
2015- rk = rtw_malloc (AES_PRIV_SIZE );
2016- if (rk == NULL )
2017- return NULL ;
2018- rijndaelKeySetupEnc (rk , key );
2019- return rk ;
2020- }
2021-
2022- static void aes_128_encrypt (void * ctx , u8 * plain , u8 * crypt )
2023- {
2024- rijndaelEncrypt (ctx , plain , crypt );
2025- }
2026-
20271935static void gf_mulx (u8 * pad )
20281936{
20291937 int i , carry ;
@@ -2037,11 +1945,6 @@ static void gf_mulx(u8 *pad)
20371945 pad [AES_BLOCK_SIZE - 1 ] ^= 0x87 ;
20381946}
20391947
2040- static void aes_encrypt_deinit (void * ctx )
2041- {
2042- kfree_sensitive (ctx );
2043- }
2044-
20451948/**
20461949 * omac1_aes_128_vector - One-Key CBC MAC (OMAC1) hash with AES-128
20471950 * @key: 128-bit key for the hash operation
@@ -2058,13 +1961,14 @@ static void aes_encrypt_deinit(void *ctx)
20581961static int omac1_aes_128_vector (u8 * key , size_t num_elem ,
20591962 u8 * addr [], size_t * len , u8 * mac )
20601963{
2061- void * ctx ;
1964+ struct crypto_aes_ctx ctx ;
20621965 u8 cbc [AES_BLOCK_SIZE ], pad [AES_BLOCK_SIZE ];
20631966 u8 * pos , * end ;
20641967 size_t i , e , left , total_len ;
1968+ int ret ;
20651969
2066- ctx = aes_encrypt_init ( key , 16 );
2067- if (ctx == NULL )
1970+ ret = aes_expandkey ( & ctx , key , 16 );
1971+ if (ret )
20681972 return -1 ;
20691973 memset (cbc , 0 , AES_BLOCK_SIZE );
20701974
@@ -2087,12 +1991,12 @@ static int omac1_aes_128_vector(u8 *key, size_t num_elem,
20871991 }
20881992 }
20891993 if (left > AES_BLOCK_SIZE )
2090- aes_128_encrypt ( ctx , cbc , cbc );
1994+ aes_encrypt ( & ctx , cbc , cbc );
20911995 left -= AES_BLOCK_SIZE ;
20921996 }
20931997
20941998 memset (pad , 0 , AES_BLOCK_SIZE );
2095- aes_128_encrypt ( ctx , pad , pad );
1999+ aes_encrypt ( & ctx , pad , pad );
20962000 gf_mulx (pad );
20972001
20982002 if (left || total_len == 0 ) {
@@ -2110,8 +2014,8 @@ static int omac1_aes_128_vector(u8 *key, size_t num_elem,
21102014
21112015 for (i = 0 ; i < AES_BLOCK_SIZE ; i ++ )
21122016 pad [i ] ^= cbc [i ];
2113- aes_128_encrypt ( ctx , pad , mac );
2114- aes_encrypt_deinit ( ctx );
2017+ aes_encrypt ( & ctx , pad , mac );
2018+ memzero_explicit ( & ctx , sizeof ( ctx ) );
21152019 return 0 ;
21162020}
21172021
0 commit comments