void BF_decrypt(BF_LONG *data, const BF_KEY *key) { register BF_LONG l, r; register const BF_LONG *p, *s; p = key->P; s = &(key->S[0]); l = data[0]; r = data[1]; l ^= p[BF_ROUNDS + 1]; # if BF_ROUNDS == 20 BF_ENC(r, l, s, p[20]); BF_ENC(l, r, s, p[19]); BF_ENC(r, l, s, p[18]); BF_ENC(l, r, s, p[17]); # endif BF_ENC(r, l, s, p[16]); BF_ENC(l, r, s, p[15]); BF_ENC(r, l, s, p[14]); BF_ENC(l, r, s, p[13]); BF_ENC(r, l, s, p[12]); BF_ENC(l, r, s, p[11]); BF_ENC(r, l, s, p[10]); BF_ENC(l, r, s, p[9]); BF_ENC(r, l, s, p[8]); BF_ENC(l, r, s, p[7]); BF_ENC(r, l, s, p[6]); BF_ENC(l, r, s, p[5]); BF_ENC(r, l, s, p[4]); BF_ENC(l, r, s, p[3]); BF_ENC(r, l, s, p[2]); BF_ENC(l, r, s, p[1]); r ^= p[0]; data[1] = l & 0xffffffffU; data[0] = r & 0xffffffffU; }
/* XXX "data" is host endian */ void BF_encrypt(BF_LONG *data, BF_KEY *key) { BF_LONG l, r, *p, *s; p = key->P; s= &key->S[0]; l = data[0]; r = data[1]; l^=p[0]; BF_ENC(r, l, s, p[ 1]); BF_ENC(l, r, s, p[ 2]); BF_ENC(r, l, s, p[ 3]); BF_ENC(l, r, s, p[ 4]); BF_ENC(r, l, s, p[ 5]); BF_ENC(l, r, s, p[ 6]); BF_ENC(r, l, s, p[ 7]); BF_ENC(l, r, s, p[ 8]); BF_ENC(r, l, s, p[ 9]); BF_ENC(l, r, s, p[10]); BF_ENC(r, l, s, p[11]); BF_ENC(l, r, s, p[12]); BF_ENC(r, l, s, p[13]); BF_ENC(l, r, s, p[14]); BF_ENC(r, l, s, p[15]); BF_ENC(l, r, s, p[16]); #if BF_ROUNDS == 20 BF_ENC(r, l, s, p[17]); BF_ENC(l, r, s, p[18]); BF_ENC(r, l, s, p[19]); BF_ENC(l, r, s, p[20]); #endif r ^= p[BF_ROUNDS + 1]; data[1] = l & 0xffffffff; data[0] = r & 0xffffffff; }
void BF_encrypt(BF_LONG *data, const BF_KEY *key) { #ifndef BF_PTR2 register BF_LONG l, r; register const BF_LONG *p, *s; p = key->P; s = &(key->S[0]); l = data[0]; r = data[1]; l ^= p[0]; BF_ENC(r, l, s, p[1]); BF_ENC(l, r, s, p[2]); BF_ENC(r, l, s, p[3]); BF_ENC(l, r, s, p[4]); BF_ENC(r, l, s, p[5]); BF_ENC(l, r, s, p[6]); BF_ENC(r, l, s, p[7]); BF_ENC(l, r, s, p[8]); BF_ENC(r, l, s, p[9]); BF_ENC(l, r, s, p[10]); BF_ENC(r, l, s, p[11]); BF_ENC(l, r, s, p[12]); BF_ENC(r, l, s, p[13]); BF_ENC(l, r, s, p[14]); BF_ENC(r, l, s, p[15]); BF_ENC(l, r, s, p[16]); # if BF_ROUNDS == 20 BF_ENC(r, l, s, p[17]); BF_ENC(l, r, s, p[18]); BF_ENC(r, l, s, p[19]); BF_ENC(l, r, s, p[20]); # endif r ^= p[BF_ROUNDS + 1]; data[1] = l & 0xffffffffL; data[0] = r & 0xffffffffL; #else register BF_LONG l, r, t, *k; l = data[0]; r = data[1]; k = (BF_LONG *)key; l ^= k[0]; BF_ENC(r, l, k, 1); BF_ENC(l, r, k, 2); BF_ENC(r, l, k, 3); BF_ENC(l, r, k, 4); BF_ENC(r, l, k, 5); BF_ENC(l, r, k, 6); BF_ENC(r, l, k, 7); BF_ENC(l, r, k, 8); BF_ENC(r, l, k, 9); BF_ENC(l, r, k, 10); BF_ENC(r, l, k, 11); BF_ENC(l, r, k, 12); BF_ENC(r, l, k, 13); BF_ENC(l, r, k, 14); BF_ENC(r, l, k, 15); BF_ENC(l, r, k, 16); # if BF_ROUNDS == 20 BF_ENC(r, l, k, 17); BF_ENC(l, r, k, 18); BF_ENC(r, l, k, 19); BF_ENC(l, r, k, 20); # endif r ^= k[BF_ROUNDS + 1]; data[1] = l & 0xffffffffL; data[0] = r & 0xffffffffL; #endif }
void BF_encrypt (BF_LONG *data, int encrypt) { register BF_LONG l, r, *p, *s; p = key_P; s = &(key_S[0]); l = data[0]; r = data[1]; if (encrypt) { l ^= p[0]; BF_ENC (r, l, s, p[1]); BF_ENC (l, r, s, p[2]); BF_ENC (r, l, s, p[3]); BF_ENC (l, r, s, p[4]); BF_ENC (r, l, s, p[5]); BF_ENC (l, r, s, p[6]); BF_ENC (r, l, s, p[7]); BF_ENC (l, r, s, p[8]); BF_ENC (r, l, s, p[9]); BF_ENC (l, r, s, p[10]); BF_ENC (r, l, s, p[11]); BF_ENC (l, r, s, p[12]); BF_ENC (r, l, s, p[13]); BF_ENC (l, r, s, p[14]); BF_ENC (r, l, s, p[15]); BF_ENC (l, r, s, p[16]); r ^= p[BF_ROUNDS + 1]; } else { l ^= p[BF_ROUNDS + 1]; BF_ENC (r, l, s, p[16]); BF_ENC (l, r, s, p[15]); BF_ENC (r, l, s, p[14]); BF_ENC (l, r, s, p[13]); BF_ENC (r, l, s, p[12]); BF_ENC (l, r, s, p[11]); BF_ENC (r, l, s, p[10]); BF_ENC (l, r, s, p[9]); BF_ENC (r, l, s, p[8]); BF_ENC (l, r, s, p[7]); BF_ENC (r, l, s, p[6]); BF_ENC (l, r, s, p[5]); BF_ENC (r, l, s, p[4]); BF_ENC (l, r, s, p[3]); BF_ENC (r, l, s, p[2]); BF_ENC (l, r, s, p[1]); r ^= p[0]; } data[1] = l & 0xffffffff; data[0] = r & 0xffffffff; }