1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Signers
- {
- public class PlainDsaEncoding
- : IDsaEncoding
- {
- public static readonly PlainDsaEncoding Instance = new PlainDsaEncoding();
- public virtual BigInteger[] Decode(BigInteger n, byte[] encoding)
- {
- int valueLength = BigIntegers.GetUnsignedByteLength(n);
- if (encoding.Length != valueLength * 2)
- throw new ArgumentException("Encoding has incorrect length", "encoding");
- return new BigInteger[] {
- DecodeValue(n, encoding, 0, valueLength),
- DecodeValue(n, encoding, valueLength, valueLength),
- };
- }
- public virtual byte[] Encode(BigInteger n, BigInteger r, BigInteger s)
- {
- int valueLength = BigIntegers.GetUnsignedByteLength(n);
- byte[] result = new byte[valueLength * 2];
- EncodeValue(n, r, result, 0, valueLength);
- EncodeValue(n, s, result, valueLength, valueLength);
- return result;
- }
- protected virtual BigInteger CheckValue(BigInteger n, BigInteger x)
- {
- if (x.SignValue < 0 || x.CompareTo(n) >= 0)
- throw new ArgumentException("Value out of range", "x");
- return x;
- }
- protected virtual BigInteger DecodeValue(BigInteger n, byte[] buf, int off, int len)
- {
- return CheckValue(n, new BigInteger(1, buf, off, len));
- }
- protected virtual void EncodeValue(BigInteger n, BigInteger x, byte[] buf, int off, int len)
- {
- byte[] bs = CheckValue(n, x).ToByteArrayUnsigned();
- int bsOff = System.Math.Max(0, bs.Length - len);
- int bsLen = bs.Length - bsOff;
- int pos = len - bsLen;
- Arrays.Fill(buf, off, off + pos, 0);
- Array.Copy(bs, bsOff, buf, off + pos, bsLen);
- }
- }
- }
- #pragma warning restore
- #endif
|