35 lines
1,017 B
Haskell
35 lines
1,017 B
Haskell
|
module HaskellZcash.Orchard where
|
||
|
|
||
|
import C.Zcash
|
||
|
( rustWrapperIsUA
|
||
|
, rustWrapperOrchardNoteDecode
|
||
|
, rustWrapperUfvkDecode
|
||
|
)
|
||
|
import qualified Data.ByteString as BS
|
||
|
import Foreign.Rust.Marshall.Variable
|
||
|
import HaskellZcash.Types
|
||
|
|
||
|
-- | Check if given bytestring is a valid encoded unified address
|
||
|
isValidUnifiedAddress :: BS.ByteString -> Bool
|
||
|
isValidUnifiedAddress = rustWrapperIsUA
|
||
|
|
||
|
-- | Attempt to decode the given bytestring into a Unified Full Viewing Key
|
||
|
decodeUfvk :: BS.ByteString -> Maybe UnifiedFullViewingKey
|
||
|
decodeUfvk str =
|
||
|
case net decodedKey of
|
||
|
0 -> Nothing
|
||
|
_ -> Just decodedKey
|
||
|
where
|
||
|
decodedKey = (withPureBorshVarBuffer . rustWrapperUfvkDecode) str
|
||
|
|
||
|
decryptOrchardAction ::
|
||
|
OrchardAction -> UnifiedFullViewingKey -> Maybe OrchardDecodedAction
|
||
|
decryptOrchardAction encAction key =
|
||
|
case a_value decodedAction of
|
||
|
0 -> Nothing
|
||
|
_ -> Just decodedAction
|
||
|
where
|
||
|
decodedAction =
|
||
|
withPureBorshVarBuffer $
|
||
|
rustWrapperOrchardNoteDecode (o_key key) encAction
|