/// <summary>
        ///     Adds a new sha256Hash signature to this transaction by revealing preimage.
        /// </summary>
        /// <param name="preimage">the sha256 hash of preimage should be equal to signer hash</param>
        public void Sign(byte[] preimage)
        {
            Signature signature = new Signature
            {
                InnerValue = preimage ?? throw new ArgumentNullException(nameof(preimage), "preimage cannot be null")
            };

            byte[] hash = Util.Hash(preimage);

            int length = hash.Length;

            byte[] signatureHintBytes = hash.Skip(length - 4).Take(4).ToArray();

            SignatureHint signatureHint = new SignatureHint {
                InnerValue = signatureHintBytes
            };

            DecoratedSignature decoratedSignature = new DecoratedSignature
            {
                Hint      = signatureHint,
                Signature = signature
            };

            Signatures.Add(decoratedSignature);
        }
 public static DecoratedSignature Decode(IByteReader stream)
 {
     DecoratedSignature decodedDecoratedSignature = new DecoratedSignature();
     decodedDecoratedSignature.Hint = SignatureHint.Decode(stream);
     decodedDecoratedSignature.Signature = Signature.Decode(stream);
     return decodedDecoratedSignature;
 }
Example #3
0
        public static DecoratedSignature Decode(XdrDataInputStream stream)
        {
            DecoratedSignature decodedDecoratedSignature = new DecoratedSignature();

            decodedDecoratedSignature.Hint      = SignatureHint.Decode(stream);
            decodedDecoratedSignature.Signature = Signature.Decode(stream);
            return(decodedDecoratedSignature);
        }
Example #4
0
        public static DecoratedSignature Decode(IByteReader stream)
        {
            DecoratedSignature decodedDecoratedSignature = new DecoratedSignature();

            decodedDecoratedSignature.Hint      = SignatureHint.Decode(stream);
            decodedDecoratedSignature.Signature = Signature.Decode(stream);
            return(decodedDecoratedSignature);
        }
        public static void Encode(XdrDataOutputStream stream, TransactionV0Envelope encodedTransactionV0Envelope)
        {
            TransactionV0.Encode(stream, encodedTransactionV0Envelope.Tx);
            int signaturessize = encodedTransactionV0Envelope.Signatures.Length;

            stream.WriteInt(signaturessize);
            for (int i = 0; i < signaturessize; i++)
            {
                DecoratedSignature.Encode(stream, encodedTransactionV0Envelope.Signatures[i]);
            }
        }
Example #6
0
        public static void Encode(IByteWriter stream, TransactionEnvelope encodedTransactionEnvelope)
        {
            Transaction.Encode(stream, encodedTransactionEnvelope.Tx);
            int signaturessize = encodedTransactionEnvelope.Signatures.Length;

            XdrEncoding.EncodeInt32(signaturessize, stream);
            for (int i = 0; i < signaturessize; i++)
            {
                DecoratedSignature.Encode(stream, encodedTransactionEnvelope.Signatures[i]);
            }
        }
        public static TransactionV0Envelope Decode(XdrDataInputStream stream)
        {
            TransactionV0Envelope decodedTransactionV0Envelope = new TransactionV0Envelope();

            decodedTransactionV0Envelope.Tx = TransactionV0.Decode(stream);
            int signaturessize = stream.ReadInt();

            decodedTransactionV0Envelope.Signatures = new DecoratedSignature[signaturessize];
            for (int i = 0; i < signaturessize; i++)
            {
                decodedTransactionV0Envelope.Signatures[i] = DecoratedSignature.Decode(stream);
            }
            return(decodedTransactionV0Envelope);
        }
Example #8
0
        public static TransactionEnvelope Decode(IByteReader stream)
        {
            TransactionEnvelope decodedTransactionEnvelope = new TransactionEnvelope();

            decodedTransactionEnvelope.Tx = Transaction.Decode(stream);
            int signaturessize = XdrEncoding.DecodeInt32(stream);

            decodedTransactionEnvelope.Signatures = new DecoratedSignature[signaturessize];
            for (int i = 0; i < signaturessize; i++)
            {
                decodedTransactionEnvelope.Signatures[i] = DecoratedSignature.Decode(stream);
            }
            return(decodedTransactionEnvelope);
        }
Example #9
0
        private string CreateEnvelopeXdrBase64(StellarBase.Generated.Transaction tx, DecoratedSignature signature)
        {
            var txEnvelope = new TransactionEnvelope
            {
                Tx         = tx,
                Signatures = new[] { signature }
            };

            var writer = new ByteWriter();

            TransactionEnvelope.Encode(writer, txEnvelope);
            var data = writer.ToArray();

            return(Convert.ToBase64String(data));
        }
Example #10
0
 public static void Encode(XdrDataOutputStream stream, DecoratedSignature encodedDecoratedSignature)
 {
     SignatureHint.Encode(stream, encodedDecoratedSignature.Hint);
     Signature.Encode(stream, encodedDecoratedSignature.Signature);
 }
Example #11
0
 public static void Encode(IByteWriter stream, DecoratedSignature encodedDecoratedSignature)
 {
     SignatureHint.Encode(stream, encodedDecoratedSignature.Hint);
     Signature.Encode(stream, encodedDecoratedSignature.Signature);
 }
 public static void Encode(IByteWriter stream, DecoratedSignature encodedDecoratedSignature)
 {
     SignatureHint.Encode(stream, encodedDecoratedSignature.Hint);
     Signature.Encode(stream, encodedDecoratedSignature.Signature);
 }