Exemplo n.º 1
0
static int crypt_2(int *pcount, struct db_salt *salt)
{
	int count = *pcount;
	int index = 0;

#ifdef _OPENMP
#pragma omp parallel for
	for (index = 0; index < count; index++)
#endif
	{
#if (AC_BUILT && HAVE_WHIRLPOOL) ||	\
   (!AC_BUILT && OPENSSL_VERSION_NUMBER >= 0x10000000 && !HAVE_NO_SSL_WHIRLPOOL)
		WHIRLPOOL_CTX ctx;

		WHIRLPOOL_Init(&ctx);
		WHIRLPOOL_Update(&ctx, saved_key[index], strlen(saved_key[index]));
		WHIRLPOOL_Final((unsigned char*)crypt_out[index], &ctx);
#else
		sph_whirlpool_context ctx;

		sph_whirlpool_init(&ctx);
		sph_whirlpool(&ctx, saved_key[index], strlen(saved_key[index]));
		sph_whirlpool_close(&ctx, (unsigned char*)crypt_out[index]);
#endif
	}
	return count;
}
ikptr
ikrt_openssl_whirlpool_update (ikptr s_ctx, ikptr s_input, ikptr s_input_len, ikpcb * pcb)
{
#ifdef HAVE_WHIRLPOOL_UPDATE
  WHIRLPOOL_CTX *	ctx	= IK_WHIRLPOOL_CTX(s_ctx);
  const void *	in	= IK_GENERALISED_C_STRING(s_input);
  size_t	in_len	= ik_generalised_c_buffer_len(s_input, s_input_len);
  int		rv;
  rv = WHIRLPOOL_Update(ctx, in, (unsigned long)in_len);
  return IK_BOOLEAN_FROM_INT(rv);
#else
  feature_failure(__func__);
#endif
}
Exemplo n.º 3
0
int main (int argc,char *argv[])
{ unsigned char md[WHIRLPOOL_DIGEST_LENGTH];
  int		i;
  WHIRLPOOL_CTX	ctx;

#ifdef OPENSSL_IA32_SSE2
    /* Alternative to this is to call OpenSSL_add_all_algorithms...
     * The below code is retained exclusively for debugging purposes. */
    { char      *env;

	if ((env=getenv("OPENSSL_ia32cap")))
	    OPENSSL_ia32cap = strtoul (env,NULL,0);
    }
#endif

    fprintf(stdout,"Testing Whirlpool ");

    WHIRLPOOL("",0,md);
    if (memcmp(md,iso_test_1,sizeof(iso_test_1)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 1 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL("a",1,md);
    if (memcmp(md,iso_test_2,sizeof(iso_test_2)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 2 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL("abc",3,md);
    if (memcmp(md,iso_test_3,sizeof(iso_test_3)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 3 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL("message digest",14,md);
    if (memcmp(md,iso_test_4,sizeof(iso_test_4)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 4 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL("abcdefghijklmnopqrstuvwxyz",26,md);
    if (memcmp(md,iso_test_5,sizeof(iso_test_5)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 5 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL(	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		"abcdefghijklmnopqrstuvwxyz"
		"0123456789",62,md);
    if (memcmp(md,iso_test_6,sizeof(iso_test_6)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 6 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL(	"1234567890""1234567890""1234567890""1234567890"
		"1234567890""1234567890""1234567890""1234567890",80,md);
    if (memcmp(md,iso_test_7,sizeof(iso_test_7)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 7 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    WHIRLPOOL("abcdbcdecdefdefgefghfghighijhijk",32,md);
    if (memcmp(md,iso_test_8,sizeof(iso_test_8)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 8 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);
 
    WHIRLPOOL_Init (&ctx);
    for (i=0;i<1000000;i+=288)
	WHIRLPOOL_Update (&ctx,	"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa"
				"aaaaaaaa""aaaaaaaa""aaaaaaaa""aaaaaaaa",
				(1000000-i)<288?1000000-i:288);
    WHIRLPOOL_Final (md,&ctx);
    if (memcmp(md,iso_test_9,sizeof(iso_test_9)))
    {   fflush(stdout);
	fprintf(stderr,"\nTEST 9 of 9 failed.\n");
	return 1;
    }
    else
	fprintf(stdout,"."); fflush(stdout);

    fprintf(stdout," passed.\n"); fflush(stdout);

  return 0;
}
	static int update(EVP_MD_CTX *ctx,const void *data,size_t count)
	{ return WHIRLPOOL_Update((WHIRLPOOL_CTX*)ctx->md_data,data,count); }
Exemplo n.º 5
0
static int update(EVP_MD_CTX *ctx, const void *data, size_t count)
{
    return WHIRLPOOL_Update(EVP_MD_CTX_md_data(ctx), data, count);
}
Exemplo n.º 6
0
jbyteArray
Java_ru_ivanovpv_gorets_psm_nativelib_NativeLib_generatePK( JNIEnv* env,
                                                  jobject thiz, jstring password, jstring salt,
                                                  jint hashType, jint keySize)
{

    const char * saltArr = NULL;
    const char * passArr = NULL;
    const char * saltPtr = NULL;
    unsigned saltLength = 0;
    unsigned passLength = 0;
    unsigned char digest[MAX_HASH_SIZE];
    unsigned digestSize = 0;
    jbyteArray byteArr = NULL;
    WHIRLPOOL_CTX wp_ctx;
    SHA512_CTX sha_ctx;

    if ( ((hashType != 1) && (hashType != 2)) || (keySize <= 0))
    {
        return NULL;
    }

    digestSize = (keySize <= MAX_HASH_SIZE) ? keySize : MAX_HASH_SIZE;

    saltArr = (*env)->GetStringUTFChars(env, salt, NULL);
    if(saltArr == NULL)
    {
        return NULL;
    }

    passArr = (*env)->GetStringUTFChars(env, password, NULL);
    if(saltArr == NULL)
    {
        (*env)->ReleaseStringUTFChars(env, salt, saltArr);
        return NULL;
    }

    saltLength = (*env)->GetStringUTFLength(env, salt);
    passLength = (*env)->GetStringUTFLength(env, password);

    switch (hashType) //
    {
    case 1: // WP
        WHIRLPOOL_Init(&wp_ctx);
        saltPtr = saltArr;
        WHIRLPOOL_Update(&wp_ctx, (const void *)saltPtr, saltLength/2);
        saltPtr += saltLength/2;
        saltLength -= saltLength/2;
        WHIRLPOOL_Update(&wp_ctx, (const void *)passArr, passLength);
        WHIRLPOOL_Update(&wp_ctx, (const void *)saltPtr, saltLength);
        WHIRLPOOL_Final((unsigned char *)digest, &wp_ctx);
        break;
    case 2: // SHA512
        SHA512_Init(&sha_ctx);
        saltPtr = saltArr;
        SHA512_Update(&sha_ctx, (const void *)saltPtr, saltLength/2);
        saltPtr += saltLength/2;
        saltLength -= saltLength/2;
        SHA512_Update(&sha_ctx, (const void *)passArr, passLength);
        SHA512_Update(&sha_ctx, (const void *)saltPtr, saltLength);
        SHA512_Final((unsigned char *)digest, &sha_ctx);
        break;
    }

    (*env)->ReleaseStringUTFChars(env, salt, saltArr);
    (*env)->ReleaseStringUTFChars(env, salt, passArr);

    byteArr  =  (*env)->NewByteArray(env, digestSize);
    if (byteArr == NULL)
        return NULL;

    (*env)->SetByteArrayRegion(env, byteArr,
                            0, digestSize, (const jbyte*)digest);
    memset (digest, 0, digestSize);

    return byteArr;
}