private static byte[] DEREncodeSignature(byte[] signature)
{
// This is the largest we can encode, adds 8 more bytes
if (signature.Length > 65526 || (signature.Length%2) != 0) {
throw new Exception("Invalid signature length");
}
int vectorLength = (signature.Length/2 < 128) ? 2+(signature.Length/2) :
(signature.Length/2 < 256) ? 3+(signature.Length/2) :
4+(signature.Length/2);
byte[] encoded = new byte[2*vectorLength];
encoded[0] = 0x02;
DEREncodeVector(signature, 0, signature.Length/2, encoded, 1);
encoded[vectorLength] = 0x02;
DEREncodeVector(signature, signature.Length/2, signature.Length/2, encoded, vectorLength+1);
int retLength = (encoded.Length < 128) ? 2+encoded.Length :
(encoded.Length < 256) ? 3+encoded.Length :
4+encoded.Length;
byte[] ret = new byte[retLength];
ret[0] = 0x30;
DEREncodeVector(encoded, 0, encoded.Length, ret, 1);
return ret;
}