Skip to content

Commit 202aa77

Browse files
committed
run FIPS 140-3 CAST up front on library load if needed
1 parent f594800 commit 202aa77

1 file changed

Lines changed: 102 additions & 2 deletions

File tree

native/com_wolfssl_WolfSSL.c

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,110 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSL_init
6464
(void)jenv;
6565
(void)jcl;
6666

67+
int ret = 0;
68+
6769
#ifdef WC_RNG_SEED_CB
68-
wc_SetSeed_Cb(wc_GenerateSeed);
70+
ret = wc_SetSeed_Cb(wc_GenerateSeed);
71+
if (ret != 0) {
72+
printf("wc_SetSeed_Cb() failed");
73+
}
6974
#endif
70-
return (jint)wolfSSL_Init();
75+
76+
#if defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION == 5)
77+
/* run FIPS 140-3 conditional algorithm self tests early to prevent
78+
* multi threaded issues later on */
79+
if (ret == 0) {
80+
ret = wc_RunCast_fips(FIPS_CAST_AES_CBC);
81+
if (ret != 0) {
82+
printf("AES-CBC CAST failed");
83+
}
84+
}
85+
if (ret == 0) {
86+
ret = wc_RunCast_fips(FIPS_CAST_AES_GCM);
87+
if (ret != 0) {
88+
printf("AES-GCM CAST failed");
89+
}
90+
}
91+
if (ret == 0) {
92+
ret = wc_RunCast_fips(FIPS_CAST_HMAC_SHA1);
93+
if (ret != 0) {
94+
printf("HMAC-SHA1 CAST failed");
95+
}
96+
}
97+
if (ret == 0) {
98+
ret = wc_RunCast_fips(FIPS_CAST_HMAC_SHA2_256);
99+
if (ret != 0) {
100+
printf("HMAC-SHA2-256 CAST failed");
101+
}
102+
}
103+
if (ret == 0) {
104+
ret = wc_RunCast_fips(FIPS_CAST_HMAC_SHA2_512);
105+
if (ret != 0) {
106+
printf("HMAC-SHA2-512 CAST failed");
107+
}
108+
}
109+
110+
if (ret == 0) {
111+
ret = wc_RunCast_fips(FIPS_CAST_HMAC_SHA3_256);
112+
if (ret != 0) {
113+
printf("HMAC-SHA3-256 CAST failed");
114+
}
115+
}
116+
if (ret == 0) {
117+
ret = wc_RunCast_fips(FIPS_CAST_DRBG);
118+
if (ret != 0) {
119+
printf("Hash_DRBG CAST failed");
120+
}
121+
}
122+
if (ret == 0) {
123+
ret = wc_RunCast_fips(FIPS_CAST_RSA_SIGN_PKCS1v15);
124+
if (ret != 0) {
125+
printf("RSA sign CAST failed");
126+
}
127+
}
128+
if (ret == 0) {
129+
ret = wc_RunCast_fips(FIPS_CAST_ECC_PRIMITIVE_Z);
130+
if (ret != 0) {
131+
printf("ECC Primitive Z CAST failed");
132+
}
133+
}
134+
if (ret == 0) {
135+
ret = wc_RunCast_fips(FIPS_CAST_DH_PRIMITIVE_Z);
136+
if (ret != 0) {
137+
printf("DH Primitive Z CAST failed");
138+
}
139+
}
140+
if (ret == 0) {
141+
ret = wc_RunCast_fips(FIPS_CAST_ECDSA);
142+
if (ret != 0) {
143+
printf("ECDSA CAST failed");
144+
}
145+
}
146+
if (ret == 0) {
147+
ret = wc_RunCast_fips(FIPS_CAST_KDF_TLS12);
148+
if (ret != 0) {
149+
printf("KDF TLSv1.2 CAST failed");
150+
}
151+
}
152+
if (ret == 0) {
153+
ret = wc_RunCast_fips(FIPS_CAST_KDF_TLS13);
154+
if (ret != 0) {
155+
printf("KDF TLSv1.3 CAST failed");
156+
}
157+
}
158+
if (ret == 0) {
159+
ret = wc_RunCast_fips(FIPS_CAST_KDF_SSH);
160+
if (ret != 0) {
161+
printf("KDF SSHv2.0 CAST failed");
162+
}
163+
}
164+
#endif
165+
166+
if (ret == 0) {
167+
return (jint)wolfSSL_Init();
168+
} else {
169+
return (jint)WOLFSSL_FAILURE;
170+
}
71171
}
72172

73173
/* used in unit tests */

0 commit comments

Comments
 (0)