@@ -18,6 +18,7 @@ use self::cardano::hdwallet;
1818use self :: cardano:: paperwallet;
1919use self :: cardano:: address;
2020use self :: cardano:: hdpayload;
21+ use self :: cardano:: redeem;
2122use self :: cardano:: { util:: { hex} , tx, fee, coin, txutils} ;
2223use self :: cardano:: config:: { Config } ;
2324use self :: cardano:: wallet:: { self , bip44, rindex, scheme:: { Wallet , SelectionPolicy } } ;
@@ -1086,3 +1087,20 @@ pub extern "C" fn decrypt_with_password( password_ptr: *const c_uchar
10861087 -1
10871088 }
10881089}
1090+
1091+ unsafe fn read_redeem_private_key ( rprv_ptr : * const c_uchar ) -> redeem:: PrivateKey {
1092+ let rprv_ptr = std:: slice:: from_raw_parts ( rprv_ptr, redeem:: PRIVATEKEY_SIZE ) ;
1093+ redeem:: PrivateKey :: from_slice ( rprv_ptr) . unwrap ( )
1094+ }
1095+
1096+ unsafe fn write_redeem_public_key ( rpub : & redeem:: PublicKey , rpub_ptr : * mut c_uchar ) {
1097+ let out = std:: slice:: from_raw_parts_mut ( rpub_ptr, redeem:: PUBLICKEY_SIZE ) ;
1098+ out[ 0 ..redeem:: PUBLICKEY_SIZE ] . clone_from_slice ( rpub. as_ref ( ) ) ;
1099+ }
1100+
1101+ #[ no_mangle]
1102+ pub extern "C" fn cardano_redeem_prv_to_pub ( rprv_ptr : * const c_uchar , rpub_ptr : * mut c_uchar ) {
1103+ let private_key = unsafe { read_redeem_private_key ( rprv_ptr) } ;
1104+ let public_key = private_key. public ( ) ;
1105+ unsafe { write_redeem_public_key ( & public_key, rpub_ptr) }
1106+ }
0 commit comments