コード例 #1
0
/*the last public function; generates ciphertext*/
static void crypt_all (int count)
{
  unsigned char password[PLAINTEXT_LENGTH];
  unsigned char lotus_matrix[64], *lotus_matrix1, *lotus_matrix2, *lotus_matrix3, *lotus_matrix4;
  int i;
  int password_length;

  password_length = strlen (saved_key);
  memset (password, (PLAINTEXT_LENGTH - password_length), PLAINTEXT_LENGTH);
  lotus_matrix1 = lotus_matrix;
  lotus_matrix2 = lotus_matrix1 + 16;
  lotus_matrix3 = lotus_matrix2 + 16;
  lotus_matrix4 = lotus_matrix3 + 16;
  memcpy (password, saved_key, password_length);

  memset (lotus_matrix1, 0, 16);
  memcpy (lotus_matrix2, password, 16);
  memcpy (lotus_matrix3, password, 16);
  lotus_transform_password (lotus_matrix2, lotus_matrix4);
  lotus_mix (lotus_matrix);
  memcpy (lotus_matrix2, lotus_matrix4, 16);
  for (i = 0; i < 16; i++)
    {
      lotus_matrix3[i] = lotus_matrix1[i] ^ lotus_matrix2[i];
    }
  lotus_mix (lotus_matrix);
  memcpy (crypt_key, lotus_matrix1, BINARY_SIZE);
}
コード例 #2
0
/*the last public function; generates ciphertext*/
static int crypt_all(int *pcount, struct db_salt *salt)
{
	int count = *pcount;
	int index;

#ifdef _OPENMP
#pragma omp parallel for
#endif
	for (index = 0; index < count; index += 2) {
		struct {
			union {
				unsigned char m[64];
				unsigned char m4[4][16];
				ARCH_WORD m4w[4][16 / ARCH_SIZE];
			} u;
		} ctx[2];
		int password_length;

		memset(ctx[0].u.m4[0], 0, 16);
		password_length = strlen(saved_key[index]);
		memset(ctx[0].u.m4[1], (PLAINTEXT_LENGTH - password_length), PLAINTEXT_LENGTH);
		memcpy(ctx[0].u.m4[1], saved_key[index], password_length);

		memcpy(ctx[0].u.m4[2], ctx[0].u.m4[1], 16);
		memset(ctx[1].u.m4[0], 0, 16);
		password_length = strlen(saved_key[index + 1]);
		memset(ctx[1].u.m4[1], (PLAINTEXT_LENGTH - password_length), PLAINTEXT_LENGTH);
		memcpy(ctx[1].u.m4[1], saved_key[index + 1], password_length);

		memcpy(ctx[1].u.m4[2], ctx[1].u.m4[1], 16);
		lotus_transform_password(ctx[0].u.m4[1], ctx[0].u.m4[3],
		                         ctx[1].u.m4[1], ctx[1].u.m4[3]);
		lotus_mix(ctx[0].u.m, ctx[1].u.m);
		memcpy(ctx[0].u.m4[1], ctx[0].u.m4[3], 16);
		memcpy(ctx[1].u.m4[1], ctx[1].u.m4[3], 16);
		{
			int i;
			for (i = 0; i < 16 / ARCH_SIZE; i++) {
				ctx[0].u.m4w[2][i] = ctx[0].u.m4w[0][i] ^ ctx[0].u.m4w[1][i];
				ctx[1].u.m4w[2][i] = ctx[1].u.m4w[0][i] ^ ctx[1].u.m4w[1][i];
			}
		}
		lotus_mix(ctx[0].u.m, ctx[1].u.m);
		memcpy(crypt_key[index], ctx[0].u.m4[0], BINARY_SIZE);
		memcpy(crypt_key[index + 1], ctx[1].u.m4[0], BINARY_SIZE);
	}
	return count;
}