-
Enhancement
-
Resolution: Fixed
-
P3
-
None
-
b25
The performance of message digest implementation could be improved by using improved arithmetic. For example:
// ch(x,y,z) = (x and y) xor ((complement x) and z)
+ // = z xor (x and (y xor z));
- int ch_efg = (e & f) ^ ((~e) & g);
+ int ch_efg = g ^ (e & (f ^ g));
// maj(x,y,z) = (x and y) xor (x and z) xor (y and z)
+ // = (x and y) xor ((x xor y) and z)
- int maj_abc = (a & b) ^ (a & c) ^ (b & c);
+ int maj_abc = (a & b) ^ ((a ^ b) & c);
// ch(x,y,z) = (x and y) xor ((complement x) and z)
+ // = z xor (x and (y xor z));
- int ch_efg = (e & f) ^ ((~e) & g);
+ int ch_efg = g ^ (e & (f ^ g));
// maj(x,y,z) = (x and y) xor (x and z) xor (y and z)
+ // = (x and y) xor ((x xor y) and z)
- int maj_abc = (a & b) ^ (a & c) ^ (b & c);
+ int maj_abc = (a & b) ^ ((a ^ b) & c);