diff --git a/Cargo.lock b/Cargo.lock index 80d97c197b..30a824dafa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "addr2line" version = "0.14.1" @@ -124,6 +126,15 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -223,6 +234,15 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" +[[package]] +name = "cpufeatures" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.2.1" @@ -280,6 +300,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "dtoa" version = "0.4.8" @@ -511,6 +540,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -798,8 +837,8 @@ dependencies = [ "libc", "libloading", "log", + "num-bigint", "num-traits", - "openssl", "rand 0.7.3", "regex", "rmp-serde", @@ -807,6 +846,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "sha2", "strum", "strum_macros", "time", @@ -1056,6 +1096,12 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + [[package]] name = "openssl" version = "0.10.35" @@ -1076,15 +1122,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" -[[package]] -name = "openssl-src" -version = "111.15.0+1.1.1k" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a5f6ae2ac04393b217ea9f700cd04fa9bf3d93fae2872069f3d15d908af70a" -dependencies = [ - "cc", -] - [[package]] name = "openssl-sys" version = "0.9.65" @@ -1094,7 +1131,6 @@ dependencies = [ "autocfg 1.0.1", "cc", "libc", - "openssl-src", "pkg-config", "vcpkg", ] @@ -1649,6 +1685,19 @@ dependencies = [ "url 1.7.2", ] +[[package]] +name = "sha2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12" +dependencies = [ + "block-buffer", + "cfg-if 1.0.0", + "cpufeatures", + "digest", + "opaque-debug", +] + [[package]] name = "slab" version = "0.4.3" @@ -1942,6 +1991,12 @@ dependencies = [ "cfg-if 0.1.10", ] +[[package]] +name = "typenum" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" + [[package]] name = "unicase" version = "2.6.0" diff --git a/libvcx/Cargo.toml b/libvcx/Cargo.toml index 57c607073c..e51ded9429 100644 --- a/libvcx/Cargo.toml +++ b/libvcx/Cargo.toml @@ -45,7 +45,8 @@ regex = "1.1.0" rust-base58 = "0.0.4" rmp-serde = "0.13.7" base64 = "0.8.0" -openssl = { version = "0.10.35", features = ["vendored"] } +sha2 = "0.9.5" +num-bigint = "0.4.0" num-traits = "0.2.0" indy = "1.16.0-post-59" indy-sys = "1.16.0-post-59" diff --git a/libvcx/src/lib.rs b/libvcx/src/lib.rs index 1689f9458b..1d7f8146cc 100644 --- a/libvcx/src/lib.rs +++ b/libvcx/src/lib.rs @@ -14,7 +14,6 @@ extern crate lazy_static; extern crate libc; #[macro_use] extern crate log; -extern crate openssl; extern crate rand; extern crate regex; extern crate rmp_serde; diff --git a/libvcx/src/utils/openssl.rs b/libvcx/src/utils/openssl.rs index 9e46c09252..c8e3ee7e39 100644 --- a/libvcx/src/utils/openssl.rs +++ b/libvcx/src/utils/openssl.rs @@ -1,5 +1,5 @@ -use openssl::bn::BigNum; -use openssl::sha::sha256; +use sha2::{Sha256, Digest}; +use num_bigint::BigUint; use crate::error::prelude::*; @@ -7,14 +7,11 @@ pub fn encode(s: &str) -> VcxResult { match s.parse::() { Ok(val) => Ok(val.to_string()), Err(_) => { - let hash = sha256(s.as_bytes()); - let bignum = BigNum::from_slice(&hash) - .map_err(|err| VcxError::from_msg(VcxErrorKind::EncodeError, format!("Cannot encode string: {}", err)))?; - - let encoded = bignum.to_dec_str() - .map_err(|err| VcxError::from_msg(VcxErrorKind::EncodeError, format!("Cannot encode string: {}", err)))? - .to_string(); - + let mut hasher = Sha256::new(); + hasher.update(s.as_bytes()); + let hash = hasher.finalize(); + let bignum = BigUint::from_bytes_be(&hash.as_slice()); + let encoded = bignum.to_str_radix(10); Ok(encoded) } } diff --git a/libvcx/src/utils/validation.rs b/libvcx/src/utils/validation.rs index cf150afb75..214cc927f6 100644 --- a/libvcx/src/utils/validation.rs +++ b/libvcx/src/utils/validation.rs @@ -1,12 +1,12 @@ -extern crate openssl; extern crate rust_base58; use crate::error::prelude::*; use crate::settings::Actors; use crate::utils::qualifier; -use self::openssl::bn::BigNum; use self::rust_base58::FromBase58; +use num_bigint::BigUint; +use num_traits::Num; pub fn validate_did(did: &str) -> VcxResult { if qualifier::is_fully_qualified(did) { @@ -29,7 +29,6 @@ pub fn validate_did(did: &str) -> VcxResult { } pub fn validate_verkey(verkey: &str) -> VcxResult { - // assert len(base58.b58decode(ver_key)) == 32 let check_verkey = String::from(verkey); match check_verkey.from_base58() { Ok(ref x) if x.len() == 32 => Ok(check_verkey), @@ -39,9 +38,9 @@ pub fn validate_verkey(verkey: &str) -> VcxResult { } pub fn validate_nonce(nonce: &str) -> VcxResult { - let nonce = BigNum::from_dec_str(nonce) + let nonce = BigUint::from_str_radix(nonce, 10) .map_err(|err| VcxError::from_msg(VcxErrorKind::InvalidNonce, err))?; - if nonce.num_bits() > 80 { + if nonce.bits() > 80 { return Err(VcxError::from_msg(VcxErrorKind::InvalidNonce, "Invalid Nonce length")); } Ok(nonce.to_string())