-module (pkcs7). -export ([pad/1]). -export ([unpad/1]). pad(Bin) -> Diff = byte_size(Bin) rem 16, pad(Bin, 16-Diff). pad(Bin, 1) -> <>; pad(Bin, 2) -> <>; pad(Bin, 3) -> <>; pad(Bin, 4) -> <>; pad(Bin, 5) -> <>; pad(Bin, 6) -> <>; pad(Bin, 7) -> <>; pad(Bin, 8) -> <>; pad(Bin, 9) -> <>; pad(Bin, 10) -> <>; pad(Bin, 11) -> <>; pad(Bin, 12) -> <>; pad(Bin, 13) -> <>; pad(Bin, 14) -> <>; pad(Bin, 15) -> <>; pad(Bin, 16) -> <>. unpad(<<>>) -> <<>>; unpad(Bin) -> Last = binary:last(Bin), Size = byte_size(Bin) - Last, RemSize = Size rem 16, case Bin of <> when RemSize == 15 -> Data; <> when RemSize == 14 -> Data; <> when RemSize == 13 -> Data; <> when RemSize == 12 -> Data; <> when RemSize == 11 -> Data; <> when RemSize == 10 -> Data; <> when RemSize == 9 -> Data; <> when RemSize == 8 -> Data; <> when RemSize == 7 -> Data; <> when RemSize == 6 -> Data; <> when RemSize == 5 -> Data; <> when RemSize == 4 -> Data; <> when RemSize == 3 -> Data; <> when RemSize == 2 -> Data; <> when RemSize == 1 -> Data; <> when RemSize == 0 -> Data; _ -> erlang:error(bad_padding) end.