#generate-keys #key #secret-key #primitive #hash #key-derivation #cryptonote

cryptonote-raw-crypto

为CryptoNote提供的密码学原语

16个不稳定版本 (3个重大更改)

0.5.7 2019年11月6日
0.5.6 2019年10月30日
0.5.2 2019年9月23日
0.4.0 2019年9月16日
0.1.4 2019年4月17日

#1 in #cryptonote

每月下载量46次
用于cryptonote-wallet

GPL-3.0-or-later

5MB
11K SLoC

C 10K SLoC // 0.1% comments Rust 1K SLoC // 0.0% comments C++ 193 SLoC // 0.0% comments

基于CryptoNote的加密货币的原生密码库

codecov

简介

原生密码库旨在为C/C++提供基于Rust的加密实现。目前,该库已实现了cryptonote基金会在其参考币锻造代码库中提供的所有哈希函数。

现在这个库提供了以下接口

  1. 哈希
    Hash::slow -> cn_slow_hash
    Hash::fast -> cn_fast_hash
    Hash::check_with_difficulty -> cryptonote::check_hash

  2. Chacha(带有ChachaKey,ChachaIV生成器)
    Chacha::generate -> chacha8

  3. 密钥
    Key::generate_private_key -> generate_private_key
    Key::secret_to_public -> secret_key_to_public_key
    Key::generate_key_pair -> generate_keys
    Key::check_public_key -> check_public_key
    Key::generate_key_derivation -> generate_key_derivation
    Key::derive_public_key -> derive_public_key
    Key::underive_public_key -> underive_public_key
    Key::derive_secret_key -> derive_secret_key
    Key::generate_signature -> generate_signature
    Key::check_signature -> check_signature
    Key::generate_key_image -> generate_key_image


  4. Ring::generate_signature -> generate_ring_signature Ring::check_signature -> check_ring_signature

  5. 标量
    EllipticCurveScalar::random -> random_scalar
    EllipticCurveScalar::check -> check_scalar
    EllipticCurveScalar::to_hash -> hash_to_scalar
    EllipticCurveScalar::from_hash -> hash_to_ec
    EllipticCurvePoint::from_hash -> hash_to_point

用法

用法可以在测试中找到。

    // Generate key
    let key = ChachaKey::generate(String::from(""));

    // Generate iv
    let iv = ChachaIV::from([0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18]);

    // Generate chacha object
    let chacha = Chacha::new(key, iv);

    // Prepare plain text
    let plain = *b"hello world!";

    // Encrypt with chacha8
    let cipher = chacha.encrypt(&plain[..]);

    // Encrypt again will get the original plain text
    let recipher = chacha.encrypt(&cipher[..]);

    // they should be equal
    assert!(plain == recipher.as_slice());

依赖项