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 +15/−15
- Dust/Crypto/DustCipher.hs +4/−4
- Dust/Model/TrafficModel.hs +50/−0
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