ikptr
ikrt_openssl_whirlpool (ikptr s_input, ikptr s_input_len, ikpcb * pcb)
{
#ifdef HAVE_WHIRLPOOL
  ik_ssl_cuchar *	in     = (ik_ssl_cuchar *)IK_GENERALISED_C_STRING(s_input);
  ik_ulong		in_len = (ik_ulong)ik_generalised_c_buffer_len(s_input, s_input_len);
  unsigned char		sum[WHIRLPOOL_DIGEST_LENGTH];
  WHIRLPOOL(in, in_len, sum);
  return ika_bytevector_from_memory_block(pcb, sum, WHIRLPOOL_DIGEST_LENGTH);
#else
  feature_failure(__func__);
#endif
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
jbyteArray
Java_ru_ivanovpv_gorets_psm_nativelib_NativeLib_generateHash( JNIEnv* env,
                                                  jobject thiz,  jbyteArray arr,
                                                  jint hashType, jint times)
{


    unsigned char * rawArr = NULL;
    unsigned arrSize = 0;
    unsigned i = 0;
    unsigned char digest1[MAX_HASH_SIZE], digest2[MAX_HASH_SIZE];
    unsigned char * data = NULL, * digest = NULL, * tempArr = NULL;
    unsigned digestSize = 0;
    jbyteArray byteArr = NULL;

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

    digestSize = MAX_HASH_SIZE;

    arrSize = (*env)->GetArrayLength(env, arr);
    if (arrSize <= 0)
    {
        goto cleanup;
    }

    if( (rawArr = (*env)->GetByteArrayElements(env, arr, NULL)) == NULL )
    {
        goto cleanup;
    }

    switch (hashType) //
    {
    case 1: // WP
        if (WHIRLPOOL((const unsigned char *)rawArr, arrSize, digest1) == NULL)
        {
            goto cleanup;
        }
        data = digest1;
        digest = digest2;
        for(i = 0; i < times; i++)
        {
            if (WHIRLPOOL((const unsigned char *)data, digestSize, digest) == NULL)
            {
                goto cleanup;
            }
            tempArr = data;
            data = digest;
            digest = tempArr;
        }
        tempArr = data;
        data = digest;
        digest = tempArr;
        break;
    case 2: // SHA512
        if (SHA512((const unsigned char *)rawArr, arrSize, digest1) == NULL)
        {
            goto cleanup;
        }
        data = digest1;
        digest = digest2;
        for(i = 0; i < times; i++)
        {
              if (SHA512((const unsigned char *)data, digestSize, digest) == NULL)
              {
                  goto cleanup;
              }
              tempArr = data;
              data = digest;
              digest = tempArr;
        }
        tempArr = data;
        data = digest;
        digest = tempArr;
        break;
    }

    byteArr  =  (*env)->NewByteArray(env, digestSize);
    if (byteArr == NULL)
    {
        goto cleanup;
    }

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

cleanup:

    if ( rawArr )
        (*env)->ReleaseByteArrayElements(env, arr, rawArr, JNI_ABORT);

    return byteArr;
}