main.hs 758 B

1234567891011121314151617181920212223242526272829303132
  1. -- RSA LAB
  2. import Data.Char
  3. type Message = [Int]
  4. stringToMessage::String -> Message
  5. stringToMessage = map ord
  6. messageToString::Message -> String
  7. messageToString = map chr
  8. pad::Int -> Message -> Message
  9. pad bsize msg =
  10. let msgSize = length msg in
  11. let gap = mod msgSize bsize in
  12. let padding = bsize - gap in
  13. msg ++ [padding | _ <- [1..padding] ]
  14. unpad::Message -> Message
  15. unpad m = reverse $ subunpad (-1) [] m
  16. -- First arg s
  17. -- -1 > Travel until reaching end if
  18. -- 0 > Pad removed
  19. -- n > Still n items to remove
  20. subunpad::Int -> Message -> Message -> Message
  21. subunpad _ [] [] = []
  22. subunpad (-1) ys (s:[]) = subunpad (s - 1) ys []
  23. subunpad (-1) ys (x:xs) = subunpad (-1) (x:ys) xs
  24. subunpad 0 ys _ = ys
  25. subunpad s (y:ys) _ = subunpad (s - 1) ys []