[CRYPTO] camellia: Move more common code into camellia_setup_tail
Analogously to camellia7 patch, move "absorb kw2 to other subkeys" and "absorb kw4 to other subkeys" code parts into camellia_setup_tail(). This further reduces source and object code size at the cost of two brances in key setup code. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
dedcf8b064
commit
ff85a8082f
1 changed files with 84 additions and 134 deletions
|
@ -393,8 +393,92 @@ static const u32 camellia_sp4404[256] = {
|
||||||
static void camellia_setup_tail(u32 *subkey, u32 *subL, u32 *subR, int max)
|
static void camellia_setup_tail(u32 *subkey, u32 *subL, u32 *subR, int max)
|
||||||
{
|
{
|
||||||
u32 dw, tl, tr;
|
u32 dw, tl, tr;
|
||||||
|
u32 kw4l, kw4r;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
/* absorb kw2 to other subkeys */
|
||||||
|
/* round 2 */
|
||||||
|
subL[3] ^= subL[1]; subR[3] ^= subR[1];
|
||||||
|
/* round 4 */
|
||||||
|
subL[5] ^= subL[1]; subR[5] ^= subR[1];
|
||||||
|
/* round 6 */
|
||||||
|
subL[7] ^= subL[1]; subR[7] ^= subR[1];
|
||||||
|
subL[1] ^= subR[1] & ~subR[9];
|
||||||
|
dw = subL[1] & subL[9],
|
||||||
|
subR[1] ^= ROL1(dw); /* modified for FLinv(kl2) */
|
||||||
|
/* round 8 */
|
||||||
|
subL[11] ^= subL[1]; subR[11] ^= subR[1];
|
||||||
|
/* round 10 */
|
||||||
|
subL[13] ^= subL[1]; subR[13] ^= subR[1];
|
||||||
|
/* round 12 */
|
||||||
|
subL[15] ^= subL[1]; subR[15] ^= subR[1];
|
||||||
|
subL[1] ^= subR[1] & ~subR[17];
|
||||||
|
dw = subL[1] & subL[17],
|
||||||
|
subR[1] ^= ROL1(dw); /* modified for FLinv(kl4) */
|
||||||
|
/* round 14 */
|
||||||
|
subL[19] ^= subL[1]; subR[19] ^= subR[1];
|
||||||
|
/* round 16 */
|
||||||
|
subL[21] ^= subL[1]; subR[21] ^= subR[1];
|
||||||
|
/* round 18 */
|
||||||
|
subL[23] ^= subL[1]; subR[23] ^= subR[1];
|
||||||
|
if (max == 24) {
|
||||||
|
/* kw3 */
|
||||||
|
subL[24] ^= subL[1]; subR[24] ^= subR[1];
|
||||||
|
|
||||||
|
/* absorb kw4 to other subkeys */
|
||||||
|
kw4l = subL[25]; kw4r = subR[25];
|
||||||
|
} else {
|
||||||
|
subL[1] ^= subR[1] & ~subR[25];
|
||||||
|
dw = subL[1] & subL[25],
|
||||||
|
subR[1] ^= ROL1(dw); /* modified for FLinv(kl6) */
|
||||||
|
/* round 20 */
|
||||||
|
subL[27] ^= subL[1]; subR[27] ^= subR[1];
|
||||||
|
/* round 22 */
|
||||||
|
subL[29] ^= subL[1]; subR[29] ^= subR[1];
|
||||||
|
/* round 24 */
|
||||||
|
subL[31] ^= subL[1]; subR[31] ^= subR[1];
|
||||||
|
/* kw3 */
|
||||||
|
subL[32] ^= subL[1]; subR[32] ^= subR[1];
|
||||||
|
|
||||||
|
/* absorb kw4 to other subkeys */
|
||||||
|
kw4l = subL[33]; kw4r = subR[33];
|
||||||
|
/* round 23 */
|
||||||
|
subL[30] ^= kw4l; subR[30] ^= kw4r;
|
||||||
|
/* round 21 */
|
||||||
|
subL[28] ^= kw4l; subR[28] ^= kw4r;
|
||||||
|
/* round 19 */
|
||||||
|
subL[26] ^= kw4l; subR[26] ^= kw4r;
|
||||||
|
kw4l ^= kw4r & ~subR[24];
|
||||||
|
dw = kw4l & subL[24],
|
||||||
|
kw4r ^= ROL1(dw); /* modified for FL(kl5) */
|
||||||
|
}
|
||||||
|
/* round 17 */
|
||||||
|
subL[22] ^= kw4l; subR[22] ^= kw4r;
|
||||||
|
/* round 15 */
|
||||||
|
subL[20] ^= kw4l; subR[20] ^= kw4r;
|
||||||
|
/* round 13 */
|
||||||
|
subL[18] ^= kw4l; subR[18] ^= kw4r;
|
||||||
|
kw4l ^= kw4r & ~subR[16];
|
||||||
|
dw = kw4l & subL[16],
|
||||||
|
kw4r ^= ROL1(dw); /* modified for FL(kl3) */
|
||||||
|
/* round 11 */
|
||||||
|
subL[14] ^= kw4l; subR[14] ^= kw4r;
|
||||||
|
/* round 9 */
|
||||||
|
subL[12] ^= kw4l; subR[12] ^= kw4r;
|
||||||
|
/* round 7 */
|
||||||
|
subL[10] ^= kw4l; subR[10] ^= kw4r;
|
||||||
|
kw4l ^= kw4r & ~subR[8];
|
||||||
|
dw = kw4l & subL[8],
|
||||||
|
kw4r ^= ROL1(dw); /* modified for FL(kl1) */
|
||||||
|
/* round 5 */
|
||||||
|
subL[6] ^= kw4l; subR[6] ^= kw4r;
|
||||||
|
/* round 3 */
|
||||||
|
subL[4] ^= kw4l; subR[4] ^= kw4r;
|
||||||
|
/* round 1 */
|
||||||
|
subL[2] ^= kw4l; subR[2] ^= kw4r;
|
||||||
|
/* kw1 */
|
||||||
|
subL[0] ^= kw4l; subR[0] ^= kw4r;
|
||||||
|
|
||||||
/* key XOR is end of F-function */
|
/* key XOR is end of F-function */
|
||||||
SUBKEY_L(0) = subL[0] ^ subL[2];/* kw1 */
|
SUBKEY_L(0) = subL[0] ^ subL[2];/* kw1 */
|
||||||
SUBKEY_R(0) = subR[0] ^ subR[2];
|
SUBKEY_R(0) = subR[0] ^ subR[2];
|
||||||
|
@ -509,7 +593,6 @@ static void camellia_setup128(const unsigned char *key, u32 *subkey)
|
||||||
{
|
{
|
||||||
u32 kll, klr, krl, krr;
|
u32 kll, klr, krl, krr;
|
||||||
u32 il, ir, t0, t1, w0, w1;
|
u32 il, ir, t0, t1, w0, w1;
|
||||||
u32 kw4l, kw4r, dw;
|
|
||||||
u32 subL[26];
|
u32 subL[26];
|
||||||
u32 subR[26];
|
u32 subR[26];
|
||||||
|
|
||||||
|
@ -609,63 +692,6 @@ static void camellia_setup128(const unsigned char *key, u32 *subkey)
|
||||||
subL[24] = kll; subR[24] = klr;
|
subL[24] = kll; subR[24] = klr;
|
||||||
subL[25] = krl; subR[25] = krr;
|
subL[25] = krl; subR[25] = krr;
|
||||||
|
|
||||||
/* absorb kw2 to other subkeys */
|
|
||||||
/* round 2 */
|
|
||||||
subL[3] ^= subL[1]; subR[3] ^= subR[1];
|
|
||||||
/* round 4 */
|
|
||||||
subL[5] ^= subL[1]; subR[5] ^= subR[1];
|
|
||||||
/* round 6 */
|
|
||||||
subL[7] ^= subL[1]; subR[7] ^= subR[1];
|
|
||||||
subL[1] ^= subR[1] & ~subR[9];
|
|
||||||
dw = subL[1] & subL[9],
|
|
||||||
subR[1] ^= ROL1(dw); /* modified for FLinv(kl2) */
|
|
||||||
/* round 8 */
|
|
||||||
subL[11] ^= subL[1]; subR[11] ^= subR[1];
|
|
||||||
/* round 10 */
|
|
||||||
subL[13] ^= subL[1]; subR[13] ^= subR[1];
|
|
||||||
/* round 12 */
|
|
||||||
subL[15] ^= subL[1]; subR[15] ^= subR[1];
|
|
||||||
subL[1] ^= subR[1] & ~subR[17];
|
|
||||||
dw = subL[1] & subL[17],
|
|
||||||
subR[1] ^= ROL1(dw); /* modified for FLinv(kl4) */
|
|
||||||
/* round 14 */
|
|
||||||
subL[19] ^= subL[1]; subR[19] ^= subR[1];
|
|
||||||
/* round 16 */
|
|
||||||
subL[21] ^= subL[1]; subR[21] ^= subR[1];
|
|
||||||
/* round 18 */
|
|
||||||
subL[23] ^= subL[1]; subR[23] ^= subR[1];
|
|
||||||
/* kw3 */
|
|
||||||
subL[24] ^= subL[1]; subR[24] ^= subR[1];
|
|
||||||
|
|
||||||
/* absorb kw4 to other subkeys */
|
|
||||||
kw4l = subL[25]; kw4r = subR[25];
|
|
||||||
/* round 17 */
|
|
||||||
subL[22] ^= kw4l; subR[22] ^= kw4r;
|
|
||||||
/* round 15 */
|
|
||||||
subL[20] ^= kw4l; subR[20] ^= kw4r;
|
|
||||||
/* round 13 */
|
|
||||||
subL[18] ^= kw4l; subR[18] ^= kw4r;
|
|
||||||
kw4l ^= kw4r & ~subR[16];
|
|
||||||
dw = kw4l & subL[16],
|
|
||||||
kw4r ^= ROL1(dw); /* modified for FL(kl3) */
|
|
||||||
/* round 11 */
|
|
||||||
subL[14] ^= kw4l; subR[14] ^= kw4r;
|
|
||||||
/* round 9 */
|
|
||||||
subL[12] ^= kw4l; subR[12] ^= kw4r;
|
|
||||||
/* round 7 */
|
|
||||||
subL[10] ^= kw4l; subR[10] ^= kw4r;
|
|
||||||
kw4l ^= kw4r & ~subR[8];
|
|
||||||
dw = kw4l & subL[8],
|
|
||||||
kw4r ^= ROL1(dw); /* modified for FL(kl1) */
|
|
||||||
/* round 5 */
|
|
||||||
subL[6] ^= kw4l; subR[6] ^= kw4r;
|
|
||||||
/* round 3 */
|
|
||||||
subL[4] ^= kw4l; subR[4] ^= kw4r;
|
|
||||||
/* round 1 */
|
|
||||||
subL[2] ^= kw4l; subR[2] ^= kw4r;
|
|
||||||
/* kw1 */
|
|
||||||
subL[0] ^= kw4l; subR[0] ^= kw4r;
|
|
||||||
|
|
||||||
camellia_setup_tail(subkey, subL, subR, 24);
|
camellia_setup_tail(subkey, subL, subR, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,7 +700,6 @@ static void camellia_setup256(const unsigned char *key, u32 *subkey)
|
||||||
u32 kll, klr, krl, krr; /* left half of key */
|
u32 kll, klr, krl, krr; /* left half of key */
|
||||||
u32 krll, krlr, krrl, krrr; /* right half of key */
|
u32 krll, krlr, krrl, krrr; /* right half of key */
|
||||||
u32 il, ir, t0, t1, w0, w1; /* temporary variables */
|
u32 il, ir, t0, t1, w0, w1; /* temporary variables */
|
||||||
u32 kw4l, kw4r, dw;
|
|
||||||
u32 subL[34];
|
u32 subL[34];
|
||||||
u32 subR[34];
|
u32 subR[34];
|
||||||
|
|
||||||
|
@ -816,81 +841,6 @@ static void camellia_setup256(const unsigned char *key, u32 *subkey)
|
||||||
/* kw4 */
|
/* kw4 */
|
||||||
subL[33] = krrl; subR[33] = krrr;
|
subL[33] = krrl; subR[33] = krrr;
|
||||||
|
|
||||||
/* absorb kw2 to other subkeys */
|
|
||||||
/* round 2 */
|
|
||||||
subL[3] ^= subL[1]; subR[3] ^= subR[1];
|
|
||||||
/* round 4 */
|
|
||||||
subL[5] ^= subL[1]; subR[5] ^= subR[1];
|
|
||||||
/* round 6 */
|
|
||||||
subL[7] ^= subL[1]; subR[7] ^= subR[1];
|
|
||||||
subL[1] ^= subR[1] & ~subR[9];
|
|
||||||
dw = subL[1] & subL[9],
|
|
||||||
subR[1] ^= ROL1(dw); /* modified for FLinv(kl2) */
|
|
||||||
/* round 8 */
|
|
||||||
subL[11] ^= subL[1]; subR[11] ^= subR[1];
|
|
||||||
/* round 10 */
|
|
||||||
subL[13] ^= subL[1]; subR[13] ^= subR[1];
|
|
||||||
/* round 12 */
|
|
||||||
subL[15] ^= subL[1]; subR[15] ^= subR[1];
|
|
||||||
subL[1] ^= subR[1] & ~subR[17];
|
|
||||||
dw = subL[1] & subL[17],
|
|
||||||
subR[1] ^= ROL1(dw); /* modified for FLinv(kl4) */
|
|
||||||
/* round 14 */
|
|
||||||
subL[19] ^= subL[1]; subR[19] ^= subR[1];
|
|
||||||
/* round 16 */
|
|
||||||
subL[21] ^= subL[1]; subR[21] ^= subR[1];
|
|
||||||
/* round 18 */
|
|
||||||
subL[23] ^= subL[1]; subR[23] ^= subR[1];
|
|
||||||
subL[1] ^= subR[1] & ~subR[25];
|
|
||||||
dw = subL[1] & subL[25],
|
|
||||||
subR[1] ^= ROL1(dw); /* modified for FLinv(kl6) */
|
|
||||||
/* round 20 */
|
|
||||||
subL[27] ^= subL[1]; subR[27] ^= subR[1];
|
|
||||||
/* round 22 */
|
|
||||||
subL[29] ^= subL[1]; subR[29] ^= subR[1];
|
|
||||||
/* round 24 */
|
|
||||||
subL[31] ^= subL[1]; subR[31] ^= subR[1];
|
|
||||||
/* kw3 */
|
|
||||||
subL[32] ^= subL[1]; subR[32] ^= subR[1];
|
|
||||||
|
|
||||||
/* absorb kw4 to other subkeys */
|
|
||||||
kw4l = subL[33]; kw4r = subR[33];
|
|
||||||
/* round 23 */
|
|
||||||
subL[30] ^= kw4l; subR[30] ^= kw4r;
|
|
||||||
/* round 21 */
|
|
||||||
subL[28] ^= kw4l; subR[28] ^= kw4r;
|
|
||||||
/* round 19 */
|
|
||||||
subL[26] ^= kw4l; subR[26] ^= kw4r;
|
|
||||||
kw4l ^= kw4r & ~subR[24];
|
|
||||||
dw = kw4l & subL[24],
|
|
||||||
kw4r ^= ROL1(dw); /* modified for FL(kl5) */
|
|
||||||
/* round 17 */
|
|
||||||
subL[22] ^= kw4l; subR[22] ^= kw4r;
|
|
||||||
/* round 15 */
|
|
||||||
subL[20] ^= kw4l; subR[20] ^= kw4r;
|
|
||||||
/* round 13 */
|
|
||||||
subL[18] ^= kw4l; subR[18] ^= kw4r;
|
|
||||||
kw4l ^= kw4r & ~subR[16];
|
|
||||||
dw = kw4l & subL[16],
|
|
||||||
kw4r ^= ROL1(dw); /* modified for FL(kl3) */
|
|
||||||
/* round 11 */
|
|
||||||
subL[14] ^= kw4l; subR[14] ^= kw4r;
|
|
||||||
/* round 9 */
|
|
||||||
subL[12] ^= kw4l; subR[12] ^= kw4r;
|
|
||||||
/* round 7 */
|
|
||||||
subL[10] ^= kw4l; subR[10] ^= kw4r;
|
|
||||||
kw4l ^= kw4r & ~subR[8];
|
|
||||||
dw = kw4l & subL[8],
|
|
||||||
kw4r ^= ROL1(dw); /* modified for FL(kl1) */
|
|
||||||
/* round 5 */
|
|
||||||
subL[6] ^= kw4l; subR[6] ^= kw4r;
|
|
||||||
/* round 3 */
|
|
||||||
subL[4] ^= kw4l; subR[4] ^= kw4r;
|
|
||||||
/* round 1 */
|
|
||||||
subL[2] ^= kw4l; subR[2] ^= kw4r;
|
|
||||||
/* kw1 */
|
|
||||||
subL[0] ^= kw4l; subR[0] ^= kw4r;
|
|
||||||
|
|
||||||
camellia_setup_tail(subkey, subL, subR, 32);
|
camellia_setup_tail(subkey, subL, subR, 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue