diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..817b9d9 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,35 @@ +version: 2.1 + +orbs: + docker: circleci/docker@1.5.0 + +jobs: + Build: + docker: + - image: circleci/rust:latest + resource_class: xlarge + environment: + RUST_BACKTRACE: 1 + steps: + - checkout + - run: | + sudo bash .github/download_marine.sh + - restore_cache: + keys: + - trust-graph00-{{ checksum "./service/Cargo.lock" }}-{{ checksum "./Cargo.lock" }}-{{ checksum "./keypair/Cargo.lock" }} + - run: | + rustup toolchain install nightly-2021-04-24-x86_64-unknown-linux-gnu + rustup default nightly-2021-04-24-x86_64-unknown-linux-gnu + cargo test --no-fail-fast --release --all-features -- + - save_cache: + paths: + - ~/.cargo + - ~/.rustup + key: trust-graph00-{{ checksum "./Cargo.lock" }}-{{ checksum "./keypair/Cargo.lock" }} + + +workflows: + version: 2 + CircleCI: + jobs: + - Build diff --git a/Cargo.lock b/Cargo.lock index 9edf4dd..3f6c2b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.14.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" dependencies = [ "gimli", ] @@ -19,18 +19,18 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] [[package]] name = "anyhow" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" +checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" [[package]] name = "arrayref" @@ -65,11 +65,12 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", "miniz_oxide", @@ -79,9 +80,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" @@ -127,9 +128,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bumpalo" -version = "3.6.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" [[package]] name = "byte-tools" @@ -145,15 +146,15 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cc" -version = "1.0.67" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" [[package]] name = "cfg-if" @@ -162,10 +163,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] [[package]] name = "crunchy" @@ -185,22 +189,22 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.0", + "subtle 2.4.1", "zeroize", ] [[package]] name = "darling" -version = "0.12.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d6ddad5866bb2170686ed03f6839d31a76e5407d80b1c334a2c24618543ffa" +checksum = "757c0ded2af11d8e739c4daea1ac623dd1624b06c844cf3f5a39f1bdbd99bb12" dependencies = [ "darling_core", "darling_macro", @@ -208,9 +212,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.12.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ced1fd13dc386d5a8315899de465708cf34ee2a6d9394654515214e67bb846" +checksum = "2c34d8efb62d0c2d7f60ece80f75e5c63c1588ba68032740494b0b9a996466e3" dependencies = [ "fnv", "ident_case", @@ -222,9 +226,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.12.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7a1445d54b2f9792e3b31a3e715feabbace393f38dc4ffd49d94ee9bc487d5" +checksum = "ade7bff147130fe5e6d39f089c6bd49ec0250f35d70b2eebf72afdfc919f15cc" dependencies = [ "darling_core", "quote", @@ -268,9 +272,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.0.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc" dependencies = [ "serde", "signature", @@ -287,7 +291,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_bytes", - "sha2 0.9.3", + "sha2 0.9.8", "zeroize", ] @@ -307,6 +311,16 @@ dependencies = [ "regex", ] +[[package]] +name = "eyre" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221239d1d5ea86bf5d6f91c9d6bc3646ffe471b08ff9b0f91c44f115ac969d2b" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "failure" version = "0.1.8" @@ -361,14 +375,14 @@ dependencies = [ "log", "multihash", "parking_lot", - "pin-project 1.0.6", + "pin-project 1.0.8", "prost", "prost-build", "rand 0.7.3", "ring", "rw-stream-sink", "serde", - "sha2 0.9.3", + "sha2 0.9.8", "smallvec", "thiserror", "unsigned-varint 0.7.0", @@ -385,7 +399,7 @@ dependencies = [ "bytes", "futures", "log", - "pin-project 1.0.6", + "pin-project 1.0.8", "smallvec", "unsigned-varint 0.7.0", ] @@ -409,13 +423,14 @@ dependencies = [ ] [[package]] -name = "fluence-identity" -version = "0.3.0" +name = "fluence-keypair" +version = "0.4.0" dependencies = [ "asn1_der", "bs58 0.3.1", "ed25519", "ed25519-dalek", + "eyre", "fluence-fork-libp2p-core", "lazy_static", "libsecp256k1", @@ -426,7 +441,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_with", - "sha2 0.9.3", + "sha2 0.9.8", "signature", "thiserror", "zeroize", @@ -450,9 +465,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ "futures-channel", "futures-core", @@ -465,9 +480,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", "futures-sink", @@ -475,15 +490,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-executor" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ "futures-core", "futures-task", @@ -493,16 +508,17 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-macro" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -511,15 +527,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] name = "futures-task" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-timer" @@ -529,10 +545,11 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -579,41 +596,41 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi 0.10.0+wasi-snapshot-preview1", ] [[package]] name = "gimli" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" [[package]] name = "hashbrown" -version = "0.9.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" [[package]] name = "heck" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -647,9 +664,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -657,10 +674,16 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "1.6.2" +name = "indenter" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ "autocfg", "hashbrown", @@ -668,9 +691,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" dependencies = [ "cfg-if", ] @@ -686,15 +709,15 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "js-sys" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" +checksum = "1866b355d9c878e5e607473cbe3f63282c0b7aad2db1dbebf55076c686918254" dependencies = [ "wasm-bindgen", ] @@ -707,9 +730,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.93" +version = "0.2.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41" +checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103" [[package]] name = "libsecp256k1" @@ -723,15 +746,15 @@ dependencies = [ "hmac-drbg", "rand 0.7.3", "sha2 0.8.2", - "subtle 2.4.0", + "subtle 2.4.1", "typenum", ] [[package]] name = "lock_api" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" dependencies = [ "scopeguard", ] @@ -747,15 +770,15 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "miniz_oxide" @@ -776,15 +799,15 @@ dependencies = [ "digest 0.9.0", "generic-array 0.14.4", "multihash-derive", - "sha2 0.9.3", + "sha2 0.9.8", "unsigned-varint 0.5.1", ] [[package]] name = "multihash-derive" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f" +checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" dependencies = [ "proc-macro-crate", "proc-macro-error", @@ -812,15 +835,18 @@ dependencies = [ [[package]] name = "object" -version = "0.23.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +dependencies = [ + "memchr", +] [[package]] name = "once_cell" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "opaque-debug" @@ -836,9 +862,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "parking_lot" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", @@ -847,9 +873,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ "cfg-if", "instant", @@ -886,11 +912,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc174859768806e91ae575187ada95c91a29e96a98dc5d2cd9a1fed039501ba6" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" dependencies = [ - "pin-project-internal 1.0.6", + "pin-project-internal 1.0.8", ] [[package]] @@ -906,9 +932,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a490329918e856ed1b083f244e3bfe2d8c4f336407e4ea9e1a9f479ff09049e5" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ "proc-macro2", "quote", @@ -917,9 +943,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] name = "pin-utils" @@ -935,10 +961,11 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" dependencies = [ + "thiserror", "toml", ] @@ -980,9 +1007,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.26" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" dependencies = [ "unicode-xid", ] @@ -1074,14 +1101,14 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha 0.3.0", - "rand_core 0.6.2", - "rand_hc 0.3.0", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", ] [[package]] @@ -1096,12 +1123,12 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.2", + "rand_core 0.6.3", ] [[package]] @@ -1115,11 +1142,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.3", ] [[package]] @@ -1133,18 +1160,18 @@ dependencies = [ [[package]] name = "rand_hc" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "rand_core 0.6.2", + "rand_core 0.6.3", ] [[package]] name = "redox_syscall" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ "bitflags", ] @@ -1171,9 +1198,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.5" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", @@ -1182,9 +1209,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.23" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -1212,9 +1239,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rw-stream-sink" @@ -1270,9 +1297,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" dependencies = [ "itoa", "ryu", @@ -1291,9 +1318,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48b35457e9d855d3dc05ef32a73e0df1e2c0fd72c38796a4ee909160c8eeec2" +checksum = "98c1fcca18d55d1763e1c16873c4bde0ac3ef75179a28c7b372917e0494625be" dependencies = [ "darling", "proc-macro2", @@ -1315,28 +1342,28 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpuid-bool", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] [[package]] name = "signature" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" +checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" [[package]] name = "smallvec" @@ -1370,15 +1397,15 @@ checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" [[package]] name = "subtle" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.69" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb" +checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" dependencies = [ "proc-macro2", "quote", @@ -1387,9 +1414,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa" dependencies = [ "proc-macro2", "quote", @@ -1405,7 +1432,7 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if", "libc", - "rand 0.8.3", + "rand 0.8.4", "redox_syscall", "remove_dir_all", "winapi", @@ -1413,18 +1440,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.24" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" +checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.24" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" +checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" dependencies = [ "proc-macro2", "quote", @@ -1433,9 +1460,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" +checksum = "5241dd6f21443a3606b432718b166d3cedc962fd4b8bea54a8bc7f514ebda986" dependencies = [ "tinyvec_macros", ] @@ -1457,14 +1484,14 @@ dependencies = [ [[package]] name = "trust-graph" -version = "0.2.7" +version = "0.2.8" dependencies = [ "bs58 0.3.1", "derivative", "ed25519-dalek", "failure", "fluence-fork-libp2p-core", - "fluence-identity", + "fluence-keypair", "libsecp256k1", "log", "rand 0.7.3", @@ -1479,39 +1506,36 @@ dependencies = [ [[package]] name = "typenum" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" [[package]] name = "unicode-bidi" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" -dependencies = [ - "matches", -] +checksum = "246f4c42e67e7a4e3c6106ff716a5d067d4132a642840b242e357e468a2a0085" [[package]] name = "unicode-normalization" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" +checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "unsigned-varint" @@ -1533,9 +1557,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", "idna", @@ -1563,15 +1587,15 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.73" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" +checksum = "5e68338db6becec24d3c7977b5bf8a48be992c934b5d07177e3931f5dc9b076c" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1579,9 +1603,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.73" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" +checksum = "f34c405b4f0658583dba0c1c7c9b694f3cac32655db463b56c254a1c75269523" dependencies = [ "bumpalo", "lazy_static", @@ -1594,9 +1618,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.73" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" +checksum = "b9d5a6580be83b19dc570a8f9c324251687ab2184e57086f71625feb57ec77c8" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1604,9 +1628,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.73" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" +checksum = "e3775a030dc6f5a0afd8a84981a21cc92a781eb429acef9ecce476d0c9113e92" dependencies = [ "proc-macro2", "quote", @@ -1617,15 +1641,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.73" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" +checksum = "c279e376c7a8e8752a8f1eaa35b7b0bee6bb9fb0cdacfa97cc3f1f289c87e2b4" [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "0a84d70d1ec7d2da2d26a5bd78f4bca1b8c3254805363ce743b7a05bc30d195a" dependencies = [ "js-sys", "wasm-bindgen", @@ -1633,11 +1657,12 @@ dependencies = [ [[package]] name = "which" -version = "4.1.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe" +checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9" dependencies = [ "either", + "lazy_static", "libc", ] @@ -1665,18 +1690,18 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "zeroize" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" +checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index e4923a1..a5466aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trust-graph" -version = "0.2.7" +version = "0.2.8" authors = ["Fluence Labs"] edition = "2018" description = "trust graph" @@ -11,7 +11,7 @@ repository = "https://github.com/fluencelabs/trust-graph" libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.27.2" } serde = { version = "=1.0.118", features = ["derive"] } -fluence-identity = { path = "./identity", version = "0.3.0" } +fluence-keypair = { path = "./keypair", version = "0.4.0" } serde_json = "1.0.58" bs58 = "0.3.1" failure = "0.1.6" @@ -28,5 +28,5 @@ ring = "0.16.20" [workspace] members = [ - "identity" + "keypair" ] diff --git a/example/generated/export.ts b/example/generated/export.ts new file mode 100644 index 0000000..3084c64 --- /dev/null +++ b/example/generated/export.ts @@ -0,0 +1,811 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.3.1-228 + * + */ +import { Fluence, FluencePeer } from '@fluencelabs/fluence'; +import { + ResultCodes, + RequestFlow, + RequestFlowBuilder, + CallParams, +} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1'; + + +// Services + + +// Functions + + export function verify_trust(node: string, trust: {expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}, issuer_peer_id: string, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function verify_trust(peer: FluencePeer, node: string, trust: {expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}, issuer_peer_id: string, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function verify_trust(...args: any) { + let peer: FluencePeer; + let node: any; +let trust: any; +let issuer_peer_id: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +trust = args[2]; +issuer_peer_id = args[3]; +config = args[4]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +trust = args[1]; +issuer_peer_id = args[2]; +config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "trust") [] trust) + ) + (call %init_peer_id% ("getDataSrv" "issuer_peer_id") [] issuer_peer_id) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "verify_trust") [trust issuer_peer_id timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'trust', () => {return trust;}); +h.on('getDataSrv', 'issuer_peer_id', () => {return issuer_peer_id;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for verify_trust'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function issue_trust(node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, trust_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;success:boolean;trust:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}}>; + export function issue_trust(peer: FluencePeer, node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, trust_bytes: number[], config?: {ttl?: number}) : Promise<{error:string;success:boolean;trust:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}}>; + export function issue_trust(...args: any) { + let peer: FluencePeer; + let node: any; +let issued_for_peer_id: any; +let expires_at_sec: any; +let issued_at_sec: any; +let trust_bytes: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +issued_for_peer_id = args[2]; +expires_at_sec = args[3]; +issued_at_sec = args[4]; +trust_bytes = args[5]; +config = args[6]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +issued_for_peer_id = args[1]; +expires_at_sec = args[2]; +issued_at_sec = args[3]; +trust_bytes = args[4]; +config = args[5]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean;trust:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "issued_for_peer_id") [] issued_for_peer_id) + ) + (call %init_peer_id% ("getDataSrv" "expires_at_sec") [] expires_at_sec) + ) + (call %init_peer_id% ("getDataSrv" "issued_at_sec") [] issued_at_sec) + ) + (call %init_peer_id% ("getDataSrv" "trust_bytes") [] trust_bytes) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call node ("trust-graph" "issue_trust") [issued_for_peer_id expires_at_sec issued_at_sec trust_bytes] result) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'issued_for_peer_id', () => {return issued_for_peer_id;}); +h.on('getDataSrv', 'expires_at_sec', () => {return expires_at_sec;}); +h.on('getDataSrv', 'issued_at_sec', () => {return issued_at_sec;}); +h.on('getDataSrv', 'trust_bytes', () => {return trust_bytes;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for issue_trust'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function insert_cert(node: string, certificate: {chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function insert_cert(peer: FluencePeer, node: string, certificate: {chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function insert_cert(...args: any) { + let peer: FluencePeer; + let node: any; +let certificate: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +certificate = args[2]; +config = args[3]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +certificate = args[1]; +config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "certificate") [] certificate) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "insert_cert") [certificate timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'certificate', () => {return certificate;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for insert_cert'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function get_all_certs(node: string, issued_for: string, config?: {ttl?: number}) : Promise<{certificates:{chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}[];error:string;success:boolean}>; + export function get_all_certs(peer: FluencePeer, node: string, issued_for: string, config?: {ttl?: number}) : Promise<{certificates:{chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}[];error:string;success:boolean}>; + export function get_all_certs(...args: any) { + let peer: FluencePeer; + let node: any; +let issued_for: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +issued_for = args[2]; +config = args[3]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +issued_for = args[1]; +config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{certificates:{chain:{expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}[]}[];error:string;success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "issued_for") [] issued_for) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "get_all_certs") [issued_for timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'issued_for', () => {return issued_for;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_all_certs'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function add_trust(node: string, trust: {expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}, issuer_peer_id: string, config?: {ttl?: number}) : Promise<{error:string;success:boolean;weight:number}>; + export function add_trust(peer: FluencePeer, node: string, trust: {expires_at:number;issued_at:number;issued_for:string;sig_type:string;signature:string}, issuer_peer_id: string, config?: {ttl?: number}) : Promise<{error:string;success:boolean;weight:number}>; + export function add_trust(...args: any) { + let peer: FluencePeer; + let node: any; +let trust: any; +let issuer_peer_id: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +trust = args[2]; +issuer_peer_id = args[3]; +config = args[4]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +trust = args[1]; +issuer_peer_id = args[2]; +config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean;weight:number}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "trust") [] trust) + ) + (call %init_peer_id% ("getDataSrv" "issuer_peer_id") [] issuer_peer_id) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "add_trust") [trust issuer_peer_id timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'trust', () => {return trust;}); +h.on('getDataSrv', 'issuer_peer_id', () => {return issuer_peer_id;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for add_trust'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function add_root(node: string, peer_id: string, weight_factor: number, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function add_root(peer: FluencePeer, node: string, peer_id: string, weight_factor: number, config?: {ttl?: number}) : Promise<{error:string;success:boolean}>; + export function add_root(...args: any) { + let peer: FluencePeer; + let node: any; +let peer_id: any; +let weight_factor: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +peer_id = args[2]; +weight_factor = args[3]; +config = args[4]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +peer_id = args[1]; +weight_factor = args[2]; +config = args[3]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "peer_id") [] peer_id) + ) + (call %init_peer_id% ("getDataSrv" "weight_factor") [] weight_factor) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call node ("trust-graph" "add_root") [peer_id weight_factor] result) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'peer_id', () => {return peer_id;}); +h.on('getDataSrv', 'weight_factor', () => {return weight_factor;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for add_root'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function get_weight(node: string, peer_id: string, config?: {ttl?: number}) : Promise<{error:string;peer_id:string;success:boolean;weight:number}>; + export function get_weight(peer: FluencePeer, node: string, peer_id: string, config?: {ttl?: number}) : Promise<{error:string;peer_id:string;success:boolean;weight:number}>; + export function get_weight(...args: any) { + let peer: FluencePeer; + let node: any; +let peer_id: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +peer_id = args[2]; +config = args[3]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +peer_id = args[1]; +config = args[2]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;peer_id:string;success:boolean;weight:number}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "peer_id") [] peer_id) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call node ("peer" "timestamp_sec") [] timestamp_sec) + (call node ("trust-graph" "get_weight") [peer_id timestamp_sec] result) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'peer_id', () => {return peer_id;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_weight'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + + + + export function get_trust_bytes(node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, config?: {ttl?: number}) : Promise<{error:string;result:number[];success:boolean}>; + export function get_trust_bytes(peer: FluencePeer, node: string, issued_for_peer_id: string, expires_at_sec: number, issued_at_sec: number, config?: {ttl?: number}) : Promise<{error:string;result:number[];success:boolean}>; + export function get_trust_bytes(...args: any) { + let peer: FluencePeer; + let node: any; +let issued_for_peer_id: any; +let expires_at_sec: any; +let issued_at_sec: any; + let config: any; + if (FluencePeer.isInstance(args[0])) { + peer = args[0]; + node = args[1]; +issued_for_peer_id = args[2]; +expires_at_sec = args[3]; +issued_at_sec = args[4]; +config = args[5]; + } else { + peer = Fluence.getPeer(); + node = args[0]; +issued_for_peer_id = args[1]; +expires_at_sec = args[2]; +issued_at_sec = args[3]; +config = args[4]; + } + + let request: RequestFlow; + const promise = new Promise<{error:string;result:number[];success:boolean}>((resolve, reject) => { + const r = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` + (xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node") [] node) + ) + (call %init_peer_id% ("getDataSrv" "issued_for_peer_id") [] issued_for_peer_id) + ) + (call %init_peer_id% ("getDataSrv" "expires_at_sec") [] expires_at_sec) + ) + (call %init_peer_id% ("getDataSrv" "issued_at_sec") [] issued_at_sec) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call node ("trust-graph" "get_trust_bytes") [issued_for_peer_id expires_at_sec issued_at_sec] result) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [result]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return peer.getStatus().relayPeerId; + }); + h.on('getDataSrv', 'node', () => {return node;}); +h.on('getDataSrv', 'issued_for_peer_id', () => {return issued_for_peer_id;}); +h.on('getDataSrv', 'expires_at_sec', () => {return expires_at_sec;}); +h.on('getDataSrv', 'issued_at_sec', () => {return issued_at_sec;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for get_trust_bytes'); + }) + if(config && config.ttl) { + r.withTTL(config.ttl) + } + request = r.build(); + }); + peer.internals.initiateFlow(request!); + return promise; +} + diff --git a/identity/Cargo.lock b/keypair/Cargo.lock similarity index 100% rename from identity/Cargo.lock rename to keypair/Cargo.lock diff --git a/identity/Cargo.toml b/keypair/Cargo.toml similarity index 80% rename from identity/Cargo.toml rename to keypair/Cargo.toml index 3ed97a2..3312288 100644 --- a/identity/Cargo.toml +++ b/keypair/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "fluence-identity" -version = "0.3.0" +name = "fluence-keypair" +version = "0.4.0" authors = ["Fluence Labs"] edition = "2018" description = "identity" @@ -18,13 +18,16 @@ ed25519 = "1.0.3" serde_with = "1.6.0" thiserror = "1.0.23" lazy_static = "1.2" -libsecp256k1 = "0.3.5" -ring = { version = "0.16.9", features = ["alloc", "std"], default-features = false } +libsecp256k1 = "0.3.1" asn1_der = "0.6.1" sha2 = "0.9.1" zeroize = "1" serde_bytes = "0.11" -libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.27.2" } +libp2p-core = { package = "fluence-fork-libp2p-core", version = "0.27.2", features = ["secp256k1"]} +eyre = "0.6.5" + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +ring = { version = "0.16.9", features = ["alloc", "std"], default-features = false } [dev-dependencies] quickcheck = "0.9.0" diff --git a/identity/src/ed25519.rs b/keypair/src/ed25519.rs similarity index 99% rename from identity/src/ed25519.rs rename to keypair/src/ed25519.rs index c8ee2a2..3e9aa0c 100644 --- a/identity/src/ed25519.rs +++ b/keypair/src/ed25519.rs @@ -136,7 +136,7 @@ impl PublicKey { } /// An Ed25519 secret key. -pub struct SecretKey(ed25519::SecretKey); +pub struct SecretKey(pub ed25519::SecretKey); /// View the bytes of the secret key. impl AsRef<[u8]> for SecretKey { diff --git a/identity/src/error.rs b/keypair/src/error.rs similarity index 95% rename from identity/src/error.rs rename to keypair/src/error.rs index fa0b06c..37e02a5 100644 --- a/identity/src/error.rs +++ b/keypair/src/error.rs @@ -47,6 +47,8 @@ pub enum DecodingError { InvalidTypeByte, #[error("Cannot decode public key from base58 :{0}")] Base58DecodeError(#[source] bs58::decode::Error), + #[error("Raw signature decoding failed: type {0} not supported")] + RawSignatureUnsupportedType(String), } /// An error during signing of a message. diff --git a/identity/src/key_pair.rs b/keypair/src/key_pair.rs similarity index 94% rename from identity/src/key_pair.rs rename to keypair/src/key_pair.rs index 9a3df83..a6fb43b 100644 --- a/identity/src/key_pair.rs +++ b/keypair/src/key_pair.rs @@ -28,6 +28,7 @@ use crate::signature::Signature; use crate::error::{Error, DecodingError, SigningError}; use std::str::FromStr; use std::convert::TryFrom; +use libp2p_core::PeerId; /// Identity keypair of a node. /// @@ -167,6 +168,16 @@ impl KeyPair { } } + pub fn secret(&self) -> eyre::Result> { + use KeyPair::*; + match self { + Ed25519(pair) => Ok(pair.secret().0.to_bytes().to_vec()), + #[cfg(not(target_arch = "wasm32"))] + Rsa(_) => Err(eyre::eyre!("secret key is not available for RSA")), + Secp256k1(pair) => Ok(pair.secret().to_bytes().to_vec()), + } + } + /// Verify the signature on a message using the public key. pub fn verify(pk: &PublicKey, msg: &[u8], signature: &Signature) -> Result<(), SigningError> { pk.verify(msg, signature) @@ -192,6 +203,10 @@ impl KeyPair { KeyFormat::Rsa => Err(DecodingError::KeypairDecodingIsNotSupported) } } + + pub fn get_peer_id(&self) -> PeerId { + self.public().to_peer_id() + } } impl From for KeyPair { diff --git a/identity/src/lib.rs b/keypair/src/lib.rs similarity index 62% rename from identity/src/lib.rs rename to keypair/src/lib.rs index db7b509..18b22dd 100644 --- a/identity/src/lib.rs +++ b/keypair/src/lib.rs @@ -26,16 +26,39 @@ unreachable_patterns )] -mod secp256k1; mod ed25519; +pub mod error; +pub mod key_pair; +pub mod public_key; #[cfg(not(target_arch = "wasm32"))] mod rsa; -pub mod key_pair; -pub mod error; -pub mod public_key; +mod secp256k1; pub mod signature; -pub use key_pair::KeyPair; -pub use key_pair::KeyFormat; pub use crate::public_key::PublicKey; pub use crate::signature::Signature; +pub use key_pair::KeyFormat; +pub use key_pair::KeyPair; + +pub mod peerid_serializer { + use libp2p_core::PeerId; + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + use std::str::FromStr; + + pub fn serialize(value: &PeerId, serializer: S) -> Result + where + S: Serializer, + { + value.to_base58().serialize(serializer) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let str = String::deserialize(deserializer)?; + PeerId::from_str(&str).map_err(|e| { + serde::de::Error::custom(format!("peer id deserialization failed for {:?}", e)) + }) + } +} diff --git a/identity/src/public_key.rs b/keypair/src/public_key.rs similarity index 63% rename from identity/src/public_key.rs rename to keypair/src/public_key.rs index 4264570..7e83760 100644 --- a/identity/src/public_key.rs +++ b/keypair/src/public_key.rs @@ -14,14 +14,15 @@ * limitations under the License. */ use crate::ed25519; +use crate::error::{DecodingError, SigningError}; #[cfg(not(target_arch = "wasm32"))] use crate::rsa; use crate::secp256k1; -use crate::error::{DecodingError, SigningError}; use crate::signature::Signature; -use serde::{Deserialize, Serialize}; use crate::key_pair::KeyFormat; +use libp2p_core::PeerId; +use serde::{Deserialize, Serialize}; use std::convert::TryFrom; /// The public key of a node's identity keypair. @@ -41,13 +42,14 @@ impl PublicKey { /// that the signature has been produced by the corresponding /// private key (authenticity), and that the message has not been /// tampered with (integrity). + // TODO: add VerificationError pub fn verify(&self, msg: &[u8], sig: &Signature) -> Result<(), SigningError> { use PublicKey::*; match self { Ed25519(pk) => pk.verify(msg, sig.to_vec()), #[cfg(not(target_arch = "wasm32"))] Rsa(pk) => pk.verify(msg, sig.to_vec()), - Secp256k1(pk) => pk.verify(msg, sig.to_vec()) + Secp256k1(pk) => pk.verify(msg, sig.to_vec()), } } @@ -69,8 +71,12 @@ impl PublicKey { match KeyFormat::try_from(bytes[0])? { KeyFormat::Ed25519 => Ok(PublicKey::Ed25519(ed25519::PublicKey::decode(&bytes[1..])?)), #[cfg(not(target_arch = "wasm32"))] - KeyFormat::Rsa => Ok(PublicKey::Rsa(rsa::PublicKey::from_pkcs1(bytes[1..].to_owned())?)), - KeyFormat::Secp256k1 => Ok(PublicKey::Secp256k1(secp256k1::PublicKey::decode(&bytes[1..])?)), + KeyFormat::Rsa => Ok(PublicKey::Rsa(rsa::PublicKey::from_pkcs1( + bytes[1..].to_owned(), + )?)), + KeyFormat::Secp256k1 => Ok(PublicKey::Secp256k1(secp256k1::PublicKey::decode( + &bytes[1..], + )?)), } } @@ -80,12 +86,14 @@ impl PublicKey { Ed25519(_) => KeyFormat::Ed25519.into(), #[cfg(not(target_arch = "wasm32"))] Rsa(_) => KeyFormat::Rsa.into(), - Secp256k1(_) => KeyFormat::Secp256k1.into() + Secp256k1(_) => KeyFormat::Secp256k1.into(), } } pub fn from_base58(str: &str) -> Result { - let bytes = bs58::decode(str).into_vec().map_err(DecodingError::Base58DecodeError)?; + let bytes = bs58::decode(str) + .into_vec() + .map_err(DecodingError::Base58DecodeError)?; Self::decode(&bytes) } @@ -99,6 +107,10 @@ impl PublicKey { Secp256k1(pk) => pk.encode().to_vec(), } } + + pub fn to_peer_id(&self) -> PeerId { + PeerId::from_public_key(self.clone().into()) + } } impl From for PublicKey { @@ -106,14 +118,51 @@ impl From for PublicKey { use libp2p_core::identity::PublicKey::*; match key { - Ed25519(key) => PublicKey::Ed25519(ed25519::PublicKey::decode(&key.encode()[..]).unwrap()), + Ed25519(key) => { + PublicKey::Ed25519(ed25519::PublicKey::decode(&key.encode()[..]).unwrap()) + } #[cfg(not(target_arch = "wasm32"))] Rsa(key) => PublicKey::Rsa(rsa::PublicKey::from_pkcs1(key.encode_pkcs1()).unwrap()), - Secp256k1(key) => PublicKey::Secp256k1(secp256k1::PublicKey::decode(&key.encode()[..]).unwrap()), + Secp256k1(key) => { + PublicKey::Secp256k1(secp256k1::PublicKey::decode(&key.encode()[..]).unwrap()) + } } } } +impl From for libp2p_core::identity::PublicKey { + fn from(key: PublicKey) -> Self { + use libp2p_core::identity as libp2p_identity; + + match key { + PublicKey::Ed25519(key) => libp2p_identity::PublicKey::Ed25519( + libp2p_identity::ed25519::PublicKey::decode(&key.encode()[..]).unwrap(), + ), + #[cfg(not(target_arch = "wasm32"))] + PublicKey::Rsa(key) => libp2p_identity::PublicKey::Rsa( + libp2p_identity::rsa::PublicKey::decode_x509(&key.encode_x509()).unwrap(), + ), + PublicKey::Secp256k1(key) => libp2p_identity::PublicKey::Secp256k1( + libp2p_identity::secp256k1::PublicKey::decode(&key.encode()[..]).unwrap(), + ), + } + } +} + +impl TryFrom for PublicKey { + type Error = eyre::Error; + + fn try_from(peer_id: libp2p_core::PeerId) -> eyre::Result { + Ok(peer_id + .as_public_key() + .ok_or(eyre::eyre!( + "public key is not inlined in peer id: {}", + peer_id + ))? + .into()) + } +} + #[cfg(test)] mod tests { use super::*; @@ -134,4 +183,15 @@ mod tests { let encoded_pk = pk.encode(); assert_eq!(pk, PublicKey::decode(&encoded_pk).unwrap()); } + + #[test] + fn public_key_peer_id_conversions() { + let kp = KeyPair::generate_secp256k1(); + let fluence_pk = kp.public(); + let libp2p_pk: libp2p_core::PublicKey = fluence_pk.clone().into(); + let peer_id = PeerId::from_public_key(libp2p_pk); + let fluence_pk_converted = PublicKey::try_from(peer_id).unwrap(); + + assert_eq!(fluence_pk, fluence_pk_converted); + } } diff --git a/identity/src/rsa.rs b/keypair/src/rsa.rs similarity index 100% rename from identity/src/rsa.rs rename to keypair/src/rsa.rs diff --git a/identity/src/secp256k1.rs b/keypair/src/secp256k1.rs similarity index 100% rename from identity/src/secp256k1.rs rename to keypair/src/secp256k1.rs diff --git a/identity/src/signature.rs b/keypair/src/signature.rs similarity index 69% rename from identity/src/signature.rs rename to keypair/src/signature.rs index f8f1b09..366e5dd 100644 --- a/identity/src/signature.rs +++ b/keypair/src/signature.rs @@ -14,12 +14,12 @@ * limitations under the License. */ use crate::ed25519; -use crate::secp256k1; +use crate::error::DecodingError; +use crate::key_pair::KeyFormat; #[cfg(not(target_arch = "wasm32"))] use crate::rsa; -use crate::error::DecodingError; +use crate::secp256k1; use serde::{Deserialize, Serialize}; -use crate::key_pair::KeyFormat; use std::convert::TryFrom; #[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)] @@ -30,6 +30,11 @@ pub enum Signature { Secp256k1(secp256k1::Signature), } +pub struct RawSignature { + pub bytes: Vec, + pub sig_type: KeyFormat, +} + impl Signature { fn get_prefix(&self) -> u8 { use Signature::*; @@ -37,7 +42,7 @@ impl Signature { Ed25519(_) => KeyFormat::Ed25519.into(), #[cfg(not(target_arch = "wasm32"))] Rsa(_) => KeyFormat::Rsa.into(), - Secp256k1(_) => KeyFormat::Secp256k1.into() + Secp256k1(_) => KeyFormat::Secp256k1.into(), } } @@ -46,7 +51,7 @@ impl Signature { use Signature::*; let mut result: Vec = vec![self.get_prefix()]; - + match self { Ed25519(sig) => result.extend(sig.0.clone()), #[cfg(not(target_arch = "wasm32"))] @@ -63,8 +68,9 @@ impl Signature { KeyFormat::Ed25519 => Ok(Signature::Ed25519(ed25519::Signature(bytes[1..].to_vec()))), #[cfg(not(target_arch = "wasm32"))] KeyFormat::Rsa => Ok(Signature::Rsa(rsa::Signature(bytes[1..].to_vec()))), - KeyFormat::Secp256k1 => Ok(Signature::Secp256k1(secp256k1::Signature(bytes[1..].to_vec()))), - + KeyFormat::Secp256k1 => Ok(Signature::Secp256k1(secp256k1::Signature( + bytes[1..].to_vec(), + ))), } } @@ -78,6 +84,33 @@ impl Signature { Secp256k1(sig) => &sig.0, } } + + pub fn get_signature_type(&self) -> KeyFormat { + use Signature::*; + + match self { + Ed25519(_) => KeyFormat::Ed25519, + #[cfg(not(target_arch = "wasm32"))] + Rsa(_) => KeyFormat::Rsa, + Secp256k1(_) => KeyFormat::Secp256k1, + } + } + + pub fn get_raw_signature(&self) -> RawSignature { + RawSignature { + bytes: self.to_vec().clone().to_vec(), + sig_type: self.get_signature_type(), + } + } + + pub fn from_bytes_with_public_key(key_format: KeyFormat, bytes: Vec) -> Self { + match key_format { + KeyFormat::Ed25519 => Signature::Ed25519(ed25519::Signature(bytes)), + #[cfg(not(target_arch = "wasm32"))] + KeyFormat::Rsa => Signature::Rsa(rsa::Signature(bytes)), + KeyFormat::Secp256k1 => Signature::Secp256k1(secp256k1::Signature(bytes)), + } + } } #[cfg(test)] @@ -92,8 +125,14 @@ mod tests { #[cfg(not(target_arch = "wasm32"))] let rsa_sig = Signature::Rsa(crate::rsa::Signature(bytes.clone())); - assert_eq!(Signature::decode(ed25519_sig.encode()).unwrap(), ed25519_sig); - assert_eq!(Signature::decode(secp256k1_sig.encode()).unwrap(), secp256k1_sig); + assert_eq!( + Signature::decode(ed25519_sig.encode()).unwrap(), + ed25519_sig + ); + assert_eq!( + Signature::decode(secp256k1_sig.encode()).unwrap(), + secp256k1_sig + ); #[cfg(not(target_arch = "wasm32"))] assert_eq!(Signature::decode(rsa_sig.encode()).unwrap(), rsa_sig); } diff --git a/identity/src/test/rsa-2048.pk8 b/keypair/src/test/rsa-2048.pk8 similarity index 100% rename from identity/src/test/rsa-2048.pk8 rename to keypair/src/test/rsa-2048.pk8 diff --git a/identity/src/test/rsa-3072.pk8 b/keypair/src/test/rsa-3072.pk8 similarity index 100% rename from identity/src/test/rsa-3072.pk8 rename to keypair/src/test/rsa-3072.pk8 diff --git a/identity/src/test/rsa-4096.pk8 b/keypair/src/test/rsa-4096.pk8 similarity index 100% rename from identity/src/test/rsa-4096.pk8 rename to keypair/src/test/rsa-4096.pk8 diff --git a/src/certificate.rs b/src/certificate.rs index e3cc8e0..cfc8b99 100644 --- a/src/certificate.rs +++ b/src/certificate.rs @@ -20,8 +20,8 @@ use crate::certificate::CertificateError::{ VerificationError, }; use crate::trust::{Trust, TrustError}; -use fluence_identity::key_pair::KeyPair; -use fluence_identity::public_key::PublicKey; +use fluence_keypair::key_pair::KeyPair; +use fluence_keypair::public_key::PublicKey; use std::str::FromStr; use std::time::Duration; use thiserror::Error as ThisError; @@ -281,7 +281,7 @@ impl FromStr for Certificate { mod tests { use super::*; use crate::misc::current_time; - use fluence_identity::key_pair::KeyPair; + use fluence_keypair::KeyPair; use std::time::{Duration, SystemTime, UNIX_EPOCH}; pub fn one_second() -> Duration { @@ -401,7 +401,7 @@ mod tests { ); assert_eq!(new_cert.is_ok(), true); let new_cert = new_cert.unwrap(); - + println!("cert is\n{}", new_cert.to_string()); assert_eq!(new_cert.chain.len(), 3); diff --git a/src/public_key_hashable.rs b/src/public_key_hashable.rs index 92abee7..94a3b2f 100644 --- a/src/public_key_hashable.rs +++ b/src/public_key_hashable.rs @@ -13,8 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -use fluence_identity::public_key::PublicKey; +use fluence_keypair::PublicKey; use core::fmt; use ref_cast::RefCast; @@ -82,7 +81,7 @@ impl Display for PublicKeyHashable { } impl FromStr for PublicKeyHashable { - type Err = fluence_identity::error::DecodingError; + type Err = fluence_keypair::error::DecodingError; fn from_str(s: &str) -> Result { let pk = PublicKey::from_base58(s)?; diff --git a/src/revoke.rs b/src/revoke.rs index 7b00929..fa69d03 100644 --- a/src/revoke.rs +++ b/src/revoke.rs @@ -15,9 +15,9 @@ */ use crate::revoke::RevokeError::IncorrectSignature; -use fluence_identity::key_pair::KeyPair; -use fluence_identity::public_key::PublicKey; -use fluence_identity::signature::Signature; +use fluence_keypair::key_pair::KeyPair; +use fluence_keypair::public_key::PublicKey; +use fluence_keypair::signature::Signature; use serde::{Deserialize, Serialize}; use std::time::Duration; use thiserror::Error as ThisError; @@ -28,7 +28,7 @@ pub enum RevokeError { IncorrectSignature( #[from] #[source] - fluence_identity::error::SigningError + fluence_keypair::error::SigningError ), } diff --git a/src/trust.rs b/src/trust.rs index f8c9ab7..acab3b1 100644 --- a/src/trust.rs +++ b/src/trust.rs @@ -14,16 +14,18 @@ * limitations under the License. */ -use crate::trust::TrustError::{Base58DecodeError, DecodePublicKeyError, ParseError, SignatureError, DecodeErrorInvalidSize}; +use crate::trust::TrustError::{ + Base58DecodeError, DecodeErrorInvalidSize, DecodePublicKeyError, ParseError, SignatureError, +}; use derivative::Derivative; -use fluence_identity::key_pair::KeyPair; -use fluence_identity::public_key::PublicKey; -use fluence_identity::signature::Signature; +use fluence_keypair::key_pair::KeyPair; +use fluence_keypair::public_key::PublicKey; +use fluence_keypair::signature::Signature; +use serde::{Deserialize, Serialize}; use std::convert::TryInto; use std::num::ParseIntError; use std::time::Duration; use thiserror::Error as ThisError; -use serde::{Deserialize, Serialize}; pub const EXPIRATION_LEN: usize = 8; pub const ISSUED_LEN: usize = 8; @@ -65,12 +67,12 @@ pub enum TrustError { SignatureError( #[from] #[source] - fluence_identity::error::SigningError, + fluence_keypair::error::SigningError, ), /// Errors occurred on trust decoding from different formats #[error("Cannot decode the public key: {0} in the trust: {1}")] - DecodePublicKeyError(String, #[source] fluence_identity::error::DecodingError), + DecodePublicKeyError(String, #[source] fluence_keypair::error::DecodingError), #[error("Cannot parse `{0}` field in the trust '{1}': {2}")] ParseError(String, String, #[source] ParseIntError), @@ -82,7 +84,7 @@ pub enum TrustError { PublicKeyError( #[from] #[source] - fluence_identity::error::DecodingError, + fluence_keypair::error::DecodingError, ), #[error("Cannot decode `{0}` field in the trust: invalid size")] diff --git a/src/trust_graph.rs b/src/trust_graph.rs index 44eb91f..0f49e22 100644 --- a/src/trust_graph.rs +++ b/src/trust_graph.rs @@ -26,7 +26,7 @@ use crate::trust_graph::TrustGraphError::{ use crate::trust_graph_storage::Storage; use crate::trust_node::{Auth, TrustNode}; use crate::StorageError; -use fluence_identity::public_key::PublicKey; +use fluence_keypair::public_key::PublicKey; use std::borrow::Borrow; use std::collections::{HashSet, VecDeque}; use std::convert::{From, Into}; @@ -92,7 +92,11 @@ where } /// Insert new root weight - pub fn add_root_weight(&mut self, pk: PublicKey, weight: Weight) -> Result<(), TrustGraphError> { + pub fn add_root_weight( + &mut self, + pk: PublicKey, + weight: Weight, + ) -> Result<(), TrustGraphError> { Ok(self.storage.add_root_weight(pk.into(), weight)?) } @@ -339,7 +343,7 @@ mod tests { use crate::misc::current_time; use crate::trust_graph_storage::InMemoryStorage; use failure::_core::time::Duration; - use fluence_identity::key_pair::KeyPair; + use fluence_keypair::key_pair::KeyPair; use std::collections::HashMap; pub fn one_minute() -> Duration { @@ -376,13 +380,15 @@ mod tests { let root_kp = KeyPair::generate_ed25519(); let second_kp = KeyPair::generate_ed25519(); - let mut cert = - Certificate::issue_root(&root_kp, second_kp.public(), expires_at, issued_at); + let mut cert = Certificate::issue_root(&root_kp, second_kp.public(), expires_at, issued_at); let mut key_pairs = vec![root_kp, second_kp]; for idx in 2..len { - let kp = keys.get(&idx).unwrap_or(&KeyPair::generate_ed25519()).clone(); + let kp = keys + .get(&idx) + .unwrap_or(&KeyPair::generate_ed25519()) + .clone(); let previous_kp = &key_pairs[idx - 1]; cert = Certificate::issue( &previous_kp, @@ -591,9 +597,15 @@ mod tests { let st = InMemoryStorage::new(); let mut graph = TrustGraph::new(st); // add first and last trusts as roots - graph.add_root_weight(cert.chain[0].clone().issued_for.into(), 1).unwrap(); - graph.add_root_weight(cert.chain[3].clone().issued_for.into(), 1).unwrap(); - graph.add_root_weight(cert.chain[5].clone().issued_for.into(), 1).unwrap(); + graph + .add_root_weight(cert.chain[0].clone().issued_for.into(), 1) + .unwrap(); + graph + .add_root_weight(cert.chain[3].clone().issued_for.into(), 1) + .unwrap(); + graph + .add_root_weight(cert.chain[5].clone().issued_for.into(), 1) + .unwrap(); graph.add(cert.clone(), current_time()).unwrap(); diff --git a/src/trust_graph_storage.rs b/src/trust_graph_storage.rs index 18202b6..73ce478 100644 --- a/src/trust_graph_storage.rs +++ b/src/trust_graph_storage.rs @@ -3,7 +3,7 @@ use crate::revoke::Revoke; use crate::trust_graph::Weight; use crate::trust_graph_storage::InMemoryStorageError::RevokeError; use crate::trust_node::{Auth, TrustNode}; -use fluence_identity::public_key::PublicKey; +use fluence_keypair::public_key::PublicKey; use std::collections::HashMap; use std::fmt::Display; use std::time::Duration; diff --git a/src/trust_node.rs b/src/trust_node.rs index 38ef181..33465d4 100644 --- a/src/trust_node.rs +++ b/src/trust_node.rs @@ -18,7 +18,7 @@ use crate::public_key_hashable::PublicKeyHashable; use crate::revoke::Revoke; use crate::trust::Trust; use failure::_core::time::Duration; -use fluence_identity::public_key::PublicKey; +use fluence_keypair::public_key::PublicKey; use serde::{Deserialize, Serialize}; use serde_with::serde_as; use std::collections::HashMap; @@ -154,7 +154,7 @@ impl TrustNode { mod tests { use std::time::Duration; - use fluence_identity::key_pair::KeyPair; + use fluence_keypair::key_pair::KeyPair; use super::*;