Make ed25519-zebra available via librustzcash.

This commit is contained in:
Sean Bowe 2020-06-22 15:11:31 -06:00
parent 552482a404
commit 3688f508d8
No known key found for this signature in database
GPG Key ID: 95684257D8F8B031
18 changed files with 321 additions and 8 deletions

105
Cargo.lock generated
View File

@ -82,6 +82,16 @@ dependencies = [
"crunchy",
]
[[package]]
name = "bincode"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf"
dependencies = [
"byteorder",
"serde",
]
[[package]]
name = "bit-vec"
version = "0.4.4"
@ -261,6 +271,19 @@ dependencies = [
"crypto_api",
]
[[package]]
name = "curve25519-dalek"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5"
dependencies = [
"byteorder",
"digest",
"rand_core",
"subtle",
"zeroize",
]
[[package]]
name = "digest"
version = "0.8.1"
@ -280,6 +303,20 @@ dependencies = [
"winapi",
]
[[package]]
name = "ed25519-zebra"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a76f15c88332faad36abb368aca89deb5cc4f440e5181c8848f8bdd049848f7b"
dependencies = [
"curve25519-dalek",
"hex 0.4.2",
"rand_core",
"serde",
"sha2",
"thiserror",
]
[[package]]
name = "fake-simd"
version = "0.1.2"
@ -377,6 +414,12 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
[[package]]
name = "hex"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35"
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -394,8 +437,10 @@ name = "librustzcash"
version = "0.2.0"
dependencies = [
"bellman",
"bincode",
"blake2b_simd",
"blake2s_simd",
"ed25519-zebra",
"ff",
"lazy_static",
"libc",
@ -591,6 +636,26 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
version = "1.0.113"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6135c78461981c79497158ef777264c51d9d0f4f3fc3a4d22b915900e42dac6a"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.113"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93c5eaa17d0954cb481cdcfffe9d84fcfa7a1a9f2349271e678677be4c26ae31"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "sha2"
version = "0.8.0"
@ -604,16 +669,42 @@ dependencies = [
]
[[package]]
name = "syn"
version = "1.0.5"
name = "subtle"
version = "2.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1"
[[package]]
name = "syn"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "thiserror"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "typenum"
version = "1.11.2"
@ -678,7 +769,7 @@ dependencies = [
"crypto_api_chachapoly",
"ff",
"fpe",
"hex",
"hex 0.3.2",
"lazy_static",
"log",
"pairing",
@ -702,3 +793,9 @@ dependencies = [
"rand_core",
"zcash_primitives",
]
[[package]]
name = "zeroize"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8"

View File

@ -31,6 +31,8 @@ rand_core = "0.5.1"
zcash_history = "0.2"
zcash_primitives = "0.2"
zcash_proofs = "0.2"
ed25519-zebra = "0.4.1"
bincode = "1.2.1"
[profile.release]
lto = true

View File

@ -0,0 +1,15 @@
package=crate_bincode
$(package)_crate_name=bincode
$(package)_version=1.2.1
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_curve25519_dalek
$(package)_crate_name=curve25519-dalek
$(package)_version=2.1.0
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_ed25519_zebra
$(package)_crate_name=ed25519-zebra
$(package)_version=0.4.1
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=a76f15c88332faad36abb368aca89deb5cc4f440e5181c8848f8bdd049848f7b
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -4,7 +4,7 @@ $(package)_version=0.3.2
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77
$(package)_crate_versioned_name=$($(package)_crate_name)
$(package)_crate_versioned_name="$($(package)_crate_name) 0.3.2"
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))

View File

@ -0,0 +1,15 @@
package=crate_hex2
$(package)_crate_name=hex
$(package)_version=0.4.2
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35
$(package)_crate_versioned_name="$($(package)_crate_name) 0.4.2"
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_serde
$(package)_crate_name=serde
$(package)_version=1.0.113
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=6135c78461981c79497158ef777264c51d9d0f4f3fc3a4d22b915900e42dac6a
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_serde_derive
$(package)_crate_name=serde_derive
$(package)_version=1.0.113
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=93c5eaa17d0954cb481cdcfffe9d84fcfa7a1a9f2349271e678677be4c26ae31
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_subtle
$(package)_crate_name=subtle
$(package)_version=2.2.3
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -1,9 +1,9 @@
package=crate_syn
$(package)_crate_name=syn
$(package)_version=1.0.5
$(package)_version=1.0.11
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf
$(package)_sha256_hash=dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds

View File

@ -0,0 +1,15 @@
package=crate_thiserror
$(package)_crate_name=thiserror
$(package)_version=1.0.20
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_thiserror_impl
$(package)_crate_name=thiserror-impl
$(package)_version=1.0.20
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -0,0 +1,15 @@
package=crate_zeroize
$(package)_crate_name=zeroize
$(package)_version=1.1.0
$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name)
$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate
$(package)_sha256_hash=3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8
$(package)_crate_versioned_name=$($(package)_crate_name)
define $(package)_preprocess_cmds
$(call generate_crate_checksum,$(package))
endef
define $(package)_stage_cmds
$(call vendor_crate_source,$(package))
endef

View File

@ -7,6 +7,7 @@ rust_crates := \
crate_autocfg \
crate_bellman \
crate_bigint \
crate_bincode \
crate_bit_vec \
crate_blake2b_simd \
crate_blake2s_simd \
@ -27,8 +28,10 @@ rust_crates := \
crate_crunchy \
crate_crypto_api_chachapoly \
crate_crypto_api \
crate_curve25519_dalek \
crate_digest \
crate_directories \
crate_ed25519_zebra \
crate_fake_simd \
crate_ff_derive \
crate_ff \
@ -39,6 +42,7 @@ rust_crates := \
crate_getrandom \
crate_group \
crate_hex \
crate_hex2 \
crate_lazy_static \
crate_libc \
crate_log \
@ -62,8 +66,13 @@ rust_crates := \
crate_scopeguard \
crate_semver_parser \
crate_semver \
crate_serde \
crate_serde_derive \
crate_sha2 \
crate_subtle \
crate_syn \
crate_thiserror \
crate_thiserror_impl \
crate_typenum \
crate_unicode_xid \
crate_wasi \
@ -72,7 +81,8 @@ rust_crates := \
crate_winapi_x86_64_pc_windows_gnu \
crate_zcash_history \
crate_zcash_primitives \
crate_zcash_proofs
crate_zcash_proofs \
crate_zeroize
rust_packages := rust $(rust_crates)
proton_packages := proton
zcash_packages := libsodium utfcpp

View File

@ -1,5 +1,6 @@
#include <gtest/gtest.h>
#include <sodium.h>
#include "librustzcash.h"
#include "uint256.h"
#include "utilstrencodings.h"
@ -18,6 +19,13 @@ void TestLibsodiumEd25519SignatureVerification(
(const unsigned char*)msg.data(), msg.size(),
pubkey.data()),
0);
EXPECT_EQ(
librustzcash_zebra_crypto_sign_verify_detached(
sig.data(),
(const unsigned char*)msg.data(), msg.size(),
pubkey.data()),
0);
}
TEST(ConsensusTests, LibsodiumPubkeyValidation) {

View File

@ -351,6 +351,13 @@ extern "C" {
const unsigned char *n_ptr,
unsigned char *h_ret
);
int librustzcash_zebra_crypto_sign_verify_detached(
const unsigned char *sig,
const unsigned char *m,
unsigned long long mlen,
const unsigned char *pk
);
#ifdef __cplusplus
}
#endif

View File

@ -1340,3 +1340,42 @@ pub extern "system" fn librustzcash_mmr_hash_node(
0
}
#[no_mangle]
pub extern "system" fn librustzcash_zebra_crypto_sign_verify_detached(
sig: *const [u8; 64],
m: *const u8,
mlen: u64,
pk: *const [u8; 32],
) -> isize {
use ed25519_zebra::{Signature, VerificationKey, VerificationKeyBytes};
use std::convert::TryFrom;
let sig = Signature::from(*unsafe {
match sig.as_ref() {
Some(sig) => sig,
None => return 1,
}
});
let pk: VerificationKeyBytes = bincode::deserialize(unsafe {
match pk.as_ref() {
Some(pk) => pk,
None => return 1,
}
})
.expect("should never fail to deserialize raw bytes");
let pk = match VerificationKey::try_from(pk) {
Ok(pk) => pk,
Err(_) => return 1,
};
let m = unsafe { slice::from_raw_parts(m, mlen as usize) };
if pk.verify(&sig, m).is_err() {
1
} else {
0
}
}