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::{
Network,
unified::{Address, Encoding}
unified::{Address, Encoding},
ZcashAddress
};
pub enum RW {}
pub const RW: PhantomData<RW> = PhantomData;
#[no_mangle]
pub extern "C" fn rust_wrapper_f4jumble(
input: *const u8,
@ -43,3 +43,11 @@ pub extern "C" fn rust_wrapper_ua_decode(
Address::decode(&input).is_ok()
//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'
#}
{# fun pure unsafe rust_wrapper_shielded_decode as rustWrapperIsShielded
{ toBorshVar* `BS.ByteString'&
}
-> `Bool'
#}

View File

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

View File

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