diff options
author | Oren Novotny <oren@novotny.org> | 2018-05-19 18:34:05 -0400 |
---|---|---|
committer | Oren Novotny <oren@novotny.org> | 2018-05-19 18:34:05 -0400 |
commit | 5a698b04dfbf8cd3376e16eb0f5fd145f95737bb (patch) | |
tree | 6cbdf3e22691f0a50133027ec57e1c8fb023c972 /crypto/src | |
parent | merge master into netstandard (diff) | |
download | BouncyCastle.NET-ed25519-5a698b04dfbf8cd3376e16eb0f5fd145f95737bb.tar.xz |
Update after merge
Diffstat (limited to 'crypto/src')
-rw-r--r-- | crypto/src/crypto.csproj | 2 | ||||
-rw-r--r-- | crypto/src/crypto/generators/OpenBsdBCrypt.cs | 4 | ||||
-rw-r--r-- | crypto/src/math/ec/rfc7748/X25519.cs | 81 | ||||
-rw-r--r-- | crypto/src/math/ec/rfc7748/X448.cs | 89 |
4 files changed, 95 insertions, 81 deletions
diff --git a/crypto/src/crypto.csproj b/crypto/src/crypto.csproj index bb3de0c9c..7a246c171 100644 --- a/crypto/src/crypto.csproj +++ b/crypto/src/crypto.csproj @@ -35,7 +35,7 @@ <DefineConstants>$(DefineConstants);LIB</DefineConstants> </PropertyGroup> <PropertyGroup Condition=" '$(TargetFramework)' == 'portable-net4+sl5+wp8+win8+wpa81' "> - <DefineConstants>$(DefineConstants);PORTABLE;NO_THREADS</DefineConstants> + <DefineConstants>$(DefineConstants);PORTABLE;NO_THREADS;LEGACY_PCL</DefineConstants> </PropertyGroup> <ItemGroup> <Compile Include="..\bzip2\src\**\*.cs" LinkBase="bzip2" /> diff --git a/crypto/src/crypto/generators/OpenBsdBCrypt.cs b/crypto/src/crypto/generators/OpenBsdBCrypt.cs index 49f79f95b..399d12391 100644 --- a/crypto/src/crypto/generators/OpenBsdBCrypt.cs +++ b/crypto/src/crypto/generators/OpenBsdBCrypt.cs @@ -174,7 +174,11 @@ namespace Org.BouncyCastle.Crypto.Generators } catch (Exception nfe) { +#if LEGACY_PCL + throw new ArgumentException("Invalid cost factor (bcryptString): " + bcryptString.Substring(4, 2), nfe); +#else throw new ArgumentException("Invalid cost factor: " + bcryptString.Substring(4, 2), "bcryptString", nfe); +#endif } if (cost < 4 || cost > 31) throw new ArgumentException("Invalid cost factor: " + cost + ", 4 < cost < 31 expected."); diff --git a/crypto/src/math/ec/rfc7748/X25519.cs b/crypto/src/math/ec/rfc7748/X25519.cs index 16f680d90..8c52a21ac 100644 --- a/crypto/src/math/ec/rfc7748/X25519.cs +++ b/crypto/src/math/ec/rfc7748/X25519.cs @@ -54,63 +54,68 @@ namespace Org.BouncyCastle.Math.EC.Rfc7748 X25519Field.Mul(z, A, z); } - [MethodImpl(MethodImplOptions.Synchronized)] + // https://stackoverflow.com/questions/2223656/what-does-methodimploptions-synchronized-do + // Not available in lower .net standard versions + //[MethodImpl(MethodImplOptions.Synchronized)] public static void Precompute() { - if (precompBase != null) - return; + lock (typeof(X25519)) + { + if (precompBase != null) + return; - precompBase = new int[X25519Field.Size * 252]; + precompBase = new int[X25519Field.Size * 252]; - int[] xs = precompBase; - int[] zs = new int[X25519Field.Size * 251]; + int[] xs = precompBase; + int[] zs = new int[X25519Field.Size * 251]; - int[] x = X25519Field.Create(); x[0] = 9; - int[] z = X25519Field.Create(); z[0] = 1; + int[] x = X25519Field.Create(); x[0] = 9; + int[] z = X25519Field.Create(); z[0] = 1; - int[] n = X25519Field.Create(); - int[] d = X25519Field.Create(); + int[] n = X25519Field.Create(); + int[] d = X25519Field.Create(); - X25519Field.Apm(x, z, n, d); + X25519Field.Apm(x, z, n, d); - int[] c = X25519Field.Create(); X25519Field.Copy(d, 0, c, 0); + int[] c = X25519Field.Create(); X25519Field.Copy(d, 0, c, 0); - int off = 0; - for (;;) - { - X25519Field.Copy(n, 0, xs, off); + int off = 0; + for (; ; ) + { + X25519Field.Copy(n, 0, xs, off); - if (off == (X25519Field.Size * 251)) - break; + if (off == (X25519Field.Size * 251)) + break; - PointDouble(x, z); + PointDouble(x, z); - X25519Field.Apm(x, z, n, d); - X25519Field.Mul(n, c, n); - X25519Field.Mul(c, d, c); + X25519Field.Apm(x, z, n, d); + X25519Field.Mul(n, c, n); + X25519Field.Mul(c, d, c); - X25519Field.Copy(d, 0, zs, off); + X25519Field.Copy(d, 0, zs, off); - off += X25519Field.Size; - } + off += X25519Field.Size; + } - int[] u = X25519Field.Create(); - X25519Field.Inv(c, u); + int[] u = X25519Field.Create(); + X25519Field.Inv(c, u); - for (;;) - { - X25519Field.Copy(xs, off, x, 0); + for (; ; ) + { + X25519Field.Copy(xs, off, x, 0); - X25519Field.Mul(x, u, x); - //X25519Field.Normalize(x); - X25519Field.Copy(x, 0, precompBase, off); + X25519Field.Mul(x, u, x); + //X25519Field.Normalize(x); + X25519Field.Copy(x, 0, precompBase, off); - if (off == 0) - break; + if (off == 0) + break; - off -= X25519Field.Size; - X25519Field.Copy(zs, off, z, 0); - X25519Field.Mul(u, z, u); + off -= X25519Field.Size; + X25519Field.Copy(zs, off, z, 0); + X25519Field.Mul(u, z, u); + } } } diff --git a/crypto/src/math/ec/rfc7748/X448.cs b/crypto/src/math/ec/rfc7748/X448.cs index 32a4a9e2a..8ded25a06 100644 --- a/crypto/src/math/ec/rfc7748/X448.cs +++ b/crypto/src/math/ec/rfc7748/X448.cs @@ -58,67 +58,72 @@ namespace Org.BouncyCastle.Math.EC.Rfc7748 X448Field.Mul(z, A, z); } - [MethodImpl(MethodImplOptions.Synchronized)] + // https://stackoverflow.com/questions/2223656/what-does-methodimploptions-synchronized-do + // Not available in lower .net standard versions + //[MethodImpl(MethodImplOptions.Synchronized)] public static void Precompute() { - if (precompBase != null) - return; + lock (typeof(X448)) + { + if (precompBase != null) + return; - precompBase = new uint[X448Field.Size * 446]; + precompBase = new uint[X448Field.Size * 446]; - uint[] xs = precompBase; - uint[] zs = new uint[X448Field.Size * 445]; + uint[] xs = precompBase; + uint[] zs = new uint[X448Field.Size * 445]; - uint[] x = X448Field.Create(); x[0] = 5; - uint[] z = X448Field.Create(); z[0] = 1; + uint[] x = X448Field.Create(); x[0] = 5; + uint[] z = X448Field.Create(); z[0] = 1; - uint[] n = X448Field.Create(); - uint[] d = X448Field.Create(); + uint[] n = X448Field.Create(); + uint[] d = X448Field.Create(); - //X448Field.Apm(x, z, n, d); - X448Field.Add(x, z, n); - X448Field.Sub(x, z, d); + //X448Field.Apm(x, z, n, d); + X448Field.Add(x, z, n); + X448Field.Sub(x, z, d); - uint[] c = X448Field.Create(); X448Field.Copy(d, 0, c, 0); + uint[] c = X448Field.Create(); X448Field.Copy(d, 0, c, 0); - int off = 0; - for (;;) - { - X448Field.Copy(n, 0, xs, off); + int off = 0; + for (; ; ) + { + X448Field.Copy(n, 0, xs, off); - if (off == (X448Field.Size * 445)) - break; + if (off == (X448Field.Size * 445)) + break; - PointDouble(x, z); + PointDouble(x, z); - //X448Field.Apm(x, z, n, d); - X448Field.Add(x, z, n); - X448Field.Sub(x, z, d); - X448Field.Mul(n, c, n); - X448Field.Mul(c, d, c); + //X448Field.Apm(x, z, n, d); + X448Field.Add(x, z, n); + X448Field.Sub(x, z, d); + X448Field.Mul(n, c, n); + X448Field.Mul(c, d, c); - X448Field.Copy(d, 0, zs, off); + X448Field.Copy(d, 0, zs, off); - off += X448Field.Size; - } + off += X448Field.Size; + } - uint[] u = X448Field.Create(); - X448Field.Inv(c, u); + uint[] u = X448Field.Create(); + X448Field.Inv(c, u); - for (;;) - { - X448Field.Copy(xs, off, x, 0); + for (; ; ) + { + X448Field.Copy(xs, off, x, 0); - X448Field.Mul(x, u, x); - //X448Field.Normalize(x); - X448Field.Copy(x, 0, precompBase, off); + X448Field.Mul(x, u, x); + //X448Field.Normalize(x); + X448Field.Copy(x, 0, precompBase, off); - if (off == 0) - break; + if (off == 0) + break; - off -= X448Field.Size; - X448Field.Copy(zs, off, z, 0); - X448Field.Mul(u, z, u); + off -= X448Field.Size; + X448Field.Copy(zs, off, z, 0); + X448Field.Mul(u, z, u); + } } } |