summaryrefslogtreecommitdiff
path: root/libavutil/aes.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2007-01-14 19:39:38 +0000
committerMichael Niedermayer <michaelni@gmx.at>2007-01-14 19:39:38 +0000
commit0c5d2819a5b124ba4692f2fb1c2f1298fd373b8c (patch)
tree689f9c63e64d34719c89e57b301ac30bcc56103f /libavutil/aes.c
parent28b5123546d0bdd61bd4c2c02ee39e63b5eea781 (diff)
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.c41
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;