예제 #1
0
int FIPS_check_incore_fingerprint(void)
    {
    unsigned char sig[EVP_MAX_MD_SIZE];
    unsigned int len;
    int rv = 0;
#if defined(__sgi) && (defined(__mips) || defined(mips))
    extern int __dso_displacement[];
#else
    extern int OPENSSL_NONPIC_relocated;
#endif

    if (!fips_post_started(FIPS_TEST_INTEGRITY, 0, NULL))
	return 1;

    if (FIPS_text_start()==NULL)
	{
	FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_UNSUPPORTED_PLATFORM);
	goto err;
	}

    len=FIPS_incore_fingerprint(sig,sizeof(sig));

    if (len!=sizeof(FIPS_signature) ||
	memcmp(FIPS_signature,sig,sizeof(FIPS_signature)))
	{
	if (FIPS_signature>=FIPS_rodata_start && FIPS_signature<FIPS_rodata_end)
	    FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH_SEGMENT_ALIASING);
#if defined(__sgi) && (defined(__mips) || defined(mips))
	else if (__dso_displacement!=NULL)
#else
	else if (OPENSSL_NONPIC_relocated)
#endif
	    FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH_NONPIC_RELOCATED);
	else
	    FIPSerr(FIPS_F_FIPS_CHECK_INCORE_FINGERPRINT,FIPS_R_FINGERPRINT_DOES_NOT_MATCH);
#ifdef OPENSSL_FIPS_DEBUGGER
    	rv = 1;
#endif
	goto err;
	}
    rv = 1;
    err:
    if (rv == 0)
    	fips_post_failed(FIPS_TEST_INTEGRITY, 0, NULL);
    else
	if (!fips_post_success(FIPS_TEST_INTEGRITY, 0, NULL))
		return 0;
    return rv;
    }
예제 #2
0
void Java_org_keysupport_provider_OpenSSLFIPSProvider_getOpenSSLFIPSIncoreSig(
		JNIEnv* env, jobject javaThis, jbyteArray buf) {

	int len = 0;

	len = FIPS_incore_fingerprint(Calculated_signature,
			sizeof(Calculated_signature));

	if (len < 0) {
		LOGE("Failed to calculate expected signature");
	} else {
		(*env)->SetByteArrayRegion(env, buf, 0, 20, Calculated_signature);
	}

}