Exemple #1
0
        public IEnumerable <AesEGBuildRequestRecord> CreateTunnelBuildReplyRecords(
            BuildResponseRecord.RequestResponse response)
        {
            var newrecords = new List <AesEGBuildRequestRecord>(
                Records.Select(r => r.Clone())
                );

            var tmp = new TunnelBuildRequestDecrypt(newrecords, Me, Key);

            tmp.ToMeField.Data.Randomize();
            var responserec = new BuildResponseRecord(tmp.ToMeField.Data)
            {
                Reply = response
            };

            responserec.UpdateHash();

            var cipher = new CbcBlockCipher(new AesEngine());

            cipher.Init(true, Decrypted.ReplyKeyBuf.ToParametersWithIV(Decrypted.ReplyIV));

            foreach (var one in newrecords)
            {
                cipher.Reset();
                one.Process(cipher);
            }

            return(newrecords);
        }
        private static I2NPMessage CreateReplyMessage(
            II2NPHeader msg,
            TunnelBuildRequestDecrypt decrypt,
            BuildResponseRecord.RequestResponse response)
        {
            var newrecords = decrypt.CreateTunnelBuildReplyRecords(response);

            if (msg.MessageType == I2NPMessage.MessageTypes.VariableTunnelBuild)
            {
                return(new VariableTunnelBuildMessage(newrecords));
            }
            else
            {
                return(new TunnelBuildMessage(newrecords));
            }
        }