X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/01c034ad857128c51482a563befb374e38ebe668..32874aeac8dacbca26663777b39a79efc5d8dc4b:/sshblowf.c diff --git a/sshblowf.c b/sshblowf.c index f3c49b89..a4b43dec 100644 --- a/sshblowf.c +++ b/sshblowf.c @@ -235,8 +235,9 @@ static const word32 sbox3[] = { #define F(x) Fprime( ((x>>24)&0xFF), ((x>>16)&0xFF), ((x>>8)&0xFF), (x&0xFF) ) #define ROUND(n) ( xL ^= P[n], t = xL, xL = F(xL) ^ xR, xR = t ) -static void blowfish_encrypt(word32 xL, word32 xR, word32 *output, - BlowfishContext *ctx) { +static void blowfish_encrypt(word32 xL, word32 xR, word32 * output, + BlowfishContext * ctx) +{ word32 *S0 = ctx->S0; word32 *S1 = ctx->S1; word32 *S2 = ctx->S2; @@ -267,8 +268,9 @@ static void blowfish_encrypt(word32 xL, word32 xR, word32 *output, output[1] = xL; } -static void blowfish_decrypt(word32 xL, word32 xR, word32 *output, - BlowfishContext *ctx) { +static void blowfish_decrypt(word32 xL, word32 xR, word32 * output, + BlowfishContext * ctx) +{ word32 *S0 = ctx->S0; word32 *S1 = ctx->S1; word32 *S2 = ctx->S2; @@ -300,107 +302,120 @@ static void blowfish_decrypt(word32 xL, word32 xR, word32 *output, } static void blowfish_lsb_encrypt_cbc(unsigned char *blk, int len, - BlowfishContext *ctx) { + BlowfishContext * ctx) +{ word32 xL, xR, out[2], iv0, iv1; assert((len & 7) == 0); - iv0 = ctx->iv0; iv1 = ctx->iv1; + iv0 = ctx->iv0; + iv1 = ctx->iv1; while (len > 0) { - xL = GET_32BIT_LSB_FIRST(blk); - xR = GET_32BIT_LSB_FIRST(blk+4); - iv0 ^= xL; - iv1 ^= xR; - blowfish_encrypt(iv0, iv1, out, ctx); - iv0 = out[0]; - iv1 = out[1]; - PUT_32BIT_LSB_FIRST(blk, iv0); - PUT_32BIT_LSB_FIRST(blk+4, iv1); - blk += 8; - len -= 8; + xL = GET_32BIT_LSB_FIRST(blk); + xR = GET_32BIT_LSB_FIRST(blk + 4); + iv0 ^= xL; + iv1 ^= xR; + blowfish_encrypt(iv0, iv1, out, ctx); + iv0 = out[0]; + iv1 = out[1]; + PUT_32BIT_LSB_FIRST(blk, iv0); + PUT_32BIT_LSB_FIRST(blk + 4, iv1); + blk += 8; + len -= 8; } - ctx->iv0 = iv0; ctx->iv1 = iv1; + ctx->iv0 = iv0; + ctx->iv1 = iv1; } static void blowfish_lsb_decrypt_cbc(unsigned char *blk, int len, - BlowfishContext *ctx) { + BlowfishContext * ctx) +{ word32 xL, xR, out[2], iv0, iv1; assert((len & 7) == 0); - iv0 = ctx->iv0; iv1 = ctx->iv1; + iv0 = ctx->iv0; + iv1 = ctx->iv1; while (len > 0) { - xL = GET_32BIT_LSB_FIRST(blk); - xR = GET_32BIT_LSB_FIRST(blk+4); - blowfish_decrypt(xL, xR, out, ctx); - iv0 ^= out[0]; - iv1 ^= out[1]; - PUT_32BIT_LSB_FIRST(blk, iv0); - PUT_32BIT_LSB_FIRST(blk+4, iv1); - iv0 = xL; - iv1 = xR; - blk += 8; - len -= 8; + xL = GET_32BIT_LSB_FIRST(blk); + xR = GET_32BIT_LSB_FIRST(blk + 4); + blowfish_decrypt(xL, xR, out, ctx); + iv0 ^= out[0]; + iv1 ^= out[1]; + PUT_32BIT_LSB_FIRST(blk, iv0); + PUT_32BIT_LSB_FIRST(blk + 4, iv1); + iv0 = xL; + iv1 = xR; + blk += 8; + len -= 8; } - ctx->iv0 = iv0; ctx->iv1 = iv1; + ctx->iv0 = iv0; + ctx->iv1 = iv1; } static void blowfish_msb_encrypt_cbc(unsigned char *blk, int len, - BlowfishContext *ctx) { + BlowfishContext * ctx) +{ word32 xL, xR, out[2], iv0, iv1; assert((len & 7) == 0); - iv0 = ctx->iv0; iv1 = ctx->iv1; + iv0 = ctx->iv0; + iv1 = ctx->iv1; while (len > 0) { - xL = GET_32BIT_MSB_FIRST(blk); - xR = GET_32BIT_MSB_FIRST(blk+4); - iv0 ^= xL; - iv1 ^= xR; - blowfish_encrypt(iv0, iv1, out, ctx); - iv0 = out[0]; - iv1 = out[1]; - PUT_32BIT_MSB_FIRST(blk, iv0); - PUT_32BIT_MSB_FIRST(blk+4, iv1); - blk += 8; - len -= 8; + xL = GET_32BIT_MSB_FIRST(blk); + xR = GET_32BIT_MSB_FIRST(blk + 4); + iv0 ^= xL; + iv1 ^= xR; + blowfish_encrypt(iv0, iv1, out, ctx); + iv0 = out[0]; + iv1 = out[1]; + PUT_32BIT_MSB_FIRST(blk, iv0); + PUT_32BIT_MSB_FIRST(blk + 4, iv1); + blk += 8; + len -= 8; } - ctx->iv0 = iv0; ctx->iv1 = iv1; + ctx->iv0 = iv0; + ctx->iv1 = iv1; } static void blowfish_msb_decrypt_cbc(unsigned char *blk, int len, - BlowfishContext *ctx) { + BlowfishContext * ctx) +{ word32 xL, xR, out[2], iv0, iv1; assert((len & 7) == 0); - iv0 = ctx->iv0; iv1 = ctx->iv1; + iv0 = ctx->iv0; + iv1 = ctx->iv1; while (len > 0) { - xL = GET_32BIT_MSB_FIRST(blk); - xR = GET_32BIT_MSB_FIRST(blk+4); - blowfish_decrypt(xL, xR, out, ctx); - iv0 ^= out[0]; - iv1 ^= out[1]; - PUT_32BIT_MSB_FIRST(blk, iv0); - PUT_32BIT_MSB_FIRST(blk+4, iv1); - iv0 = xL; - iv1 = xR; - blk += 8; - len -= 8; + xL = GET_32BIT_MSB_FIRST(blk); + xR = GET_32BIT_MSB_FIRST(blk + 4); + blowfish_decrypt(xL, xR, out, ctx); + iv0 ^= out[0]; + iv1 ^= out[1]; + PUT_32BIT_MSB_FIRST(blk, iv0); + PUT_32BIT_MSB_FIRST(blk + 4, iv1); + iv0 = xL; + iv1 = xR; + blk += 8; + len -= 8; } - ctx->iv0 = iv0; ctx->iv1 = iv1; + ctx->iv0 = iv0; + ctx->iv1 = iv1; } -static void blowfish_setkey(BlowfishContext *ctx, - const unsigned char *key, short keybytes) { +static void blowfish_setkey(BlowfishContext * ctx, + const unsigned char *key, short keybytes) +{ word32 *S0 = ctx->S0; word32 *S1 = ctx->S1; word32 *S2 = ctx->S2; @@ -410,42 +425,50 @@ static void blowfish_setkey(BlowfishContext *ctx, int i; for (i = 0; i < 18; i++) { - P[i] = parray[i]; - P[i] ^= ((word32)(unsigned char)(key[ (i*4+0) % keybytes ])) << 24; - P[i] ^= ((word32)(unsigned char)(key[ (i*4+1) % keybytes ])) << 16; - P[i] ^= ((word32)(unsigned char)(key[ (i*4+2) % keybytes ])) << 8; - P[i] ^= ((word32)(unsigned char)(key[ (i*4+3) % keybytes ])); + P[i] = parray[i]; + P[i] ^= + ((word32) (unsigned char) (key[(i * 4 + 0) % keybytes])) << 24; + P[i] ^= + ((word32) (unsigned char) (key[(i * 4 + 1) % keybytes])) << 16; + P[i] ^= + ((word32) (unsigned char) (key[(i * 4 + 2) % keybytes])) << 8; + P[i] ^= ((word32) (unsigned char) (key[(i * 4 + 3) % keybytes])); } for (i = 0; i < 256; i++) { - S0[i] = sbox0[i]; - S1[i] = sbox1[i]; - S2[i] = sbox2[i]; - S3[i] = sbox3[i]; + S0[i] = sbox0[i]; + S1[i] = sbox1[i]; + S2[i] = sbox2[i]; + S3[i] = sbox3[i]; } str[0] = str[1] = 0; for (i = 0; i < 18; i += 2) { - blowfish_encrypt(str[0], str[1], str, ctx); - P[i] = str[0]; P[i+1] = str[1]; + blowfish_encrypt(str[0], str[1], str, ctx); + P[i] = str[0]; + P[i + 1] = str[1]; } for (i = 0; i < 256; i += 2) { - blowfish_encrypt(str[0], str[1], str, ctx); - S0[i] = str[0]; S0[i+1] = str[1]; + blowfish_encrypt(str[0], str[1], str, ctx); + S0[i] = str[0]; + S0[i + 1] = str[1]; } for (i = 0; i < 256; i += 2) { - blowfish_encrypt(str[0], str[1], str, ctx); - S1[i] = str[0]; S1[i+1] = str[1]; + blowfish_encrypt(str[0], str[1], str, ctx); + S1[i] = str[0]; + S1[i + 1] = str[1]; } for (i = 0; i < 256; i += 2) { - blowfish_encrypt(str[0], str[1], str, ctx); - S2[i] = str[0]; S2[i+1] = str[1]; + blowfish_encrypt(str[0], str[1], str, ctx); + S2[i] = str[0]; + S2[i + 1] = str[1]; } for (i = 0; i < 256; i += 2) { - blowfish_encrypt(str[0], str[1], str, ctx); - S3[i] = str[0]; S3[i+1] = str[1]; + blowfish_encrypt(str[0], str[1], str, ctx); + S3[i] = str[0]; + S3[i + 1] = str[1]; } } @@ -454,31 +477,31 @@ static void blowfish_setkey(BlowfishContext *ctx, #define SSH_SESSION_KEY_LENGTH 32 static BlowfishContext ectx, dctx; -static void blowfish_cskey(unsigned char *key) +static void blowfish_cskey(unsigned char *key) { blowfish_setkey(&ectx, key, 16); logevent("Initialised Blowfish client->server encryption"); } -static void blowfish_sckey(unsigned char *key) +static void blowfish_sckey(unsigned char *key) { blowfish_setkey(&dctx, key, 16); logevent("Initialised Blowfish server->client encryption"); } -static void blowfish_csiv(unsigned char *key) +static void blowfish_csiv(unsigned char *key) { ectx.iv0 = GET_32BIT_MSB_FIRST(key); - ectx.iv1 = GET_32BIT_MSB_FIRST(key+4); + ectx.iv1 = GET_32BIT_MSB_FIRST(key + 4); } -static void blowfish_sciv(unsigned char *key) +static void blowfish_sciv(unsigned char *key) { dctx.iv0 = GET_32BIT_MSB_FIRST(key); - dctx.iv1 = GET_32BIT_MSB_FIRST(key+4); + dctx.iv1 = GET_32BIT_MSB_FIRST(key + 4); } -static void blowfish_sesskey(unsigned char *key) +static void blowfish_sesskey(unsigned char *key) { blowfish_setkey(&ectx, key, SSH_SESSION_KEY_LENGTH); ectx.iv0 = 0;