Module monero::cryptonote::onetime_key

source ·
Expand description

Onetime key generation and recovery helpers and functions.

Support for CryptoNote onetime keys which the sender derives from random data and the receiver’s address. Upon receiving a transaction, user scans all output keys and checks if he can recover the corresponding secret key. He succeeds if and only if that particular output was sent to his address.

§Checking output ownership

use std::str::FromStr;
use monero::{PublicKey, PrivateKey};
use monero::cryptonote::onetime_key::SubKeyChecker;
use monero::cryptonote::subaddress::Index;
use monero::util::key::ViewPair;

let view = PrivateKey::from_str("bcfdda53205318e1c14fa0ddca1a45df363bb427972981d0249d0f4652a7df07").unwrap();
let secret_spend = PrivateKey::from_str("e5f4301d32f3bdaef814a835a18aaaa24b13cc76cf01a832a7852faf9322e907").unwrap();
let spend = PublicKey::from_private_key(&secret_spend);

 let viewpair = ViewPair {
     view,
     spend,
 };

let one_time_pk =
    PublicKey::from_str("e3e77faca64b5997ac1f75763e87713d03d9e2896edec65843ffd2970ef1dde6")
        .unwrap();

let tx_pubkey =
    PublicKey::from_str("5d1402db663eda8cef4f6782b66321e4a990f746aca249c973e098ba2c0837c1")
        .unwrap();

let checker = SubKeyChecker::new(&viewpair, 0..3, 0..3);

assert_eq!(
    Some(&Index { major: 0, minor: 0 }),
    checker.check(1, &one_time_pk, &tx_pubkey)
);

Structs§

  • Helper to generate onetime public keys (ephemeral keys) used in transactions.
  • Helper to compute onetime private keys.
  • Helper to check if a onetime sub-address public key is related to a view pair.

Constants§