Skip to content

Instantly share code, notes, and snippets.

@sukhodolin
Last active September 21, 2015 01:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sukhodolin/dcdf98f090e68c6fdbb5 to your computer and use it in GitHub Desktop.
Save sukhodolin/dcdf98f090e68c6fdbb5 to your computer and use it in GitHub Desktop.
Decode CTX1 encoding
module Main where
import Data.Char
import Data.Word
import Data.Bits
import qualified Data.Text as T
import qualified Data.Text.Encoding as E
import Data.ByteString as B
import Data.ByteString.Char8 as BC
decodeCTX1 :: [Word8] -> [Word8]
decodeCTX1 (c1:c2:cs) = toEnum ((fromEnum c1 - fromEnum 'A') * 16 + (fromEnum c2 - fromEnum 'A')) : decodeCTX1 cs
decodeCTX1 _ = []
applyXor :: Word8 -> [Word8] -> [Word8]
applyXor seed = go 0
where go s (c:cs) = let c' = c `xor` seed `xor` s in c' : go c cs
go _ [] = []
main :: IO()
main = B.interact $
-- BC.pack . show .
E.encodeUtf8 . E.decodeUtf16LE . B.pack .
applyXor 0xA5 . decodeCTX1 . B.unpack
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment