a bunch of updates that allow exposing three new functions. makefile updated to test cpp interface

This commit is contained in:
Gabe Kaptchuk 2019-03-18 01:25:14 -04:00
parent a60e4f2390
commit 9fdad515dc
5 changed files with 139 additions and 11 deletions

View File

@ -29,5 +29,15 @@ doc:
# generates the documentation
cargo +nightly doc
pythontests:
cargo +nightly build
python src/main.py
cpptests:
cargo +nightly build
g++ src/main.cpp -L ./target/debug/ -lbolt -o cpp_test
LD_LIBRARY_PATH=./target/debug/ ./cpp_test
rm cpp_test
clean:
cargo +nightly clean

View File

@ -632,7 +632,7 @@ pub mod bidirectional {
#[derive(Serialize, Deserialize)]
pub struct PublicParams {
cl_mpk: clsigs::PublicParams,
pub cl_mpk: clsigs::PublicParams,
l: usize, // messages for commitment
#[serde(serialize_with = "serialization_wrappers::serialize_bullet_proof", deserialize_with = "serialization_wrappers::deserialize_bullet_proof" )]
@ -759,13 +759,13 @@ pub mod bidirectional {
#[derive(Clone, Serialize, Deserialize)]
pub struct ChannelclosureC {
pub message: RefundMessage,
signature: clsigs::SignatureD
pub signature: clsigs::SignatureD
}
#[derive(Clone, Serialize, Deserialize)]
pub struct ChannelclosureM {
message: RevokedMessage,
signature: clsigs::SignatureD
pub message: RevokedMessage,
pub signature: clsigs::SignatureD
}
// proof of valid balance
@ -871,6 +871,7 @@ pub mod bidirectional {
let mut x: Vec<Fr> = vec![r, cid, b0, h_wpk];
// commitment of wallet values
let w_com = commit_scheme::commit(&cm_csp, &x, r);
// construct channel token
let t_c = ChannelToken { w_com: w_com, pk: keypair.pk.clone(), third_party_pay: channel.third_party };
@ -1873,7 +1874,6 @@ pub mod ffishim {
// Deserialize the merchant data
let deserialized_merchant_data: bidirectional::InitMerchantData = deserialize_object(serialized_merchant_data);
//TODO handle none()
// Deserialize the client closure
@ -1910,6 +1910,69 @@ pub mod ffishim {
let cser = CString::new(ser).unwrap();
cser.into_raw()
}
#[no_mangle]
pub extern fn ffishim_validate_channel_open(serialized_channel_token: *mut c_char, serialized_messages: *mut c_char) -> *mut c_char {
// Deserialize the channel token
let deserialized_channel_token: serialization_wrappers::WalletCommitmentAndParamsWrapper = deserialize_object(serialized_channel_token);
// Deserialize the vec<fr> x
let deserialized_messages: serialization_wrappers::VecFrWrapper = deserialize_object(serialized_messages);
let ser = match commit_scheme::decommit(&deserialized_channel_token.params, &deserialized_channel_token.com, &deserialized_messages.0) {
false => "{\'return_value\':\'false\'}",
true => "{\'return_value\':\'true\'}",
};
let cser = CString::new(ser).unwrap();
cser.into_raw()
}
#[no_mangle]
pub extern fn ffishim_validate_channel_close(serialized_pp: *mut c_char, serialized_closure_customer: *mut c_char, serialized_merchant_public_key: *mut c_char) -> *mut c_char {
// Deserialize the pp
let deserialized_pp: bidirectional::PublicParams = deserialize_object(serialized_pp);
// Deserialize the customer closure
let deserialized_closure_customer: bidirectional::ChannelclosureC = deserialize_object(serialized_closure_customer);
// Deserialize the merchant keypair
let deserialized_merchant_public_key: clsigs::PublicKeyD = deserialize_object(serialized_merchant_public_key);
//validate signature
let ser = match clsigs::verify_d(&deserialized_pp.cl_mpk, &deserialized_merchant_public_key, &deserialized_closure_customer.message.hash(), &deserialized_closure_customer.signature) {
false => "{\'return_value\':\'false\'}",
true => "{\'return_value\':\'true\'}",
};
let cser = CString::new(ser).unwrap();
cser.into_raw()
}
#[no_mangle]
pub extern fn ffishim_resolve_channel_dispute(serialized_pp: *mut c_char, serialized_channel_closure_message_customer: *mut c_char, serialized_channel_token_client: *mut c_char, serialized_channel_closure_message_merchant: *mut c_char, serialized_merchant_public_key: *mut c_char) -> *mut c_char {
// Deserialize the pp
let deserialized_pp: bidirectional::PublicParams = deserialize_object(serialized_pp);
// Deserialize the customer closure
let deseralized_customer_closure: bidirectional::ChannelclosureC = deserialize_object(serialized_channel_closure_message_customer);
// Deserialize the Channel Token
let deserialized_channel_token: bidirectional::ChannelToken = deserialize_object(serialized_channel_token_client);
// Deserialize the merchant closure
let deserialized_closure_merchant: bidirectional::ChannelclosureM = deserialize_object(serialized_channel_closure_message_merchant);
// Deserialize the merchant keypair
let deserialized_merchant_public_key: clsigs::PublicKeyD = deserialize_object(serialized_merchant_public_key);
//Verify the revocation token
let ser = match clsigs::verify_d(&deserialized_pp.cl_mpk, &deserialized_merchant_public_key, &deserialized_closure_merchant.message.hash(), &deserialized_closure_merchant.signature) {
false => "{\'return_value\':\'false\'}",
true => "{\'return_value\':\'true\'}",
};
let cser = CString::new(ser).unwrap();
cser.into_raw()
}
}
#[cfg(all(test, feature = "unstable"))]

24
src/main.cpp Normal file
View File

@ -0,0 +1,24 @@
#include <iostream>
#include "main.h"
int main()
{
// Testing the validate channel open rust functionality
std::string cm_csp = "{\"com\":{\"c\":[4,6,218,95,139,44,142,86,18,60,32,17,124,114,153,176,117,107,149,252,98,255,181,197,174,160,86,110,81,105,51,77,181,55,71,7,212,158,186,21,222,49,52,130,71,55,9,235,222,210,12,89,8,105,234,180,59,26,56,148,10,6,62,227,181,6,191,19,186,105,204,13,115,223,178,254,125,28,121,249,158,241,183,226,83,176,101,200,169,244,15,158,101,37,234,206,203,94,236,126,59,185,182,23,110,145,61,248,111,89,8,154,247,196,10,21,211,21,58,243,204,238,209,180,185,95,71,173,178],\"r\":[3,57,194,144,135,110,163,182,35,213,188,149,61,173,116,213,111,211,127,132,12,49,29,249,63,164,255,128,237,122,122,250]},\"params\":{\"pub_bases\":[[4,1,14,26,235,250,26,53,41,48,246,128,250,138,198,42,127,176,89,18,83,27,63,84,144,174,53,251,77,39,204,14,34,65,224,51,186,23,137,26,133,168,167,124,55,49,236,75,65,46,113,117,160,53,34,44,99,242,95,208,18,69,243,56,108,7,242,93,92,76,235,87,201,218,89,123,104,66,251,101,214,54,3,71,148,142,66,134,180,124,182,222,133,154,143,38,239,43,91,124,174,158,138,61,87,80,140,113,223,69,13,9,64,76,3,204,56,244,38,68,150,4,113,43,87,194,8,113,28],[4,2,164,175,155,94,92,88,213,227,215,2,185,79,106,93,189,118,221,173,178,118,246,143,136,55,8,203,129,11,152,31,166,60,40,18,140,140,237,206,16,62,80,88,88,7,231,225,165,57,227,65,51,42,250,171,90,73,158,215,87,72,40,23,29,2,98,229,146,246,96,87,199,240,192,219,193,233,137,123,220,127,222,117,24,127,253,132,124,57,47,64,58,136,85,255,215,180,153,91,194,6,147,111,46,114,115,107,206,185,86,233,10,175,245,217,152,59,191,191,244,28,228,157,136,172,176,106,143],[4,7,100,134,2,189,120,60,93,161,40,229,122,180,60,122,183,86,177,35,195,6,194,113,124,89,11,152,125,207,87,230,215,189,149,148,10,127,166,18,182,77,106,123,172,193,236,63,245,193,168,41,130,80,57,204,41,199,218,53,241,52,102,174,207,2,185,122,127,124,103,36,5,87,45,44,79,197,211,233,214,42,3,182,30,54,189,172,71,253,218,186,76,132,96,24,161,255,170,18,143,27,170,237,219,254,44,197,149,220,1,177,162,76,108,107,92,122,70,205,199,234,101,51,104,220,119,118,82],[4,8,84,32,244,94,100,81,246,1,89,31,204,135,132,61,151,185,243,84,204,135,251,123,193,93,120,176,235,52,193,50,7,120,220,148,153,29,65,141,107,17,145,156,230,195,96,109,117,53,219,21,49,121,99,233,156,158,158,29,58,93,167,63,121,0,230,167,109,129,92,51,112,254,17,88,217,102,122,69,169,17,137,195,163,179,190,3,138,3,129,4,237,245,170,171,58,95,165,201,85,122,193,115,182,9,66,39,21,54,182,58,236,128,230,7,170,64,169,87,95,218,32,238,199,79,107,106,243],[4,4,182,17,88,147,5,132,115,60,119,27,138,166,101,204,217,156,238,108,255,30,164,148,39,4,33,195,152,212,27,196,127,43,88,102,118,76,237,179,40,97,124,142,162,0,44,20,143,55,165,230,238,16,48,248,224,219,251,46,14,60,116,215,142,0,101,173,151,113,250,77,198,49,106,144,28,170,18,106,80,145,6,72,54,186,22,55,205,218,117,45,167,171,248,25,179,176,76,216,253,113,208,26,29,87,157,39,225,231,198,202,8,144,69,152,11,18,2,242,55,227,93,27,207,4,99,185,157]]}}";
std::string x = "[[3,57,194,144,135,110,163,182,35,213,188,149,61,173,116,213,111,211,127,132,12,49,29,249,63,164,255,128,237,122,122,250],[47,197,153,89,35,28,236,71,233,146,254,194,211,208,146,152,208,30,74,147,115,64,57,141,31,199,112,188,113,193,196,232],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50],[24,79,61,24,253,183,252,253,186,39,65,174,36,49,35,125,138,69,241,75,91,12,141,247,191,173,213,219,246,133,136,217]]";
cout << "Output of Validate Channel Open: " << ffishim_validate_channel_open(cm_csp.c_str(), x.c_str()) << endl;
std::string pp = "{\"cl_mpk\":{\"g1\":[4,38,201,52,133,105,131,155,252,38,83,118,242,254,195,215,132,160,87,199,153,182,116,69,199,155,165,36,48,228,242,187,79,19,69,126,76,221,133,246,98,181,198,173,53,156,2,251,122,118,203,163,31,219,135,90,215,252,201,119,31,83,176,40,233],\"g2\":[4,2,65,2,94,242,238,3,52,232,39,246,186,8,219,25,150,224,87,201,1,247,186,29,129,250,53,46,215,221,28,4,57,35,158,103,12,88,195,1,153,250,196,156,150,155,31,209,34,65,100,151,76,20,192,73,206,224,210,151,77,195,254,164,76,0,214,65,56,171,248,69,73,46,86,50,161,92,26,164,142,30,217,202,96,22,149,8,25,128,123,244,192,62,96,36,233,48,2,181,173,147,253,244,195,91,55,251,251,106,215,179,61,235,62,252,92,61,152,61,195,195,54,149,60,32,208,48,167]},\"l\":4,\"bp_gens\":[64,1],\"range_proof_bits\":32,\"extra_verify\":false}";
// std::string rc_c = "{\"message\":{\"msgtype\":\"refundToken\",\"wpk\":[2,9,177,56,44,123,2,195,197,195,91,30,6,192,45,31,255,169,37,82,197,121,211,144,42,184,252,222,24,236,80,193,182],\"balance\":55,\"r\":null,\"rt\":null},\"signature\":{\"a\":[4,1,77,7,189,10,151,123,122,179,45,202,58,145,111,73,196,240,1,227,44,190,191,217,29,76,155,216,21,56,104,91,158,226,87,79,161,241,41,247,45,103,200,252,94,225,185,188,223,50,220,58,183,111,10,220,140,188,209,72,166,159,97,74,206,8,106,69,130,205,206,185,167,33,209,4,3,219,138,252,220,169,105,143,109,215,254,63,58,70,215,149,145,226,172,150,22,141,112,65,32,181,73,179,35,149,168,100,114,51,210,127,167,71,233,24,229,226,66,196,139,78,158,69,17,251,155,241,65],\"A\":[[4,7,40,47,219,130,104,233,20,140,219,86,114,165,169,142,140,22,76,165,128,202,27,57,189,138,136,11,223,51,46,247,86,192,119,236,130,159,142,248,78,169,218,221,104,36,87,98,144,82,137,17,216,178,105,67,35,138,36,230,69,152,200,184,127,0,177,139,179,61,220,31,101,63,200,50,129,178,98,202,32,25,228,224,24,254,45,8,122,184,66,43,223,178,119,103,232,20,187,79,157,215,31,183,253,75,206,252,182,187,150,226,151,254,164,183,161,0,182,204,238,84,64,23,52,93,221,10,222],[4,5,127,124,63,165,71,4,26,46,246,57,4,228,149,146,157,161,236,198,55,53,97,16,47,148,61,248,253,80,204,112,249,152,69,156,18,45,170,204,46,111,198,72,155,212,132,90,53,91,59,171,93,44,185,76,18,232,206,93,111,192,135,192,121,1,134,47,168,49,230,145,46,219,29,74,219,2,172,169,193,207,232,72,183,158,250,75,93,165,227,180,184,126,218,232,255,95,88,190,142,243,16,212,104,8,231,50,29,175,201,126,189,197,43,125,124,56,128,24,113,112,242,60,24,78,180,24,65]],\"b\":[4,1,178,212,232,58,246,93,60,36,61,129,116,216,115,237,212,232,61,242,141,0,5,153,242,135,172,154,197,103,56,100,121,31,124,170,35,217,85,20,90,100,155,39,225,174,194,188,181,6,112,132,74,88,15,29,175,195,127,204,137,173,55,203,100,5,127,106,55,184,192,234,205,218,143,161,10,110,14,120,7,72,217,17,70,34,126,200,84,112,83,199,181,200,38,71,232,149,67,142,93,9,251,32,200,144,174,111,204,65,75,109,69,14,172,107,118,15,179,57,38,183,89,94,5,234,209,195,109],\"B\":[[4,2,0,97,68,105,153,21,64,21,142,94,94,100,191,169,64,177,165,93,69,177,15,33,124,194,60,150,245,126,200,166,18,86,146,168,55,18,39,201,210,142,12,158,234,142,163,35,229,215,77,213,198,235,40,134,184,161,255,236,11,56,115,104,68,0,39,211,33,201,22,143,243,254,122,6,246,57,215,250,96,16,255,246,123,6,198,133,114,228,12,38,195,20,252,241,113,229,62,107,243,83,203,155,251,37,106,10,56,226,35,44,119,9,187,103,247,29,3,227,194,73,122,172,219,221,78,157,179],[4,4,41,3,71,30,22,217,140,181,229,122,135,95,101,36,102,148,188,200,148,140,184,227,198,255,64,205,158,83,139,35,174,84,106,112,228,1,26,185,172,189,224,159,192,196,85,182,52,211,241,17,180,106,135,55,104,211,215,188,127,29,189,73,239,1,151,128,8,225,3,52,62,237,152,115,38,167,137,168,155,38,0,219,90,107,230,127,179,200,85,11,16,143,119,34,184,123,63,136,44,149,20,44,181,142,16,39,159,188,174,99,36,75,142,79,179,34,96,226,152,53,65,158,59,67,100,221,105]],\"c\":[4,3,206,175,239,200,75,211,41,136,69,16,208,25,174,157,23,229,249,101,228,235,3,238,48,254,210,60,244,119,201,155,119,192,85,250,90,150,223,108,164,169,56,71,52,60,139,194,88,124,139,120,145,74,179,196,242,73,38,73,245,57,161,9,118,2,121,140,103,96,154,157,63,249,169,37,33,160,130,234,50,53,84,9,138,38,134,127,61,99,123,93,14,174,126,52,134,1,233,154,6,255,67,136,111,14,24,2,79,136,141,156,150,38,60,217,57,74,195,215,209,95,100,240,221,119,192,156,136]}}";
std::string rc_c = "{\"message\":{\"msgtype\":\"refundToken\",\"wpk\":[3,108,79,169,238,98,15,205,191,239,241,150,119,148,90,203,86,252,237,149,89,7,247,192,212,155,193,140,185,96,29,57,89],\"balance\":55,\"r\":null,\"rt\":null},\"signature\":{\"a\":[4,5,142,169,217,62,3,199,143,201,139,153,125,216,94,196,221,70,207,13,163,53,70,170,99,147,174,195,168,232,78,194,59,247,246,7,91,253,123,72,105,41,235,72,196,201,36,245,255,57,71,24,28,116,194,166,119,82,165,119,2,142,119,180,197,3,67,163,240,182,166,26,153,166,62,37,214,150,14,201,60,140,130,123,140,163,214,99,217,187,187,158,171,10,22,238,40,254,197,39,27,217,141,227,222,56,127,38,122,167,81,21,193,98,109,244,111,160,195,119,197,139,120,66,20,190,147,176,205],\"A\":[[4,2,91,149,133,222,23,20,110,96,126,120,36,211,163,65,117,191,26,82,232,14,118,172,247,230,150,101,122,56,71,98,190,227,238,181,7,244,151,212,167,132,193,192,223,117,100,178,122,98,10,201,32,48,117,229,39,94,171,34,91,68,176,162,202,8,22,99,186,5,146,203,96,146,194,159,49,232,88,178,0,219,46,51,60,160,37,176,49,200,104,82,244,22,171,89,187,96,236,195,58,215,71,230,22,214,106,59,7,196,200,182,132,220,15,132,57,240,151,108,25,198,167,6,67,47,36,248,140],[4,8,78,130,250,169,175,146,89,195,13,210,32,9,249,182,198,50,243,110,255,17,16,77,1,232,61,163,94,118,129,183,46,115,152,254,159,204,181,178,21,20,88,35,174,62,164,174,218,45,33,254,178,164,243,247,19,128,215,60,25,34,46,180,217,5,39,207,214,90,204,138,61,9,202,169,118,104,24,51,241,132,125,70,113,132,98,204,185,212,217,54,4,92,254,106,224,99,131,129,249,250,65,148,17,212,45,21,152,203,240,218,53,50,221,99,162,83,10,162,189,110,226,75,148,3,101,123,193]],\"b\":[4,1,134,135,212,216,228,229,23,253,60,1,142,26,103,184,34,184,115,145,222,50,223,65,91,183,1,149,68,78,117,149,120,62,153,255,54,247,65,151,16,56,142,135,193,190,59,98,66,82,233,127,141,103,14,51,123,90,137,117,99,181,12,160,63,4,83,6,164,10,23,114,153,21,140,149,199,192,130,159,237,150,87,44,109,126,57,15,137,238,152,233,242,64,127,226,202,181,96,57,142,166,2,77,15,207,153,57,9,202,71,61,182,105,112,78,6,92,76,25,38,192,145,32,22,77,12,6,221],\"B\":[[4,7,121,196,34,23,36,149,205,231,235,206,43,11,194,215,204,79,43,14,178,97,46,91,219,200,35,57,18,0,136,106,114,69,75,147,255,45,220,70,186,89,27,7,91,187,45,10,218,106,18,175,185,119,187,125,0,7,48,142,130,25,227,146,40,7,31,113,75,206,134,81,255,127,164,0,131,39,89,90,25,119,162,105,181,138,144,44,132,214,236,52,222,104,93,102,24,74,95,120,62,247,171,143,81,237,195,111,50,91,233,124,183,45,106,230,54,196,105,139,215,208,153,132,126,173,116,144,127],[4,1,138,202,227,92,118,155,3,128,147,248,77,130,166,161,112,142,247,92,154,226,83,41,228,89,8,189,250,2,39,111,104,54,0,208,112,35,80,232,33,28,212,12,154,197,179,190,72,51,71,224,76,155,169,246,181,133,37,86,208,142,131,121,224,1,39,18,19,165,221,56,64,251,79,227,154,93,13,226,79,119,46,42,169,63,46,229,195,60,117,66,60,60,28,37,161,168,177,37,72,138,25,8,237,80,233,209,210,165,181,118,197,129,23,77,11,117,190,176,38,53,48,2,33,211,24,242,31]],\"c\":[4,1,96,179,188,105,157,175,152,101,255,91,199,136,105,157,237,98,143,215,73,178,116,82,216,20,70,6,79,254,100,217,251,179,41,195,60,2,138,69,87,79,6,12,94,175,81,187,227,125,177,91,107,38,148,175,84,217,25,189,177,42,64,23,102,6,26,182,123,162,220,55,168,5,94,132,123,168,109,43,162,22,177,113,211,194,116,23,49,37,97,33,182,174,198,247,114,163,28,211,199,233,101,174,211,233,142,100,209,222,152,179,134,255,11,189,132,248,160,35,121,123,151,166,27,226,241,242,44]}}";
std::string pk_m = "{\"X\":[4,11,212,237,26,243,240,138,8,177,209,226,107,248,36,201,223,126,56,194,246,160,2,147,28,79,38,238,161,106,85,209,85,32,162,79,255,213,15,35,214,217,129,81,129,91,115,152,145,55,199,182,20,136,217,59,146,221,142,172,3,66,134,147,170],\"Y\":[4,13,143,248,55,31,110,150,169,97,222,5,62,113,117,110,224,148,76,164,73,197,211,222,97,116,142,84,241,124,135,5,52,3,255,73,76,91,182,83,193,49,188,214,60,8,232,98,185,9,92,164,89,94,252,123,26,179,220,245,131,91,73,108,177],\"Z\":[[4,11,195,77,142,142,41,122,88,140,236,130,168,59,251,84,31,236,241,241,36,211,109,185,12,231,47,158,229,67,34,88,12,39,191,42,236,216,87,207,79,91,101,236,189,82,246,220,228,99,185,171,133,230,80,73,17,230,182,72,184,122,199,84,211],[4,12,198,224,37,137,88,183,146,90,41,137,78,238,122,208,136,246,129,131,219,234,20,123,180,166,91,155,58,170,215,192,218,44,254,23,209,164,165,4,123,0,123,10,91,170,91,69,157,107,196,66,201,137,211,251,32,25,163,198,219,155,125,22,179],[4,15,48,5,87,171,60,247,234,141,11,124,141,166,201,160,205,212,161,227,62,113,70,211,4,115,23,199,63,222,2,146,83,43,76,129,95,89,89,170,101,128,13,118,138,203,163,60,92,18,78,72,0,57,175,14,170,72,46,52,14,46,199,9,228],[4,15,81,170,186,165,58,163,108,57,67,10,24,204,99,8,62,86,242,34,182,45,4,158,249,46,132,231,213,34,177,40,220,36,42,7,153,234,162,79,245,94,105,243,66,116,87,97,128,209,136,194,178,4,45,226,135,27,166,6,82,182,10,31,89]],\"Z2\":[[4,1,46,225,176,211,182,101,246,158,220,186,80,190,22,147,66,139,118,254,254,17,230,201,250,11,103,141,131,177,214,254,43,111,43,150,174,130,34,45,223,46,231,191,97,78,227,180,236,194,27,12,100,3,237,236,120,242,212,59,103,231,59,24,47,7,79,230,192,171,2,165,91,123,154,145,108,42,73,34,150,104,46,183,190,232,59,139,109,122,57,105,50,188,115,33,174,186,249,19,128,219,214,31,144,94,166,71,121,69,8,82,148,105,100,196,15,171,168,99,0,126,35,150,39,2,91,83,22],[4,8,78,227,114,68,33,144,142,20,114,63,203,228,156,104,239,206,153,172,17,48,5,235,24,164,206,3,83,181,254,105,136,141,95,30,167,26,46,250,241,218,128,86,33,214,50,103,153,225,23,235,40,55,152,215,101,21,254,108,23,105,181,249,157,0,12,106,4,151,137,74,249,161,172,215,177,91,99,27,19,134,238,223,82,77,237,175,163,192,210,149,147,155,164,23,226,253,42,10,133,16,8,242,235,242,231,22,46,216,226,84,72,125,74,153,145,191,239,39,36,55,10,128,17,171,149,179,99],[4,0,167,34,129,220,171,64,129,108,37,106,9,107,130,228,139,78,182,207,43,19,83,212,167,152,23,125,148,146,143,220,197,44,187,131,234,16,230,110,92,244,50,162,114,155,31,136,44,41,98,149,233,135,228,224,82,225,12,182,94,19,26,244,153,3,217,90,143,29,46,9,64,52,232,149,193,11,214,196,38,165,120,205,218,82,221,70,15,109,68,213,233,27,7,215,81,155,126,31,154,121,19,2,25,156,11,89,40,36,69,231,165,29,123,87,158,166,105,242,34,179,39,142,164,251,93,124,109],[4,3,175,119,174,99,244,192,184,229,87,231,64,87,171,19,95,228,179,203,178,92,176,14,242,131,251,226,199,36,180,69,241,217,63,95,210,234,3,122,32,42,154,9,87,131,222,86,49,92,62,220,24,147,3,192,114,160,93,120,111,98,32,93,6,7,65,19,23,182,23,36,124,46,87,2,67,156,193,176,128,111,33,236,84,176,125,1,193,175,138,250,241,46,157,154,183,41,254,210,154,224,103,92,236,12,179,190,7,242,165,127,79,250,119,95,220,93,81,148,113,191,107,3,150,200,72,91,87]],\"W\":[[4,22,229,244,131,241,7,130,217,228,193,167,191,168,98,145,15,160,159,82,185,195,131,238,27,80,18,176,171,183,83,100,161,38,213,179,117,33,5,124,233,163,140,96,192,172,252,185,17,99,234,176,99,91,236,122,230,13,126,73,120,240,30,70,25],[4,40,162,110,228,225,44,134,41,29,218,120,144,45,213,165,83,15,176,195,38,213,88,99,140,122,55,32,237,117,184,43,90,12,158,169,51,215,128,37,18,183,220,252,176,51,125,177,8,246,43,193,6,148,192,195,198,254,229,38,165,21,107,128,50],[4,39,73,110,208,252,249,11,106,99,70,177,105,156,130,115,164,41,223,213,248,116,43,30,136,82,15,27,77,151,40,128,155,34,15,207,216,16,38,213,222,237,233,7,181,175,173,3,21,134,201,81,83,124,51,130,144,30,159,102,158,106,14,198,125],[4,26,117,67,67,125,46,218,51,255,20,59,59,42,20,73,41,220,198,192,5,39,45,207,3,31,170,124,89,40,140,22,123,20,125,19,152,203,241,176,5,72,141,50,252,110,67,110,119,29,229,76,136,104,103,0,82,162,76,161,153,208,225,242,125]]}";
cout << "Output of Validate Channel Close: " << ffishim_validate_channel_close(pp.c_str(), rc_c.c_str(), pk_m.c_str()) << endl;
return 0;
}

21
src/main.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef _MAIN_H_
#define _MAIN_H_
using namespace std;
#ifdef __cplusplus
extern "C" {
#endif
char* ffishim_validate_channel_open(const char *tc_c, const char *m);
char* ffishim_validate_channel_close(const char *pp, const char *rc_c, const char *pk_m);
char* ffishim_resolve_channel_dispute(const char *pp, const char *rc_c, const char *tc_c, const char *rc_m, const char *pk_m);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -5,6 +5,7 @@ use bulletproofs::{BulletproofGens, PedersenGens, RangeProof};
use secp256k1;
use std::fmt;
use curve25519_dalek::ristretto::RistrettoPoint;
use commit_scheme;
// use serde-rustc-serialize-interop;
use serde::{Serialize, Serializer, ser::SerializeSeq, ser::SerializeStruct, Deserialize, Deserializer, de::Visitor, de::Error, de::SeqAccess};
@ -126,7 +127,7 @@ impl<'de> Visitor<'de> for FieldVisitor {
type Value = Fr;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("Sequence of bytes representing an element of G2")
formatter.write_str("Sequence of bytes representing an element of Fr")
}
fn visit_seq<A: SeqAccess<'de>>(self, mut seq: A) -> Result<Self::Value, A::Error>
@ -152,7 +153,7 @@ impl<'de> Visitor<'de> for OptionalFieldVisitor {
type Value = Option<Fr>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("Sequence of bytes representing an element of G2")
formatter.write_str("Sequence of bytes representing an optional Fr")
}
fn visit_seq<A: SeqAccess<'de>>(self, mut seq: A) -> Result<Self::Value, A::Error>
@ -247,7 +248,7 @@ pub fn deserialize_optional_fr<'de, D>(deserializer: D) -> Result<Option<Fr>, D:
where
D: Deserializer<'de>
{
let a = deserializer.deserialize_any(OptionalFieldVisitor);
let a = deserializer.deserialize_option(OptionalFieldVisitor);
Ok(a.unwrap())
}
@ -310,7 +311,7 @@ impl<'de> Visitor<'de> for G2VecVisitor {
type Value = Vec<G2>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("Sequence of byte encodings of G2")
formatter.write_str("Sequence of byte encodings of Vec G2")
}
fn visit_seq<A: SeqAccess<'de>>(self, mut seq: A) -> Result<Self::Value, A::Error> {
@ -336,7 +337,7 @@ impl<'de> Visitor<'de> for GTargetVecVisitor {
type Value = Vec<Gt>;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("Sequence of byte encodings of G2")
formatter.write_str("Sequence of byte encodings of Vec Gt")
}
fn visit_seq<A: SeqAccess<'de>>(self, mut seq: A) -> Result<Self::Value, A::Error> {
@ -419,11 +420,20 @@ where
Ok(a.unwrap())
}
// Wrapper class for Fr
#[derive(Serialize, Deserialize)]
pub struct FrWrapper( #[serde(serialize_with = "serialize_generic_encodable", deserialize_with = "deserialize_fr")] pub Fr);
// Wrapper class for Vec<Fr>
#[derive(Serialize, Deserialize)]
pub struct VecFrWrapper( #[serde(serialize_with = "serialize_generic_encodable_vec", deserialize_with = "deserialize_fr_vec")] pub Vec<Fr>);
// Wrapper class for commitment and the CSParams
#[derive(Serialize, Deserialize)]
pub struct WalletCommitmentAndParamsWrapper {
pub com: commit_scheme::Commitment,
pub params: commit_scheme::CSParams,
}
pub fn serialize_bullet_proof<S>(bp_gens: &bulletproofs::BulletproofGens, serializer: S) -> Result<S::Ok, S::Error>
where