Exemple #1
0
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;
}
Exemple #2
0
/* 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;
}
Exemple #3
0
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
}
Exemple #4
0
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;
}