summary refs log tree commit diff
path: root/crypto/src/crypto
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2023-08-04 13:03:33 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2023-08-04 13:03:33 +0700
commited02bb41f6de51b4ab1531369193e423a2b5837c (patch)
tree4ad49eb22264aa6acd2b5f5600800d0e56fdb0ef /crypto/src/crypto
parentAsn1.Cmp updates from bc-java (diff)
downloadBouncyCastle.NET-ed25519-ed02bb41f6de51b4ab1531369193e423a2b5837c.tar.xz
Replace some locks with singleton init
Diffstat (limited to 'crypto/src/crypto')
-rw-r--r--crypto/src/crypto/parameters/ECDomainParameters.cs16
-rw-r--r--crypto/src/crypto/parameters/Ed25519PrivateKeyParameters.cs25
-rw-r--r--crypto/src/crypto/parameters/Ed448PrivateKeyParameters.cs25
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)