1234567891011121314151617181920212223242526272829303132 |
- -- RSA LAB
- import Data.Char
- type Message = [Int]
- stringToMessage::String -> Message
- stringToMessage = map ord
- messageToString::Message -> String
- messageToString = map chr
- pad::Int -> Message -> Message
- pad bsize msg =
- let msgSize = length msg in
- let gap = mod msgSize bsize in
- let padding = bsize - gap in
- msg ++ [padding | _ <- [1..padding] ]
- unpad::Message -> Message
- unpad m = reverse $ subunpad (-1) [] m
- -- First arg s
- -- -1 > Travel until reaching end if
- -- 0 > Pad removed
- -- n > Still n items to remove
- subunpad::Int -> Message -> Message -> Message
- subunpad _ [] [] = []
- subunpad (-1) ys (s:[]) = subunpad (s - 1) ys []
- subunpad (-1) ys (x:xs) = subunpad (-1) (x:ys) xs
- subunpad 0 ys _ = ys
- subunpad s (y:ys) _ = subunpad (s - 1) ys []
|