-- 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 []