mirror of
https://github.com/serai-dex/serai.git
synced 2025-03-24 08:08:51 +00:00
Publish an alpha version of the Monero crate (#123)
* Label the version as an alpha * Add versions to Cargo.tomls * Update to Zeroize 1.5 * Drop patch versions from monero-serai Cargo.toml * Add a repository field * Move generators to OUT_DIR IIRC, I didn't do this originally as it constantly re-generated them. Unfortunately, since cargo is complaining about .generators, we have to. * Remove Timelock::fee_weight Transaction::fee_weight's has a comment, "Assumes Timelock::None since this library won't let you create a TX with a timelock". Accordingly, this is dead code.
This commit is contained in:
parent
49749d96a0
commit
8b0f0a3713
17 changed files with 43 additions and 42 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
@ -1370,7 +1370,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dalek-ff-group"
|
name = "dalek-ff-group"
|
||||||
version = "0.1.4"
|
version = "0.1.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-bigint",
|
"crypto-bigint",
|
||||||
"curve25519-dalek 3.2.0",
|
"curve25519-dalek 3.2.0",
|
||||||
|
@ -4496,7 +4496,7 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minimal-ed448"
|
name = "minimal-ed448"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crypto-bigint",
|
"crypto-bigint",
|
||||||
"dalek-ff-group",
|
"dalek-ff-group",
|
||||||
|
@ -4541,7 +4541,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "modular-frost"
|
name = "modular-frost"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dalek-ff-group",
|
"dalek-ff-group",
|
||||||
"dleq",
|
"dleq",
|
||||||
|
@ -4585,7 +4585,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "monero-serai"
|
name = "monero-serai"
|
||||||
version = "0.1.0"
|
version = "0.1.0-alpha"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base58-monero",
|
"base58-monero",
|
||||||
"blake2",
|
"blake2",
|
||||||
|
@ -4652,7 +4652,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "multiexp"
|
name = "multiexp"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dalek-ff-group",
|
"dalek-ff-group",
|
||||||
"ff",
|
"ff",
|
||||||
|
|
1
coins/monero/.gitignore
vendored
1
coins/monero/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
.generators
|
|
|
@ -1,8 +1,9 @@
|
||||||
[package]
|
[package]
|
||||||
name = "monero-serai"
|
name = "monero-serai"
|
||||||
version = "0.1.0"
|
version = "0.1.0-alpha"
|
||||||
description = "A modern Monero transaction library"
|
description = "A modern Monero transaction library"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
repository = "https://github.com/serai-dex/serai"
|
||||||
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
|
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ rand_chacha = { version = "0.3", optional = true }
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
rand_distr = "0.4"
|
rand_distr = "0.4"
|
||||||
|
|
||||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||||
subtle = "2.4"
|
subtle = "2.4"
|
||||||
|
|
||||||
sha3 = "0.10"
|
sha3 = "0.10"
|
||||||
|
@ -28,14 +29,14 @@ blake2 = { version = "0.10", optional = true }
|
||||||
curve25519-dalek = { version = "3", features = ["std"] }
|
curve25519-dalek = { version = "3", features = ["std"] }
|
||||||
|
|
||||||
group = { version = "0.12" }
|
group = { version = "0.12" }
|
||||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group" }
|
dalek-ff-group = { path = "../../crypto/dalek-ff-group", version = "0.1" }
|
||||||
multiexp = { path = "../../crypto/multiexp", features = ["batch"] }
|
multiexp = { path = "../../crypto/multiexp", version = "0.2", features = ["batch"] }
|
||||||
|
|
||||||
transcript = { package = "flexible-transcript", path = "../../crypto/transcript", features = ["recommended"], optional = true }
|
transcript = { package = "flexible-transcript", path = "../../crypto/transcript", version = "0.1", features = ["recommended"], optional = true }
|
||||||
frost = { package = "modular-frost", path = "../../crypto/frost", features = ["ed25519"], optional = true }
|
frost = { package = "modular-frost", path = "../../crypto/frost", version = "0.2", features = ["ed25519"], optional = true }
|
||||||
dleq = { path = "../../crypto/dleq", features = ["serialize"], optional = true }
|
dleq = { path = "../../crypto/dleq", version = "0.1", features = ["serialize"], optional = true }
|
||||||
|
|
||||||
monero-generators = { path = "generators" }
|
monero-generators = { path = "generators", version = "0.1" }
|
||||||
|
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
@ -50,8 +51,8 @@ reqwest = { version = "0.11", features = ["json"] }
|
||||||
multisig = ["rand_chacha", "blake2", "transcript", "frost", "dleq"]
|
multisig = ["rand_chacha", "blake2", "transcript", "frost", "dleq"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group" }
|
dalek-ff-group = { path = "../../crypto/dalek-ff-group", version = "0.1" }
|
||||||
monero-generators = { path = "generators" }
|
monero-generators = { path = "generators", version = "0.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
use std::{
|
use std::{
|
||||||
io::Write,
|
io::Write,
|
||||||
|
env,
|
||||||
path::Path,
|
path::Path,
|
||||||
fs::{File, DirBuilder, remove_file},
|
fs::{File, remove_file},
|
||||||
};
|
};
|
||||||
|
|
||||||
use dalek_ff_group::EdwardsPoint;
|
use dalek_ff_group::EdwardsPoint;
|
||||||
|
@ -33,8 +34,7 @@ fn generators(prefix: &'static str, path: &str) {
|
||||||
let mut H_str = "".to_string();
|
let mut H_str = "".to_string();
|
||||||
serialize(&mut H_str, &generators.H);
|
serialize(&mut H_str, &generators.H);
|
||||||
|
|
||||||
DirBuilder::new().recursive(true).create(".generators").unwrap();
|
let path = Path::new(&env::var("OUT_DIR").unwrap()).join(path);
|
||||||
let path = Path::new(".generators").join(path);
|
|
||||||
let _ = remove_file(&path);
|
let _ = remove_file(&path);
|
||||||
File::create(&path)
|
File::create(&path)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
@ -60,7 +60,6 @@ fn generators(prefix: &'static str, path: &str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// For some reason, filtering off .generators does not work. This prevents re-building overall
|
|
||||||
println!("cargo:rerun-if-changed=build.rs");
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
|
||||||
generators("bulletproof", "generators.rs");
|
generators("bulletproof", "generators.rs");
|
||||||
|
|
|
@ -18,5 +18,5 @@ tiny-keccak = { version = "2", features = ["keccak"] }
|
||||||
|
|
||||||
curve25519-dalek = { version = "3", features = ["std"] }
|
curve25519-dalek = { version = "3", features = ["std"] }
|
||||||
|
|
||||||
group = { version = "0.12" }
|
group = "0.12"
|
||||||
dalek-ff-group = { path = "../../../crypto/dalek-ff-group" }
|
dalek-ff-group = { path = "../../../crypto/dalek-ff-group", version = "0.1.4" }
|
||||||
|
|
|
@ -12,7 +12,7 @@ use multiexp::BatchVerifier;
|
||||||
|
|
||||||
use crate::{Commitment, ringct::bulletproofs::core::*};
|
use crate::{Commitment, ringct::bulletproofs::core::*};
|
||||||
|
|
||||||
include!("../../../.generators/generators.rs");
|
include!(concat!(env!("OUT_DIR"), "/generators.rs"));
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref ONE_N: ScalarVector = ScalarVector(vec![Scalar::one(); N]);
|
static ref ONE_N: ScalarVector = ScalarVector(vec![Scalar::one(); N]);
|
||||||
|
|
|
@ -15,7 +15,7 @@ use crate::{
|
||||||
ringct::{hash_to_point::raw_hash_to_point, bulletproofs::core::*},
|
ringct::{hash_to_point::raw_hash_to_point, bulletproofs::core::*},
|
||||||
};
|
};
|
||||||
|
|
||||||
include!("../../../.generators/generators_plus.rs");
|
include!(concat!(env!("OUT_DIR"), "/generators_plus.rs"));
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref TRANSCRIPT: [u8; 32] =
|
static ref TRANSCRIPT: [u8; 32] =
|
||||||
|
|
|
@ -119,10 +119,6 @@ impl Timelock {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn fee_weight() -> usize {
|
|
||||||
8
|
|
||||||
}
|
|
||||||
|
|
||||||
fn serialize<W: std::io::Write>(&self, w: &mut W) -> std::io::Result<()> {
|
fn serialize<W: std::io::Write>(&self, w: &mut W) -> std::io::Result<()> {
|
||||||
write_varint(
|
write_varint(
|
||||||
&match self {
|
&match self {
|
||||||
|
|
|
@ -167,6 +167,7 @@ impl Scanner {
|
||||||
/// When a new scanner is created, ALL saved output keys must be passed in to be secure.
|
/// When a new scanner is created, ALL saved output keys must be passed in to be secure.
|
||||||
/// If None is passed, a modified shared key derivation is used which is immune to the burning
|
/// If None is passed, a modified shared key derivation is used which is immune to the burning
|
||||||
/// bug (specifically the Guaranteed feature from Featured Addresses).
|
/// bug (specifically the Guaranteed feature from Featured Addresses).
|
||||||
|
// TODO: Should this take in a DB access handle to ensure output keys are saved?
|
||||||
pub fn from_view(
|
pub fn from_view(
|
||||||
pair: ViewPair,
|
pair: ViewPair,
|
||||||
network: Network,
|
network: Network,
|
||||||
|
|
|
@ -196,8 +196,7 @@ impl SpendableOutput {
|
||||||
pub struct Timelocked<O: Clone + Zeroize>(Timelock, Vec<O>);
|
pub struct Timelocked<O: Clone + Zeroize>(Timelock, Vec<O>);
|
||||||
impl<O: Clone + Zeroize> Drop for Timelocked<O> {
|
impl<O: Clone + Zeroize> Drop for Timelocked<O> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
self.0.zeroize();
|
self.zeroize();
|
||||||
self.1.zeroize();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl<O: Clone + Zeroize> ZeroizeOnDrop for Timelocked<O> {}
|
impl<O: Clone + Zeroize> ZeroizeOnDrop for Timelocked<O> {}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "dalek-ff-group"
|
name = "dalek-ff-group"
|
||||||
version = "0.1.4"
|
version = "0.1.5"
|
||||||
description = "ff/group bindings around curve25519-dalek"
|
description = "ff/group bindings around curve25519-dalek"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/serai-dex/serai"
|
repository = "https://github.com/serai-dex/serai"
|
||||||
|
@ -15,7 +15,7 @@ all-features = true
|
||||||
rand_core = "0.6"
|
rand_core = "0.6"
|
||||||
digest = "0.10"
|
digest = "0.10"
|
||||||
|
|
||||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||||
subtle = "2.4"
|
subtle = "2.4"
|
||||||
|
|
||||||
ff = "0.12"
|
ff = "0.12"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "minimal-ed448"
|
name = "minimal-ed448"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
description = "Unaudited, inefficient implementation of Ed448 in Rust"
|
description = "Unaudited, inefficient implementation of Ed448 in Rust"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/serai-dex/serai"
|
repository = "https://github.com/serai-dex/serai"
|
||||||
|
@ -17,7 +17,7 @@ lazy_static = "1"
|
||||||
rand_core = "0.6"
|
rand_core = "0.6"
|
||||||
digest = "0.10"
|
digest = "0.10"
|
||||||
|
|
||||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||||
subtle = "2.4"
|
subtle = "2.4"
|
||||||
|
|
||||||
ff = "0.12"
|
ff = "0.12"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "modular-frost"
|
name = "modular-frost"
|
||||||
version = "0.2.1"
|
version = "0.2.2"
|
||||||
description = "Modular implementation of FROST over ff/group"
|
description = "Modular implementation of FROST over ff/group"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/serai-dex/serai"
|
repository = "https://github.com/serai-dex/serai"
|
||||||
|
@ -16,7 +16,7 @@ thiserror = "1"
|
||||||
|
|
||||||
rand_core = "0.6"
|
rand_core = "0.6"
|
||||||
|
|
||||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||||
|
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
||||||
|
|
||||||
use rand_core::{RngCore, CryptoRng};
|
use rand_core::{RngCore, CryptoRng};
|
||||||
|
|
||||||
use zeroize::Zeroize;
|
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||||
|
|
||||||
use group::{
|
use group::{
|
||||||
ff::{Field, PrimeField},
|
ff::{Field, PrimeField},
|
||||||
|
@ -272,6 +272,7 @@ impl<C: Curve> Drop for SecretShareMachine<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for SecretShareMachine<C> {}
|
||||||
|
|
||||||
#[derive(Zeroize)]
|
#[derive(Zeroize)]
|
||||||
pub struct KeyMachine<C: Curve> {
|
pub struct KeyMachine<C: Curve> {
|
||||||
|
@ -287,6 +288,7 @@ impl<C: Curve> Drop for KeyMachine<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for KeyMachine<C> {}
|
||||||
|
|
||||||
impl<C: Curve> KeyGenMachine<C> {
|
impl<C: Curve> KeyGenMachine<C> {
|
||||||
/// Creates a new machine to generate a key for the specified curve in the specified multisig
|
/// Creates a new machine to generate a key for the specified curve in the specified multisig
|
||||||
|
|
|
@ -3,7 +3,7 @@ use std::{io::Read, sync::Arc, collections::HashMap};
|
||||||
|
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use zeroize::Zeroize;
|
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||||
|
|
||||||
use group::{
|
use group::{
|
||||||
ff::{Field, PrimeField},
|
ff::{Field, PrimeField},
|
||||||
|
@ -160,6 +160,7 @@ impl<C: Curve> Drop for FrostCore<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for FrostCore<C> {}
|
||||||
|
|
||||||
impl<C: Curve> Debug for FrostCore<C> {
|
impl<C: Curve> Debug for FrostCore<C> {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
@ -287,6 +288,7 @@ impl<C: Curve> Drop for FrostKeys<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for FrostKeys<C> {}
|
||||||
|
|
||||||
// View of keys passable to algorithm implementations
|
// View of keys passable to algorithm implementations
|
||||||
#[derive(Clone, Zeroize)]
|
#[derive(Clone, Zeroize)]
|
||||||
|
@ -304,6 +306,7 @@ impl<C: Curve> Drop for FrostView<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for FrostView<C> {}
|
||||||
|
|
||||||
impl<C: Curve> FrostKeys<C> {
|
impl<C: Curve> FrostKeys<C> {
|
||||||
pub fn new(core: FrostCore<C>) -> FrostKeys<C> {
|
pub fn new(core: FrostCore<C>) -> FrostKeys<C> {
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
||||||
|
|
||||||
use rand_core::{RngCore, CryptoRng};
|
use rand_core::{RngCore, CryptoRng};
|
||||||
|
|
||||||
use zeroize::Zeroize;
|
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||||
|
|
||||||
use transcript::Transcript;
|
use transcript::Transcript;
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ impl<C: Curve, A: Algorithm<C>> Params<C, A> {
|
||||||
Err(FrostError::InvalidParticipantIndex(included[included.len() - 1], params.n))?;
|
Err(FrostError::InvalidParticipantIndex(included[included.len() - 1], params.n))?;
|
||||||
}
|
}
|
||||||
// Same signer included multiple times
|
// Same signer included multiple times
|
||||||
for i in 0 .. included.len() - 1 {
|
for i in 0 .. (included.len() - 1) {
|
||||||
if included[i] == included[i + 1] {
|
if included[i] == included[i + 1] {
|
||||||
Err(FrostError::DuplicatedIndex(included[i]))?;
|
Err(FrostError::DuplicatedIndex(included[i]))?;
|
||||||
}
|
}
|
||||||
|
@ -95,6 +95,7 @@ impl<C: Curve> Drop for PreprocessPackage<C> {
|
||||||
self.zeroize()
|
self.zeroize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl<C: Curve> ZeroizeOnDrop for PreprocessPackage<C> {}
|
||||||
|
|
||||||
// This library unifies the preprocessing step with signing due to security concerns and to provide
|
// This library unifies the preprocessing step with signing due to security concerns and to provide
|
||||||
// a simpler UX
|
// a simpler UX
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "multiexp"
|
name = "multiexp"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
description = "Multiexponentation algorithms for ff/group"
|
description = "Multiexponentation algorithms for ff/group"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/serai-dex/serai"
|
repository = "https://github.com/serai-dex/serai"
|
||||||
|
@ -12,7 +12,7 @@ edition = "2021"
|
||||||
all-features = true
|
all-features = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||||
|
|
||||||
ff = "0.12"
|
ff = "0.12"
|
||||||
group = "0.12"
|
group = "0.12"
|
||||||
|
|
Loading…
Reference in a new issue