cryptonote-raw-crypto 0.5.0

Cryptography Primitives for Cryptonote
Documentation

raw-crypto Library For CryptoNote Based Crypto Currencies

codecov

Intro

Raw Crypto Library is to provide crypto implementations in C/C++ with rust. Currently the library has implemented all hash functions provided by the cryptonote foundation in it's referential coin forging code base.

Now this library provide the follow interfaces:

  1. Hash
    Hash::slow -> cn_slow_hash
    Hash::fast -> cn_fast_hash

  2. Chacha(with ChachaKey, ChachaIV generators)
    Chacha::generate -> chacha8

  3. Key
    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

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

  1. Scalars
    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

Usage

Usage can be found in tests.

    // 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());