Skip to content

Commit

Permalink
sync function prototype between i386 asm version and C version.
Browse files Browse the repository at this point in the history
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
  • Loading branch information
itojun committed Feb 27, 2002
1 parent 239258a commit cd11589
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 59 deletions.
115 changes: 65 additions & 50 deletions kame/sys/crypto/blowfish/bf_enc.c
@@ -1,4 +1,4 @@
/* $KAME: bf_enc.c,v 1.6 2001/09/10 04:03:56 itojun Exp $ */
/* $KAME: bf_enc.c,v 1.7 2002/02/27 01:33:59 itojun Exp $ */

/* crypto/bf/bf_enc.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
Expand Down Expand Up @@ -74,10 +74,9 @@ to modify the code.

/* XXX "data" is host endian */
void
BF_encrypt(data, key, encrypt)
BF_encrypt(data, key)
BF_LONG *data;
BF_KEY *key;
int encrypt;
{
register BF_LONG l, r, *p, *s;

Expand All @@ -86,57 +85,73 @@ BF_encrypt(data, key, encrypt)
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]);
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]);
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];
} else {
l ^= p[BF_ROUNDS + 1];
r ^= p[BF_ROUNDS + 1];

data[1] = l & 0xffffffff;
data[0] = r & 0xffffffff;
}

/* XXX "data" is host endian */
void
BF_decrypt(data, key)
BF_LONG *data;
BF_KEY *key;
{
register BF_LONG l, r, *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]);
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];
}
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;
}
6 changes: 3 additions & 3 deletions kame/sys/crypto/blowfish/bf_skey.c
@@ -1,4 +1,4 @@
/* $KAME: bf_skey.c,v 1.6 2001/09/10 04:03:56 itojun Exp $ */
/* $KAME: bf_skey.c,v 1.7 2002/02/27 01:33:59 itojun Exp $ */
/* $NetBSD: bf_skey.c,v 1.2 2000/11/06 14:11:40 itojun Exp $ */

/* crypto/bf/bf_skey.c */
Expand Down Expand Up @@ -110,14 +110,14 @@ BF_set_key(key, len, data)
in[0] = 0L;
in[1] = 0L;
for (i = 0; i < BF_ROUNDS + 2; i += 2) {
BF_encrypt(in, key, BF_ENCRYPT);
BF_encrypt(in, key);
p[i ] = in[0];
p[i+1] = in[1];
}

p = key->S;
for (i = 0; i < 4 * 256; i += 2) {
BF_encrypt(in, key, BF_ENCRYPT);
BF_encrypt(in, key);
p[i ] = in[0];
p[i+1] = in[1];
}
Expand Down
5 changes: 3 additions & 2 deletions kame/sys/crypto/blowfish/blowfish.h
@@ -1,5 +1,5 @@
/* $NetBSD: blowfish.h,v 1.4 2001/09/09 11:01:01 tls Exp $ */
/* $KAME: blowfish.h,v 1.11 2001/09/10 04:03:56 itojun Exp $ */
/* $KAME: blowfish.h,v 1.12 2002/02/27 01:33:59 itojun Exp $ */

/* crypto/bf/blowfish.h */
/* Copyright (C) 1995-1997 Eric Young (eay@mincom.oz.au)
Expand Down Expand Up @@ -81,7 +81,8 @@ typedef struct bf_key_st {
} BF_KEY;

void BF_set_key __P((BF_KEY *, int, unsigned char *));
void BF_encrypt __P((BF_LONG *, BF_KEY *, int));
void BF_encrypt __P((BF_LONG *, BF_KEY *));
void BF_decrypt __P((BF_LONG *, BF_KEY *));
void BF_cbc_encrypt(const unsigned char *, unsigned char *, long,
const BF_KEY *, unsigned char *, int);

Expand Down
8 changes: 4 additions & 4 deletions kame/sys/netinet6/esp_core.c
@@ -1,4 +1,4 @@
/* $KAME: esp_core.c,v 1.54 2001/12/07 07:07:08 itojun Exp $ */
/* $KAME: esp_core.c,v 1.55 2002/02/27 01:33:59 itojun Exp $ */

/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
Expand Down Expand Up @@ -477,13 +477,13 @@ esp_blowfish_blockdecrypt(algo, sav, s, d)
u_int8_t *s;
u_int8_t *d;
{
/* HOLY COW! BF_encrypt() takes values in host byteorder */
/* HOLY COW! BF_decrypt() takes values in host byteorder */
BF_LONG t[2];

bcopy(s, t, sizeof(t));
t[0] = ntohl(t[0]);
t[1] = ntohl(t[1]);
BF_encrypt(t, (BF_KEY *)sav->sched, BF_DECRYPT);
BF_decrypt(t, (BF_KEY *)sav->sched);
t[0] = htonl(t[0]);
t[1] = htonl(t[1]);
bcopy(t, d, sizeof(t));
Expand All @@ -503,7 +503,7 @@ esp_blowfish_blockencrypt(algo, sav, s, d)
bcopy(s, t, sizeof(t));
t[0] = ntohl(t[0]);
t[1] = ntohl(t[1]);
BF_encrypt(t, (BF_KEY *)sav->sched, BF_ENCRYPT);
BF_encrypt(t, (BF_KEY *)sav->sched);
t[0] = htonl(t[0]);
t[1] = htonl(t[1]);
bcopy(t, d, sizeof(t));
Expand Down

0 comments on commit cd11589

Please sign in to comment.