示例#1
0
 public Connection()
 {
     salsa = new Salsa20();
     salsa.KeySize = 128;
     salsa.GenerateKey();
     salsa.GenerateIV();
     salsaEncryptor = salsa.CreateEncryptor();
 }
示例#2
0
 public void Engage()
 {
     try
     {
         if (Server)
         {
             // Send my salsa key
             byte[] my_salsa = new byte[24];
             Array.Copy(salsa.Key, 0, my_salsa, 0, 16);
             Array.Copy(salsa.IV, 0, my_salsa, 16, 8);
             Client.Send(my_salsa);
             log("Sent MySalsa.");
             // Wait for client key
             byte[] remote_salsa = ReadNextBlock();
             Salsa20 salsa2 = new Salsa20();
             salsa2.Key = new byte[16];
             salsa2.IV = new byte[8];
             Array.Copy(remote_salsa, 0, salsa2.Key, 0, 16);
             Array.Copy(remote_salsa, 16, salsa2.IV, 0, 8);
             salsaDecryptor = salsa2.CreateDecryptor();
             log("Received RemoteSalsa.");
             onConnect();
         }
         else
         {
             // Wait for server salsa
             byte[] remote_salsa = ReadNextBlock();
             Salsa20 salsa2 = new Salsa20();
             salsa2.Key = new byte[16];
             salsa2.IV = new byte[8];
             Array.Copy(remote_salsa, 0, salsa2.Key, 0, 16);
             Array.Copy(remote_salsa, 16, salsa2.IV, 0, 8);
             salsaDecryptor = salsa2.CreateDecryptor();
             log("Received RemoteSalsa.");
             // Send my salsa encrypted
             byte[] my_salsa = new byte[24];
             Array.Copy(salsa.Key, 0, my_salsa, 0, 16);
             Array.Copy(salsa.IV, 0, my_salsa, 16, 8);
             Client.Send(my_salsa);
             log("Sent MySalsa.");
             onConnect();
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("ERROR during handshake: " + e.Message + "\n" + e.StackTrace);
     }
 }