diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2023-08-04 13:03:33 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2023-08-04 13:03:33 +0700 |
commit | ed02bb41f6de51b4ab1531369193e423a2b5837c (patch) | |
tree | 4ad49eb22264aa6acd2b5f5600800d0e56fdb0ef /crypto/src/crypto | |
parent | Asn1.Cmp updates from bc-java (diff) | |
download | BouncyCastle.NET-ed25519-ed02bb41f6de51b4ab1531369193e423a2b5837c.tar.xz |
Replace some locks with singleton init
Diffstat (limited to 'crypto/src/crypto')
3 files changed, 20 insertions, 46 deletions
diff --git a/crypto/src/crypto/parameters/ECDomainParameters.cs b/crypto/src/crypto/parameters/ECDomainParameters.cs index b5ca183de..8bd58d018 100644 --- a/crypto/src/crypto/parameters/ECDomainParameters.cs +++ b/crypto/src/crypto/parameters/ECDomainParameters.cs @@ -81,20 +81,8 @@ namespace Org.BouncyCastle.Crypto.Parameters get { return h; } } - public BigInteger HInv - { - get - { - lock (this) - { - if (hInv == null) - { - hInv = BigIntegers.ModOddInverseVar(n, h); - } - return hInv; - } - } - } + public BigInteger HInv => + Objects.EnsureSingletonInitialized(ref hInv, this, self => BigIntegers.ModOddInverseVar(self.n, self.h)); public byte[] GetSeed() { diff --git a/crypto/src/crypto/parameters/Ed25519PrivateKeyParameters.cs b/crypto/src/crypto/parameters/Ed25519PrivateKeyParameters.cs index 3a760afc1..4d2746065 100644 --- a/crypto/src/crypto/parameters/Ed25519PrivateKeyParameters.cs +++ b/crypto/src/crypto/parameters/Ed25519PrivateKeyParameters.cs @@ -76,22 +76,8 @@ namespace Org.BouncyCastle.Crypto.Parameters internal ReadOnlyMemory<byte> DataMemory => data; #endif - public Ed25519PublicKeyParameters GeneratePublicKey() - { - lock (data) - { - if (null == cachedPublicKey) - { -#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER - cachedPublicKey = new Ed25519PublicKeyParameters(Ed25519.GeneratePublicKey(data)); -#else - cachedPublicKey = new Ed25519PublicKeyParameters(Ed25519.GeneratePublicKey(data, 0)); -#endif - } - - return cachedPublicKey; - } - } + public Ed25519PublicKeyParameters GeneratePublicKey() => + Objects.EnsureSingletonInitialized(ref cachedPublicKey, data, CreatePublicKey); public void Sign(Ed25519.Algorithm algorithm, byte[] ctx, byte[] msg, int msgOff, int msgLen, byte[] sig, int sigOff) @@ -140,6 +126,13 @@ namespace Org.BouncyCastle.Crypto.Parameters } } + private static Ed25519PublicKeyParameters CreatePublicKey(byte[] data) => +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + new Ed25519PublicKeyParameters(Ed25519.GeneratePublicKey(data)); +#else + new Ed25519PublicKeyParameters(Ed25519.GeneratePublicKey(data, 0)); +#endif + private static byte[] Validate(byte[] buf) { if (buf.Length != KeySize) diff --git a/crypto/src/crypto/parameters/Ed448PrivateKeyParameters.cs b/crypto/src/crypto/parameters/Ed448PrivateKeyParameters.cs index 544dbf32d..664716ae9 100644 --- a/crypto/src/crypto/parameters/Ed448PrivateKeyParameters.cs +++ b/crypto/src/crypto/parameters/Ed448PrivateKeyParameters.cs @@ -76,22 +76,8 @@ namespace Org.BouncyCastle.Crypto.Parameters internal ReadOnlyMemory<byte> DataMemory => data; #endif - public Ed448PublicKeyParameters GeneratePublicKey() - { - lock (data) - { - if (null == cachedPublicKey) - { -#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER - cachedPublicKey = new Ed448PublicKeyParameters(Ed448.GeneratePublicKey(data)); -#else - cachedPublicKey = new Ed448PublicKeyParameters(Ed448.GeneratePublicKey(data, 0)); -#endif - } - - return cachedPublicKey; - } - } + public Ed448PublicKeyParameters GeneratePublicKey() => + Objects.EnsureSingletonInitialized(ref cachedPublicKey, data, CreatePublicKey); public void Sign(Ed448.Algorithm algorithm, byte[] ctx, byte[] msg, int msgOff, int msgLen, byte[] sig, int sigOff) @@ -132,6 +118,13 @@ namespace Org.BouncyCastle.Crypto.Parameters } } + private static Ed448PublicKeyParameters CreatePublicKey(byte[] data) => +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + new Ed448PublicKeyParameters(Ed448.GeneratePublicKey(data)); +#else + new Ed448PublicKeyParameters(Ed448.GeneratePublicKey(data, 0)); +#endif + private static byte[] Validate(byte[] buf) { if (buf.Length != KeySize) |