public static SSHData Decode(byte[] Data) {
            string Tag2;

            var DataBuffer = new DataBuffer(Data);
            DataBuffer.Decode(out Tag2);

            if (Tag2 == SSH_RSA.TagID) {
                return new SSH_RSA(DataBuffer);
                }

            if (Tag2 == SSH_DSS.TagID) {
                return new SSH_RSA(DataBuffer);
                }

            return null;
            }
 public SSH_DSS(DataBuffer DataBuffer) {
     DataBuffer.Decode(out P);
     DataBuffer.Decode(out Q);
     DataBuffer.Decode(out G);
     DataBuffer.Decode(out Y);
     }
 public SSH_RSA(DataBuffer DataBuffer) {
     DataBuffer.Decode(out Exponent);
     DataBuffer.Decode(out Modulus);
     }
        public override byte[] Encode() {
            var DataBuffer = new DataBuffer();

            DataBuffer.Size(Tag);
            DataBuffer.Size(P);
            DataBuffer.Size(Q);
            DataBuffer.Size(G);
            DataBuffer.Size(Y);

            DataBuffer.Allocate();

            DataBuffer.Encode(Tag);
            DataBuffer.Encode(P);
            DataBuffer.Encode(Q);
            DataBuffer.Encode(G);
            DataBuffer.Encode(Y);

            return DataBuffer.Data;
            }
        public override byte[] Encode() {
            var DataBuffer = new DataBuffer();

            DataBuffer.Size(Tag);
            DataBuffer.Size(Exponent);
            DataBuffer.Size(Modulus);

            DataBuffer.Allocate();

            DataBuffer.Encode(Tag);
            DataBuffer.Encode(Exponent);
            DataBuffer.Encode(Modulus);

            return DataBuffer.Data;
            }