Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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));
 }
Ejemplo n.º 3
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);
 }
Ejemplo n.º 4
0
        public SessionRequest(BufRef reader, I2PCertificate cert)
        {
            Certificate = cert;

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

            Address = reader.ReadBufLen(ipsize);
        }
Ejemplo n.º 5
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);
 }
Ejemplo n.º 6
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);
 }
Ejemplo n.º 7
0
        public I2PSessionKey(BufRef buf)
        {
            if (buf is null)
            {
                throw new ArgumentException("SessionKey must be 32 bytes");
            }

            Key = buf.ReadBufLen(32);

            if (Key.Length != 32)
            {
                throw new ArgumentException("SessionKey must be 32 bytes");
            }
        }
Ejemplo n.º 8
0
        public SessionCreated(BufRef reader, I2PCertificate cert)
        {
            Certificate = cert;

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

            Address    = reader.ReadBufLen(ipsize);
            Port       = reader.ReadBufLen(2);
            RelayTag   = reader.ReadBufLen(4);
            SignOnTime = reader.ReadBufLen(4);
            var paddedsignlen = cert.SignatureLength + BufUtils.Get16BytePadding(cert.SignatureLength);

            SignatureEncrBuf = reader.ReadBufLen(paddedsignlen);
            Signature        = new BufLen(SignatureEncrBuf, 0, cert.SignatureLength);
        }
Ejemplo n.º 9
0
        public SSUDataMessage(BufRef reader, DataDefragmenter fragments)
        {
            var dataflags = (DataMessageFlags)reader.Read8();

#if LOG_ALL_TRANSPORT
            Logging.LogTransport("SSU DataMessage rececived flag: " + dataflags.ToString());
#endif
            var explicitacks  = (dataflags & DataMessageFlags.ExplicitAcks) != 0;
            var acksbitfields = (dataflags & DataMessageFlags.BitfieldAcks) != 0;
            ECN = (dataflags & DataMessageFlags.ECN) != 0;
            var extdata = (dataflags & DataMessageFlags.ExtendedDataIncluded) != 0;
            if (explicitacks)
            {
                ExplicitAcks = new List <uint>();
                var acks = reader.Read8();
                for (int i = 0; i < acks; ++i)
                {
                    ExplicitAcks.Add(reader.Read32());
                }
            }
            if (acksbitfields)
            {
                var bitfields = reader.Read8();
                AckBitfields = new List <KeyValuePair <uint, List <byte> > >(bitfields);
                for (int i = 0; i < bitfields; ++i)
                {
                    var  msgid = reader.Read32();
                    var  bfs   = new List <byte>(10);
                    byte bf;
                    while (true)
                    {
                        bf = reader.Read8();
                        bfs.Add((byte)(bf & 0x7f));
                        if ((bf & 0x80) == 0)
                        {
                            break;
                        }
                    }
                    AckBitfields.Add(new KeyValuePair <uint, List <byte> >(msgid, bfs));
                }
            }
            if (extdata)
            {
                var datasize = reader.Read8();
                ExtData = reader.ReadBufLen(datasize);
            }

            var fragcount = reader.Read8();
            for (int i = 0; i < fragcount; ++i)
            {
                var frag       = new DataFragment(reader);
                var newmessage = fragments.Add(frag);

                if (newmessage != null)
                {
                    if (NewMessages == null)
                    {
                        NewMessages = new List <RebuildI2NPMessage>();
                    }
                    NewMessages.Add(newmessage);
                }
            }
        }
Ejemplo n.º 10
0
 public I2PIdentHash(BufRef buf) : this(buf.ReadBufLen(32))
 {
 }
Ejemplo n.º 11
0
        public I2PSignature(BufRef buf, I2PCertificate cert)
        {
            Certificate = cert;

            Sig = buf.ReadBufLen(cert.SignatureLength);
        }
Ejemplo n.º 12
0
 public BuildResponseRecord(BufRef buf)
 {
     Data = buf.ReadBufLen(Length);
 }
Ejemplo n.º 13
0
 // Parse received
 public DataFragment(BufRef reader)
 {
     Buf  = reader.ReadBufLen(reader.PeekFlip16(5) + 7);
     Data = new BufLen(Buf, 7);
 }
Ejemplo n.º 14
0
 public I2PSessionTag(BufRef buf)
 {
     Value = buf.ReadBufLen(TagLength);
 }
Ejemplo n.º 15
0
 public EGGarlic(BufRef reader)
 {
     Data = reader.ReadBufLen((int)reader.PeekFlip32(0) + 4);
 }
Ejemplo n.º 16
0
 protected I2NPHeader(BufRef reader, I2PTunnelId tunnel)
 {
     Buf        = reader.ReadBufLen(Length);
     FromTunnel = tunnel;
 }
Ejemplo n.º 17
0
 protected I2NPHeader(BufRef reader)
 {
     Buf = reader.ReadBufLen(Length);
 }
Ejemplo n.º 18
0
 public I2PSigningPublicKey(BufRef buf, I2PCertificate cert) : base(cert)
 {
     Key = buf.ReadBufLen(KeySizeBytes);
 }
Ejemplo n.º 19
0
 public I2PCertificate(BufRef buf)
 {
     Data = new BufLen(buf, 0, 3);
     Data = buf.ReadBufLen(CertLength);
 }
Ejemplo n.º 20
0
 public BuildRequestRecord(BufRef buf)
 {
     Data        = buf.ReadBufLen(Length);
     ReducedHash = CreateReducedHash();
 }
Ejemplo n.º 21
0
 public I2PKeyType(BufRef buf, I2PCertificate cert)
 {
     Certificate = cert;
     Key         = buf.ReadBufLen(KeySizeBytes);
 }
Ejemplo n.º 22
0
        public I2PKeysAndCert(BufRef reader)
        {
            var cert = new I2PCertificate(new BufRef(reader, 256 + 128));

            Data = reader.ReadBufLen(RecordSize(cert));
        }
Ejemplo n.º 23
0
 public I2PIdentHash(BufRef buf)
 {
     Hash       = buf.ReadBufLen(32);
     CachedHash = Hash.GetHashCode();
 }
Ejemplo n.º 24
0
 public BuildRequestRecord(BufRef buf)
 {
     Data = buf.ReadBufLen(Length);
 }
Ejemplo n.º 25
0
 public I2PSessionKey(BufRef buf)
 {
     Key = buf.ReadBufLen(32);
 }