{-# LANGUAGE OverloadedStrings #-} import C.Zcash (CodedString(CodedString), rustWrapperIsUA) import qualified Data.ByteString as BS import Data.Word import Test.Hspec import Zcash main :: IO () main = do hspec $ do describe "F4Jumble" $ do it "jumble a string" $ do let input = [ 0x5d , 0x7a , 0x8f , 0x73 , 0x9a , 0x2d , 0x9e , 0x94 , 0x5b , 0x0c , 0xe1 , 0x52 , 0xa8 , 0x04 , 0x9e , 0x29 , 0x4c , 0x4d , 0x6e , 0x66 , 0xb1 , 0x64 , 0x93 , 0x9d , 0xaf , 0xfa , 0x2e , 0xf6 , 0xee , 0x69 , 0x21 , 0x48 , 0x1c , 0xdd , 0x86 , 0xb3 , 0xcc , 0x43 , 0x18 , 0xd9 , 0x61 , 0x4f , 0xc8 , 0x20 , 0x90 , 0x5d , 0x04 , 0x2b ] :: [Word8] let out = [ 0x03 , 0x04 , 0xd0 , 0x29 , 0x14 , 0x1b , 0x99 , 0x5d , 0xa5 , 0x38 , 0x7c , 0x12 , 0x59 , 0x70 , 0x67 , 0x35 , 0x04 , 0xd6 , 0xc7 , 0x64 , 0xd9 , 0x1e , 0xa6 , 0xc0 , 0x82 , 0x12 , 0x37 , 0x70 , 0xc7 , 0x13 , 0x9c , 0xcd , 0x88 , 0xee , 0x27 , 0x36 , 0x8c , 0xd0 , 0xc0 , 0x92 , 0x1a , 0x04 , 0x44 , 0xc8 , 0xe5 , 0x85 , 0x8d , 0x22 ] :: [Word8] CodedString (BS.pack out) `shouldBe` f4Jumble (BS.pack input) describe "Unified address" $ do it "succeeds with correct UA" $ do let ua = "u1salpdyefywvsg2dlmxg9589yznh0h9v6qjr478k80amtkqkws5pr408lxt2953dpprvu06mahxt99cv65fgsm7sw8hlchplfg5pl89ur" isValidUnifiedAddress ua `shouldBe` True it "fails with incorrect UA" $ do let ua = "u1salpdyefbreakingtheaddressh0h9v6qjr478k80amtkqkws5pr408lxt2953dpprvu06mahxt99cv65fgsm7sw8hlchplfg5pl89ur" isValidUnifiedAddress ua `shouldBe` False