moved solve function from Main.hs to src/Encoding/Solve.hs
This commit is contained in:
		
							parent
							
								
									63a0fd3c05
								
							
						
					
					
						commit
						61313cd558
					
				
							
								
								
									
										38
									
								
								app/Main.hs
								
								
								
								
							
							
						
						
									
										38
									
								
								app/Main.hs
								
								
								
								
							| 
						 | 
				
			
			@ -5,8 +5,6 @@
 | 
			
		|||
module Main where
 | 
			
		||||
import System.Console.CmdArgs 
 | 
			
		||||
import qualified Data.ByteString as B
 | 
			
		||||
import qualified Data.ByteString.Char8 as BC
 | 
			
		||||
import Text.Regex.TDFA
 | 
			
		||||
import Encoding.Base2           (enc2, dec2)
 | 
			
		||||
import Encoding.Base8           (enc8, dec8)
 | 
			
		||||
import Encoding.Base10          (enc10, dec10)
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +22,7 @@ import Encoding.QuotedPrintable (encqp, decqp)
 | 
			
		|||
import Encoding.UnixToUnix      (encuu, decuu)
 | 
			
		||||
import Encoding.Yenc            (ency, decy)
 | 
			
		||||
import Encoding.Rotate          (rotate)
 | 
			
		||||
import Encoding.Solve           (solveEnc)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
data Based = Decode { 
 | 
			
		||||
| 
						 | 
				
			
			@ -69,41 +68,6 @@ data Based = Decode {
 | 
			
		|||
                   } 
 | 
			
		||||
            deriving(Show, Data, Typeable) 
 | 
			
		||||
 | 
			
		||||
base91Regex = "^[!-~]*$"
 | 
			
		||||
base85Regex = "^[0-9A-Za-z!#$%&()*+,-;<=>?@^_`{|}~]+$"
 | 
			
		||||
base64Regex = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"
 | 
			
		||||
base58Regex = "^[1-9A-HJ-NP-Za-km-z]+$" -- incorrect
 | 
			
		||||
base32Regex = "^(?:[A-Z2-7]{8})*(?:[A-Z2-7]{2}={6}|[A-Z2-7]{4}={4}|[A-Z2-7]{5}={3}|[A-Z2-7]{7}=)?$"
 | 
			
		||||
base16Regex = "^[0-9A-FXx]*$"
 | 
			
		||||
base10Regex = "^[0-9]*$"
 | 
			
		||||
base8Regex = "^[0-7]*$"
 | 
			
		||||
base2Regex = "^[01]*$"
 | 
			
		||||
urlRegex = "^[a-zA-Z0-9%]*$"
 | 
			
		||||
 | 
			
		||||
solveEnc :: BC.ByteString -> BC.ByteString
 | 
			
		||||
solveEnc input =
 | 
			
		||||
   let isBase91 = input =~ base91Regex :: Bool
 | 
			
		||||
       isBase85 = input =~ base85Regex :: Bool
 | 
			
		||||
       isBase64 = input =~ base64Regex :: Bool
 | 
			
		||||
       isBase58 = input =~ base58Regex :: Bool
 | 
			
		||||
       isBase32 = input =~ base32Regex :: Bool
 | 
			
		||||
       isBase16 = input =~ base16Regex :: Bool
 | 
			
		||||
       isBase10 = input =~ base10Regex :: Bool
 | 
			
		||||
       isBase8  = input =~ base8Regex  :: Bool
 | 
			
		||||
       isBase2  = input =~ base2Regex  :: Bool
 | 
			
		||||
       isURL = input =~ urlRegex :: Bool
 | 
			
		||||
       base91Result = if isBase91 then BC.pack "\nTrying base91:\n" `BC.append` dec91 input else BC.empty
 | 
			
		||||
       base85Result = if isBase85 then BC.pack "\nTrying base85:\n" `BC.append` dec85 input else BC.empty
 | 
			
		||||
       base64Result = if isBase64 then BC.pack "\nTrying base64:\n" `BC.append` dec64 input else BC.empty
 | 
			
		||||
       base58Result = if isBase58 then BC.pack "\nTrying base58:\n" `BC.append` dec58 input else BC.empty
 | 
			
		||||
       base32Result = if isBase64 then BC.pack "\nTrying base32:\n" `BC.append` dec32 input else BC.empty
 | 
			
		||||
       base16Result = if isBase16 then BC.pack "\nTrying base16:\n" `BC.append` dec16 input else BC.empty
 | 
			
		||||
       base10Result = if isBase10 then BC.pack "\nTrying base10:\n" `BC.append` dec10 input else BC.empty
 | 
			
		||||
       base2Result  = if isBase2  then BC.pack "\nTrying base2:\n"  `BC.append` dec2  input else BC.empty
 | 
			
		||||
       base8Result  = if isBase8  then BC.pack "\nTrying base8:\n"  `BC.append` dec8  input else BC.empty
 | 
			
		||||
       urlResult    = if isURL    then BC.pack "\nTrying URL decode:\n" `BC.append` decurl input else BC.empty
 | 
			
		||||
   in BC.concat [base91Result, base85Result, base64Result, base58Result, base32Result, base16Result, base10Result, base8Result, base2Result,  urlResult]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
optionHandler :: Based ->  B.ByteString -> B.ByteString
 | 
			
		||||
optionHandler Decode{b91=True} = dec91
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ library
 | 
			
		|||
    Encoding.Xx
 | 
			
		||||
    Encoding.Yenc
 | 
			
		||||
    Encoding.Rotate
 | 
			
		||||
    Encoding.Solve
 | 
			
		||||
  other-modules:
 | 
			
		||||
    -- Data.Bytes.Text.Ascii
 | 
			
		||||
  build-depends:
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +43,7 @@ library
 | 
			
		|||
    haskoin-core,
 | 
			
		||||
    text,
 | 
			
		||||
    primitive,
 | 
			
		||||
    regex-tdfa,
 | 
			
		||||
    base64-bytestring
 | 
			
		||||
  default-language:    Haskell2010
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
module Encoding.Solve
 | 
			
		||||
  (solveEnc) where
 | 
			
		||||
 | 
			
		||||
import qualified Data.ByteString.Char8 as BC
 | 
			
		||||
import Text.Regex.TDFA
 | 
			
		||||
import Encoding.Base2           (enc2, dec2)
 | 
			
		||||
import Encoding.Base8           (enc8, dec8)
 | 
			
		||||
import Encoding.Base10          (enc10, dec10)
 | 
			
		||||
import Encoding.Base16          (enc16, dec16)
 | 
			
		||||
import Encoding.Base32          (enc32, dec32)
 | 
			
		||||
import Encoding.Base45          (enc45, dec45)
 | 
			
		||||
import Encoding.Base58          (enc58, dec58)
 | 
			
		||||
import Encoding.Base62          (enc62, dec62)
 | 
			
		||||
import Encoding.Base64          (enc64, dec64, enc64url, dec64url)
 | 
			
		||||
import Encoding.Base85          (enc85, dec85)
 | 
			
		||||
import Encoding.Base91          (enc91, dec91)
 | 
			
		||||
import Encoding.Url             (encurl, decurl)
 | 
			
		||||
import Encoding.Xx              (encxx, decxx)
 | 
			
		||||
import Encoding.QuotedPrintable (encqp, decqp)
 | 
			
		||||
import Encoding.UnixToUnix      (encuu, decuu)
 | 
			
		||||
import Encoding.Yenc            (ency, decy)
 | 
			
		||||
import Encoding.Rotate          (rotate)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
base91Regex = "^[!-~]*$"
 | 
			
		||||
base85Regex = "^[0-9A-Za-z!#$%&()*+,-;<=>?@^_`{|}~]+$"
 | 
			
		||||
base64Regex = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"
 | 
			
		||||
base58Regex = "^[1-9A-HJ-NP-Za-km-z]+$" -- incorrect
 | 
			
		||||
base32Regex = "^(?:[A-Z2-7]{8})*(?:[A-Z2-7]{2}={6}|[A-Z2-7]{4}={4}|[A-Z2-7]{5}={3}|[A-Z2-7]{7}=)?$"                                                                                                  
 | 
			
		||||
base16Regex = "^[0-9A-FXx]*$"
 | 
			
		||||
base10Regex = "^[0-9]*$"
 | 
			
		||||
base8Regex = "^[0-7]*$"
 | 
			
		||||
base2Regex = "^[01]*$"
 | 
			
		||||
urlRegex = "^[a-zA-Z0-9%]*$"
 | 
			
		||||
 | 
			
		||||
solveEnc :: BC.ByteString -> BC.ByteString
 | 
			
		||||
solveEnc input =
 | 
			
		||||
   let isBase91 = input =~ base91Regex :: Bool
 | 
			
		||||
       isBase85 = input =~ base85Regex :: Bool
 | 
			
		||||
       isBase64 = input =~ base64Regex :: Bool
 | 
			
		||||
       isBase58 = input =~ base58Regex :: Bool
 | 
			
		||||
       isBase32 = input =~ base32Regex :: Bool
 | 
			
		||||
       isBase16 = input =~ base16Regex :: Bool
 | 
			
		||||
       isBase10 = input =~ base10Regex :: Bool
 | 
			
		||||
       isBase8  = input =~ base8Regex  :: Bool
 | 
			
		||||
       isBase2  = input =~ base2Regex  :: Bool
 | 
			
		||||
       isURL = input =~ urlRegex :: Bool
 | 
			
		||||
       base91Result = if isBase91 then BC.pack "\nTrying base91:\n" `BC.append` dec91 input else BC.empty
 | 
			
		||||
       base85Result = if isBase85 then BC.pack "\nTrying base85:\n" `BC.append` dec85 input else BC.empty
 | 
			
		||||
       base64Result = if isBase64 then BC.pack "\nTrying base64:\n" `BC.append` dec64 input else BC.empty
 | 
			
		||||
       base58Result = if isBase58 then BC.pack "\nTrying base58:\n" `BC.append` dec58 input else BC.empty
 | 
			
		||||
       base32Result = if isBase64 then BC.pack "\nTrying base32:\n" `BC.append` dec32 input else BC.empty
 | 
			
		||||
       base16Result = if isBase16 then BC.pack "\nTrying base16:\n" `BC.append` dec16 input else BC.empty
 | 
			
		||||
       base10Result = if isBase10 then BC.pack "\nTrying base10:\n" `BC.append` dec10 input else BC.empty
 | 
			
		||||
       base2Result  = if isBase2  then BC.pack "\nTrying base2:\n"  `BC.append` dec2  input else BC.empty
 | 
			
		||||
       base8Result  = if isBase8  then BC.pack "\nTrying base8:\n"  `BC.append` dec8  input else BC.empty
 | 
			
		||||
       urlResult    = if isURL    then BC.pack "\nTrying URL decode:\n" `BC.append` decurl input else BC.empty
 | 
			
		||||
   in BC.concat [base91Result, base85Result, base64Result, base58Result, base32Result, base16Result, base10Result, base8Result, base2Result,  urlResult]
 | 
			
		||||
		Loading…
	
		Reference in New Issue