From 694ab8fd172ba0328f94c5f73d6ca0a9e3167585 Mon Sep 17 00:00:00 2001 From: Rene Vergara Date: Tue, 5 Mar 2024 14:44:00 -0600 Subject: [PATCH] Add new Orchard spending key generation --- src/C/Zcash.chs | 9 +++++++++ src/ZcashHaskell/Orchard.hs | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/C/Zcash.chs b/src/C/Zcash.chs index 0013f83..84a641b 100644 --- a/src/C/Zcash.chs +++ b/src/C/Zcash.chs @@ -133,3 +133,12 @@ import ZcashHaskell.Types } -> `()' #} + +{# fun unsafe rust_wrapper_derive_orchard_spending_key as rustWrapperGenOrchardSpendKey + { toBorshVar* `BS.ByteString'& + , `Word32' + , `Word32' + , getVarBuffer `Buffer (BS.ByteString)'& + } + -> `()' +#} diff --git a/src/ZcashHaskell/Orchard.hs b/src/ZcashHaskell/Orchard.hs index f0dba87..ffe5248 100644 --- a/src/ZcashHaskell/Orchard.hs +++ b/src/ZcashHaskell/Orchard.hs @@ -18,7 +18,8 @@ module ZcashHaskell.Orchard where import C.Zcash - ( rustWrapperOrchardCheck + ( rustWrapperGenOrchardSpendKey + , rustWrapperOrchardCheck , rustWrapperOrchardNoteDecode , rustWrapperUADecode , rustWrapperUfvkDecode @@ -32,6 +33,12 @@ import Foreign.Rust.Marshall.Variable import ZcashHaskell.Types import ZcashHaskell.Utils (encodeBech32m, f4Jumble) +-- | Derives an Orchard spending key for the given seed and account ID +genOrchardSpendingKey :: Seed -> CoinType -> AccountId -> BS.ByteString +genOrchardSpendingKey s coinType accountId = + withPureBorshVarBuffer $ + rustWrapperGenOrchardSpendKey s (getValue coinType) (fromIntegral accountId) + -- | Checks if given bytestring is a valid encoded unified address isValidUnifiedAddress :: BS.ByteString -> Maybe UnifiedAddress isValidUnifiedAddress str =