Skip to content

Commit

Permalink
CORDA-1337 Crypto.registerProviders (corda#2962)
Browse files Browse the repository at this point in the history
CORDA-1337 Crypto.registerProviders + add BCPQC as well
  • Loading branch information
Konstantinos Chalkias authored Apr 13, 2018
1 parent 91c52af commit 6f69f02
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
14 changes: 13 additions & 1 deletion core/src/main/kotlin/net/corda/core/crypto/Crypto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -990,5 +990,17 @@ object Crypto {
} else {
txId
}
}
}

/**
* Method to force registering all [Crypto]-related cryptography [Provider]s.
* It is recommended that it is invoked first thing on `main` functions, so the [Provider]s are in place before any
* cryptographic operation is requested outside [Crypto] (i.e., SecureRandom, KeyStore, cert-path validation,
* CRL & CSR checks etc.).
*/
// TODO: perform all cryptographic operations via Crypto.
@JvmStatic
fun registerProviders() {
providerMap
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ internal val cordaBouncyCastleProvider = BouncyCastleProvider().apply {
}
internal val bouncyCastlePQCProvider = BouncyCastlePQCProvider().apply {
require(name == "BCPQC") // The constant it comes from is not final.
}.also {
Security.addProvider(it)
}
// This map is required to defend against users that forcibly call Security.addProvider / Security.removeProvider
// that could cause unexpected and suspicious behaviour.
Expand Down
4 changes: 3 additions & 1 deletion node/src/main/kotlin/net/corda/node/Corda.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ import net.corda.node.internal.NodeStartup
import kotlin.system.exitProcess

fun main(args: Array<String>) {
Crypto.findProvider(CordaSecurityProvider.PROVIDER_NAME) // Install our SecureRandom before e.g. UUID asks for one.
// Register all cryptography [Provider]s first thing on boot.
// Required to install our [SecureRandom] before e.g., UUID asks for one.
Crypto.registerProviders()
// Pass the arguments to the Node factory. In the Enterprise edition, this line is modified to point to a subclass.
// It will exit the process in case of startup failure and is not intended to be used by embedders. If you want
// to embed Node in your own container, instantiate it directly and set up the configuration objects yourself.
Expand Down

0 comments on commit 6f69f02

Please sign in to comment.