diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2007-01-14 19:39:38 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2007-01-14 19:39:38 +0000 |
commit | 0c5d2819a5b124ba4692f2fb1c2f1298fd373b8c (patch) | |
tree | 689f9c63e64d34719c89e57b301ac30bcc56103f /libavutil/aes.c | |
parent | 28b5123546d0bdd61bd4c2c02ee39e63b5eea781 (diff) | |
download | ffmpeg-0c5d2819a5b124ba4692f2fb1c2f1298fd373b8c.tar.gz |
merge encrypt and decrypt so the source is simpler and the compiler can choose with inlining if it wants speed or small size
Originally committed as revision 7494 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil/aes.c')
-rw-r--r-- | libavutil/aes.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/libavutil/aes.c b/libavutil/aes.c index a54cab13f0..1697e9ecc9 100644 --- a/libavutil/aes.c +++ b/libavutil/aes.c @@ -71,40 +71,30 @@ static inline void mix(uint8_t state[4][4], uint32_t multbl[4][256]){ #endif } -void av_aes_decrypt(AVAES *a){ +static inline void crypt(AVAES *a, int s, uint8_t *sbox, uint32_t *multbl){ int t, r; for(r=a->rounds; r>1; r--){ addkey(a->state, a->round_key[r]); - SUBSHIFT3x((a->state[0]+1)) + SUBSHIFT3x((a->state[0]+1+s)) SUBSHIFT2x((a->state[0]+2)) - SUBSHIFT1x((a->state[0]+3)) - mix(a->state, dec_multbl); + SUBSHIFT1x((a->state[0]+3-s)) + mix(a->state, multbl); } addkey(a->state, a->round_key[1]); - SUBSHIFT0((a->state[0]+0), inv_sbox) - SUBSHIFT3((a->state[0]+1), inv_sbox) - SUBSHIFT2((a->state[0]+2), inv_sbox) - SUBSHIFT1((a->state[0]+3), inv_sbox) + SUBSHIFT0((a->state[0]+0 ), sbox) + SUBSHIFT3((a->state[0]+1+s), sbox) + SUBSHIFT2((a->state[0]+2 ), sbox) + SUBSHIFT1((a->state[0]+3-s), sbox) addkey(a->state, a->round_key[0]); } -void av_aes_encrypt(AVAES *a){ - int r, t; +void av_aes_decrypt(AVAES *a){ + crypt(a, 0, inv_sbox, dec_multbl); +} - for(r=0; r<a->rounds-1; r++){ - addkey(a->state, a->round_key[r]); - SUBSHIFT1x((a->state[0]+1)) - SUBSHIFT2x((a->state[0]+2)) - SUBSHIFT3x((a->state[0]+3)) - mix(a->state, enc_multbl); - } - addkey(a->state, a->round_key[r]); - SUBSHIFT0((a->state[0]+0), sbox) - SUBSHIFT1((a->state[0]+1), sbox) - SUBSHIFT2((a->state[0]+2), sbox) - SUBSHIFT3((a->state[0]+3), sbox) - addkey(a->state, a->round_key[r+1]); +void av_aes_encrypt(AVAES *a){ + crypt(a, 2, sbox, enc_multbl); } static init_multbl2(uint8_t tbl[1024], int c[4], uint8_t *log8, uint8_t *alog8, uint8_t *sbox){ @@ -188,6 +178,11 @@ AVAES *av_aes_init(uint8_t *key, int key_bits, int decrypt) { a->round_key[i][0][j]= sbox[a->round_key[i][0][j]]; mix(a->round_key[i], dec_multbl); } + }else{ + for(i=0; i<(rounds+1)/2; i++){ + for(j=0; j<16; j++) + FFSWAP(int, a->round_key[i][0][j], a->round_key[rounds-i][0][j]); + } } return a; |