seedelf-cli 0.4.5

Seedelf: A Cardano Stealth Wallet
Documentation
use blstrs::Scalar;
use seedelf_cli::register::Register;
use seedelf_cli::schnorr::{create_proof, fiat_shamir_heuristic, prove, random_scalar};

#[test]
fn test_empty_string() {
    let proof = fiat_shamir_heuristic(
        "".to_string(),
        "".to_string(),
        "".to_string(),
        "".to_string(),
    );
    let outcome = "836cc68931c2e4e3e838602eca1902591d216837bafddfe6f0c8cb07";
    assert_eq!(proof, outcome);
}

#[test]
fn test_real_example() {
    let proof  = fiat_shamir_heuristic(
          "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb".to_string(),
          "81b223cea171a87feba9b7749a2df7601c5a75ae01155fadc124a2ac49099a514cf1e7d9cdc769dceab14a95bd6cb0bd".to_string(),
          "a09d99e02f7200526dc55ef722cc171e7aa14fc732614c02ac58d59d7026a7eb18d8798f6928ea2b513f3a4feb0c94d1".to_string(),
          "acab".to_string(),
        );
    let outcome = "1b556f7bb6a26d00a7c79468794858ba6aa0e41a2c3af0754ec4a11d";
    assert_eq!(proof, outcome);
}

#[test]
fn valid_schnorr_proof() {
    let generator = "97F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB";
    let public_value = "8AE45D4463406206D4DDD77212FA559FDD26B776B35E238E1ECB2E35ED890797F0CE64C757F70C90E567E81F802352AC";
    let z_b = "6ABFE8229317598960FD20B5A88510EDC4CD03D56D085F82665A01584CF01161";
    let g_r_b = "B8E67784C43E083B7ABCBA10D32066720865105FEFC1F669EF76613E2E4D8BB0D883DA2498C4833B970B949A2C688F81";
    let bound = "ACAB";
    assert!(prove(generator, public_value, z_b, g_r_b, bound))
}

#[test]
fn valid_randomized_schnorr_proof() {
    let generator = "8EC0018F7CDDAFFCF3F2F3E2DFE75C3EE3E4F6FB87D62037416EC3037F20323C6823D289D4F31662969D18F373F95D51";
    let public_value = "A6AE4DA5029996FF5F9B825D8A1A3E6295ED914389E7E7A40EECE2C111984C3EFBA34F8DC97B2FBFEBAC48AA5829E5AC";
    let z_b = "30156C22A3978DDE6462D8DD7C6EB10B125DCCCD44ECD011E9EC3C08C4E8A546";
    let g_r_b = "94F0F8C17140E92D7F4635F2B8A7FF6038A041CD1B04974CAFA6B668BFA0E0C372B540F4684E69F70AC974028BDA5486";
    let bound = "ACABFACE";
    assert!(prove(generator, public_value, z_b, g_r_b, bound))
}

#[test]
fn default_register() {
    let sk: Scalar = Scalar::from(1u64);
    let datum: Register = Register::create(sk);
    let generator_hex = "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb";
    assert_eq!(datum.generator, generator_hex);
    assert_eq!(datum.public_value, generator_hex);
}

#[test]
fn random_register() {
    let sk: Scalar = Scalar::from(18446744073709551606u64);
    let datum: Register = Register::create(sk);
    let generator_hex = "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb";
    let public_value_hex = "82dcf46570656ca0d6fb143b8e7c2816b20cb1a6434ca4c8c95c624443c22c9e1d40ad0df5de088b19a4b44b685b8475";
    assert_eq!(datum.generator, generator_hex);
    assert_eq!(datum.public_value, public_value_hex);
}

#[test]
fn create_proof_and_test_it() {
    let sk: Scalar = Scalar::from(18446744073709551606u64);
    let datum: Register = Register::create(sk);
    let generator_hex = "97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb";
    let public_value_hex = "82dcf46570656ca0d6fb143b8e7c2816b20cb1a6434ca4c8c95c624443c22c9e1d40ad0df5de088b19a4b44b685b8475";
    assert_eq!(datum.generator, generator_hex);
    assert_eq!(datum.public_value, public_value_hex);

    let bound = "acab";
    let (z_b, g_r_b) = create_proof(datum.clone(), sk, bound.to_string());
    assert!(prove(
        &datum.generator,
        &datum.public_value,
        &z_b,
        &g_r_b,
        bound
    ))
}

#[test]
fn create_random_proof_and_test_it() {
    let sk: Scalar = random_scalar();
    let datum: Register = Register::create(sk);
    let bound = "acab";
    let (z_b, g_r_b) = create_proof(datum.clone(), sk, bound.to_string());
    assert!(prove(
        &datum.generator,
        &datum.public_value,
        &z_b,
        &g_r_b,
        bound
    ))
}

#[test]
fn create_random_proof_rerandomize_it_and_test_it() {
    let sk: Scalar = random_scalar();
    let datum: Register = Register::create(sk).rerandomize();
    let bound = "acab";
    let (z_b, g_r_b) = create_proof(datum.clone(), sk, bound.to_string());
    assert!(prove(
        &datum.generator,
        &datum.public_value,
        &z_b,
        &g_r_b,
        bound
    ))
}

#[test]
fn valid_is_owned() {
    let sk: Scalar = random_scalar();
    let datum: Register = Register::create(sk).rerandomize();
    assert!(datum.is_owned(sk))
}

#[test]
fn invalid_is_owned() {
    let sk1: Scalar = random_scalar();
    let sk2: Scalar = random_scalar();
    let datum: Register = Register::create(sk1).rerandomize();
    assert!(!datum.is_owned(sk2))
}