Change format test vector: label value in hex format

This commit is contained in:
cygnet 2023-07-23 17:14:59 +02:00
parent 0ac736bd54
commit 957a59016d
6 changed files with 44 additions and 136 deletions

37
Cargo.lock generated
View File

@ -2,12 +2,6 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bech32"
version = "0.9.1"
@ -47,36 +41,6 @@ version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
[[package]]
name = "num-bigint"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
]
[[package]]
name = "proc-macro2"
version = "1.0.63"
@ -157,7 +121,6 @@ version = "0.1.0"
dependencies = [
"bech32",
"hex",
"num-bigint",
"secp256k1",
"serde",
"serde_json",

View File

@ -10,9 +10,6 @@ edition = "2021"
secp256k1 = {version = "0.27", features = ["bitcoin-hashes-std"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# rust-crypto = "0.2"
# sha2 = "0.10"
hex = "0.4"
bech32 = "0.9"
# bip32 = { version = "0.5", features = ["alloc"] }
num-bigint = "0.4.0"

View File

@ -58,7 +58,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e"
]
@ -137,7 +137,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e"
]
@ -216,7 +216,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"b7d731d1c0e9d586b3310bdece728f09b487226de5e3ab0660a7368852f3ff02"
]
@ -295,7 +295,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"1b8b6f04c8d9e866fb89d9e04722d4d43675be977f2b251656472caeec423c9e"
]
@ -374,7 +374,7 @@
"0213615388aac3f4a672feef7b6145d65c5f4dd0f83261785279f4d01441445027"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"ebffe68f65898730750aab1770d71d5a0d83c9fc3753f3d277ab6095250046af"
]
@ -453,7 +453,7 @@
"856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"d628eb16f111d127a21927d8d1821457ec651d9990cf074746b34bf2b84e4b9b"
]
@ -532,7 +532,7 @@
"856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"d628eb16f111d127a21927d8d1821457ec651d9990cf074746b34bf2b84e4b9b"
]
@ -611,7 +611,7 @@
"03d47a01f7625f02001c2bd4975ea1d5d09f453818f49f2acf9b1d8636e62f6cd7"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"66b7d24355f2ca5437d51f459601ab89a2ec66e3cf4aad039df0b1d9dbacc519"
]
@ -690,7 +690,7 @@
"03d47a01f7625f02001c2bd4975ea1d5d09f453818f49f2acf9b1d8636e62f6cd7"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"a0969f9f9ffc3c1e3e84bf30da980e405ec977c0e8a39ffab76bd73f780d907d"
]
@ -776,7 +776,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
"68e1fc9289d4754230e4f7f8025252f93b58182c0d45b2ddfffdf694fad55b73",
@ -884,7 +884,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
"68e1fc9289d4754230e4f7f8025252f93b58182c0d45b2ddfffdf694fad55b73",
@ -927,7 +927,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x02",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
"68e1fc9289d4754230e4f7f8025252f93b58182c0d45b2ddfffdf694fad55b73",
@ -1015,9 +1015,9 @@
],
"bip32_seed": "0x01",
"labels": {
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": 2,
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": 3,
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": 1001337
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": "0000000000000000000000000000000000000000000000000000000000000002",
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": "0000000000000000000000000000000000000000000000000000000000000003",
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": "00000000000000000000000000000000000000000000000000000000000f4779"
},
"outputs": [
"14467ccf40b1436244cf78297dbf394d1d801b04cc804f89b79ff6fce9f90696"
@ -1101,9 +1101,9 @@
],
"bip32_seed": "0x01",
"labels": {
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": 2,
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": 3,
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": 1001337
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": "0000000000000000000000000000000000000000000000000000000000000002",
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": "0000000000000000000000000000000000000000000000000000000000000003",
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": "00000000000000000000000000000000000000000000000000000000000f4779"
},
"outputs": [
"ee381b2caa9c5b0184f9061f0b577417fe547ce9f00580f4a9794aa4c2cffb03"
@ -1187,9 +1187,9 @@
],
"bip32_seed": "0x01",
"labels": {
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": 2,
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": 3,
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": 1001337
"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5": "0000000000000000000000000000000000000000000000000000000000000002",
"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9": "0000000000000000000000000000000000000000000000000000000000000003",
"03348b4f5feb64b557dac8cfa10044bdc2094fca9147163bf514f68687e0d1dba6": "00000000000000000000000000000000000000000000000000000000000f4779"
},
"outputs": [
"3eb48b7940b733b15e8333ec8f6e9445a7e247ef653f4876d605b31f1fbc1c27"
@ -1280,7 +1280,7 @@
],
"bip32_seed": "0x01",
"labels": {
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": 1
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": "0000000000000000000000000000000000000000000000000000000000000001"
},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
@ -1375,7 +1375,7 @@
],
"bip32_seed": "0x01",
"labels": {
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": 1
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": "0000000000000000000000000000000000000000000000000000000000000001"
},
"outputs": [
"c39acba526c1ae264c64101e9fc51312d364628a9b6d2608b1209811e1e2dae9",
@ -1484,8 +1484,8 @@
],
"bip32_seed": "0x01",
"labels": {
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": 1,
"02db0c51cc634a4096374b0b895584a3ca2fb3bea4fd0ee2361f8db63a650fcee6": 1337
"0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798": "0000000000000000000000000000000000000000000000000000000000000001",
"02db0c51cc634a4096374b0b895584a3ca2fb3bea4fd0ee2361f8db63a650fcee6": "0000000000000000000000000000000000000000000000000000000000000539"
},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
@ -1593,7 +1593,7 @@
],
"bip32_seed": "0x00",
"labels": {
"02c7120a4e2a14b73fc818ee187e91006626232754f1c90a054cf80a03a3c7fdc1": 61707410023122809948607768024730556383395257260459987367828836358530927314165
"02c7120a4e2a14b73fc818ee187e91006626232754f1c90a054cf80a03a3c7fdc1": "886d280801f09b65955e83cf85830f7b2f8454b8bb41a70f54a8b6e5569a44f5"
},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
@ -1631,7 +1631,7 @@
"03856d771421394858fcb58554f5460a39073e77e3a70bda471841155c391e2b26"
],
"bip32_seed": "0x01",
"labels": [],
"labels": {},
"outputs": [
"feb563950e21c2f1a7bab35c774beab453653bdd6b5a665adb22ce1a30fb083e",
"6a9352c6f71b4c08d6252fdfb43f15584d3e2b71e03268336462287ba15a4478"

View File

@ -1,8 +1,8 @@
use num_bigint::BigUint;
use serde::Deserialize;
use serde_json::{from_str, Value};
use serde_json::from_str;
use std::hash::{Hash, Hasher};
use std::{collections::HashMap, fs::File, io::Read, str::FromStr};
use std::{collections::HashMap, fs::File, io::Read};
#[derive(Debug, Deserialize)]
pub struct TestData {
@ -22,51 +22,10 @@ pub struct ReceivingDataGiven {
pub outpoints: Vec<(String, u32)>,
pub input_pub_keys: Vec<String>,
pub bip32_seed: String,
#[serde(deserialize_with = "empty_array_as_map")]
pub labels: HashMap<String, BigUint>,
pub labels: HashMap<String, String>,
pub outputs: Vec<String>,
}
fn empty_array_as_map<'de, D>(deserializer: D) -> Result<HashMap<String, BigUint>, D::Error>
where
D: serde::Deserializer<'de>,
{
let v = Value::deserialize(deserializer)?;
match v {
Value::Array(array) => {
if array.is_empty() {
Ok(HashMap::new())
} else {
Err(serde::de::Error::custom("Expected map or empty array"))
}
}
Value::Object(map) => {
// let len = map.len();
let result: HashMap<String, BigUint> = map
.into_iter()
.filter_map(|(k, v)| {
if let Value::Number(num) = v {
num.as_i64()
.and_then(|n| BigUint::from_str(&n.to_string()).ok())
.map(|n| (k, n))
} else {
None
}
})
.collect();
// if result.len() != len {
// return Err(serde::de::Error::custom(
// "Failed to parse map values as BigUint",
// ));
// }
Ok(result)
}
_ => Err(serde::de::Error::custom("Expected map or empty array")),
}
}
#[derive(Debug, Deserialize)]
pub struct ReceivingDataExpected {
pub addresses: Vec<String>,

View File

@ -1,19 +1,14 @@
use bech32::ToBase32;
use num_bigint::BigUint;
use secp256k1::{hashes::Hash, Message, PublicKey, Scalar, Secp256k1, SecretKey, XOnlyPublicKey};
use std::{collections::HashMap, str::FromStr};
use crate::{
input::ReceivingDataOutputs,
sha256,
utils::ser_uint32,
};
use crate::{input::ReceivingDataOutputs, sha256, utils::ser_uint32};
pub fn get_receiving_addresses(
B_scan: PublicKey,
B_spend: PublicKey,
labels: &HashMap<String, BigUint>,
labels: &HashMap<String, String>,
) -> Vec<String> {
let mut receiving_addresses: Vec<String> = vec![];
receiving_addresses.push(encode_silent_payment_address(B_scan, B_spend, None, None));
@ -104,18 +99,13 @@ fn encode_silent_payment_address(
fn create_labeled_silent_payment_address(
B_scan: PublicKey,
B_spend: PublicKey,
m: &BigUint,
m: &String,
hrp: Option<&str>,
version: Option<u8>,
) -> String {
let bytes = m.to_bytes_be();
let bytes = hex::decode(m).unwrap().try_into().unwrap();
let mut array = [0u8; 32];
let start = array.len() - bytes.len();
array[start..].copy_from_slice(&bytes);
let scalar = Scalar::from_be_bytes(array).unwrap();
let scalar = Scalar::from_be_bytes(bytes).unwrap();
let secp = Secp256k1::new();
let G: PublicKey = SecretKey::from_slice(&Scalar::ONE.to_be_bytes())
.unwrap()
@ -173,7 +163,7 @@ pub fn scanning(
A_sum: PublicKey,
outpoints_hash: [u8; 32],
outputs_to_check: Vec<XOnlyPublicKey>,
labels: Option<&HashMap<String, BigUint>>,
labels: Option<&HashMap<String, String>>,
) -> Vec<WalletItem> {
let secp = secp256k1::Secp256k1::new();
let ecdh_shared_secret = calculate_ecdh_secret(&A_sum, b_scan, outpoints_hash);
@ -212,13 +202,8 @@ pub fn scanning(
if keys.iter().any(|x| x.eq(&labelkey)) {
let P_nm = hex::encode(output.serialize());
let label = labels.get(labelkeystr).unwrap();
let label_in_bytes = label.to_bytes_be();
let mut array = [0u8; 32];
let start = array.len() - label_in_bytes.len();
//ugly, fails if bytes > 32
array[start..].copy_from_slice(&label_in_bytes);
let label_scalar = Scalar::from_be_bytes(array).unwrap();
let label_bytes = hex::decode(label).unwrap().try_into().unwrap();
let label_scalar = Scalar::from_be_bytes(label_bytes).unwrap();
let t_n_as_secret_key = SecretKey::from_slice(&t_n).unwrap();
let priv_key_tweak = hex::encode(
t_n_as_secret_key

View File

@ -3,7 +3,11 @@ use bech32::FromBase32;
use secp256k1::{Parity, PublicKey, Scalar, Secp256k1, SecretKey};
use std::{collections::HashMap, str::FromStr};
use crate::{hash_outpoints, input::SendingDataGiven, utils::{ser_uint32, sha256} };
use crate::{
hash_outpoints,
input::SendingDataGiven,
utils::{ser_uint32, sha256},
};
fn get_a_sum_secret_keys(input: &Vec<(String, bool)>) -> SecretKey {
let secp = Secp256k1::new();