Vectors.hs (2568B)
1 {-# LANGUAGE OverloadedStrings #-} 2 {-# LANGUAGE RecordWildCards #-} 3 4 module Vectors ( 5 Vectors(..) 6 , Bip39Test(..) 7 , JPBip39Test(..) 8 ) where 9 10 import Data.Aeson ((.:)) 11 import qualified Data.Aeson as A 12 import qualified Data.ByteString as BS 13 import qualified Data.ByteString.Base16 as B16 14 import qualified Data.Text as T 15 import qualified Data.Text.Encoding as TE 16 import qualified Data.Vector as V 17 18 data Vectors = Vectors { 19 v_english :: ![Bip39Test] 20 , v_chinese_traditional :: ![Bip39Test] 21 , v_chinese_simplified :: ![Bip39Test] 22 , v_french :: ![Bip39Test] 23 , v_spanish :: ![Bip39Test] 24 , v_korean :: ![Bip39Test] 25 , v_japanese :: ![Bip39Test] 26 , v_portuguese :: ![Bip39Test] 27 , v_czech :: ![Bip39Test] 28 , v_italian :: ![Bip39Test] 29 } deriving Show 30 31 instance A.FromJSON Vectors where 32 parseJSON = A.withObject "Vectors" $ \m -> Vectors 33 <$> m .: "english" 34 <*> m .: "chinese_traditional" 35 <*> m .: "chinese_simplified" 36 <*> m .: "french" 37 <*> m .: "spanish" 38 <*> m .: "korean" 39 <*> m .: "japanese" 40 <*> m .: "portuguese" 41 <*> m .: "czech" 42 <*> m .: "italian" 43 44 data Bip39Test = Bip39Test { 45 bt_entropy :: !BS.ByteString 46 , bt_mnemonic :: !T.Text 47 , bt_seed :: !BS.ByteString 48 , bt_xprv :: !BS.ByteString 49 } deriving Show 50 51 decodehex :: T.Text -> BS.ByteString 52 decodehex t = case B16.decode (TE.encodeUtf8 t) of 53 Nothing -> error "bang (decodehex)" 54 Just bs -> bs 55 56 instance A.FromJSON Bip39Test where 57 parseJSON = A.withArray "Bip39Test" $ \m -> 58 let bt_entropy = case m V.! 0 of 59 A.String t -> decodehex t 60 _ -> error "bang (entropy)" 61 bt_mnemonic = case m V.! 1 of 62 A.String t -> t 63 _ -> error "bang (mnemonic)" 64 bt_seed = case m V.! 2 of 65 A.String t -> decodehex t 66 _ -> error "bang (seed)" 67 bt_xprv = case m V.! 3 of 68 A.String t -> TE.encodeUtf8 t 69 _ -> error "bang (xprv)" 70 in pure Bip39Test {..} 71 72 data JPBip39Test = JPBip39Test { 73 jp_entropy :: !BS.ByteString 74 , jp_mnemonic :: !T.Text 75 , jp_passphrase :: !T.Text 76 , jp_seed :: !BS.ByteString 77 , jp_xprv :: !BS.ByteString 78 } deriving Show 79 80 instance A.FromJSON JPBip39Test where 81 parseJSON = A.withObject "JPBip39Test" $ \m -> JPBip39Test 82 <$> fmap decodehex (m .: "entropy") 83 <*> m .: "mnemonic" 84 <*> m .: "passphrase" 85 <*> fmap decodehex (m .: "seed") 86 <*> fmap TE.encodeUtf8 (m .: "bip32_xprv") 87