packages feed

Dust 2.0 → 2.1

raw patch · 3 files changed

+69/−19 lines, 3 filesdep ~cipher-aes

Dependency ranges changed: cipher-aes

Files

Dust.cabal view
@@ -1,5 +1,5 @@ Name:                Dust-Version:             2.0+Version:             2.1 Description:         Dust is a polymorphic protocol engine designed to circumvent Internet filtering based on protocol identification Synopsis:            Polymorphic protocol engine Category:            Network@@ -26,26 +26,26 @@     containers,     directory,     split,-    cipher-aes+    cipher-aes == 0.1.8   Extensions:     ForeignFunctionInterface    Exposed-modules:-      Dust.Network.TcpServer-      Dust.Network.UdpServer-      Dust.Network.TcpClient-      Dust.Network.Util-      Dust.Model.PacketLength-      Dust.Model.Huffman-      Dust.Model.Content       Dust.Core.Invite-      Dust.Model.Observations-      Dust.Model.Stats       Dust.Crypto.Keys       Dust.Crypto.ECDSA       Dust.Crypto.ECDH       Dust.Crypto.DustCipher-+      Dust.Model.PacketLength+      Dust.Model.Huffman+      Dust.Model.Content+      Dust.Model.TrafficModel+      Dust.Model.Observations+      Dust.Model.Stats+      Dust.Network.TcpServer+      Dust.Network.UdpServer+      Dust.Network.TcpClient+      Dust.Network.Util  --  if os(windows) --    build-depends: Win32@@ -58,15 +58,15 @@     Include-Dirs: lib     extra-libraries: crypto     Exposed-modules:-      Dust.Crypto.Curve25519-      Dust.Crypto.Ed25519       Dust.Core.DustPacket       Dust.Core.CryptoProtocol       Dust.Core.WireProtocol       Dust.Core.WireProtocolHandler-      Dust.Network.DustServer+      Dust.Crypto.Curve25519+      Dust.Crypto.Ed25519       Dust.Model.Port       Dust.Model.Packet+      Dust.Network.DustServer  test-suite crypto   type: exitcode-stdio-1.0
Dust/Crypto/DustCipher.hs view
@@ -31,13 +31,13 @@  encrypt :: EncryptionKey -> IV -> Plaintext -> Ciphertext encrypt (EncryptionKey keyBytes) (IV iv) (Plaintext plaintext) =-  let aesKey = AES.initAES keyBytes-  in Ciphertext $ AES.encryptCTR aesKey iv plaintext+  let aesKey = AES.initKey keyBytes+  in Ciphertext $ AES.encryptCTR aesKey (AES.IV iv) plaintext  decrypt :: EncryptionKey -> IV -> Ciphertext -> Plaintext decrypt (EncryptionKey keyBytes) (IV iv) (Ciphertext ciphertext) =-  let aesKey = AES.initAES keyBytes-  in Plaintext $ AES.decryptCTR aesKey iv ciphertext+  let aesKey = AES.initKey keyBytes+  in Plaintext $ AES.decryptCTR aesKey (AES.IV iv) ciphertext  createIV :: IO (IV) createIV = do
+ Dust/Model/TrafficModel.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE DeriveGeneric, DefaultSignatures #-} -- For automatic generation of cereal put and get++module Dust.Model.TrafficModel+(+    TrafficModel(..),+    TrafficGenerator(..),+    loadModel,+    makeGenerator+)+where++import GHC.Generics+import Data.Serialize+import Data.ByteString (ByteString)+import qualified Data.ByteString as B++import Dust.Model.PacketLength+import qualified Dust.Model.Content as C+import Dust.Model.Port++data TrafficModel = TrafficModel {+    lengths :: PacketLengthModel,+    content :: C.ContentModel,+    ports   :: PortModel+} deriving (Generic)+instance Serialize TrafficModel++data TrafficGenerator = TrafficGenerator {+    generateLength :: IO Int,+    encodeContent  :: (ByteString -> ByteString),+    decodeContent  :: (ByteString -> ByteString),+    generatePort   :: IO Int+}++loadModel :: FilePath -> IO (Either String TrafficModel)+loadModel path = do+    s <- B.readFile path+    return ((decode s)::(Either String TrafficModel))++makeGenerator :: TrafficModel -> TrafficGenerator+makeGenerator model =+    let (PacketLengthModel probs) = lengths model+        cdf = probsToCDF probs+        lengthGen = nextLength cdf+        (C.ContentModel tree) = content model+        enc = C.encodeContent tree+        dec = C.decodeContent tree+        (PortModel portList) = ports model+        portGen = nextPort portList+    in TrafficGenerator lengthGen enc dec portGen