aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2008-04-25 18:17:29 +0000
committerKen Raeburn <raeburn@mit.edu>2008-04-25 18:17:29 +0000
commit32c73807fa4e7cea0d2350c461cf5e3a714376fd (patch)
tree08d95c4947199c9855ceab2eb8367b886cac5ef7
parent0e4f04e2152d42ded83041487d9557fa752ef1ea (diff)
downloadkrb5-32c73807fa4e7cea0d2350c461cf5e3a714376fd.zip
krb5-32c73807fa4e7cea0d2350c461cf5e3a714376fd.tar.gz
krb5-32c73807fa4e7cea0d2350c461cf5e3a714376fd.tar.bz2
Multiple assignments without sequence points invoke undefined
behavior, even if the assignments all compute and store the same value. Don't put an assignment in the argument to macro ff(). git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20309 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/crypto/aes/aeskey.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/lib/crypto/aes/aeskey.c b/src/lib/crypto/aes/aeskey.c
index 970a26f..60f766b 100644
--- a/src/lib/crypto/aes/aeskey.c
+++ b/src/lib/crypto/aes/aeskey.c
@@ -307,17 +307,23 @@ aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx
kd4(cx->k_sch, 6); kd4(cx->k_sch, 7);
kd4(cx->k_sch, 8); kdl4(cx->k_sch, 9);
cx->n_rnd = 10; break;
- case 24: cx->k_sch[4] = ff(ss[4] = word_in(in_key + 16));
- cx->k_sch[5] = ff(ss[5] = word_in(in_key + 20));
+ case 24: ss[4] = word_in(in_key + 16);
+ cx->k_sch[4] = ff(ss[4]);
+ ss[5] = word_in(in_key + 20);
+ cx->k_sch[5] = ff(ss[5]);
kdf6(cx->k_sch, 0); kd6(cx->k_sch, 1);
kd6(cx->k_sch, 2); kd6(cx->k_sch, 3);
kd6(cx->k_sch, 4); kd6(cx->k_sch, 5);
kd6(cx->k_sch, 6); kdl6(cx->k_sch, 7);
cx->n_rnd = 12; break;
- case 32: cx->k_sch[4] = ff(ss[4] = word_in(in_key + 16));
- cx->k_sch[5] = ff(ss[5] = word_in(in_key + 20));
- cx->k_sch[6] = ff(ss[6] = word_in(in_key + 24));
- cx->k_sch[7] = ff(ss[7] = word_in(in_key + 28));
+ case 32: ss[4] = word_in(in_key + 16);
+ cx->k_sch[4] = ff(ss[4]);
+ ss[5] = word_in(in_key + 20);
+ cx->k_sch[5] = ff(ss[5]);
+ ss[6] = word_in(in_key + 24);
+ cx->k_sch[6] = ff(ss[6]);
+ ss[7] = word_in(in_key + 28);
+ cx->k_sch[7] = ff(ss[7]);
kdf8(cx->k_sch, 0); kd8(cx->k_sch, 1);
kd8(cx->k_sch, 2); kd8(cx->k_sch, 3);
kd8(cx->k_sch, 4); kd8(cx->k_sch, 5);