ppad-bip39-0.1.0: test/Vectors.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Vectors (
Vectors(..)
, Bip39Test(..)
, JPBip39Test(..)
) where
import Data.Aeson ((.:))
import qualified Data.Aeson as A
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base16 as B16
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Data.Vector as V
data Vectors = Vectors {
v_english :: ![Bip39Test]
, v_chinese_traditional :: ![Bip39Test]
, v_chinese_simplified :: ![Bip39Test]
, v_french :: ![Bip39Test]
, v_spanish :: ![Bip39Test]
, v_korean :: ![Bip39Test]
, v_japanese :: ![Bip39Test]
, v_portuguese :: ![Bip39Test]
, v_czech :: ![Bip39Test]
, v_italian :: ![Bip39Test]
} deriving Show
instance A.FromJSON Vectors where
parseJSON = A.withObject "Vectors" $ \m -> Vectors
<$> m .: "english"
<*> m .: "chinese_traditional"
<*> m .: "chinese_simplified"
<*> m .: "french"
<*> m .: "spanish"
<*> m .: "korean"
<*> m .: "japanese"
<*> m .: "portuguese"
<*> m .: "czech"
<*> m .: "italian"
data Bip39Test = Bip39Test {
bt_entropy :: !BS.ByteString
, bt_mnemonic :: !T.Text
, bt_seed :: !BS.ByteString
, bt_xprv :: !BS.ByteString
} deriving Show
decodehex :: T.Text -> BS.ByteString
decodehex t = case B16.decode (TE.encodeUtf8 t) of
Nothing -> error "bang (decodehex)"
Just bs -> bs
instance A.FromJSON Bip39Test where
parseJSON = A.withArray "Bip39Test" $ \m ->
let bt_entropy = case m V.! 0 of
A.String t -> decodehex t
_ -> error "bang (entropy)"
bt_mnemonic = case m V.! 1 of
A.String t -> t
_ -> error "bang (mnemonic)"
bt_seed = case m V.! 2 of
A.String t -> decodehex t
_ -> error "bang (seed)"
bt_xprv = case m V.! 3 of
A.String t -> TE.encodeUtf8 t
_ -> error "bang (xprv)"
in pure Bip39Test {..}
data JPBip39Test = JPBip39Test {
jp_entropy :: !BS.ByteString
, jp_mnemonic :: !T.Text
, jp_passphrase :: !T.Text
, jp_seed :: !BS.ByteString
, jp_xprv :: !BS.ByteString
} deriving Show
instance A.FromJSON JPBip39Test where
parseJSON = A.withObject "JPBip39Test" $ \m -> JPBip39Test
<$> fmap decodehex (m .: "entropy")
<*> m .: "mnemonic"
<*> m .: "passphrase"
<*> fmap decodehex (m .: "seed")
<*> fmap TE.encodeUtf8 (m .: "bip32_xprv")