Run FIPS CASTs once up front to avoid runtime FIPS errors in threaded applications #84
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR includes changes relevant to wolfCrypt FIPS users and changes how the FIPS CASTs are run.
Prior to this PR, the FIPS CASTs were run when a class that extended the
com.wolfssl.wolfcrypt.WolfObject
was created. This could lead to the case where multiple objects created simultaneously in separate threads would both try to run the CASTs at the same time, resulting in one of them getting a native wolfCrypt FIPS not allowed error.This PR changes this behavior and runs the CASTs:
WolfCryptProvider
is createdWolfObject
is createdCAST run logic has been encapsulated into the new
Fips
class method:public static int runAllCast_fips()
. This is called fromWolfObject
during initialization, and fromWolfCryptProvider
during creation. This method contains synchronization to ensure not more than one thread tries to run the CASTs at one time.NOTE: FIPS PRB tests will be added as part of a separate PR.