Make ed25519-zebra available via librustzcash.
This commit is contained in:
parent
552482a404
commit
3688f508d8
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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))
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue