예제 #1
0
        public static void Unpack(this Unpacker unpacker, bool isPrivateKey, out Key key)
        {
            var keyType = (KeyTypes)unpacker.UnpackByte();

            unpacker.Position--;
            var keySize = Key.GetKeyBytes(keyType, isPrivateKey, true);

            unpacker.Unpack(out byte[] keyData, keySize);

            key = Key.Restore(new ArraySegment <byte>(keyData));
        }
예제 #2
0
        public static void Unpack(this Unpacker unpacker, out Hash hash)
        {
            var hashType = (HashTypes)unpacker.UnpackByte();

            unpacker.Position--;

            var hashSize = Hash.GetHashBytes(hashType, true);

            unpacker.Unpack(out byte[] hashData, hashSize);

            hash = Hash.Restore(new ArraySegment <byte>(hashData));
        }
예제 #3
0
        public static void Unpack(this Unpacker unpacker, out Signature signature)
        {
            var keyType = (KeyTypes)unpacker.UnpackByte();

            unpacker.Position--;

            var signatureSize = Signature.GetSignatureBytes(keyType, true);

            unpacker.Unpack(out byte[] sigData, signatureSize);

            signature = Signature.Restore(new ArraySegment <byte>(sigData));
        }
예제 #4
0
        public static (Hash, Signature) GetHashAndSignature(this Unpacker unpacker, int dataOffset, int dataSize)
        {
            var signatureKeyType = (KeyTypes)unpacker.UnpackByte();

            unpacker.Position--;

            var signatureSize = Signature.GetSignatureBytes(signatureKeyType);

            unpacker.Unpack(out byte[] signatureData, signatureSize);
            var position  = unpacker.Position;
            var signature = Signature.Restore(new ArraySegment <byte>(signatureData));

            var partialStream = new PartialStream(unpacker.Stream, dataOffset, dataSize);
            var signatureHash = Hash.Generate(signature.DataHashType, partialStream);

            unpacker.Position = position;
            return(signatureHash, signature);
        }