Implement shielded address validator

This commit is contained in:
Rene Vergara 2023-04-18 13:58:21 -05:00
parent d3fe83d4a8
commit 1261a585e6
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
5 changed files with 27 additions and 10 deletions

View file

@ -1,6 +0,0 @@
{-# LANGUAGE OverloadedStrings #-}
module Main where
main :: IO ()
main = putStrLn "Zcash Utilities for Haskell"

View file

@ -17,13 +17,13 @@ use haskell_ffi::{
use zcash_address::{ use zcash_address::{
Network, Network,
unified::{Address, Encoding} unified::{Address, Encoding},
ZcashAddress
}; };
pub enum RW {} pub enum RW {}
pub const RW: PhantomData<RW> = PhantomData; pub const RW: PhantomData<RW> = PhantomData;
#[no_mangle] #[no_mangle]
pub extern "C" fn rust_wrapper_f4jumble( pub extern "C" fn rust_wrapper_f4jumble(
input: *const u8, input: *const u8,
@ -43,3 +43,11 @@ pub extern "C" fn rust_wrapper_ua_decode(
Address::decode(&input).is_ok() Address::decode(&input).is_ok()
//marshall_to_haskell_var(&result, out, out_len, RW); //marshall_to_haskell_var(&result, out, out_len, RW);
} }
#[no_mangle]
pub extern "C" fn rust_wrapper_shielded_decode(
input: *const u8,
input_len: usize) -> bool {
let input: String = marshall_from_haskell_var(input, input_len, RW);
ZcashAddress::try_from_encoded(&input).is_ok()
}

View file

@ -37,3 +37,9 @@ newtype CodedString = CodedString BS.ByteString
} }
-> `Bool' -> `Bool'
#} #}
{# fun pure unsafe rust_wrapper_shielded_decode as rustWrapperIsShielded
{ toBorshVar* `BS.ByteString'&
}
-> `Bool'
#}

View file

@ -1,9 +1,15 @@
module Zcash module Zcash
( f4Jumble ( f4Jumble
, isValidUnifiedAddress , isValidUnifiedAddress
, isValidShieldedAddress
) where ) where
import C.Zcash (CodedString, rustWrapperF4Jumble, rustWrapperIsUA) import C.Zcash
( CodedString
, rustWrapperF4Jumble
, rustWrapperIsShielded
, rustWrapperIsUA
)
import qualified Data.ByteString as BS import qualified Data.ByteString as BS
import Foreign.Rust.Marshall.Fixed import Foreign.Rust.Marshall.Fixed
import Foreign.Rust.Marshall.Variable import Foreign.Rust.Marshall.Variable
@ -13,3 +19,6 @@ f4Jumble = withPureBorshVarBuffer . rustWrapperF4Jumble
isValidUnifiedAddress :: BS.ByteString -> Bool isValidUnifiedAddress :: BS.ByteString -> Bool
isValidUnifiedAddress = rustWrapperIsUA isValidUnifiedAddress = rustWrapperIsUA
isValidShieldedAddress :: BS.ByteString -> Bool
isValidShieldedAddress = rustWrapperIsShielded

View file

@ -36,7 +36,7 @@ library
rustzcash_wrapper-uninstalled rustzcash_wrapper-uninstalled
build-depends: build-depends:
base >=4.7 && <5 base >=4.7 && <5
, borsh , borsh >=0.2
, bytestring , bytestring
, foreign-rust , foreign-rust
, text , text