chore: bump crypto deps (#2260)

* chore(core): bump k256

* fix: use correct recovery api

* fix(signers): use correct apis

* chore(signers): bump elliptic curve

* feat: use PreHashSigner

* feat: bump yubihsm and adjust for breakages

* chore: clippy
This commit is contained in:
Georgios Konstantopoulos 2023-03-14 23:13:46 -07:00 committed by GitHub
parent 516dfcfd2a
commit 18a049b4c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 217 additions and 309 deletions

283
Cargo.lock generated
View File

@ -247,6 +247,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f6e5df9abedba5099a01a6567c6086a6fbcff57af07c360d356737f9e0c644"
[[package]]
name = "bitvec"
version = "0.17.4"
@ -549,7 +555,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
dependencies = [
"atty",
"bitflags",
"bitflags 1.3.2",
"clap_derive",
"clap_lex",
"indexmap",
@ -612,7 +618,7 @@ dependencies = [
"bs58",
"coins-core",
"digest 0.10.6",
"getrandom 0.2.8",
"getrandom",
"hmac 0.12.1",
"k256 0.11.6",
"lazy_static",
@ -629,12 +635,12 @@ checksum = "a05ceda6ab4876de899fe23e8a171b200be9a346289bce12d41311e4bce2f104"
dependencies = [
"bitvec 0.17.4",
"coins-bip32",
"getrandom 0.2.8",
"getrandom",
"hex",
"hmac 0.12.1",
"once_cell",
"pbkdf2",
"rand 0.8.5",
"pbkdf2 0.11.0",
"rand",
"sha2 0.10.6",
"thiserror",
"tracing",
@ -874,7 +880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
dependencies = [
"generic-array 0.14.6",
"rand_core 0.6.4",
"rand_core",
"subtle",
"zeroize",
]
@ -886,7 +892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071c0f5945634bc9ba7a452f492377dd6b1993665ddb58f28704119b32f07a9a"
dependencies = [
"generic-array 0.14.6",
"rand_core 0.6.4",
"rand_core",
"subtle",
"zeroize",
]
@ -898,7 +904,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array 0.14.6",
"rand_core 0.6.4",
"rand_core",
"typenum",
]
@ -933,13 +939,15 @@ dependencies = [
[[package]]
name = "curve25519-dalek"
version = "3.2.0"
version = "4.0.0-rc.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16"
dependencies = [
"byteorder",
"digest 0.9.0",
"rand_core 0.5.1",
"cfg-if 1.0.0",
"digest 0.10.6",
"fiat-crypto",
"packed_simd_2",
"platforms",
"subtle",
"zeroize",
]
@ -1141,24 +1149,25 @@ dependencies = [
[[package]]
name = "ed25519"
version = "1.5.2"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369"
checksum = "be522bee13fa6d8059f4903a4084aa3bd50725e18150202f0238deb615cd6371"
dependencies = [
"signature 1.6.4",
"pkcs8 0.10.1",
"signature 2.0.0",
]
[[package]]
name = "ed25519-dalek"
version = "1.0.1"
version = "2.0.0-pre.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
checksum = "7bd577ba9d4bcab443cac60003d8fd32c638e7024a3ec92c200d7af5d2c397ed"
dependencies = [
"curve25519-dalek",
"ed25519",
"rand 0.7.3",
"rand_core",
"serde",
"sha2 0.9.9",
"sha2 0.10.6",
"zeroize",
]
@ -1182,7 +1191,7 @@ dependencies = [
"generic-array 0.14.6",
"group 0.12.1",
"pkcs8 0.9.0",
"rand_core 0.6.4",
"rand_core",
"sec1 0.3.0",
"subtle",
"zeroize",
@ -1201,7 +1210,7 @@ dependencies = [
"generic-array 0.14.6",
"group 0.13.0",
"pkcs8 0.10.1",
"rand_core 0.6.4",
"rand_core",
"sec1 0.7.1",
"subtle",
"zeroize",
@ -1242,7 +1251,7 @@ dependencies = [
"hex",
"k256 0.13.0",
"log",
"rand 0.8.5",
"rand",
"rlp",
"serde",
"sha3",
@ -1294,8 +1303,8 @@ dependencies = [
"digest 0.10.6",
"hex",
"hmac 0.12.1",
"pbkdf2",
"rand 0.8.5",
"pbkdf2 0.11.0",
"rand",
"scrypt",
"serde",
"serde_json",
@ -1368,7 +1377,7 @@ dependencies = [
"ethers-solc",
"eyre",
"hex",
"rand 0.8.5",
"rand",
"serde",
"serde_json",
"tempfile",
@ -1417,7 +1426,7 @@ dependencies = [
"ethers-etherscan",
"ethers-solc",
"eyre",
"getrandom 0.2.8",
"getrandom",
"hex",
"prettyplease",
"proc-macro2",
@ -1456,18 +1465,18 @@ dependencies = [
"cargo_metadata",
"chrono",
"convert_case",
"elliptic-curve 0.12.3",
"elliptic-curve 0.13.2",
"ethabi",
"generic-array 0.14.6",
"getrandom 0.2.8",
"getrandom",
"hex",
"hex-literal",
"k256 0.11.6",
"k256 0.13.0",
"num_enum",
"once_cell",
"open-fastrlp",
"proc-macro2",
"rand 0.8.5",
"rand",
"rlp",
"rlp-derive",
"serde",
@ -1498,7 +1507,7 @@ version = "2.0.0"
dependencies = [
"ethers-core",
"ethers-solc",
"getrandom 0.2.8",
"getrandom",
"reqwest",
"semver",
"serde",
@ -1529,7 +1538,7 @@ dependencies = [
"hex",
"instant",
"once_cell",
"rand 0.8.5",
"rand",
"reqwest",
"serde",
"serde_json",
@ -1554,7 +1563,7 @@ dependencies = [
"futures-core",
"futures-timer",
"futures-util",
"getrandom 0.2.8",
"getrandom",
"hashers",
"hex",
"http",
@ -1588,7 +1597,7 @@ dependencies = [
"coins-bip32",
"coins-bip39",
"coins-ledger",
"elliptic-curve 0.12.3",
"elliptic-curve 0.13.2",
"eth-keystore",
"ethers-contract-derive",
"ethers-core",
@ -1597,7 +1606,7 @@ dependencies = [
"futures-util",
"hex",
"home",
"rand 0.8.5",
"rand",
"rusoto_core",
"rusoto_kms",
"semver",
@ -1624,7 +1633,7 @@ dependencies = [
"ethers-core",
"fs_extra",
"futures-util",
"getrandom 0.2.8",
"getrandom",
"glob",
"hex",
"home",
@ -1633,7 +1642,7 @@ dependencies = [
"once_cell",
"path-slash",
"pretty_assertions",
"rand 0.8.5",
"rand",
"rayon",
"regex",
"semver",
@ -1811,7 +1820,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
dependencies = [
"rand_core 0.6.4",
"rand_core",
"subtle",
]
@ -1821,10 +1830,16 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
dependencies = [
"rand_core 0.6.4",
"rand_core",
"subtle",
]
[[package]]
name = "fiat-crypto"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955"
[[package]]
name = "fixed-hash"
version = "0.8.0"
@ -1832,7 +1847,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534"
dependencies = [
"byteorder",
"rand 0.8.5",
"rand",
"rustc-hex",
"static_assertions",
]
@ -2039,17 +2054,6 @@ dependencies = [
"zeroize",
]
[[package]]
name = "getrandom"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [
"cfg-if 1.0.0",
"libc",
"wasi 0.9.0+wasi-snapshot-preview1",
]
[[package]]
name = "getrandom"
version = "0.2.8"
@ -2059,7 +2063,7 @@ dependencies = [
"cfg-if 1.0.0",
"js-sys",
"libc",
"wasi 0.11.0+wasi-snapshot-preview1",
"wasi",
"wasm-bindgen",
]
@ -2076,7 +2080,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
dependencies = [
"ff 0.12.1",
"rand_core 0.6.4",
"rand_core",
"subtle",
]
@ -2087,7 +2091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
"ff 0.13.0",
"rand_core 0.6.4",
"rand_core",
"subtle",
]
@ -2492,7 +2496,6 @@ dependencies = [
"ecdsa 0.14.8",
"elliptic-curve 0.12.3",
"sha2 0.10.6",
"sha3",
]
[[package]]
@ -2562,6 +2565,12 @@ version = "0.2.139"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
[[package]]
name = "libm"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
[[package]]
name = "libusb1-sys"
version = "0.6.4"
@ -2687,7 +2696,7 @@ checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
dependencies = [
"libc",
"log",
"wasi 0.11.0+wasi-snapshot-preview1",
"wasi",
"windows-sys",
]
@ -2721,7 +2730,7 @@ version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"cfg-if 1.0.0",
"libc",
"memoffset",
@ -2850,7 +2859,7 @@ version = "0.10.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"cfg-if 1.0.0",
"foreign-types",
"libc",
@ -2912,26 +2921,38 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "p256"
version = "0.11.1"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
dependencies = [
"ecdsa 0.14.8",
"elliptic-curve 0.12.3",
"ecdsa 0.16.1",
"elliptic-curve 0.13.2",
"primeorder",
"sha2 0.10.6",
]
[[package]]
name = "p384"
version = "0.11.2"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa"
checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
dependencies = [
"ecdsa 0.14.8",
"elliptic-curve 0.12.3",
"ecdsa 0.16.1",
"elliptic-curve 0.13.2",
"primeorder",
"sha2 0.10.6",
]
[[package]]
name = "packed_simd_2"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282"
dependencies = [
"cfg-if 1.0.0",
"libm",
]
[[package]]
name = "parity-scale-codec"
version = "3.2.1"
@ -3013,7 +3034,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
dependencies = [
"base64ct",
"rand_core 0.6.4",
"rand_core",
"subtle",
]
@ -3035,6 +3056,16 @@ dependencies = [
"sha2 0.10.6",
]
[[package]]
name = "pbkdf2"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31"
dependencies = [
"digest 0.10.6",
"hmac 0.12.1",
]
[[package]]
name = "percent-encoding"
version = "2.2.0"
@ -3078,7 +3109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
dependencies = [
"phf_shared 0.11.1",
"rand 0.8.5",
"rand",
]
[[package]]
@ -3176,6 +3207,12 @@ version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "platforms"
version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630"
[[package]]
name = "plotters"
version = "0.3.4"
@ -3238,6 +3275,15 @@ dependencies = [
"syn",
]
[[package]]
name = "primeorder"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
dependencies = [
"elliptic-curve 0.13.2",
]
[[package]]
name = "primitive-types"
version = "0.12.1"
@ -3323,19 +3369,6 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
[[package]]
name = "rand"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
dependencies = [
"getrandom 0.1.16",
"libc",
"rand_chacha 0.2.2",
"rand_core 0.5.1",
"rand_hc",
]
[[package]]
name = "rand"
version = "0.8.5"
@ -3343,18 +3376,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha 0.3.1",
"rand_core 0.6.4",
]
[[package]]
name = "rand_chacha"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
dependencies = [
"ppv-lite86",
"rand_core 0.5.1",
"rand_chacha",
"rand_core",
]
[[package]]
@ -3364,16 +3387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core 0.6.4",
]
[[package]]
name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
dependencies = [
"getrandom 0.1.16",
"rand_core",
]
[[package]]
@ -3382,16 +3396,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom 0.2.8",
]
[[package]]
name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
dependencies = [
"rand_core 0.5.1",
"getrandom",
]
[[package]]
@ -3422,7 +3427,7 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
"bitflags",
"bitflags 1.3.2",
]
[[package]]
@ -3431,7 +3436,7 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom 0.2.8",
"getrandom",
"redox_syscall",
"thiserror",
]
@ -3684,7 +3689,7 @@ version = "0.36.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"errno",
"io-lifetimes",
"libc",
@ -3813,7 +3818,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d"
dependencies = [
"hmac 0.12.1",
"pbkdf2",
"pbkdf2 0.11.0",
"salsa20",
"sha2 0.10.6",
]
@ -3862,7 +3867,7 @@ version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
dependencies = [
"bitflags",
"bitflags 1.3.2",
"core-foundation",
"core-foundation-sys",
"libc",
@ -4091,8 +4096,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
dependencies = [
"digest 0.10.6",
"rand_core 0.6.4",
"signature_derive",
"rand_core",
]
[[package]]
@ -4102,14 +4106,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d"
dependencies = [
"digest 0.10.6",
"rand_core 0.6.4",
"rand_core",
"signature_derive",
]
[[package]]
name = "signature_derive"
version = "1.0.0-pre.7"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96e6310f022b5c02b3bba689166e833f6b96994a6ce1f138b653d2fd0519920f"
checksum = "ede930749cca4e3a3df7e37b5f0934a55693e01d028d7a4e506b44cbc059d95a"
dependencies = [
"proc-macro2",
"quote",
@ -4256,7 +4261,7 @@ dependencies = [
"indicatif",
"itertools",
"once_cell",
"rand 0.8.5",
"rand",
"reqwest",
"semver",
"serde",
@ -4679,7 +4684,7 @@ dependencies = [
"httparse",
"log",
"native-tls",
"rand 0.8.5",
"rand",
"rustls",
"sha1",
"thiserror",
@ -4774,7 +4779,7 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
dependencies = [
"getrandom 0.2.8",
"getrandom",
"serde",
]
@ -4826,12 +4831,6 @@ dependencies = [
"try-lock",
]
[[package]]
name = "wasi"
version = "0.9.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@ -5125,31 +5124,31 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
[[package]]
name = "yubihsm"
version = "0.41.0"
version = "0.42.0-pre.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d479bdaa16917b3ff94bd09e72536369cdb2e167126ec908dae4cf934c19eb01"
checksum = "f6a89568917376ff46a3de7bd0abdac47e9cc8ded4e1018e4a36d071d43a54ad"
dependencies = [
"aes 0.8.2",
"bitflags",
"bitflags 2.0.0",
"cbc",
"ccm",
"cmac",
"digest 0.10.6",
"ecdsa 0.14.8",
"ecdsa 0.16.1",
"ed25519",
"ed25519-dalek",
"hmac 0.12.1",
"k256 0.11.6",
"k256 0.13.0",
"log",
"p256",
"p384",
"pbkdf2",
"rand_core 0.6.4",
"pbkdf2 0.12.1",
"rand_core",
"rusb",
"serde",
"serde_json",
"sha2 0.10.6",
"signature 1.6.4",
"signature 2.0.0",
"subtle",
"thiserror",
"time",
@ -5192,7 +5191,7 @@ dependencies = [
"crossbeam-utils",
"flate2",
"hmac 0.12.1",
"pbkdf2",
"pbkdf2 0.11.0",
"sha1",
"time",
"zstd",

View File

@ -18,9 +18,9 @@ arrayvec = { version = "0.7.2", default-features = false }
rlp-derive = { version = "0.1.0", default-features = false }
# crypto
elliptic-curve = { version = "0.12.3", default-features = false }
elliptic-curve = { version = "0.13.2", default-features = false }
generic-array = { version = "0.14.6", default-features = false }
k256 = { version = "0.11", default-features = false, features = ["keccak256", "ecdsa", "std"] }
k256 = { version = "0.13.0", default-features = false, features = ["ecdsa", "std"] }
rand = { version = "0.8.5", default-features = false }
tiny-keccak = { version = "2.0.2", default-features = false }

View File

@ -7,8 +7,8 @@ use elliptic_curve::{consts::U32, sec1::ToEncodedPoint};
use generic_array::GenericArray;
use k256::{
ecdsa::{
recoverable::{Id as RecoveryId, Signature as RecoverableSignature},
Error as K256SignatureError, Signature as K256Signature,
Error as K256SignatureError, RecoveryId, Signature as RecoverableSignature,
Signature as K256Signature, VerifyingKey,
},
PublicKey as K256PublicKey,
};
@ -115,9 +115,12 @@ impl Signature {
RecoveryMessage::Hash(hash) => hash,
};
let (recoverable_sig, _recovery_id) = self.as_signature()?;
let verify_key = recoverable_sig
.recover_verifying_key_from_digest_bytes(message_hash.as_ref().into())?;
let (recoverable_sig, recovery_id) = self.as_signature()?;
let verify_key = VerifyingKey::recover_from_prehash(
message_hash.as_ref(),
&recoverable_sig,
recovery_id,
)?;
let public_key = K256PublicKey::from(&verify_key);
let public_key = public_key.to_encoded_point(/* compress = */ false);
@ -137,8 +140,7 @@ impl Signature {
self.s.to_big_endian(&mut s_bytes);
let gar: &GenericArray<u8, U32> = GenericArray::from_slice(&r_bytes);
let gas: &GenericArray<u8, U32> = GenericArray::from_slice(&s_bytes);
let sig = K256Signature::from_scalars(*gar, *gas)?;
RecoverableSignature::new(&sig, recovery_id)?
K256Signature::from_scalars(*gar, *gas)?
};
Ok((signature, recovery_id))
@ -147,7 +149,7 @@ impl Signature {
/// Retrieve the recovery ID.
pub fn recovery_id(&self) -> Result<RecoveryId, SignatureError> {
let standard_v = normalize_recovery_id(self.v);
Ok(RecoveryId::new(standard_v)?)
Ok(RecoveryId::from_byte(standard_v).expect("normalized recovery id always valid"))
}
/// Copies and serializes `self` into a new `Vec` with the recovery id included

View File

@ -2,6 +2,7 @@ use crate::{
types::{Address, Chain},
utils::{secret_key_to_address, unused_ports},
};
use generic_array::GenericArray;
use k256::{ecdsa::SigningKey, SecretKey as K256SecretKey};
use std::{
io::{BufRead, BufReader},
@ -278,7 +279,8 @@ impl Anvil {
if is_private_key && line.starts_with('(') {
let key_str = &line[6..line.len() - 1];
let key_hex = hex::decode(key_str).expect("could not parse as hex");
let key = K256SecretKey::from_be_bytes(&key_hex).expect("did not get private key");
let key = K256SecretKey::from_bytes(&GenericArray::clone_from_slice(&key_hex))
.expect("did not get private key");
addresses.push(secret_key_to_address(&SigningKey::from(&key)));
private_keys.push(key);
}

View File

@ -2,6 +2,7 @@ use crate::{
types::Address,
utils::{secret_key_to_address, unused_ports},
};
use generic_array::GenericArray;
use k256::{ecdsa::SigningKey, SecretKey as K256SecretKey};
use std::{
io::{BufRead, BufReader},
@ -205,7 +206,8 @@ impl Ganache {
if is_private_key && line.starts_with('(') {
let key_str = &line[6..line.len() - 1];
let key_hex = hex::decode(key_str).expect("could not parse as hex");
let key = K256SecretKey::from_be_bytes(&key_hex).expect("did not get private key");
let key = K256SecretKey::from_bytes(&GenericArray::clone_from_slice(&key_hex))
.expect("did not get private key");
addresses.push(secret_key_to_address(&SigningKey::from(&key)));
private_keys.push(key);
}

View File

@ -37,9 +37,8 @@ pub use rlp;
pub use hex;
use crate::types::{Address, Bytes, ParseI256Error, H256, I256, U256, U64};
use elliptic_curve::sec1::ToEncodedPoint;
use ethabi::ethereum_types::FromDecStrErr;
use k256::{ecdsa::SigningKey, PublicKey as K256PublicKey};
use k256::ecdsa::SigningKey;
use std::{
collections::HashMap,
convert::{TryFrom, TryInto},
@ -385,7 +384,7 @@ pub fn get_create2_address_from_hash(
/// Converts a K256 SigningKey to an Ethereum Address
pub fn secret_key_to_address(secret_key: &SigningKey) -> Address {
let public_key = K256PublicKey::from(&secret_key.verifying_key());
let public_key = secret_key.verifying_key();
let public_key = public_key.to_encoded_point(/* compress = */ false);
let public_key = public_key.as_bytes();
debug_assert_eq!(public_key[0], 0x04);

View File

@ -2,6 +2,7 @@
use std::collections::BTreeMap;
use generic_array::GenericArray;
use k256::SecretKey;
/// Returns the private developer keys <https://docs.moonbeam.network/builders/get-started/networks/moonbeam-dev/#pre-funded-development-accounts>
@ -47,7 +48,7 @@ impl MoonbeamDev {
}
fn to_secret_key(s: &str) -> SecretKey {
SecretKey::from_be_bytes(&hex::decode(s).unwrap()).unwrap()
SecretKey::from_bytes(&GenericArray::clone_from_slice(&hex::decode(s).unwrap())).unwrap()
}
impl Default for MoonbeamDev {

View File

@ -23,10 +23,10 @@ coins-bip39 = "0.8.1"
coins-ledger = { version = "0.7.1", default-features = false, optional = true }
hex = { version = "0.4.3", default-features = false, features = ["std"] }
async-trait = { version = "0.1.50", default-features = false }
elliptic-curve = { version = "0.12.3", default-features = false }
elliptic-curve = { version = "0.13.2", default-features = false }
sha2 = { version = "0.10.6", default-features = false }
rand = { version = "0.8.5", default-features = false }
yubihsm = { version = "0.41.0", features = ["secp256k1", "http", "usb"], optional = true }
yubihsm = { version = "0.42.0-pre.0", features = ["secp256k1", "http", "usb"], optional = true }
futures-util = { version = "^0.3", optional = true }
futures-executor = { version = "^0.3", optional = true }
semver = { version = "1.0.17", optional = true }
@ -49,7 +49,7 @@ ethers-contract-derive = { version = "^2.0.0", path = "../ethers-contract/ethers
ethers-derive-eip712 = { version = "^2.0.0", path = "../ethers-core/ethers-derive-eip712" }
serde_json = { version = "1.0.64" }
yubihsm = { version = "0.41.0", features = ["secp256k1", "usb", "mockhsm"] }
yubihsm = { version = "0.42.0-pre.0", features = ["secp256k1", "usb", "mockhsm"] }
tokio = { version = "1.18", default-features = false, features = ["macros", "rt"] }
tempfile = "3.4.0"
tracing-subscriber = "0.3.16"

View File

@ -15,7 +15,7 @@ use rusoto_kms::{
use tracing::{debug, instrument, trace};
mod utils;
use utils::{apply_eip155, rsig_to_ethsig, verifying_key_to_address};
use utils::{apply_eip155, verifying_key_to_address};
/// An ethers Signer that uses keys held in Amazon AWS KMS.
///
@ -57,7 +57,7 @@ impl std::fmt::Debug for AwsSigner {
f.debug_struct("AwsSigner")
.field("key_id", &self.key_id)
.field("chain_id", &self.chain_id)
.field("pubkey", &hex::encode(self.pubkey.to_bytes()))
.field("pubkey", &hex::encode(self.pubkey.to_sec1_bytes()))
.field("address", &self.address)
.finish()
}
@ -165,7 +165,7 @@ impl AwsSigner {
debug!(
"Instantiated AWS signer with pubkey 0x{} and address 0x{}",
hex::encode(pubkey.to_bytes()),
hex::encode(pubkey.to_sec1_bytes()),
hex::encode(address)
);
@ -211,10 +211,8 @@ impl AwsSigner {
chain_id: u64,
) -> Result<EthSig, AwsSignerError> {
let sig = self.sign_digest(digest.into()).await?;
let sig = utils::rsig_from_digest_bytes_trial_recovery(&sig, digest.into(), &self.pubkey);
let mut sig = rsig_to_ethsig(&sig);
let mut sig =
utils::sig_from_digest_bytes_trial_recovery(&sig, digest.into(), &self.pubkey);
apply_eip155(&mut sig, chain_id);
Ok(sig)
}
@ -255,8 +253,7 @@ impl super::Signer for AwsSigner {
payload.encode_eip712().map_err(|e| Self::Error::Eip712Error(e.to_string()))?;
let sig = self.sign_digest(digest).await?;
let sig = utils::rsig_from_digest_bytes_trial_recovery(&sig, digest, &self.pubkey);
let sig = rsig_to_ethsig(&sig);
let sig = utils::sig_from_digest_bytes_trial_recovery(&sig, digest.into(), &self.pubkey);
Ok(sig)
}

View File

@ -6,11 +6,7 @@ use std::convert::TryFrom;
use ethers_core::{
k256::{
ecdsa::{
recoverable::{Id, Signature as RSig},
Signature as KSig, VerifyingKey,
},
elliptic_curve::sec1::ToEncodedPoint,
ecdsa::{RecoveryId, Signature as RSig, Signature as KSig, VerifyingKey},
FieldBytes,
},
types::{Address, Signature as EthSig, U256},
@ -20,40 +16,34 @@ use rusoto_kms::{GetPublicKeyResponse, SignResponse};
use crate::aws::AwsSignerError;
/// Converts a recoverable signature to an ethers signature
pub(super) fn rsig_to_ethsig(sig: &RSig) -> EthSig {
let v: u8 = sig.recovery_id().into();
let v = (v + 27) as u64;
/// Makes a trial recovery to check whether an RSig corresponds to a known
/// `VerifyingKey`
fn check_candidate(
sig: &RSig,
recovery_id: RecoveryId,
digest: [u8; 32],
vk: &VerifyingKey,
) -> bool {
VerifyingKey::recover_from_prehash(digest.as_slice(), sig, recovery_id)
.map(|key| key == *vk)
.unwrap_or(false)
}
/// Recover an rsig from a signature under a known key by trial/error
pub(super) fn sig_from_digest_bytes_trial_recovery(
sig: &KSig,
digest: [u8; 32],
vk: &VerifyingKey,
) -> EthSig {
let r_bytes: FieldBytes = sig.r().into();
let s_bytes: FieldBytes = sig.s().into();
let r = U256::from_big_endian(r_bytes.as_slice());
let s = U256::from_big_endian(s_bytes.as_slice());
EthSig { r, s, v }
}
/// Makes a trial recovery to check whether an RSig corresponds to a known
/// `VerifyingKey`
fn check_candidate(sig: &RSig, digest: [u8; 32], vk: &VerifyingKey) -> bool {
if let Ok(key) = sig.recover_verifying_key_from_digest_bytes(digest.as_ref().into()) {
key == *vk
} else {
false
}
}
/// Recover an rsig from a signature under a known key by trial/error
pub(super) fn rsig_from_digest_bytes_trial_recovery(
sig: &KSig,
digest: [u8; 32],
vk: &VerifyingKey,
) -> RSig {
let sig_0 = RSig::new(sig, Id::new(0).unwrap()).unwrap();
let sig_1 = RSig::new(sig, Id::new(1).unwrap()).unwrap();
if check_candidate(&sig_0, digest, vk) {
sig_0
} else if check_candidate(&sig_1, digest, vk) {
sig_1
if check_candidate(&sig, RecoveryId::from_byte(0).unwrap(), digest, vk) {
EthSig { r, s, v: 0 }
} else if check_candidate(&sig, RecoveryId::from_byte(1).unwrap(), digest, vk) {
EthSig { r, s, v: 1 }
} else {
panic!("bad sig");
}

View File

@ -1,80 +0,0 @@
//! This is a helper module used to pass the pre-hashed message for signing to the
//! `sign_digest` methods of K256.
use ethers_core::{
k256::ecdsa::signature::digest::{
generic_array::GenericArray, Digest, FixedOutput, FixedOutputReset, HashMarker, Output,
OutputSizeUser, Reset, Update,
},
types::H256,
};
pub type Sha256Proxy = ProxyDigest<sha2::Sha256>;
#[derive(Clone)]
pub enum ProxyDigest<D: Digest> {
Proxy(Output<D>),
Digest(D),
}
impl<D: Digest + Clone> From<H256> for ProxyDigest<D>
where
GenericArray<u8, <D as OutputSizeUser>::OutputSize>: Copy,
{
fn from(src: H256) -> Self {
ProxyDigest::Proxy(*GenericArray::from_slice(src.as_bytes()))
}
}
impl<D: Digest> Default for ProxyDigest<D> {
fn default() -> Self {
ProxyDigest::Digest(D::new())
}
}
impl<D: Digest> Update for ProxyDigest<D> {
// we update only if we are digest
fn update(&mut self, data: &[u8]) {
match self {
ProxyDigest::Digest(ref mut d) => {
d.update(data);
}
ProxyDigest::Proxy(..) => {
unreachable!("can not update if we are proxy");
}
}
}
}
impl<D: Digest> HashMarker for ProxyDigest<D> {}
impl<D: Digest> Reset for ProxyDigest<D> {
// make new one
fn reset(&mut self) {
*self = Self::default();
}
}
impl<D: Digest> OutputSizeUser for ProxyDigest<D> {
// we default to the output of the original digest
type OutputSize = <D as OutputSizeUser>::OutputSize;
}
impl<D: Digest> FixedOutput for ProxyDigest<D> {
fn finalize_into(self, out: &mut GenericArray<u8, Self::OutputSize>) {
match self {
ProxyDigest::Digest(d) => {
*out = d.finalize();
}
ProxyDigest::Proxy(p) => {
*out = p;
}
}
}
}
impl<D: Digest> FixedOutputReset for ProxyDigest<D> {
fn finalize_into_reset(&mut self, out: &mut Output<Self>) {
let s = std::mem::take(self);
Digest::finalize_into(s, out)
}
}

View File

@ -1,5 +1,3 @@
mod hash;
mod mnemonic;
pub use mnemonic::{MnemonicBuilder, MnemonicBuilderError};
@ -12,7 +10,7 @@ mod yubi;
use crate::{to_eip155_v, Signer};
use ethers_core::{
k256::{
ecdsa::{recoverable::Signature as RecoverableSignature, signature::DigestSigner},
ecdsa::{signature::hazmat::PrehashSigner, RecoveryId, Signature as RecoverableSignature},
elliptic_curve::FieldBytes,
Secp256k1,
},
@ -22,7 +20,6 @@ use ethers_core::{
},
utils::hash_message,
};
use hash::Sha256Proxy;
use async_trait::async_trait;
use std::fmt;
@ -64,7 +61,7 @@ use std::fmt;
/// [`Signature`]: ethers_core::types::Signature
/// [`hash_message`]: fn@ethers_core::utils::hash_message
#[derive(Clone)]
pub struct Wallet<D: DigestSigner<Sha256Proxy, RecoverableSignature>> {
pub struct Wallet<D: PrehashSigner<(RecoverableSignature, RecoveryId)>> {
/// The Wallet's private Key
pub(crate) signer: D,
/// The wallet's address
@ -73,7 +70,7 @@ pub struct Wallet<D: DigestSigner<Sha256Proxy, RecoverableSignature>> {
pub(crate) chain_id: u64,
}
impl<D: DigestSigner<Sha256Proxy, RecoverableSignature>> Wallet<D> {
impl<D: PrehashSigner<(RecoverableSignature, RecoveryId)>> Wallet<D> {
/// Construct a new wallet with an external Signer
pub fn new_with_signer(signer: D, address: Address, chain_id: u64) -> Self {
Wallet { signer, address, chain_id }
@ -82,7 +79,7 @@ impl<D: DigestSigner<Sha256Proxy, RecoverableSignature>> Wallet<D> {
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
impl<D: Sync + Send + DigestSigner<Sha256Proxy, RecoverableSignature>> Signer for Wallet<D> {
impl<D: Sync + Send + PrehashSigner<(RecoverableSignature, RecoveryId)>> Signer for Wallet<D> {
type Error = WalletError;
async fn sign_message<S: Send + Sync + AsRef<[u8]>>(
@ -92,7 +89,7 @@ impl<D: Sync + Send + DigestSigner<Sha256Proxy, RecoverableSignature>> Signer fo
let message = message.as_ref();
let message_hash = hash_message(message);
Ok(self.sign_hash(message_hash))
self.sign_hash(message_hash)
}
async fn sign_transaction(&self, tx: &TypedTransaction) -> Result<Signature, Self::Error> {
@ -101,7 +98,7 @@ impl<D: Sync + Send + DigestSigner<Sha256Proxy, RecoverableSignature>> Signer fo
// in the case we don't have a chain_id, let's use the signer chain id instead
tx_with_chain.set_chain_id(self.chain_id);
}
Ok(self.sign_transaction_sync(&tx_with_chain))
self.sign_transaction_sync(&tx_with_chain)
}
async fn sign_typed_data<T: Eip712 + Send + Sync>(
@ -111,7 +108,7 @@ impl<D: Sync + Send + DigestSigner<Sha256Proxy, RecoverableSignature>> Signer fo
let encoded =
payload.encode_eip712().map_err(|e| Self::Error::Eip712Error(e.to_string()))?;
Ok(self.sign_hash(H256::from(encoded)))
self.sign_hash(H256::from(encoded))
}
fn address(&self) -> Address {
@ -130,37 +127,36 @@ impl<D: Sync + Send + DigestSigner<Sha256Proxy, RecoverableSignature>> Signer fo
}
}
impl<D: DigestSigner<Sha256Proxy, RecoverableSignature>> Wallet<D> {
impl<D: PrehashSigner<(RecoverableSignature, RecoveryId)>> Wallet<D> {
/// Synchronously signs the provided transaction, normalizing the signature `v` value with
/// EIP-155 using the transaction's `chain_id`, or the signer's `chain_id` if the transaction
/// does not specify one.
pub fn sign_transaction_sync(&self, tx: &TypedTransaction) -> Signature {
pub fn sign_transaction_sync(&self, tx: &TypedTransaction) -> Result<Signature, WalletError> {
// rlp (for sighash) must have the same chain id as v in the signature
let chain_id = tx.chain_id().map(|id| id.as_u64()).unwrap_or(self.chain_id);
let mut tx = tx.clone();
tx.set_chain_id(chain_id);
let sighash = tx.sighash();
let mut sig = self.sign_hash(sighash);
let mut sig = self.sign_hash(sighash)?;
// sign_hash sets `v` to recid + 27, so we need to subtract 27 before normalizing
sig.v = to_eip155_v(sig.v as u8 - 27, chain_id);
sig
Ok(sig)
}
/// Signs the provided hash.
pub fn sign_hash(&self, hash: H256) -> Signature {
let recoverable_sig: RecoverableSignature =
self.signer.sign_digest(Sha256Proxy::from(hash));
pub fn sign_hash(&self, hash: H256) -> Result<Signature, WalletError> {
let (recoverable_sig, recovery_id) = self.signer.sign_prehash(hash.as_ref())?;
let v = u8::from(recoverable_sig.recovery_id()) as u64 + 27;
let v = u8::from(recovery_id) as u64 + 27;
let r_bytes: FieldBytes<Secp256k1> = recoverable_sig.r().into();
let s_bytes: FieldBytes<Secp256k1> = recoverable_sig.s().into();
let r = U256::from_big_endian(r_bytes.as_slice());
let s = U256::from_big_endian(s_bytes.as_slice());
Signature { r, s, v }
Ok(Signature { r, s, v })
}
/// Gets the wallet's signer
@ -170,7 +166,7 @@ impl<D: DigestSigner<Sha256Proxy, RecoverableSignature>> Wallet<D> {
}
// do not log the signer
impl<D: DigestSigner<Sha256Proxy, RecoverableSignature>> fmt::Debug for Wallet<D> {
impl<D: PrehashSigner<(RecoverableSignature, RecoveryId)>> fmt::Debug for Wallet<D> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Wallet")
.field("address", &self.address)

View File

@ -66,7 +66,7 @@ impl Wallet<SigningKey> {
S: AsRef<[u8]>,
{
let (secret, uuid) = eth_keystore::new(dir, rng, password, name)?;
let signer = SigningKey::from_bytes(secret.as_slice())?;
let signer = SigningKey::from_bytes(secret.as_slice().into())?;
let address = secret_key_to_address(&signer);
Ok((Self { signer, address, chain_id: 1 }, uuid))
}
@ -79,7 +79,7 @@ impl Wallet<SigningKey> {
S: AsRef<[u8]>,
{
let secret = eth_keystore::decrypt_key(keypath, password)?;
let signer = SigningKey::from_bytes(secret.as_slice())?;
let signer = SigningKey::from_bytes(secret.as_slice().into())?;
let address = secret_key_to_address(&signer);
Ok(Self { signer, address, chain_id: 1 })
}
@ -93,7 +93,7 @@ impl Wallet<SigningKey> {
/// Creates a new Wallet instance from a raw scalar value (big endian).
pub fn from_bytes(bytes: &[u8]) -> Result<Self, WalletError> {
let signer = SigningKey::from_bytes(bytes)?;
let signer = SigningKey::from_bytes(bytes.into())?;
let address = secret_key_to_address(&signer);
Ok(Self { signer, address, chain_id: 1 })
}
@ -132,7 +132,7 @@ impl FromStr for Wallet<SigningKey> {
fn from_str(src: &str) -> Result<Self, Self::Err> {
let src = src.strip_prefix("0x").or_else(|| src.strip_prefix("0X")).unwrap_or(src);
let src = hex::decode(src)?;
let sk = SigningKey::from_bytes(&src)?;
let sk = SigningKey::from_bytes(src.as_slice().into())?;
Ok(sk.into())
}
}
@ -297,7 +297,7 @@ mod tests {
// this should populate the tx chain_id as the signer's chain_id (1337) before signing and
// normalize the v
let sig = wallet.sign_transaction_sync(&tx);
let sig = wallet.sign_transaction_sync(&tx).unwrap();
// ensure correct v given the chain - first extract recid
let recid = (sig.v - 35) % 2;