summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2018-04-17 14:26:27 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2018-04-17 14:26:27 +0700
commit87d10a3c94287804e8df25be360b0e612dc343d7 (patch)
tree69055968d7944f879098d42dc58ee389f6d973e8
parentUpdate TSP digest tables from bc-java (diff)
downloadBouncyCastle.NET-ed25519-87d10a3c94287804e8df25be360b0e612dc343d7.tar.xz
SCrypt: N parameters must be a power of 2
-rw-r--r--crypto/src/crypto/generators/SCrypt.cs16
1 files changed, 12 insertions, 4 deletions
diff --git a/crypto/src/crypto/generators/SCrypt.cs b/crypto/src/crypto/generators/SCrypt.cs

index 64a36df63..4d15bb3d7 100644 --- a/crypto/src/crypto/generators/SCrypt.cs +++ b/crypto/src/crypto/generators/SCrypt.cs
@@ -1,5 +1,5 @@ using System; -using System.Threading; +using System.Diagnostics; using Org.BouncyCastle.Crypto.Digests; using Org.BouncyCastle.Crypto.Engines; @@ -31,8 +31,8 @@ namespace Org.BouncyCastle.Crypto.Generators throw new ArgumentNullException("Passphrase P must be provided."); if (S == null) throw new ArgumentNullException("Salt S must be provided."); - if (N <= 1) - throw new ArgumentException("Cost parameter N must be > 1."); + if (N <= 1 || !IsPowerOf2(N)) + throw new ArgumentException("Cost parameter N must be > 1 and a power of 2."); // Only value of r that cost (as an int) could be exceeded for is 1 if (r == 1 && N >= 65536) throw new ArgumentException("Cost parameter N must be > 1 and < 65536."); @@ -170,5 +170,13 @@ namespace Org.BouncyCastle.Crypto.Generators Clear(array); } } - } + + // note: we know X is non-zero + private static bool IsPowerOf2(int x) + { + Debug.Assert(x != 0); + + return (x & (x - 1)) == 0; + } + } }