Browse Source

Implement `unpad`

DricomDragon 5 years ago
parent
commit
2a864a54f7
1 changed files with 14 additions and 0 deletions
  1. 14 0
      tp/rsa/main.hs

+ 14 - 0
tp/rsa/main.hs

@@ -16,3 +16,17 @@ pad block msg =
 	let gap = mod msgSize block in
 	let padding = block - 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 []