diff options
-rw-r--r-- | crypto/src/crypto/engines/RSABlindedEngine.cs | 40 | ||||
-rw-r--r-- | crypto/src/crypto/engines/RSACoreEngine.cs | 4 |
2 files changed, 16 insertions, 28 deletions
diff --git a/crypto/src/crypto/engines/RSABlindedEngine.cs b/crypto/src/crypto/engines/RSABlindedEngine.cs index 8bb9a4f8c..63b8bbf69 100644 --- a/crypto/src/crypto/engines/RSABlindedEngine.cs +++ b/crypto/src/crypto/engines/RSABlindedEngine.cs @@ -41,34 +41,17 @@ namespace Org.BouncyCastle.Crypto.Engines */ public virtual void Init(bool forEncryption, ICipherParameters param) { - core.Init(forEncryption, param); - - if (param is ParametersWithRandom rParam) + SecureRandom providedRandom = null; + if (param is ParametersWithRandom withRandom) { - this.key = (RsaKeyParameters)rParam.Parameters; - - if (key is RsaPrivateCrtKeyParameters) - { - this.random = rParam.Random; - } - else - { - this.random = null; - } - } - else - { - this.key = (RsaKeyParameters)param; - - if (key is RsaPrivateCrtKeyParameters) - { - this.random = CryptoServicesRegistrar.GetSecureRandom(); - } - else - { - this.random = null; - } + providedRandom = withRandom.Random; + param = withRandom.Parameters; } + + core.Init(forEncryption, param); + + this.key = (RsaKeyParameters)param; + this.random = InitSecureRandom(needed: key is RsaPrivateCrtKeyParameters, providedRandom); } /** @@ -114,6 +97,11 @@ namespace Org.BouncyCastle.Crypto.Engines return core.ConvertOutput(result); } + protected virtual SecureRandom InitSecureRandom(bool needed, SecureRandom provided) + { + return needed ? CryptoServicesRegistrar.GetSecureRandom(provided) : null; + } + private BigInteger ProcessInput(BigInteger input) { if (!(key is RsaPrivateCrtKeyParameters crt)) diff --git a/crypto/src/crypto/engines/RSACoreEngine.cs b/crypto/src/crypto/engines/RSACoreEngine.cs index 7040899f9..dcc8d0101 100644 --- a/crypto/src/crypto/engines/RSACoreEngine.cs +++ b/crypto/src/crypto/engines/RSACoreEngine.cs @@ -116,10 +116,10 @@ namespace Org.BouncyCastle.Crypto.Engines BigInteger qInv = crt.QInv; // mP = ((input Mod p) ^ dP)) Mod p - BigInteger mP = (input.Remainder(p)).ModPow(dP, p); + BigInteger mP = input.Remainder(p).ModPow(dP, p); // mQ = ((input Mod q) ^ dQ)) Mod q - BigInteger mQ = (input.Remainder(q)).ModPow(dQ, q); + BigInteger mQ = input.Remainder(q).ModPow(dQ, q); // h = qInv * (mP - mQ) Mod p BigInteger h = mP.Subtract(mQ).Multiply(qInv).Mod(p); |