diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2015-10-16 12:01:53 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2015-10-16 12:01:53 +0700 |
commit | fd1e12d9e0e12b7cf49165248a86bb24d4e87d65 (patch) | |
tree | 904753b77ae44fbf34641e3bec5ee5f78788e061 /crypto | |
parent | Refactoring (diff) | |
download | BouncyCastle.NET-ed25519-fd1e12d9e0e12b7cf49165248a86bb24d4e87d65.tar.xz |
Avoid Interlocked.Increment(Int64) on .NET CF
- https://github.com/bcgit/bc-csharp/issues/20
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/src/crypto/tls/AbstractTlsContext.cs | 13 | ||||
-rw-r--r-- | crypto/src/security/SecureRandom.cs | 13 |
2 files changed, 23 insertions, 3 deletions
diff --git a/crypto/src/crypto/tls/AbstractTlsContext.cs b/crypto/src/crypto/tls/AbstractTlsContext.cs index e283ee58c..ae7efc64d 100644 --- a/crypto/src/crypto/tls/AbstractTlsContext.cs +++ b/crypto/src/crypto/tls/AbstractTlsContext.cs @@ -12,10 +12,21 @@ namespace Org.BouncyCastle.Crypto.Tls { private static long counter = Times.NanoTime(); +#if NETCF_1_0 + private static object counterLock = new object(); + private static long NextCounterValue() + { + lock (counterLock) + { + return ++counter; + } + } +#else private static long NextCounterValue() { return Interlocked.Increment(ref counter); } +#endif private readonly IRandomGenerator mNonceRandom; private readonly SecureRandom mSecureRandom; @@ -26,7 +37,7 @@ namespace Org.BouncyCastle.Crypto.Tls private TlsSession mSession = null; private object mUserObject = null; - internal AbstractTlsContext(SecureRandom secureRandom, SecurityParameters securityParameters) + internal AbstractTlsContext(SecureRandom secureRandom, SecurityParameters securityParameters) { IDigest d = TlsUtilities.CreateHash(HashAlgorithm.sha256); byte[] seed = new byte[d.GetDigestSize()]; diff --git a/crypto/src/security/SecureRandom.cs b/crypto/src/security/SecureRandom.cs index f46427a5c..137a471c1 100644 --- a/crypto/src/security/SecureRandom.cs +++ b/crypto/src/security/SecureRandom.cs @@ -13,12 +13,16 @@ namespace Org.BouncyCastle.Security { private static long counter = Times.NanoTime(); +#if NETCF_1_0 + private static object counterLock = new object(); private static long NextCounterValue() { - return Interlocked.Increment(ref counter); + lock (counterLock) + { + return ++counter; + } } -#if NETCF_1_0 private static readonly SecureRandom[] master = { null }; private static SecureRandom Master { @@ -43,6 +47,11 @@ namespace Org.BouncyCastle.Security } } #else + private static long NextCounterValue() + { + return Interlocked.Increment(ref counter); + } + private static readonly SecureRandom master = new SecureRandom(new CryptoApiRandomGenerator()); private static SecureRandom Master { |