示例#1
0
        public GarlicMessage(I2NPHeader header, BufRef reader)
        {
            var start = new BufRef(reader);

            UpdateCachedFields(reader);
            SetBuffer(start, reader);
        }
示例#2
0
        public DeliveryStatusMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(12);
            SetBuffer(start, reader);
        }
示例#3
0
        public I2PLease(BufRef reader)
        {
            TunnelGw = new I2PIdentHash(reader);
            TunnelId = new I2PTunnelId(reader);

            EndDate = new I2PDate(reader);
        }
示例#4
0
        public DatabaseLookupMessage(I2NPHeader header, BufRef reader)
        {
            var start = new BufRef(reader);

            UpdateCachedFields(reader);
            SetBuffer(start, reader);
        }
示例#5
0
        public TunnelGatewayMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(6 + reader.PeekFlip16(4));
            SetBuffer(start, reader);
        }
示例#6
0
        public TunnelDataMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(4 + DataLength);
            SetBuffer(start, reader);
        }
示例#7
0
 public I2PRouterAddress(BufRef buf)
 {
     Cost           = buf.Read8();
     Expiration     = new I2PDate(buf);
     TransportStyle = new I2PString(buf);
     Options        = new I2PMapping(buf);
 }
示例#8
0
        public I2PRouterInfo(BufRef reader, bool verifysig)
        {
            var startview = new BufRef(reader);

            Identity      = new I2PRouterIdentity(reader);
            PublishedDate = new I2PDate(reader);

            int addrcount = reader.Read8();
            var addresses = new List <I2PRouterAddress>();

            for (int i = 0; i < addrcount; ++i)
            {
                addresses.Add(new I2PRouterAddress(reader));
            }
            Adresses = addresses.ToArray();

            reader.Seek(reader.Read8() * 32);   // peer_size. Unused.

            Options = new I2PMapping(reader);
            var payloadend = new BufRef(reader);

            Data      = new BufLen(startview, 0, reader - startview);
            Signature = new I2PSignature(reader, Identity.Certificate);

            if (verifysig)
            {
                var versig = VerifySignature();
                if (!versig)
                {
                    throw new InvalidOperationException("I2PRouterInfo signature check failed");
                }
            }
        }
示例#9
0
        public DataMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek((int)reader.ReadFlip32());
            SetBuffer(start, reader);
        }
示例#10
0
        public void Read(BufRef reader)
        {
            // magic number and zero byte 6
            var magic = reader.ReadBufLen(6);

            _ = reader.Read8();
            var magicstr = magic.ToEncoding(Encoding.UTF8);

            if (magicstr != SU3_MAGIC_NUMBER)
            {
                throw new ArgumentException("Not SU3 data.");
            }

            // su3 file format version
            FileVersion = reader.Read8();

            SignatureType   = reader.ReadFlip16();
            SignatureLength = reader.ReadFlip16();
            _              = reader.Read8();
            VersionLength  = reader.Read8();
            _              = reader.Read8();
            SignerIdLength = reader.Read8();
            ContentLength  = reader.ReadFlip64();
            _              = reader.Read8();
            FileType       = (SU3FileTypes)reader.Read8();
            _              = reader.Read8();
            ContentType    = (SU3ContentTypes)reader.Read8();
            reader.Seek(12);
            Version  = reader.ReadBufLen(VersionLength);
            SignerID = reader.ReadBufLen(SignerIdLength)
                       .ToEncoding(Encoding.UTF8);
        }
示例#11
0
 public I2PSigningPrivateKey(BufRef reader, I2PCertificate cert) : base(reader, cert)
 {
     if (cert.SignatureType == SigningKeyTypes.EdDSA_SHA512_Ed25519)
     {
         ExpandedPrivateKey = Chaos.NaCl.Ed25519.ExpandedPrivateKeyFromSeed(ToByteArray());
     }
 }
示例#12
0
        public I2PString(BufRef buf)
        {
            var len = buf.Read8();

            Str = System.Text.Encoding.UTF8.GetString(buf.BaseArray, buf.BaseArrayOffset, len);
            buf.Seek(len);
        }
示例#13
0
        public DatabaseStoreMessage(BufRef reader)
        {
            var start = new BufRef(reader);

            UpdateCachedFields(reader);
            SetBuffer(start, reader);
        }
 public override void Append(BufRef writer)
 {
     writer.Write8((byte)(0x80 | (FragmentNumber << 1) | (LastFragment ? 0x01 : 0x00)));
     writer.Write32(SourceMessage.Header.MessageId);
     writer.WriteFlip16((ushort)SourceMessageData.Length);
     writer.Write(SourceMessageData);
 }
示例#15
0
        void UpdateCachedFields(BufRef reader)
        {
            CachedKey        = new I2PIdentHash(reader);
            CachedFrom       = new I2PIdentHash(reader);
            CachedLookupType = (LookupTypes)reader.Read8();
            if (((byte)CachedLookupType & 0x01) != 0)
            {
                CachedTunnelId = new I2PTunnelId(reader);
            }

            var excludecount = reader.ReadFlip16();

            for (int i = 0; i < excludecount; ++i)
            {
                CachedExcludeList.Add(new DatabaseSearchReplyMessage(reader));
            }

            if (((byte)CachedLookupType & 0x02) != 0)
            {
                CachedReplyKey = new I2PSessionKey(reader);

                var tagcount = reader.Read8();
                CachedTags.Add(new I2PSessionTag(reader));
            }
        }
示例#16
0
 public I2PDestinationInfo(BufRef reader)
 {
     Certificate       = new I2PCertificate(reader);
     PrivateKey        = new I2PPrivateKey(reader, Certificate);
     PublicKey         = new I2PPublicKey(reader, Certificate);
     PrivateSigningKey = new I2PSigningPrivateKey(reader, Certificate);
     PublicSigningKey  = new I2PSigningPublicKey(reader, Certificate);
 }
示例#17
0
            public I2NPHeader5(BufRef reader)
                : base(reader)
            {
                MessageRef = I2NPUtil.GetMessage(this, reader);
#if DEBUG
                DebugCheckMessageCreation(MessageRef);
#endif
            }
示例#18
0
            public I2NPHeader16(BufRef reader, I2PTunnelId fromtunnel)
                : base(reader, fromtunnel)
            {
                MessageRef = I2NPUtil.GetMessage(this, reader);
#if DEBUG
                DebugCheckMessageCreation(MessageRef);
#endif
            }
示例#19
0
        public GarlicMessage(BufRef reader)
        {
            var start = new BufRef(reader);
            var len   = (int)reader.PeekFlip32(0);

            reader.Seek(len + 4);
            SetBuffer(start, reader);
        }
示例#20
0
 public GarlicClove(BufRef reader)
 {
     Delivery   = GarlicCloveDelivery.CreateGarlicCloveDelivery(reader);
     Message    = I2NPMessage.ReadHeader16(reader).Message;
     CloveId    = reader.Read32();
     Expiration = new I2PDate(reader);
     reader.Seek(3);   // Cert
 }
示例#21
0
        public I2PLease(BufRef reader)
        {
            TunnelGw = new I2PIdentHash(reader);
            TunnelId = new I2PTunnelId(reader);

            EndDate = new I2PDate(reader);
            //DebugUtils.Log( "EndDate: " + EndDate.ToString() );
        }
示例#22
0
 public PeerTest(BufRef reader)
 {
     TestNonce       = reader.ReadBufLen(4);
     AliceIPAddrSize = reader.ReadBufLen(1);
     AliceIPAddr     = reader.ReadBufLen(AliceIPAddrSize[0]);
     AlicePort       = reader.ReadBufLen(2);
     IntroKey        = reader.ReadBufLen(32);
 }
示例#23
0
 public void WriteTo(BufRef writer)
 {
     writer.Write(TestNonce);
     writer.Write(AliceIPAddrSize);
     writer.Write(AliceIPAddr);
     writer.Write(AlicePort);
     writer.Write(IntroKey);
 }
示例#24
0
 public RelayIntro(BufRef reader)
 {
     AliceIpSize   = reader.ReadBufLen(1);
     AliceIpNumber = reader.ReadBufLen(AliceIpSize.Peek8(0));
     AlicePort     = reader.ReadBufLen(2);
     ChallengeSize = reader.ReadBufLen(1);
     Challenge     = reader.ReadBufLen(ChallengeSize.Peek8(0));
 }
示例#25
0
        public SessionRequest(BufRef reader, I2PCertificate cert)
        {
            Certificate = cert;

            X = reader.ReadBufLen(Certificate.PublicKeyLength);
            var ipsize = reader.Read8();

            Address = reader.ReadBufLen(ipsize);
        }
示例#26
0
        public TunnelDataMessage(I2NPHeader header, BufRef reader)
        {
            var start = new BufRef(reader);

            reader.Seek(4 + DataLength);
            SetBuffer(start, reader);

            // The message is encrypted at this stage
            //UpdateFirstDeliveryInstructionPosition();
        }
示例#27
0
 public SSUHeader(BufRef writer, MessageTypes msgtype)
 {
     MAC = writer.ReadBufLen(16);
     IV  = writer.ReadBufLen(16);
     IV.Randomize();
     FlagBuf      = writer.ReadBufLen(1);
     MessageType  = msgtype;
     TimeStampBuf = writer.ReadBufLen(4);
     TimeStamp    = SSUHost.SSUTime(DateTime.UtcNow);
 }
示例#28
0
 public RelayResponse(BufRef reader)
 {
     CharlieIpSize   = reader.ReadBufLen(1);
     CharlieIpNumber = reader.ReadBufLen(CharlieIpSize.Peek8(0));
     CharliePort     = reader.ReadBufLen(2);
     AliceIpSize     = reader.ReadBufLen(1);
     AliceIpNumber   = reader.ReadBufLen(AliceIpSize.Peek8(0));
     AlicePort       = reader.ReadBufLen(2);
     Nonce           = reader.ReadBufLen(4);
 }
示例#29
0
        public RequestVariableLeaseSetMessage(BufRef reader)
            : base(ProtocolMessageType.RequestVarLS)
        {
            var leases = reader.ReadFlip16();

            for (int i = 0; i < leases; ++i)
            {
                Leases.Add(new I2PLease(reader));
            }
        }
示例#30
0
 public RequestLeaseSetMessage( BufRef reader )
     : base(ProtocolMessageType.RequestLS)
 {
     SessionId = reader.ReadFlip16();
     var leases = reader.Read8();
     for ( int i = 0; i < leases; ++i )
     {
         Leases.Add( new I2PLease( reader ) );
     }
 }