diff --git a/crypto/src/asn1/x9/X962Parameters.cs b/crypto/src/asn1/x9/X962Parameters.cs
index 5b7eaa1de..04a5c9cbe 100644
--- a/crypto/src/asn1/x9/X962Parameters.cs
+++ b/crypto/src/asn1/x9/X962Parameters.cs
@@ -1,3 +1,5 @@
+using System;
+
using Org.BouncyCastle.Asn1;
namespace Org.BouncyCastle.Asn1.X9
@@ -7,6 +9,34 @@ namespace Org.BouncyCastle.Asn1.X9
{
private readonly Asn1Object _params;
+ public static X962Parameters GetInstance(
+ object obj)
+ {
+ if (obj == null || obj is X962Parameters)
+ {
+ return (X962Parameters)obj;
+ }
+
+ if (obj is Asn1Object)
+ {
+ return new X962Parameters((Asn1Object)obj);
+ }
+
+ if (obj is byte[])
+ {
+ try
+ {
+ return new X962Parameters(Asn1Object.FromByteArray((byte[])obj));
+ }
+ catch (Exception e)
+ {
+ throw new ArgumentException("unable to parse encoded data: " + e.Message, e);
+ }
+ }
+
+ throw new ArgumentException("unknown object in getInstance()");
+ }
+
public X962Parameters(
X9ECParameters ecParameters)
{
@@ -30,6 +60,11 @@ namespace Org.BouncyCastle.Asn1.X9
get { return (_params is DerObjectIdentifier); }
}
+ public bool IsImplicitlyCA
+ {
+ get { return (_params is Asn1Null); }
+ }
+
public Asn1Object Parameters
{
get { return _params; }
diff --git a/crypto/src/asn1/x9/X9ECParameters.cs b/crypto/src/asn1/x9/X9ECParameters.cs
index 2b6b14bcb..0fa343768 100644
--- a/crypto/src/asn1/x9/X9ECParameters.cs
+++ b/crypto/src/asn1/x9/X9ECParameters.cs
@@ -20,6 +20,21 @@ namespace Org.BouncyCastle.Asn1.X9
private BigInteger h;
private byte[] seed;
+ public static X9ECParameters GetInstance(Object obj)
+ {
+ if (obj is X9ECParameters)
+ {
+ return (X9ECParameters)obj;
+ }
+
+ if (obj != null)
+ {
+ return new X9ECParameters(Asn1Sequence.GetInstance(obj));
+ }
+
+ return null;
+ }
+
public X9ECParameters(
Asn1Sequence seq)
{
diff --git a/crypto/src/crypto/engines/IesEngine.cs b/crypto/src/crypto/engines/IesEngine.cs
index 9139f3ffc..307cc7a80 100644
--- a/crypto/src/crypto/engines/IesEngine.cs
+++ b/crypto/src/crypto/engines/IesEngine.cs
@@ -98,7 +98,7 @@ namespace Org.BouncyCastle.Crypto.Engines
kdf.Init(kParam);
// Ensure that the length of the input is greater than the MAC in bytes
- if (inLen <= mac.GetMacSize())
+ if (inLen < mac.GetMacSize())
throw new InvalidCipherTextException("Length of input must be greater than the MAC");
inLen -= mac.GetMacSize();
diff --git a/crypto/src/crypto/tls/ServerName.cs b/crypto/src/crypto/tls/ServerName.cs
index 3d1e8f844..d42055b78 100644
--- a/crypto/src/crypto/tls/ServerName.cs
+++ b/crypto/src/crypto/tls/ServerName.cs
@@ -1,5 +1,6 @@
using System;
using System.IO;
+using System.Text;
using Org.BouncyCastle.Utilities;
@@ -51,10 +52,10 @@ namespace Org.BouncyCastle.Crypto.Tls
switch (mNameType)
{
case Tls.NameType.host_name:
- byte[] utf8Encoding = Strings.ToUtf8ByteArray((string)mName);
- if (utf8Encoding.Length < 1)
+ byte[] asciiEncoding = Encoding.ASCII.GetBytes((string)mName);
+ if (asciiEncoding.Length < 1)
throw new TlsFatalAlert(AlertDescription.internal_error);
- TlsUtilities.WriteOpaque16(utf8Encoding, output);
+ TlsUtilities.WriteOpaque16(asciiEncoding, output);
break;
default:
throw new TlsFatalAlert(AlertDescription.internal_error);
@@ -78,10 +79,10 @@ namespace Org.BouncyCastle.Crypto.Tls
{
case Tls.NameType.host_name:
{
- byte[] utf8Encoding = TlsUtilities.ReadOpaque16(input);
- if (utf8Encoding.Length < 1)
+ byte[] asciiEncoding = TlsUtilities.ReadOpaque16(input);
+ if (asciiEncoding.Length < 1)
throw new TlsFatalAlert(AlertDescription.decode_error);
- name = Strings.FromUtf8ByteArray(utf8Encoding);
+ name = Encoding.ASCII.GetString(asciiEncoding);
break;
}
default:
diff --git a/crypto/src/math/BigInteger.cs b/crypto/src/math/BigInteger.cs
index 794f252e8..b35701fb3 100644
--- a/crypto/src/math/BigInteger.cs
+++ b/crypto/src/math/BigInteger.cs
@@ -706,10 +706,9 @@ namespace Org.BouncyCastle.Math
if (CheckProbablePrime(certainty, random, true))
break;
- for (int j = 1; j < magnitude.Length; ++j)
+ for (int j = 1; j < (magnitude.Length - 1); ++j)
{
- this.magnitude[j] ^= (random.Next() << 1);
- this.mQuote = 0;
+ this.magnitude[j] ^= random.Next();
if (CheckProbablePrime(certainty, random, true))
return;
diff --git a/crypto/test/src/asn1/test/BitStringTest.cs b/crypto/test/src/asn1/test/BitStringTest.cs
index 05be45941..f2ae3de97 100644
--- a/crypto/test/src/asn1/test/BitStringTest.cs
+++ b/crypto/test/src/asn1/test/BitStringTest.cs
@@ -19,8 +19,12 @@ namespace Org.BouncyCastle.Asn1.Tests
// basic construction
DerBitString s1 = new DerBitString(new byte[0], 0);
+ // check GetBytes()
s1.GetBytes();
+ // check encoding/decoding
+ DerBitString derBit = (DerBitString)Asn1Object.FromByteArray(s1.GetEncoded());
+
if (!Arrays.AreEqual(s1.GetEncoded(), Hex.Decode("030100")))
{
Fail("zero encoding wrong");
|