mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-22 19:49:22 +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]]
|
||||
name = "dalek-ff-group"
|
||||
version = "0.1.4"
|
||||
version = "0.1.5"
|
||||
dependencies = [
|
||||
"crypto-bigint",
|
||||
"curve25519-dalek 3.2.0",
|
||||
|
@ -4496,7 +4496,7 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
|
|||
|
||||
[[package]]
|
||||
name = "minimal-ed448"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"crypto-bigint",
|
||||
"dalek-ff-group",
|
||||
|
@ -4541,7 +4541,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "modular-frost"
|
||||
version = "0.2.1"
|
||||
version = "0.2.2"
|
||||
dependencies = [
|
||||
"dalek-ff-group",
|
||||
"dleq",
|
||||
|
@ -4585,7 +4585,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "monero-serai"
|
||||
version = "0.1.0"
|
||||
version = "0.1.0-alpha"
|
||||
dependencies = [
|
||||
"base58-monero",
|
||||
"blake2",
|
||||
|
@ -4652,7 +4652,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "multiexp"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"dalek-ff-group",
|
||||
"ff",
|
||||
|
|
1
coins/monero/.gitignore
vendored
1
coins/monero/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
.generators
|
|
@ -1,8 +1,9 @@
|
|||
[package]
|
||||
name = "monero-serai"
|
||||
version = "0.1.0"
|
||||
version = "0.1.0-alpha"
|
||||
description = "A modern Monero transaction library"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/serai-dex/serai"
|
||||
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
|
||||
edition = "2021"
|
||||
|
||||
|
@ -19,7 +20,7 @@ rand_chacha = { version = "0.3", optional = true }
|
|||
rand = "0.8"
|
||||
rand_distr = "0.4"
|
||||
|
||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
||||
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||
subtle = "2.4"
|
||||
|
||||
sha3 = "0.10"
|
||||
|
@ -28,14 +29,14 @@ blake2 = { version = "0.10", optional = true }
|
|||
curve25519-dalek = { version = "3", features = ["std"] }
|
||||
|
||||
group = { version = "0.12" }
|
||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group" }
|
||||
multiexp = { path = "../../crypto/multiexp", features = ["batch"] }
|
||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group", version = "0.1" }
|
||||
multiexp = { path = "../../crypto/multiexp", version = "0.2", features = ["batch"] }
|
||||
|
||||
transcript = { package = "flexible-transcript", path = "../../crypto/transcript", features = ["recommended"], optional = true }
|
||||
frost = { package = "modular-frost", path = "../../crypto/frost", features = ["ed25519"], optional = true }
|
||||
dleq = { path = "../../crypto/dleq", features = ["serialize"], optional = true }
|
||||
transcript = { package = "flexible-transcript", path = "../../crypto/transcript", version = "0.1", features = ["recommended"], optional = true }
|
||||
frost = { package = "modular-frost", path = "../../crypto/frost", version = "0.2", features = ["ed25519"], 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"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
|
@ -50,8 +51,8 @@ reqwest = { version = "0.11", features = ["json"] }
|
|||
multisig = ["rand_chacha", "blake2", "transcript", "frost", "dleq"]
|
||||
|
||||
[build-dependencies]
|
||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group" }
|
||||
monero-generators = { path = "generators" }
|
||||
dalek-ff-group = { path = "../../crypto/dalek-ff-group", version = "0.1" }
|
||||
monero-generators = { path = "generators", version = "0.1" }
|
||||
|
||||
[dev-dependencies]
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use std::{
|
||||
io::Write,
|
||||
env,
|
||||
path::Path,
|
||||
fs::{File, DirBuilder, remove_file},
|
||||
fs::{File, remove_file},
|
||||
};
|
||||
|
||||
use dalek_ff_group::EdwardsPoint;
|
||||
|
@ -33,8 +34,7 @@ fn generators(prefix: &'static str, path: &str) {
|
|||
let mut H_str = "".to_string();
|
||||
serialize(&mut H_str, &generators.H);
|
||||
|
||||
DirBuilder::new().recursive(true).create(".generators").unwrap();
|
||||
let path = Path::new(".generators").join(path);
|
||||
let path = Path::new(&env::var("OUT_DIR").unwrap()).join(path);
|
||||
let _ = remove_file(&path);
|
||||
File::create(&path)
|
||||
.unwrap()
|
||||
|
@ -60,7 +60,6 @@ fn generators(prefix: &'static str, path: &str) {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
// For some reason, filtering off .generators does not work. This prevents re-building overall
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
|
||||
generators("bulletproof", "generators.rs");
|
||||
|
|
|
@ -18,5 +18,5 @@ tiny-keccak = { version = "2", features = ["keccak"] }
|
|||
|
||||
curve25519-dalek = { version = "3", features = ["std"] }
|
||||
|
||||
group = { version = "0.12" }
|
||||
dalek-ff-group = { path = "../../../crypto/dalek-ff-group" }
|
||||
group = "0.12"
|
||||
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::*};
|
||||
|
||||
include!("../../../.generators/generators.rs");
|
||||
include!(concat!(env!("OUT_DIR"), "/generators.rs"));
|
||||
|
||||
lazy_static! {
|
||||
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::*},
|
||||
};
|
||||
|
||||
include!("../../../.generators/generators_plus.rs");
|
||||
include!(concat!(env!("OUT_DIR"), "/generators_plus.rs"));
|
||||
|
||||
lazy_static! {
|
||||
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<()> {
|
||||
write_varint(
|
||||
&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.
|
||||
/// 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).
|
||||
// TODO: Should this take in a DB access handle to ensure output keys are saved?
|
||||
pub fn from_view(
|
||||
pair: ViewPair,
|
||||
network: Network,
|
||||
|
|
|
@ -196,8 +196,7 @@ impl SpendableOutput {
|
|||
pub struct Timelocked<O: Clone + Zeroize>(Timelock, Vec<O>);
|
||||
impl<O: Clone + Zeroize> Drop for Timelocked<O> {
|
||||
fn drop(&mut self) {
|
||||
self.0.zeroize();
|
||||
self.1.zeroize();
|
||||
self.zeroize();
|
||||
}
|
||||
}
|
||||
impl<O: Clone + Zeroize> ZeroizeOnDrop for Timelocked<O> {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "dalek-ff-group"
|
||||
version = "0.1.4"
|
||||
version = "0.1.5"
|
||||
description = "ff/group bindings around curve25519-dalek"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/serai-dex/serai"
|
||||
|
@ -15,7 +15,7 @@ all-features = true
|
|||
rand_core = "0.6"
|
||||
digest = "0.10"
|
||||
|
||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
||||
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||
subtle = "2.4"
|
||||
|
||||
ff = "0.12"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "minimal-ed448"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
description = "Unaudited, inefficient implementation of Ed448 in Rust"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/serai-dex/serai"
|
||||
|
@ -17,7 +17,7 @@ lazy_static = "1"
|
|||
rand_core = "0.6"
|
||||
digest = "0.10"
|
||||
|
||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
||||
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||
subtle = "2.4"
|
||||
|
||||
ff = "0.12"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "modular-frost"
|
||||
version = "0.2.1"
|
||||
version = "0.2.2"
|
||||
description = "Modular implementation of FROST over ff/group"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/serai-dex/serai"
|
||||
|
@ -16,7 +16,7 @@ thiserror = "1"
|
|||
|
||||
rand_core = "0.6"
|
||||
|
||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
||||
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||
|
||||
hex = "0.4"
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
|||
|
||||
use rand_core::{RngCore, CryptoRng};
|
||||
|
||||
use zeroize::Zeroize;
|
||||
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||
|
||||
use group::{
|
||||
ff::{Field, PrimeField},
|
||||
|
@ -272,6 +272,7 @@ impl<C: Curve> Drop for SecretShareMachine<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for SecretShareMachine<C> {}
|
||||
|
||||
#[derive(Zeroize)]
|
||||
pub struct KeyMachine<C: Curve> {
|
||||
|
@ -287,6 +288,7 @@ impl<C: Curve> Drop for KeyMachine<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for KeyMachine<C> {}
|
||||
|
||||
impl<C: Curve> KeyGenMachine<C> {
|
||||
/// 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 zeroize::Zeroize;
|
||||
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||
|
||||
use group::{
|
||||
ff::{Field, PrimeField},
|
||||
|
@ -160,6 +160,7 @@ impl<C: Curve> Drop for FrostCore<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for FrostCore<C> {}
|
||||
|
||||
impl<C: Curve> Debug for FrostCore<C> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
|
@ -287,6 +288,7 @@ impl<C: Curve> Drop for FrostKeys<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for FrostKeys<C> {}
|
||||
|
||||
// View of keys passable to algorithm implementations
|
||||
#[derive(Clone, Zeroize)]
|
||||
|
@ -304,6 +306,7 @@ impl<C: Curve> Drop for FrostView<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for FrostView<C> {}
|
||||
|
||||
impl<C: Curve> FrostKeys<C> {
|
||||
pub fn new(core: FrostCore<C>) -> FrostKeys<C> {
|
||||
|
|
|
@ -6,7 +6,7 @@ use std::{
|
|||
|
||||
use rand_core::{RngCore, CryptoRng};
|
||||
|
||||
use zeroize::Zeroize;
|
||||
use zeroize::{Zeroize, ZeroizeOnDrop};
|
||||
|
||||
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))?;
|
||||
}
|
||||
// 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] {
|
||||
Err(FrostError::DuplicatedIndex(included[i]))?;
|
||||
}
|
||||
|
@ -95,6 +95,7 @@ impl<C: Curve> Drop for PreprocessPackage<C> {
|
|||
self.zeroize()
|
||||
}
|
||||
}
|
||||
impl<C: Curve> ZeroizeOnDrop for PreprocessPackage<C> {}
|
||||
|
||||
// This library unifies the preprocessing step with signing due to security concerns and to provide
|
||||
// a simpler UX
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "multiexp"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
description = "Multiexponentation algorithms for ff/group"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/serai-dex/serai"
|
||||
|
@ -12,7 +12,7 @@ edition = "2021"
|
|||
all-features = true
|
||||
|
||||
[dependencies]
|
||||
zeroize = { version = "1.3", features = ["zeroize_derive"] }
|
||||
zeroize = { version = "1.5", features = ["zeroize_derive"] }
|
||||
|
||||
ff = "0.12"
|
||||
group = "0.12"
|
||||
|
|
Loading…
Reference in a new issue