added base64url, oct, binary
This commit is contained in:
parent
8c742d5fc2
commit
4c6f3775a5
48
Main.hs
48
Main.hs
|
@ -4,18 +4,19 @@
|
||||||
module Main where
|
module Main where
|
||||||
import System.Console.CmdArgs
|
import System.Console.CmdArgs
|
||||||
import Control.Arrow
|
import Control.Arrow
|
||||||
import Numeric (showHex, showIntAtBase)
|
|
||||||
import Data.Text (pack, unpack)
|
import Data.Text (pack, unpack)
|
||||||
import Data.Char (intToDigit, ord, chr)
|
import Data.Text.Encoding (encodeUtf8)
|
||||||
import Data.Maybe (fromJust)
|
import Data.Maybe (fromJust)
|
||||||
import TextShow (toText)
|
import TextShow (toText)
|
||||||
import Text.XML.HXT.DOM.Util (stringToHexString, hexStringToInt, intToHexString, charToHexString, decimalStringToInt)
|
import Text.XML.HXT.DOM.Util (hexStringToInt, intToHexString, decimalStringToInt)
|
||||||
import TextShow.Data.Integral (showbBin, showbHex)
|
import TextShow.Data.Integral (showbBin, showbOct)
|
||||||
|
import Text.Ascii (fromBinDigit, fromOctDigit)
|
||||||
import Codec.CBOR.Magic (intToWord64)
|
import Codec.CBOR.Magic (intToWord64)
|
||||||
import qualified Data.Either.Unwrap as U
|
import qualified Data.Either.Unwrap as U
|
||||||
import qualified Codec.Binary.Base91 as B91
|
import qualified Codec.Binary.Base91 as B91
|
||||||
import qualified Codec.Binary.Base85 as B85
|
import qualified Codec.Binary.Base85 as B85
|
||||||
import qualified Codec.Binary.Base64 as B64
|
import qualified Codec.Binary.Base64 as B64
|
||||||
|
import qualified Codec.Binary.Base64Url as B64U
|
||||||
import qualified Data.Word.Base62 as B62
|
import qualified Data.Word.Base62 as B62
|
||||||
import qualified Haskoin.Address.Base58 as B58
|
import qualified Haskoin.Address.Base58 as B58
|
||||||
import qualified Codec.Binary.Base32 as B32
|
import qualified Codec.Binary.Base32 as B32
|
||||||
|
@ -34,11 +35,14 @@ data Based = Decode {
|
||||||
b91 :: Bool,
|
b91 :: Bool,
|
||||||
b85 :: Bool,
|
b85 :: Bool,
|
||||||
b64 :: Bool,
|
b64 :: Bool,
|
||||||
|
b64url :: Bool,
|
||||||
b62 :: Bool,
|
b62 :: Bool,
|
||||||
b58 :: Bool,
|
b58 :: Bool,
|
||||||
b32 :: Bool,
|
b32 :: Bool,
|
||||||
b16 :: Bool,
|
b16 :: Bool,
|
||||||
b10 :: Bool,
|
b10 :: Bool,
|
||||||
|
b8 :: Bool,
|
||||||
|
b2 :: Bool,
|
||||||
qp :: Bool,
|
qp :: Bool,
|
||||||
uu :: Bool,
|
uu :: Bool,
|
||||||
xx :: Bool,
|
xx :: Bool,
|
||||||
|
@ -48,11 +52,14 @@ data Based = Decode {
|
||||||
b91 :: Bool,
|
b91 :: Bool,
|
||||||
b85 :: Bool,
|
b85 :: Bool,
|
||||||
b64 :: Bool,
|
b64 :: Bool,
|
||||||
|
b64url :: Bool,
|
||||||
b62 :: Bool,
|
b62 :: Bool,
|
||||||
b58 :: Bool,
|
b58 :: Bool,
|
||||||
b32 :: Bool,
|
b32 :: Bool,
|
||||||
b16 :: Bool,
|
b16 :: Bool,
|
||||||
b10 :: Bool,
|
b10 :: Bool,
|
||||||
|
b8 :: Bool,
|
||||||
|
b2 :: Bool,
|
||||||
qp :: Bool,
|
qp :: Bool,
|
||||||
uu :: Bool,
|
uu :: Bool,
|
||||||
xx :: Bool,
|
xx :: Bool,
|
||||||
|
@ -60,6 +67,16 @@ data Based = Decode {
|
||||||
}
|
}
|
||||||
deriving(Show, Data, Typeable)
|
deriving(Show, Data, Typeable)
|
||||||
|
|
||||||
|
-- helper functions
|
||||||
|
binToInt :: [Int] -> Int
|
||||||
|
binToInt [] = 0
|
||||||
|
binToInt (x : xs) = x + 2 * binToInt xs
|
||||||
|
|
||||||
|
octToInt :: [Int] -> Int
|
||||||
|
octToInt [] = 0
|
||||||
|
octToInt (x : xs) = x + 8 * octToInt xs
|
||||||
|
|
||||||
|
-- base functions
|
||||||
-- without the show func, sequences like \n will not be shown as characters but will be executed as newline
|
-- without the show func, sequences like \n will not be shown as characters but will be executed as newline
|
||||||
dec91 = C.unpack . B91.decode
|
dec91 = C.unpack . B91.decode
|
||||||
enc91 = B91.encode . BSU.fromString
|
enc91 = B91.encode . BSU.fromString
|
||||||
|
@ -67,6 +84,8 @@ dec85 = C.unpack . U.fromRight . B85.decode . BSU.fromString
|
||||||
enc85 = C.unpack . B85.encode . BSU.fromString
|
enc85 = C.unpack . B85.encode . BSU.fromString
|
||||||
dec64 = C.unpack . U.fromRight . B64.decode . BSU.fromString
|
dec64 = C.unpack . U.fromRight . B64.decode . BSU.fromString
|
||||||
enc64 = C.unpack . B64.encode . BSU.fromString
|
enc64 = C.unpack . B64.encode . BSU.fromString
|
||||||
|
dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString
|
||||||
|
enc64url = C.unpack . B64U.encode . BSU.fromString
|
||||||
dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString)
|
dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString)
|
||||||
enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt)))
|
enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt)))
|
||||||
dec58 = C.unpack . fromJust . B58.decodeBase58 . pack
|
dec58 = C.unpack . fromJust . B58.decodeBase58 . pack
|
||||||
|
@ -77,6 +96,10 @@ dec16 = C.unpack . U.fromRight . B16.decode . BSU.fromString
|
||||||
enc16 = C.unpack . B16.encode . BSU.fromString
|
enc16 = C.unpack . B16.encode . BSU.fromString
|
||||||
dec10 = show . hexStringToInt
|
dec10 = show . hexStringToInt
|
||||||
enc10 = C.unpack . BSU.fromString . intToHexString . decimalStringToInt -- Depending on what you want, do enc10 = show . map ord
|
enc10 = C.unpack . BSU.fromString . intToHexString . decimalStringToInt -- Depending on what you want, do enc10 = show . map ord
|
||||||
|
dec8 = C.unpack . encodeUtf8 . toText . showbOct . hexStringToInt
|
||||||
|
enc8 = C.unpack . BSU.fromString . intToHexString . octToInt . (reverse . (map fromJust . (map fromOctDigit)))
|
||||||
|
dec2 = C.unpack . encodeUtf8 . toText . showbBin . hexStringToInt
|
||||||
|
enc2 = C.unpack . BSU.fromString . intToHexString . binToInt . (reverse . (map fromJust . (map fromBinDigit)))
|
||||||
decqp = C.unpack . U.fromRight . QP.decode . BSU.fromString
|
decqp = C.unpack . U.fromRight . QP.decode . BSU.fromString
|
||||||
encqp = C.unpack . QP.encode . BSU.fromString
|
encqp = C.unpack . QP.encode . BSU.fromString
|
||||||
decuu = C.unpack . U.fromRight . UU.decode . BSU.fromString
|
decuu = C.unpack . U.fromRight . UU.decode . BSU.fromString
|
||||||
|
@ -86,13 +109,14 @@ encxx = C.unpack . XX.encode . BSU.fromString
|
||||||
decy = C.unpack . U.fromRight . Y.decode . BSU.fromString
|
decy = C.unpack . U.fromRight . Y.decode . BSU.fromString
|
||||||
ency = C.unpack . Y.encode . BSU.fromString
|
ency = C.unpack . Y.encode . BSU.fromString
|
||||||
|
|
||||||
|
|
||||||
optionHandler Decode{b91=True} = dec91
|
optionHandler Decode{b91=True} = dec91
|
||||||
optionHandler Encode{b91=True} = enc91
|
optionHandler Encode{b91=True} = enc91
|
||||||
optionHandler Decode{b85=True} = dec85
|
optionHandler Decode{b85=True} = dec85
|
||||||
optionHandler Encode{b85=True} = enc85
|
optionHandler Encode{b85=True} = enc85
|
||||||
optionHandler Decode{b64=True} = dec64
|
optionHandler Decode{b64=True} = dec64
|
||||||
optionHandler Encode{b64=True} = enc64
|
optionHandler Encode{b64=True} = enc64
|
||||||
|
optionHandler Decode{b64url=True} = dec64url
|
||||||
|
optionHandler Encode{b64url=True} = enc64url
|
||||||
optionHandler Decode{b62=True} = dec62
|
optionHandler Decode{b62=True} = dec62
|
||||||
optionHandler Encode{b62=True} = enc62
|
optionHandler Encode{b62=True} = enc62
|
||||||
optionHandler Decode{b58=True} = dec58
|
optionHandler Decode{b58=True} = dec58
|
||||||
|
@ -103,6 +127,10 @@ optionHandler Decode{b16=True} = dec16
|
||||||
optionHandler Encode{b16=True} = enc16
|
optionHandler Encode{b16=True} = enc16
|
||||||
optionHandler Decode{b10=True} = dec10
|
optionHandler Decode{b10=True} = dec10
|
||||||
optionHandler Encode{b10=True} = enc10
|
optionHandler Encode{b10=True} = enc10
|
||||||
|
optionHandler Decode{b8=True} = dec8
|
||||||
|
optionHandler Encode{b8=True} = enc8
|
||||||
|
optionHandler Decode{b2=True} = dec2
|
||||||
|
optionHandler Encode{b2=True} = enc2
|
||||||
optionHandler Decode{qp=True} = decqp
|
optionHandler Decode{qp=True} = decqp
|
||||||
optionHandler Encode{qp=True} = encqp
|
optionHandler Encode{qp=True} = encqp
|
||||||
optionHandler Encode{uu=True} = decuu
|
optionHandler Encode{uu=True} = decuu
|
||||||
|
@ -116,11 +144,14 @@ decode_ = Decode {
|
||||||
b91 = def &= help "decode base91",
|
b91 = def &= help "decode base91",
|
||||||
b85 = def &= help "decode base85",
|
b85 = def &= help "decode base85",
|
||||||
b64 = def &= help "decode base64",
|
b64 = def &= help "decode base64",
|
||||||
|
b64url = def &= help "decode base64Url",
|
||||||
b62 = def &= help "decode base62",
|
b62 = def &= help "decode base62",
|
||||||
b58 = def &= help "decode base58",
|
b58 = def &= help "decode base58",
|
||||||
b32 = def &= help "decode base32",
|
b32 = def &= help "decode base32",
|
||||||
b16 = def &= help "decode base16",
|
b16 = def &= help "decode base16",
|
||||||
b10 = def &= help "decode base10 to hex",
|
b10 = def &= help "decode decimal from hex",
|
||||||
|
b8 = def &= help "decode octal from hex",
|
||||||
|
b2 = def &= help "decode binary from hex",
|
||||||
qp = def &= help "decode quoted-printable",
|
qp = def &= help "decode quoted-printable",
|
||||||
uu = def &= help "decode uu",
|
uu = def &= help "decode uu",
|
||||||
xx = def &= help "decode xx",
|
xx = def &= help "decode xx",
|
||||||
|
@ -131,15 +162,18 @@ encode_ = Encode {
|
||||||
b91 = def &= help "encode base91",
|
b91 = def &= help "encode base91",
|
||||||
b85 = def &= help "encode base85",
|
b85 = def &= help "encode base85",
|
||||||
b64 = def &= help "encode base64",
|
b64 = def &= help "encode base64",
|
||||||
|
b64url = def &= help "encode base64Url",
|
||||||
b62 = def &= help "encode base62",
|
b62 = def &= help "encode base62",
|
||||||
b58 = def &= help "encode base58",
|
b58 = def &= help "encode base58",
|
||||||
b32 = def &= help "encode base32",
|
b32 = def &= help "encode base32",
|
||||||
b16 = def &= help "encode base16",
|
b16 = def &= help "encode base16",
|
||||||
b10 = def &= help "encode base10 to hex",
|
b10 = def &= help "encode base10 to hex",
|
||||||
|
b8 = def &= help "encode octal to hex",
|
||||||
|
b2 = def &= help "encode binary to hex",
|
||||||
qp = def &= help "encode quoted-printable",
|
qp = def &= help "encode quoted-printable",
|
||||||
uu = def &= help "encode uu",
|
uu = def &= help "encode uu",
|
||||||
xx = def &= help "encode xx",
|
xx = def &= help "encode xx",
|
||||||
yenc = def &= help "encode yEncode"
|
yenc = def &= help "encode yEncode"
|
||||||
} &= help "Encode chosen base"
|
} &= help "Encode chosen base"
|
||||||
|
|
||||||
main = cmdArgs (modes[decode_, encode_] &= help "Anybased, when Cyberchef simply doesn't cut it. " &= program "based" &= summary "based v0.3") >>= interact . optionHandler
|
main = cmdArgs (modes[decode_, encode_] &= help "Anybased, when Cyberchef simply doesn't cut it.\nTo see every parameter of every mode use --help=all" &= program "based" &= summary "based v0.4") >>= interact . optionHandler
|
||||||
|
|
|
@ -3,7 +3,7 @@ cabal-version: 2.4
|
||||||
-- For further documentation, see http://haskell.org/cabal/users-guide/
|
-- For further documentation, see http://haskell.org/cabal/users-guide/
|
||||||
|
|
||||||
name: based
|
name: based
|
||||||
version: 0.1.0.0
|
version: 0.4.0.0
|
||||||
-- synopsis:
|
-- synopsis:
|
||||||
-- description:
|
-- description:
|
||||||
-- bug-reports:
|
-- bug-reports:
|
||||||
|
@ -18,7 +18,7 @@ extra-source-files: CHANGELOG.md
|
||||||
library
|
library
|
||||||
exposed-modules: MyLib
|
exposed-modules: MyLib
|
||||||
-- other-modules:
|
-- other-modules:
|
||||||
-- other-extensions:
|
-- other-extensions
|
||||||
build-depends: base ^>=4.13.0.0
|
build-depends: base ^>=4.13.0.0
|
||||||
-- hs-source-dirs:
|
-- hs-source-dirs:
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
@ -27,6 +27,6 @@ executable based
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
other-modules: MyLib
|
other-modules: MyLib
|
||||||
-- other-extensions:
|
-- other-extensions:
|
||||||
build-depends: base ^>=4.13.0.0, based, cmdargs, sandi, base62, base91, utf8-string, bytestring, byteslice, either-unwrap, text-show, hxt,haskoin-core, text, bytes, cborg
|
build-depends: base ^>=4.13.0.0, based, cmdargs, sandi, base62, base91, utf8-string, bytestring, byteslice, either-unwrap, text-show, hxt,haskoin-core, text, bytes, cborg, text-latin1
|
||||||
-- hs-source-dirs:
|
-- hs-source-dirs:
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
|
Loading…
Reference in New Issue