Beispiel #1
0
char* bcrypt(int rounds, unsigned char* salt, unsigned char* input) {
  int i;
  char* output = malloc(61 * sizeof(char));
  unsigned int cdata[16];
  unsigned char ctext[25];
  memcpy(cdata, CIPHER_TEXT, 16 * sizeof(int));

	blowfish_context_t *ctx = (blowfish_context_t *)malloc(sizeof(blowfish_context_t));
  eks_blowfish_setup(ctx, rounds, salt, input);
  for (i = 0; i < 64; i++) {
    encrypt_ecb(ctx, cdata);
  }
  for (i = 0; i < 6; i++) {
    ctext[4 * i + 3] = cdata[i] & 0xff;
    cdata[i] >>= 8;
    ctext[4 * i + 2] = cdata[i] & 0xff;
    cdata[i] >>= 8;
    ctext[4 * i + 1] = cdata[i] & 0xff;
    cdata[i] >>= 8;
    ctext[4 * i + 0] = cdata[i] & 0xff;
  }
  ctext[23] = '\0';
  snprintf(output, 8, "$2a$%2.2u$", rounds);
  memcpy(output + 7, base64_encode(salt), 22);
  memcpy(output + 29, base64_encode(ctext), 31);
  output[61] = '\0';

  return output;
}
Beispiel #2
0
int SelfTestGost14Ecb()
{
	unsigned char ctx[kEcb14ContextLen];
	unsigned char output[textLen14];

	if (init_ecb_14_impl(kSeltTestGost14MasterKeyData, ctx))
		return -1;

	if (encrypt_ecb(ctx, kSeltTestGost14PlainText, output, textLen14))
		return -1;

	if (memcmp(output, kSeltTestGost14EcbEncText, textLen14))
		return -1;

	return 0;
};