summary refs log tree commit diff
path: root/crypto/src/asn1/DerBMPString.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/asn1/DerBMPString.cs')
-rw-r--r--crypto/src/asn1/DerBMPString.cs28
1 files changed, 20 insertions, 8 deletions
diff --git a/crypto/src/asn1/DerBMPString.cs b/crypto/src/asn1/DerBMPString.cs

index 33d950ff8..061900b9c 100644 --- a/crypto/src/asn1/DerBMPString.cs +++ b/crypto/src/asn1/DerBMPString.cs
@@ -55,32 +55,44 @@ namespace Org.BouncyCastle.Asn1 /** * basic constructor - byte encoded string. */ - public DerBmpString( - byte[] str) + [Obsolete("Will become internal")] + public DerBmpString(byte[] str) { if (str == null) throw new ArgumentNullException("str"); - char[] cs = new char[str.Length / 2]; + int byteLen = str.Length; + if (0 != (byteLen & 1)) + throw new ArgumentException("malformed BMPString encoding encountered", "str"); - for (int i = 0; i != cs.Length; i++) + int charLen = byteLen / 2; + char[] cs = new char[charLen]; + + for (int i = 0; i != charLen; i++) { cs[i] = (char)((str[2 * i] << 8) | (str[2 * i + 1] & 0xff)); } - this.str = new string(cs); + this.str = new string(cs); + } + + internal DerBmpString(char[] str) + { + if (str == null) + throw new ArgumentNullException("str"); + + this.str = new string(str); } /** * basic constructor */ - public DerBmpString( - string str) + public DerBmpString(string str) { if (str == null) throw new ArgumentNullException("str"); - this.str = str; + this.str = str; } public override string GetString()