use secp256k1::{PublicKey, SecretKey, Secp256k1};
use fiber_sphinx::{new_onion_packet, SphinxError};
let secp = Secp256k1::new();
let hops_keys = vec![
SecretKey::from_slice(&[0x20; 32]).expect("32 bytes, within curve order"),
SecretKey::from_slice(&[0x21; 32]).expect("32 bytes, within curve order"),
SecretKey::from_slice(&[0x22; 32]).expect("32 bytes, within curve order"),
];
let hops_path = hops_keys.iter().map(|sk| sk.public_key(&secp)).collect();
let session_key = SecretKey::from_slice(&[0x41; 32]).expect("32 bytes, within curve order");
let hops_data = vec![vec![0], vec![1, 0], vec![5, 0, 1, 2, 3, 4]];
let get_length = |packet_data: &[u8]| Some(packet_data[0] as usize + 1);
let assoc_data = vec![0x42u8; 32];
let packet = new_onion_packet(
1300,
hops_path,
session_key,
hops_data.clone(),
Some(assoc_data.clone()),
).expect("new onion packet");
let res = packet.peel(&hops_keys[0], Some(&assoc_data), &secp, get_length);
assert!(res.is_ok());
let (data, packet) = res.unwrap();
assert_eq!(data, hops_data[0]);
let res = packet.peel(&hops_keys[1], Some(&assoc_data), &secp, get_length);
assert!(res.is_ok());
let (data, packet) = res.unwrap();
assert_eq!(data, hops_data[1]);
let res = packet.peel(&hops_keys[2], Some(&assoc_data), &secp, get_length);
assert!(res.is_ok());
let (data, _packet) = res.unwrap();
assert_eq!(data, hops_data[2]);