commit
b1bac12ad6
9 changed files with 686 additions and 0 deletions
-
6.gitignore
-
480Cargo.lock
-
31Cargo.toml
-
90src/lib.rs
-
17src/utils.rs
-
12tests/web.rs
-
10worker/metadata_wasm.json
-
34worker/worker.js
-
6wrangler.toml
@ -0,0 +1,6 @@ |
|||
/target |
|||
**/*.rs.bk |
|||
bin/ |
|||
pkg/ |
|||
wasm-pack.log |
|||
worker/generated/ |
@ -0,0 +1,480 @@ |
|||
# This file is automatically @generated by Cargo. |
|||
# It is not intended for manual editing. |
|||
[[package]] |
|||
name = "base64" |
|||
version = "0.12.3" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" |
|||
|
|||
[[package]] |
|||
name = "base64-url" |
|||
version = "1.4.7" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "9956620977549f836bcfa3ab63551fe9a021df799437a403629bd991aa8d92ff" |
|||
dependencies = [ |
|||
"base64", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "bitvec" |
|||
version = "0.18.4" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "1d2838fdd79e8776dbe07a106c784b0f8dda571a21b2750a092cc4cbaa653c8e" |
|||
dependencies = [ |
|||
"funty", |
|||
"radium", |
|||
"wyz", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "bumpalo" |
|||
version = "3.4.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" |
|||
|
|||
[[package]] |
|||
name = "cfg-if" |
|||
version = "0.1.10" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" |
|||
|
|||
[[package]] |
|||
name = "console_error_panic_hook" |
|||
version = "0.1.6" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" |
|||
dependencies = [ |
|||
"cfg-if", |
|||
"wasm-bindgen", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "elliptic-curve" |
|||
version = "0.6.6" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "396db09c483e7fca5d4fdb9112685632b3e76c9a607a2649c1bf904404a01366" |
|||
dependencies = [ |
|||
"bitvec", |
|||
"ff", |
|||
"generic-array", |
|||
"group", |
|||
"rand_core", |
|||
"subtle", |
|||
"zeroize", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "ff" |
|||
version = "0.8.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "01646e077d4ebda82b73f1bca002ea1e91561a77df2431a9e79729bcc31950ef" |
|||
dependencies = [ |
|||
"bitvec", |
|||
"rand_core", |
|||
"subtle", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "funty" |
|||
version = "1.0.1" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "0ba62103ce691c2fd80fbae2213dfdda9ce60804973ac6b6e97de818ea7f52c8" |
|||
|
|||
[[package]] |
|||
name = "futures" |
|||
version = "0.1.30" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" |
|||
|
|||
[[package]] |
|||
name = "generic-array" |
|||
version = "0.14.4" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" |
|||
dependencies = [ |
|||
"typenum", |
|||
"version_check", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "group" |
|||
version = "0.8.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "cc11f9f5fbf1943b48ae7c2bf6846e7d827a512d1be4f23af708f5ca5d01dde1" |
|||
dependencies = [ |
|||
"ff", |
|||
"rand_core", |
|||
"subtle", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "hmac-sha256" |
|||
version = "0.1.6" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "219d368c625166098039429766941449ebf303da35d642eb339503a2bdad3423" |
|||
|
|||
[[package]] |
|||
name = "itoa" |
|||
version = "0.4.6" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" |
|||
|
|||
[[package]] |
|||
name = "js-sys" |
|||
version = "0.3.42" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2" |
|||
dependencies = [ |
|||
"wasm-bindgen", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "lazy_static" |
|||
version = "1.4.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" |
|||
|
|||
[[package]] |
|||
name = "libc" |
|||
version = "0.2.79" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" |
|||
|
|||
[[package]] |
|||
name = "log" |
|||
version = "0.4.11" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" |
|||
dependencies = [ |
|||
"cfg-if", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "memory_units" |
|||
version = "0.4.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" |
|||
|
|||
[[package]] |
|||
name = "p256" |
|||
version = "0.5.2" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "280ed58e7e5f3052b6e2f596fa40c7eff4c27c4b6b6deecb5d685ba5c2080980" |
|||
dependencies = [ |
|||
"elliptic-curve", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "ppv-lite86" |
|||
version = "0.2.9" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" |
|||
|
|||
[[package]] |
|||
name = "proc-macro2" |
|||
version = "0.4.30" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" |
|||
dependencies = [ |
|||
"unicode-xid 0.1.0", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "proc-macro2" |
|||
version = "1.0.24" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" |
|||
dependencies = [ |
|||
"unicode-xid 0.2.1", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "quote" |
|||
version = "0.6.13" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" |
|||
dependencies = [ |
|||
"proc-macro2 0.4.30", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "quote" |
|||
version = "1.0.7" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" |
|||
dependencies = [ |
|||
"proc-macro2 1.0.24", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "radium" |
|||
version = "0.4.1" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "64de9a0c5361e034f1aefc9f71a86871ec870e766fe31a009734a989b329286a" |
|||
|
|||
[[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", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "rand_core" |
|||
version = "0.5.1" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" |
|||
|
|||
[[package]] |
|||
name = "ryu" |
|||
version = "1.0.5" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" |
|||
|
|||
[[package]] |
|||
name = "scoped-tls" |
|||
version = "1.0.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" |
|||
|
|||
[[package]] |
|||
name = "serde" |
|||
version = "1.0.116" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5" |
|||
dependencies = [ |
|||
"serde_derive", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "serde_derive" |
|||
version = "1.0.116" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" |
|||
dependencies = [ |
|||
"proc-macro2 1.0.24", |
|||
"quote 1.0.7", |
|||
"syn", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "serde_json" |
|||
version = "1.0.59" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" |
|||
dependencies = [ |
|||
"itoa", |
|||
"ryu", |
|||
"serde", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "subtle" |
|||
version = "2.3.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" |
|||
|
|||
[[package]] |
|||
name = "syn" |
|||
version = "1.0.44" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "e03e57e4fcbfe7749842d53e24ccb9aa12b7252dbe5e91d2acad31834c8b8fdd" |
|||
dependencies = [ |
|||
"proc-macro2 1.0.24", |
|||
"quote 1.0.7", |
|||
"unicode-xid 0.2.1", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "tango-charlier" |
|||
version = "0.1.0" |
|||
dependencies = [ |
|||
"base64-url", |
|||
"cfg-if", |
|||
"console_error_panic_hook", |
|||
"elliptic-curve", |
|||
"hmac-sha256", |
|||
"p256", |
|||
"rand_chacha", |
|||
"serde", |
|||
"wasm-bindgen", |
|||
"wasm-bindgen-test", |
|||
"wee_alloc", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "typenum" |
|||
version = "1.12.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" |
|||
|
|||
[[package]] |
|||
name = "unicode-xid" |
|||
version = "0.1.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" |
|||
|
|||
[[package]] |
|||
name = "unicode-xid" |
|||
version = "0.2.1" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" |
|||
|
|||
[[package]] |
|||
name = "version_check" |
|||
version = "0.9.2" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen" |
|||
version = "0.2.65" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d" |
|||
dependencies = [ |
|||
"cfg-if", |
|||
"serde", |
|||
"serde_json", |
|||
"wasm-bindgen-macro", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-backend" |
|||
version = "0.2.65" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d" |
|||
dependencies = [ |
|||
"bumpalo", |
|||
"lazy_static", |
|||
"log", |
|||
"proc-macro2 1.0.24", |
|||
"quote 1.0.7", |
|||
"syn", |
|||
"wasm-bindgen-shared", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-futures" |
|||
version = "0.3.27" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c" |
|||
dependencies = [ |
|||
"cfg-if", |
|||
"futures", |
|||
"js-sys", |
|||
"wasm-bindgen", |
|||
"web-sys", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-macro" |
|||
version = "0.2.65" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e" |
|||
dependencies = [ |
|||
"quote 1.0.7", |
|||
"wasm-bindgen-macro-support", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-macro-support" |
|||
version = "0.2.65" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6" |
|||
dependencies = [ |
|||
"proc-macro2 1.0.24", |
|||
"quote 1.0.7", |
|||
"syn", |
|||
"wasm-bindgen-backend", |
|||
"wasm-bindgen-shared", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-shared" |
|||
version = "0.2.65" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87" |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-test" |
|||
version = "0.2.50" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "a2d9693b63a742d481c7f80587e057920e568317b2806988c59cd71618bc26c1" |
|||
dependencies = [ |
|||
"console_error_panic_hook", |
|||
"futures", |
|||
"js-sys", |
|||
"scoped-tls", |
|||
"wasm-bindgen", |
|||
"wasm-bindgen-futures", |
|||
"wasm-bindgen-test-macro", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wasm-bindgen-test-macro" |
|||
version = "0.2.50" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "0789dac148a8840bbcf9efe13905463b733fa96543bfbf263790535c11af7ba5" |
|||
dependencies = [ |
|||
"proc-macro2 0.4.30", |
|||
"quote 0.6.13", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "web-sys" |
|||
version = "0.3.42" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2" |
|||
dependencies = [ |
|||
"js-sys", |
|||
"wasm-bindgen", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "wee_alloc" |
|||
version = "0.4.5" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" |
|||
dependencies = [ |
|||
"cfg-if", |
|||
"libc", |
|||
"memory_units", |
|||
"winapi", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "winapi" |
|||
version = "0.3.9" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" |
|||
dependencies = [ |
|||
"winapi-i686-pc-windows-gnu", |
|||
"winapi-x86_64-pc-windows-gnu", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "winapi-i686-pc-windows-gnu" |
|||
version = "0.4.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" |
|||
|
|||
[[package]] |
|||
name = "winapi-x86_64-pc-windows-gnu" |
|||
version = "0.4.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" |
|||
|
|||
[[package]] |
|||
name = "wyz" |
|||
version = "0.2.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" |
|||
|
|||
[[package]] |
|||
name = "zeroize" |
|||
version = "1.1.1" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" |
@ -0,0 +1,31 @@ |
|||
[package] |
|||
name = "tango-charlier" |
|||
version = "0.1.0" |
|||
authors = ["Trinity POINTARD <pierretrinity.pointard@alten.com>"] |
|||
edition = "2018" |
|||
|
|||
[lib] |
|||
crate-type = ["cdylib", "rlib"] |
|||
|
|||
[features] |
|||
default = ["console_error_panic_hook"] |
|||
|
|||
[dependencies] |
|||
base64-url = "1.4.7" |
|||
cfg-if = "0.1.2" |
|||
elliptic-curve = "0.6" |
|||
hmac-sha256 = "0.1.6" |
|||
p256 = { version = "0.5.2", features = ["ecdh"] } |
|||
rand_chacha = "0.2.2" |
|||
serde = { version = "1.0", features = ["derive"] } |
|||
wasm-bindgen = { version = "=0.2.65", features = ["serde-serialize"] } |
|||
|
|||
console_error_panic_hook = { version = "0.1.1", optional = true } |
|||
|
|||
wee_alloc = { version = "0.4.2", optional = true } |
|||
|
|||
[dev-dependencies] |
|||
wasm-bindgen-test = "0.2" |
|||
|
|||
[profile.release] |
|||
opt-level = "s" |
@ -0,0 +1,90 @@ |
|||
mod utils;
|
|||
|
|||
|
|||
use base64_url::{encode as b64encode, decode as b64decode};
|
|||
use cfg_if::cfg_if;
|
|||
use elliptic_curve::ecdh::PublicKey;
|
|||
use hmac_sha256::Hash;
|
|||
use p256::{EncodedPoint, ecdh::EphemeralSecret, NistP256};
|
|||
use rand_chacha::ChaCha20Rng;
|
|||
use rand_chacha::rand_core::SeedableRng;
|
|||
use serde::{Serialize, Deserialize};
|
|||
use wasm_bindgen::prelude::*;
|
|||
|
|||
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
|
|||
|
|||
cfg_if! {
|
|||
if #[cfg(feature = "wee_alloc")] {
|
|||
extern crate wee_alloc;
|
|||
#[global_allocator]
|
|||
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
|||
}
|
|||
}
|
|||
|
|||
/*
|
|||
let server_public = EncodedPoint::from(&server);
|
|||
let bob_secret = EphemeralSecret::random(&mut rng);
|
|||
let bob_public = EncodedPoint::from(&bob_secret);
|
|||
return server.diffie_hellman(&bob_public).unwrap().as_bytes().as_slice().to_vec();
|
|||
*/
|
|||
|
|||
fn gen_key(ip: IpAddr, secret: &str) -> EphemeralSecret {
|
|||
let mut hasher = Hash::new();
|
|||
hasher.update(secret.as_bytes());
|
|||
match ip {
|
|||
IpAddr::V4(ip) => hasher.update(&ip.octets()),
|
|||
IpAddr::V6(ip) => hasher.update(&ip.octets()[0..8]),
|
|||
}
|
|||
let mut rng = ChaCha20Rng::from_seed(hasher.finalize());
|
|||
EphemeralSecret::random(&mut rng)
|
|||
}
|
|||
|
|||
#[wasm_bindgen]
|
|||
pub fn adv(ip: String, secret: String) -> JsValue {
|
|||
ip.into()
|
|||
}
|
|||
|
|||
#[wasm_bindgen]
|
|||
pub fn rec(ip: String, req: JsValue, secret: String) -> JsValue {
|
|||
let req: Req = req.into_serde().unwrap();
|
|||
assert!(req.alg == "ECDH");
|
|||
assert!(req.crv == "P-256");
|
|||
assert!(req.kty == "EC");
|
|||
let mut x = b64decode(&req.x).unwrap();
|
|||
let mut y = b64decode(&req.y).unwrap();
|
|||
x.append(&mut y);
|
|||
let pk = PublicKey::<NistP256>::from_bytes(&x).unwrap();
|
|||
JsValue::from_serde(&Res::default()).unwrap()
|
|||
}
|
|||
|
|||
#[derive(Deserialize)]
|
|||
struct Req {
|
|||
pub alg: String,
|
|||
pub crv: String,
|
|||
pub kty: String,
|
|||
pub x: String,
|
|||
pub y: String,
|
|||
}
|
|||
|
|||
#[derive(Serialize)]
|
|||
struct Res {
|
|||
pub alg: String,
|
|||
pub crv: String,
|
|||
pub key_ops: Vec<String>,
|
|||
pub kty: String,
|
|||
pub x: String,
|
|||
pub y: String,
|
|||
}
|
|||
|
|||
impl Default for Res {
|
|||
fn default() -> Self {
|
|||
Res {
|
|||
alg: "ECMR".to_owned(),
|
|||
crv: "P-256".to_owned(),
|
|||
key_ops: vec!["deriveKey".to_owned()],
|
|||
kty: "EC".to_owned(),
|
|||
x: String::new(),
|
|||
y: String::new(),
|
|||
}
|
|||
}
|
|||
}
|
@ -0,0 +1,17 @@ |
|||
use cfg_if::cfg_if;
|
|||
|
|||
cfg_if! {
|
|||
// When the `console_error_panic_hook` feature is enabled, we can call the
|
|||
// `set_panic_hook` function at least once during initialization, and then
|
|||
// we will get better error messages if our code ever panics.
|
|||
//
|
|||
// For more details see
|
|||
// https://github.com/rustwasm/console_error_panic_hook#readme
|
|||
if #[cfg(feature = "console_error_panic_hook")] {
|
|||
extern crate console_error_panic_hook;
|
|||
pub use self::console_error_panic_hook::set_once as set_panic_hook;
|
|||
} else {
|
|||
#[inline]
|
|||
pub fn set_panic_hook() {}
|
|||
}
|
|||
}
|
@ -0,0 +1,12 @@ |
|||
//! Test suite for the Web and headless browsers.
|
|||
|
|||
#![cfg(target_arch = "wasm32")]
|
|||
|
|||
use wasm_bindgen_test::*;
|
|||
|
|||
wasm_bindgen_test_configure!(run_in_browser);
|
|||
|
|||
#[wasm_bindgen_test]
|
|||
fn pass() {
|
|||
assert_eq!(1 + 1, 2);
|
|||
}
|
@ -0,0 +1,10 @@ |
|||
{ |
|||
"body_part": "script", |
|||
"bindings": [ |
|||
{ |
|||
"name": "wasm", |
|||
"type": "wasm_module", |
|||
"part": "wasmprogram" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,34 @@ |
|||
addEventListener('fetch', (event) => { |
|||
event.respondWith(handleRequest(event.request)) |
|||
}) |
|||
|
|||
const SERVER_SECRET = "KBlN/X0Vziyyxn86gZBBLXbUj9zgH3VSbqjwXjgaXP8=" |
|||
|
|||
|
|||
/** * Fetch and log a request * @param {Request} request */ |
|||
async function handleRequest(request) { |
|||
const url = new URL(request.url); |
|||
const uri = url.pathname; |
|||
await wasm_bindgen(wasm) |
|||
const ip = eq.headers.get('cf-connecting-ip'); |
|||
var output; |
|||
return new Response("Not Found", { status: 404 }); |
|||
if (RegExp("^/adv/.*").test(uri) && request.method === "GET") { |
|||
const { adv } = wasm_bindgen |
|||
output = adv(ip, SERVER_SECRET); |
|||
} else if (RegExp("^/rec/.*").test(uri) && request.method === "POST") { |
|||
const { rec } = wasm_bindgen |
|||
const contentType = headers.get("content-type") || ""; |
|||
if(contentType.includes("application/json")) { |
|||
output = rec(ip, await request.json(), SERVER_SECRET); |
|||
} else { |
|||
return new Response("Bad Request", { status: 400 }); |
|||
} |
|||
} else { |
|||
return new Response("Not Found", { status: 404 }); |
|||
} |
|||
|
|||
let res = new Response(JSON.stringify(output), { status: 200 }) |
|||
res.headers.set('Content-type', 'application/json') |
|||
return res |
|||
} |
@ -0,0 +1,6 @@ |
|||
name = "tango-charlie" |
|||
type = "rust" |
|||
account_id = "5b0151339e3c472c9a97c3786d7693c3" |
|||
workers_dev = true |
|||
route = "" |
|||
zone_id = "" |
Write
Preview
Loading…
Cancel
Save
Reference in new issue