Cuprate, an upcoming experimental, modern & secure monero node. Written in Rust https://cuprate.org
Find a file
Dmitry Holodov 00bdd6ffaa
cryptonight in pure Rust (#271)
* removed FORCE_USE_HEAP to from c code

* removed unused headers

* simplifying C code to better understand it

* more c code simplifications

* removed conditional code for the v4 register size

* got one version of keccak working

* not so important hash_process unwound

* got keccak working using the sha3 lib

* hash state unions created

* slow hash through VARIANT1_PORTABLE_INIT is working

* variant 2 init working

* ported version of random_math_init compiling, but not yet passing tests

* fixed hash algorithm, tests working

* formatting

* more macro reduction

* monero AES working in Rust

* fixed AES key expansion expected key size

* first 75% of slow hash converted and working correctly

* adjusted key format for aesb_single_round

* converted some macros to functions

* variant2_integer_math working with test cases

* broke sqrt out of variant2_integer_math for code coverage

* variant2_portable_shuffle_add working with unit tests

* added skein and jh hashes

* 524287 iteration loop producing correct results

* all tests working in Rust

* subarray macros added

* aes simplifications

* code cleanups

* code cleanups part 2

* removed unused blake C code as prep for port to rust

* original blake algorithm in pure rust is working

* converted macro in compress to a lamda

* added module documentation for blake256

* Gave Blake256 a Digest trait

* adding more documentation

* more documentation and cleanup

* more slow hash tests

* removed C code

* misc refactoring

* fix

* lint fix

* additional linting

* downgraded deps to latest stable versions

* made thiserror a workspace dep

* removed commented dead code

* lint fixes

* fixed lint issues in test code

* limited util macro scopes to the crate

* Reformatted dependencies using:
group_imports = "StdExternalCrate"
reorder_modules = true
reorder_impl_items = true
imports_granularity = "crate"

* converted util macros to inline functions

* hex dep comes from workspace

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* panic subarray tests

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* updates to doc comments

* removes extra parens in hash_v4.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* early return to remove indentation in hash_v2.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* gropuing expect annotations in hash_v2.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* use matches macro to simplify code hash_v4.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* remove extra paren in hash_v4.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* eary return to remove indentation in hash_v2.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* minor comment fixes

* early loop continue to remove indentation in hash_v4.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* convert non-capturing llamda to fn in hash_v2.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* another lamda to fn conversion in hash_v2.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* llamda to fn conversion in cnaes.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* 2nd llamda to fn conversion in cnaes.rs

Co-authored-by: hinto-janai <hinto.janai@protonmail.com>

* test lamdas in lib.rs are now functions

* round_fwd optimized

* added myself as an author

* fixed place that needed wrapping_add

* clippy allow->expect change needed after merging master

* moving state to u128

* round_fwd changes sped up fuzzer by 10%

* 1st working version using u128 for long state

* text converted to u128 array

* removed LongState union

* simplified long_state's initialization

* aes round keys now use u128

* CRYPTONIGHT_SBOX is now u32 instead of u8

* cleaner hash_v4 loop unrolling semantics (same peformance)

* switched to a better maintained loop unrolling macro
2024-10-08 16:03:56 +01:00
.github Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
benches repo: add skeleton directories, fix labels (#139) 2024-05-29 02:18:30 +01:00
binaries cuprated: add constants & statics modules (#301) 2024-09-28 01:41:34 +01:00
books Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
consensus Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
constants Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
cryptonight cryptonight in pure Rust (#271) 2024-10-08 16:03:56 +01:00
helper types: JSON representation types (#300) 2024-10-05 01:47:44 +01:00
misc Update Zed in ENVIRONMENT-ADVICE.md (#259) 2024-08-22 00:33:21 +01:00
net cargo upgrade (#296) 2024-09-22 19:34:20 +01:00
p2p P2P: move seed nodes to config (#306) 2024-10-07 23:36:46 +01:00
pruning Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
rpc types: JSON representation types (#300) 2024-10-05 01:47:44 +01:00
storage Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
test-utils P2P: move seed nodes to config (#306) 2024-10-07 23:36:46 +01:00
types types: JSON representation types (#300) 2024-10-05 01:47:44 +01:00
zmq repo: add skeleton directories, fix labels (#139) 2024-05-29 02:18:30 +01:00
.gitignore books: add skeleton and docs (#141) 2024-05-30 01:19:46 +01:00
Cargo.lock cryptonight in pure Rust (#271) 2024-10-08 16:03:56 +01:00
Cargo.toml Add constants/ crate (#280) 2024-10-02 18:51:58 +01:00
clippy.toml workspace: add naming convention lints (#261) 2024-09-02 18:10:45 +01:00
CONTRIBUTING.md ci: add doc.yml (#203) 2024-07-03 22:38:47 +01:00
deny.toml Binaries: add cuprated skeleton (#258) 2024-08-20 23:56:18 +01:00
LICENSE books: add skeleton and docs (#141) 2024-05-30 01:19:46 +01:00
LICENSE-AGPL License correction for github (#10) 2023-03-20 21:35:20 +01:00
LICENSE-MIT repo: update license (#134) 2024-05-27 00:39:32 +01:00
README.md ci: add doc.yml (#203) 2024-07-03 22:38:47 +01:00
SECURITY.md docs: update README.md & SECURITY.md (#143) 2024-06-14 18:33:43 +01:00
typos.toml rpc: add JSON doc-tests (#232) 2024-07-28 21:43:16 +01:00

An alternative Monero node implementation.

(work-in-progress)

Matrix CI

Contents

About

Cuprate is an effort to create an alternative Monero node implementation in Rust.

It will be able to independently validate Monero consensus rules, providing a layer of security and redundancy for the Monero network.

Documentation

Cuprate is currently a work-in-progress; documentation will be changing/unfinished.

Cuprate maintains various documentation books:

Book Description
Cuprate's architecture book Documents Cuprate's internal architecture & implementation
Monero's protocol book Documents the Monero protocol
Cuprate's user book Practical user-guide for using cuprated

For crate (library) documentation, see: https://doc.cuprate.org. This site holds documentation for Cuprate's crates and all dependencies. All Cuprate crates start with cuprate_, for example: cuprate_database.

Contributing

See CONTRIBUTING.md.

Security

Cuprate has a responsible vulnerability disclosure policy, see SECURITY.md.

License

The binaries/ directory is licensed under AGPL-3.0, everything else is licensed under MIT.

See LICENSE for more details.