work in progress
This commit is contained in:
parent
d680c4761f
commit
9406262435
|
@ -0,0 +1,29 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="Cargo <libbolt>">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-i686-pc-windows-gnu-0.4.0" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/bn-0.4.3" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/byteorder-1.2.1" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.0.1" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.3.22" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/num-traits-0.1.43" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/bincode-0.5.9" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/byteorder-0.5.3" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.27" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/pkg-config-0.3.9" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/fuchsia-zircon-0.3.3" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/num-traits-0.2.0" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/fuchsia-zircon-sys-0.3.3" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-serialize-0.3.24" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/libsodium-sys-0.0.16" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.4.2" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-0.3.4" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/serde-0.7.15" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/sodiumoxide-0.0.16" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.36" />
|
||||||
|
<root url="file://$USER_HOME$/.cargo/registry/src/github.com-1ecc6299db9ec823/bincode-0.6.1" />
|
||||||
|
</CLASSES>
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -12,6 +12,13 @@ license = "MIT License"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bn = "0.4.3"
|
bn = "0.4.3"
|
||||||
rand = "~0.3.14"
|
rand = "~0.3.14"
|
||||||
|
bincode = "0.5.9"
|
||||||
|
sodiumoxide = "0.0.16"
|
||||||
|
|
||||||
|
[dev-dependencies.bincode]
|
||||||
|
version = "~0.6.0"
|
||||||
|
default-features = false
|
||||||
|
features = ["rustc-serialize"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "bolt"
|
name = "bolt"
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -1,8 +1,16 @@
|
||||||
.PHONY: all
|
.PHONY: all test doc clean
|
||||||
|
|
||||||
all:
|
all:
|
||||||
cargo build
|
cargo build
|
||||||
cargo run
|
cargo run
|
||||||
|
|
||||||
|
test:
|
||||||
|
# runs the unit test suite
|
||||||
|
cargo test
|
||||||
|
|
||||||
|
doc:
|
||||||
|
# generates the documentation
|
||||||
|
cargo doc
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
cargo clean
|
cargo clean
|
||||||
|
|
|
@ -25,5 +25,8 @@ fn main() {
|
||||||
assert!(alice_ss == bob_ss && bob_ss == carol_ss);
|
assert!(alice_ss == bob_ss && bob_ss == carol_ss);
|
||||||
println!("All bn tests succeeded!");
|
println!("All bn tests succeeded!");
|
||||||
|
|
||||||
libbolt::setup();
|
let pk = libbolt::setup();
|
||||||
|
// let msg = String::from("Hello, World!");
|
||||||
|
|
||||||
|
// let cm = libbolt::commit(pk, msg);
|
||||||
}
|
}
|
||||||
|
|
179
src/lib.rs
179
src/lib.rs
|
@ -1,34 +1,171 @@
|
||||||
extern crate bn;
|
extern crate bn;
|
||||||
|
extern crate rand;
|
||||||
|
extern crate bincode;
|
||||||
|
extern crate sodiumoxide;
|
||||||
|
use std::fmt;
|
||||||
|
use bn::{Group, Fr, G1, G2, pairing};
|
||||||
|
use bincode::SizeLimit::Infinite;
|
||||||
|
use bincode::rustc_serialize::{encode, decode};
|
||||||
|
use sodiumoxide::crypto::hash::sha256;
|
||||||
|
|
||||||
// define some structures here
|
// define some structures here
|
||||||
|
pub struct PublicKey {
|
||||||
pub fn test_libbolt() {
|
g: G1,
|
||||||
println!("Hello, Libbolt here!");
|
h: G1
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup() {
|
pub struct Commitment {
|
||||||
|
c: G1,
|
||||||
|
d: Fr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Begin CL Signature scheme data structures
|
||||||
|
pub struct PublicKeySigs {
|
||||||
|
X: G1,
|
||||||
|
Y: G1
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SecretKeySigs {
|
||||||
|
x: Fr,
|
||||||
|
y: Fr
|
||||||
|
}
|
||||||
|
|
||||||
|
// End CL Signature scheme data structures
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// To hash this message structure, encode each element in the tuple
|
||||||
|
// as a byte stream, then apply a hash on it. Then, convert the output value into
|
||||||
|
// a Fr element.
|
||||||
|
pub struct Message {
|
||||||
|
sk_sigs: SecretKeySigs, // the secret key for the signature scheme
|
||||||
|
k1: Fr, // seed 1 for PRF
|
||||||
|
k2: Fr, // seed 2 for PRF
|
||||||
|
balance: i32 // the balance for the user
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add a function that operates over the Message structure
|
||||||
|
// TODO: to perform the encodng an hash
|
||||||
|
impl Message {
|
||||||
|
fn hash(&self) -> Fr {
|
||||||
|
let rng = &mut rand::thread_rng();
|
||||||
|
let a = Fr::random(rng);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for PublicKey {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
let g_vec: Vec<u8> = encode(&self.g, Infinite).unwrap();
|
||||||
|
let h_vec: Vec<u8> = encode(&self.h, Infinite).unwrap();
|
||||||
|
let mut g_s = String::new();
|
||||||
|
for x in g_vec.iter() {
|
||||||
|
g_s = format!("{}{:x}", g_s, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut h_s = String::new();
|
||||||
|
for y in h_vec.iter() {
|
||||||
|
h_s = format!("{}{:x}", h_s, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
write!(f, "PK : (g=0x{}, h=0x{})", g_s, h_s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl fmt::Display for Commitment {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
let c_vec: Vec<u8> = encode(&self.c, Infinite).unwrap();
|
||||||
|
let mut c_s = String::new();
|
||||||
|
for x in c_vec.iter() {
|
||||||
|
c_s = format!("{}{:x}", c_s, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
let d_vec: Vec<u8> = encode(&self.d, Infinite).unwrap();
|
||||||
|
let mut d_s = String::new();
|
||||||
|
for x in d_vec.iter() {
|
||||||
|
d_s = format!("{}{:x}", d_s, x);
|
||||||
|
}
|
||||||
|
write!(f, "Commitment : (c=0x{}, d=0x{})", c_s, d_s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn misc_tests() {
|
||||||
|
let rng = &mut rand::thread_rng();
|
||||||
|
let a = Fr::random(rng);
|
||||||
|
// println!("crs = {}", stringify!(a));
|
||||||
|
// let limit = bincode::SizeLimit::Bounded(256);
|
||||||
|
let encoded: Vec<u8> = encode(&a, Infinite).unwrap();
|
||||||
|
println!("a length = {}", encoded.len());
|
||||||
|
println!("a = {:?}", encoded);
|
||||||
|
print!("a (hex) = 0x");
|
||||||
|
for x in encoded.iter() {
|
||||||
|
print!("{:x}", x);
|
||||||
|
}
|
||||||
|
print!("\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Implements the setup algorithm for the Pedersen92 commitment scheme
|
||||||
|
*/
|
||||||
|
pub fn setup() -> PublicKey {
|
||||||
println!("Run Setup...");
|
println!("Run Setup...");
|
||||||
|
let rng = &mut rand::thread_rng();
|
||||||
|
let g = G1::random(rng);
|
||||||
|
let h = G1::random(rng);
|
||||||
|
let pk = PublicKey { g: g, h: h };
|
||||||
|
println!("{}", pk);
|
||||||
|
return pk;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn keygen() {
|
// TODO: need to be able to handle a message structure
|
||||||
println!("Run Keygen...");
|
pub fn commit(pk : PublicKey, msg : Message) -> Commitment {
|
||||||
|
let rng = &mut rand::thread_rng();
|
||||||
|
|
||||||
|
let r = Fr::random(rng);
|
||||||
|
// TODO: replace with hash of message into m (of type Fr)
|
||||||
|
let m = msg.hash();
|
||||||
|
let c = (pk.g * m) + (pk.h * r);
|
||||||
|
// return (c, r) <- d=r
|
||||||
|
let commitment = Commitment { c: c, d: r };
|
||||||
|
|
||||||
|
// debugging
|
||||||
|
println!("{}", commitment);
|
||||||
|
return commitment;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init() {
|
/*
|
||||||
println!("Run Init...");
|
pub fn decommit(pk: PublicKey, cm: Commitment, msg: Message) -> bool {
|
||||||
|
// TODO: replace with hash of message into m (of type Fr)
|
||||||
|
let m = Fr::random(rng);
|
||||||
|
let dm = (pk.g * m) + (pk.h * cm.d);
|
||||||
|
return dm == cm.c;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
pub fn refund() {
|
|
||||||
println!("Run Refund...");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn refute() {
|
//pub fn keygen() {
|
||||||
println!("Run Refute...");
|
// println!("Run Keygen...");
|
||||||
|
//}
|
||||||
}
|
//
|
||||||
|
//pub fn init() {
|
||||||
pub fn resolve() {
|
// println!("Run Init...");
|
||||||
println!("Run Resolve...");
|
//
|
||||||
|
//}
|
||||||
}
|
//
|
||||||
|
//pub fn refund() {
|
||||||
|
// println!("Run Refund...");
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//pub fn refute() {
|
||||||
|
// println!("Run Refute...");
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//pub fn resolve() {
|
||||||
|
// println!("Run Resolve...");
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
Loading…
Reference in New Issue