public override int Encode() { int len = 0; // first need to encode keys into bitstring keys.Encode(); publicKey.value = keys.derValue; len += algorithm.Encode(); len += publicKey.Encode(); byte[] lengthBytes = EncodeLength(len); derValue = new byte[1 + lengthBytes.Length + len]; derValue[0] = 0x30; // sequence int d = 1; Array.Copy(lengthBytes, 0, derValue, d, lengthBytes.Length); d += lengthBytes.Length; Array.Copy(algorithm.derValue, 0, derValue, d, algorithm.derValue.Length); d += algorithm.derValue.Length; Array.Copy(publicKey.derValue, 0, derValue, d, publicKey.derValue.Length); PrependContextTag(); return(derValue.Length); }