This commit is contained in:
BIN
vscode-server-linux-x64-web/node_modules/vsda/build/Release/vsda.node
generated
vendored
Executable file
BIN
vscode-server-linux-x64-web/node_modules/vsda/build/Release/vsda.node
generated
vendored
Executable file
Binary file not shown.
1
vscode-server-linux-x64-web/node_modules/vsda/index.js
generated
vendored
Normal file
1
vscode-server-linux-x64-web/node_modules/vsda/index.js
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
module.exports = require('./build/Release/vsda');
|
35
vscode-server-linux-x64-web/node_modules/vsda/package.json
generated
vendored
Normal file
35
vscode-server-linux-x64-web/node_modules/vsda/package.json
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "vsda",
|
||||
"description": "VS Code debug handshake module",
|
||||
"version": "1.4.1",
|
||||
"author": {
|
||||
"name": "Microsoft"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "^7.0.3",
|
||||
"esbuild": "^0.17.19",
|
||||
"mocha": "^6.1.4",
|
||||
"rimraf": "^5.0.0"
|
||||
},
|
||||
"homepage": "https://github.com/Microsoft/vscode",
|
||||
"main": "index.js",
|
||||
"browser": "rust/web/vsda.js",
|
||||
"types": "index.d.ts",
|
||||
"os": [
|
||||
"win32",
|
||||
"linux",
|
||||
"darwin"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "node-gyp build",
|
||||
"configure": "node-gyp configure",
|
||||
"install": "node-gyp rebuild",
|
||||
"test": "mocha test.js",
|
||||
"test-rust": "cd rust && cargo test",
|
||||
"build-wasm": "yarn test-rust && yarn build-wasm-compile && mocha rust/test.js && yarn build-wasm-encrypt && yarn build-wasm-convert-to-iife && rimraf rust/web/.gitignore rust/nodejs",
|
||||
"build-wasm-compile": "yarn build-wasm-base -- --target nodejs --out-dir nodejs --features wasm && yarn build-wasm-base -- --target web --out-dir web --features wasm",
|
||||
"build-wasm-encrypt": "node rust/crypt encrypt rust/web/vsda_bg.wasm",
|
||||
"build-wasm-convert-to-iife": "esbuild ./rust/web/vsda.js --format=iife --platform=browser --outfile=rust/web/vsda.js --allow-overwrite --global-name=vsda_web",
|
||||
"build-wasm-base": "cd rust && cross-env WASM_BINDGEN_WEAKREF=1 wasm-pack build --release"
|
||||
}
|
||||
}
|
277
vscode-server-linux-x64-web/node_modules/vsda/rust/Cargo.lock
generated
vendored
Normal file
277
vscode-server-linux-x64-web/node_modules/vsda/rust/Cargo.lock
generated
vendored
Normal file
@ -0,0 +1,277 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.21.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
|
||||
dependencies = [
|
||||
"block-buffer",
|
||||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"wasi",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.60"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
|
||||
dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.139"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.50"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha2"
|
||||
version = "0.10.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.107"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "vsda"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"getrandom",
|
||||
"rand",
|
||||
"sha2",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.83"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
|
21
vscode-server-linux-x64-web/node_modules/vsda/rust/Cargo.toml
generated
vendored
Normal file
21
vscode-server-linux-x64-web/node_modules/vsda/rust/Cargo.toml
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
[package]
|
||||
name = "vsda"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[features]
|
||||
default = []
|
||||
wasm = ["getrandom/js", "wasm-bindgen"]
|
||||
|
||||
[dependencies]
|
||||
base64 = "0.21.0"
|
||||
rand = { version = "0.8.5", features = ["std_rng"] }
|
||||
sha2 = "0.10"
|
||||
wasm-bindgen = { version = "0.2", optional = true }
|
||||
getrandom = { version = "0.2" }
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
58
vscode-server-linux-x64-web/node_modules/vsda/rust/crypt.js
generated
vendored
Normal file
58
vscode-server-linux-x64-web/node_modules/vsda/rust/crypt.js
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
const fs = require('fs');
|
||||
const crypto = require('crypto');
|
||||
|
||||
const key = [
|
||||
"*",
|
||||
"* Visual Studio Code Server",
|
||||
"*",
|
||||
"* By using the software, you agree to",
|
||||
"* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and",
|
||||
"* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).",
|
||||
"*"
|
||||
].join('\n');
|
||||
|
||||
const keyBytes = new TextEncoder().encode(key);
|
||||
const keySize = 32;
|
||||
const ivSize = 16;
|
||||
const step = keySize + ivSize;
|
||||
|
||||
/**
|
||||
* @param {BufferSource} contents
|
||||
* @returns Promise<ArrayBuffer>
|
||||
*/
|
||||
exports.encrypt = async (contents) => {
|
||||
for (let i = Math.floor(keyBytes.length / step - 1) * step; i >= 0; i -= step) {
|
||||
const key = await crypto.subtle.importKey('raw', keyBytes.slice(i + ivSize, i + ivSize + keySize), { name: 'AES-CBC' }, false, ['encrypt']);
|
||||
contents = await crypto.subtle.encrypt({ name: 'AES-CBC', iv: keyBytes.slice(i, i + ivSize) }, key, contents);
|
||||
}
|
||||
|
||||
return contents;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {BufferSource} contents
|
||||
* @returns Promise<ArrayBuffer>
|
||||
*/
|
||||
exports.decrypt = async (contents) => {
|
||||
for (let i = 0; i + step < keyBytes.length; i += step) {
|
||||
const key = await crypto.subtle.importKey('raw', keyBytes.slice(i + ivSize, i + ivSize + keySize), { name: 'AES-CBC' }, false, ['decrypt']);
|
||||
contents = await crypto.subtle.decrypt({ name: 'AES-CBC', iv: keyBytes.slice(i, i + ivSize) }, key, contents);
|
||||
}
|
||||
|
||||
return contents;
|
||||
};
|
||||
|
||||
if (require.main === module) {
|
||||
(async () => {
|
||||
const [a0, a1, operation, file] = process.argv;
|
||||
|
||||
if (file && operation === 'encrypt') {
|
||||
fs.writeFileSync(file, Buffer.from(await exports.encrypt(fs.readFileSync(file))));
|
||||
} else if (file && operation === 'decrypt') {
|
||||
fs.writeFileSync(file, Buffer.from(await exports.decrypt(fs.readFileSync(file))));
|
||||
} else {
|
||||
console.error(`Usage: ${a0} ${a1} <encrypt|decrypt> <file>`);
|
||||
process.exit(1);
|
||||
}
|
||||
})();
|
||||
}
|
202
vscode-server-linux-x64-web/node_modules/vsda/rust/src/lib.rs
generated
vendored
Normal file
202
vscode-server-linux-x64-web/node_modules/vsda/rust/src/lib.rs
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
use base64::Engine;
|
||||
use rand::prelude::*;
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
#[cfg(feature = "wasm")]
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
// Total number of license slots. IMPORTANT: value must be single digit because of how the indexes are stored
|
||||
const COUNT_LICENSES: usize = 10;
|
||||
|
||||
// Portions of the restricted license for the C# / C++ extensions to use
|
||||
// as random text. 2 of these are selected at random for each handshake
|
||||
const LICENSE_ARRAY: [&[u8]; COUNT_LICENSES] = [
|
||||
b"You may only use the C/C++ Extension for Visual Studio Code and C# Extension for Visual Studio Code",
|
||||
b"with Visual Studio Code, Visual Studio or Xamarin Studio software to help you develop and test your applications.",
|
||||
b"The software is licensed, not sold.",
|
||||
b"This agreement only gives you some rights to use the software.",
|
||||
b"Microsoft reserves all other rights",
|
||||
b"You may not work around any technical limitations in the software;",
|
||||
b"reverse engineer, decompile or disassemble the software",
|
||||
b"remove, minimize, block or modify any notices of Microsoft or ",
|
||||
b"its suppliers in the software share, publish, rent, or lease ",
|
||||
b"the software, or provide the software as a stand-alone hosted as solution for others to use."
|
||||
];
|
||||
|
||||
// The number of license text chunks to be randomly selected and added to the string before hashing.
|
||||
const HASHED_LICENSES: usize = 2;
|
||||
|
||||
// Total number of salt slots. IMPORTANT: must be single digit because of how the indexes are stored
|
||||
// in the message.
|
||||
const COUNT_SALTS: usize = 10;
|
||||
|
||||
// Salt values to append to the result as well. This includes non printable characters
|
||||
// and makes brute forcing the result hash more difficult by causing rainbow tables
|
||||
// to be of little use.
|
||||
const SALT_ARRAY: [&[u8]; COUNT_SALTS] = [
|
||||
b"V+y,(H`v&A\\@x+;4GuK<$z]..?8#wVZn'*+}j1E\\$k0$/lvkpb846K:kf\"CI\\Yl*d4 / .R,{ ",
|
||||
b"B%&BH</'e{U`>F>ks3lkgSX>ETq{Vsu-i<kVc})P(H`wKlTvuPED>BLAX)C0X1sN\\[u4,H",
|
||||
b"bk@wJr&7h+N\\`Jfk4D$nbcdKen^VkOH<'KN:%uVO'G3ev#).$gM$r/==qtY]PJ[",
|
||||
b".owCo\\1\\B:964'42){c0<q,>\\\\1\" - !@1w}Xt",
|
||||
b"V'+|i5?}]WPLSze1WE6;'}Tg;83v8V2z}ov&x*",
|
||||
b"$Xjm#X:vcKdYn0VnkrLQDOwy\"; .3RBSW%RIdLOZ7(GKR / 1>(wcime:5qDs ? [l5b5DKR = 9",
|
||||
b"1UHJ^7Qt.SPtc<Q>6>#$jE+>>e\"P*Mb | bL / `H5'h7nP:ow + }zaqDB2,\"\\(86Xa",
|
||||
b";JNC{6bB,>R2GMy>t!&J^RSy}22@yP8|Q;ph:\\mjV=xL#y')y+N|c",
|
||||
b"/vJ{#Oc$xgduO$\\6UR>C_5s?M2X[eXma:)UyrxbK",
|
||||
b"?MY\",4_b9Lp\"yqGu37h4.}]w#(vbN0cK^?R]\"v<XFg$\\NZ`[K6",
|
||||
];
|
||||
|
||||
/// Creates a salted message to use as a basis for signing/verification.
|
||||
#[cfg_attr(feature = "wasm", wasm_bindgen(js_name = createNewMessage))]
|
||||
pub fn create_new_message(original: &str) -> String {
|
||||
if original.len() < 4 {
|
||||
return String::new();
|
||||
}
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.update(original);
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
let len = rng.gen_range(30..80);
|
||||
for _ in 0..len {
|
||||
hasher.update(&[rng.gen_range(b'!'..b'~')]);
|
||||
}
|
||||
|
||||
base64_encode(hasher.finalize().as_slice())
|
||||
}
|
||||
|
||||
/// Signs a salted message return from create_new_message.
|
||||
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||
pub fn sign(salted_message: &str) -> String {
|
||||
if salted_message.len() < 4 {
|
||||
return String::new();
|
||||
}
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.update(salted_message);
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
let mut indexes: [usize; HASHED_LICENSES + 1] = [0; HASHED_LICENSES + 1];
|
||||
for i in 0..HASHED_LICENSES {
|
||||
let index = rng.gen_range(0..COUNT_LICENSES);
|
||||
indexes[i] = index;
|
||||
hasher.update(LICENSE_ARRAY[index]);
|
||||
}
|
||||
|
||||
let salt_index = rng.gen_range(0..COUNT_SALTS);
|
||||
indexes[HASHED_LICENSES] = salt_index;
|
||||
hasher.update(SALT_ARRAY[salt_index]);
|
||||
|
||||
let mut final_value = String::new();
|
||||
for i in indexes {
|
||||
final_value.push_str(&i.to_string());
|
||||
}
|
||||
final_value.push_str(&base64_encode(hasher.finalize().as_slice()));
|
||||
|
||||
final_value
|
||||
}
|
||||
|
||||
/// Validates the signature for the given original message.
|
||||
#[cfg_attr(feature = "wasm", wasm_bindgen)]
|
||||
pub fn validate(original_message: &str, signature: &str) -> bool {
|
||||
if signature.len() < COUNT_LICENSES + 2 {
|
||||
return false;
|
||||
}
|
||||
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.update(original_message);
|
||||
|
||||
let mut final_value = String::new();
|
||||
for (i, chr) in signature.chars().take(HASHED_LICENSES + 1).enumerate() {
|
||||
if chr < '0' || chr > '9' {
|
||||
return false;
|
||||
}
|
||||
let index = (chr as usize) - (b'0' as usize);
|
||||
let arr = if i == HASHED_LICENSES {
|
||||
SALT_ARRAY
|
||||
} else {
|
||||
LICENSE_ARRAY
|
||||
};
|
||||
if index > arr.len() {
|
||||
return false;
|
||||
}
|
||||
|
||||
hasher.update(arr[index]);
|
||||
final_value.push_str(&index.to_string());
|
||||
}
|
||||
|
||||
final_value.push_str(&base64_encode(hasher.finalize().as_slice()));
|
||||
|
||||
signature == final_value
|
||||
}
|
||||
|
||||
/// Compatibility for histoic vsda interface
|
||||
#[cfg(feature = "wasm")]
|
||||
#[wasm_bindgen(js_name = signer)]
|
||||
pub struct Signer {}
|
||||
|
||||
#[cfg(feature = "wasm")]
|
||||
#[wasm_bindgen(js_class = signer)]
|
||||
impl Signer {
|
||||
#[wasm_bindgen(constructor)]
|
||||
pub fn new() -> Signer {
|
||||
Signer {}
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn sign(&mut self, salted_message: &str) -> String {
|
||||
sign(salted_message)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Compatibility for histoic vsda interface
|
||||
#[cfg(feature = "wasm")]
|
||||
#[wasm_bindgen(js_name = validator)]
|
||||
pub struct Validator {
|
||||
salted_message: String,
|
||||
}
|
||||
|
||||
#[cfg(feature = "wasm")]
|
||||
#[wasm_bindgen(js_class = validator)]
|
||||
impl Validator {
|
||||
#[wasm_bindgen(constructor)]
|
||||
pub fn new() -> Validator {
|
||||
Validator {
|
||||
salted_message: String::new(),
|
||||
}
|
||||
}
|
||||
|
||||
#[wasm_bindgen(js_name = createNewMessage)]
|
||||
pub fn create_new_message(&mut self, original: &str) -> String {
|
||||
let msg = create_new_message(original);
|
||||
self.salted_message = msg.clone();
|
||||
msg
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn validate(&mut self, signed_message: &str) -> String {
|
||||
match validate(&self.salted_message, signed_message) {
|
||||
true => "ok",
|
||||
false => "error"
|
||||
}.to_string()
|
||||
}
|
||||
}
|
||||
|
||||
fn base64_encode(input: &[u8]) -> String {
|
||||
base64::engine::general_purpose::STANDARD.encode(input)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::{create_new_message, sign, validate};
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let original = "test";
|
||||
|
||||
let message = create_new_message(original);
|
||||
let signed_message = sign(&message);
|
||||
assert!(validate(&message, &signed_message));
|
||||
}
|
||||
}
|
73
vscode-server-linux-x64-web/node_modules/vsda/rust/test.js
generated
vendored
Normal file
73
vscode-server-linux-x64-web/node_modules/vsda/rust/test.js
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
'use strict';
|
||||
|
||||
const assert = require('assert');
|
||||
const vsda = require('./nodejs/vsda');
|
||||
const vsdaNative = require('../index');
|
||||
const enc = require('./crypt');
|
||||
|
||||
it('encrypts and decrypts', async () => {
|
||||
const encrypted = await enc.encrypt(Buffer.from('hello world!'));
|
||||
assert.notDeepStrictEqual(new Uint8Array(encrypted), new Uint8Array(Buffer.from('hello world!')));
|
||||
const decrypted = await enc.decrypt(encrypted);
|
||||
assert.deepStrictEqual(new Uint8Array(decrypted), new Uint8Array(Buffer.from('hello world!')));
|
||||
});
|
||||
|
||||
describe('vsda module', () => {
|
||||
it('has signer interface', () => {
|
||||
assert.strictEqual(typeof vsda.signer, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.signer.prototype, 'sign').value, 'function');
|
||||
});
|
||||
|
||||
it('has validator interface', () => {
|
||||
assert.strictEqual(typeof vsda.validator, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.validator.prototype, 'createNewMessage').value, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.validator.prototype, 'validate').value, 'function');
|
||||
});
|
||||
|
||||
it('can sign with a valid string input', () => {
|
||||
const signer = new vsda.signer();
|
||||
const validator = new vsda.validator();
|
||||
const message = validator.createNewMessage("test");
|
||||
const signed_message = signer.sign(message);
|
||||
assert.strictEqual(validator.validate(signed_message), "ok");
|
||||
})
|
||||
|
||||
it('is cross compatible wasm->native', () => {
|
||||
const validator = new vsda.validator();
|
||||
const message = validator.createNewMessage("test");
|
||||
const signed_message = new vsdaNative.signer().sign(message);
|
||||
assert.strictEqual(validator.validate(signed_message), "ok");
|
||||
})
|
||||
|
||||
it('is cross compatible native->wasm', () => {
|
||||
const validator = new vsdaNative.validator();
|
||||
const message = validator.createNewMessage("test");
|
||||
const signed_message = new vsda.signer().sign(message);
|
||||
assert.strictEqual(validator.validate(signed_message), "ok");
|
||||
})
|
||||
|
||||
it('throws for invalid input', () => {
|
||||
const signer = new vsda.signer();
|
||||
const validator = new vsda.validator();
|
||||
assert.throws(() => {
|
||||
validator.createNewMessage()
|
||||
}, "/^Error: Wrong number of arguments$/");
|
||||
assert.throws(() => {
|
||||
validator.createNewMessage(1)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
|
||||
assert.throws(() => {
|
||||
validator.validate(1, 2)
|
||||
}, "/^Error: Wrong number of arguments$/");
|
||||
assert.throws(() => {
|
||||
validator.validate(1)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
|
||||
assert.throws(() => {
|
||||
signer.sign(undefined)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
})
|
||||
});
|
14
vscode-server-linux-x64-web/node_modules/vsda/rust/web/package.json
generated
vendored
Normal file
14
vscode-server-linux-x64-web/node_modules/vsda/rust/web/package.json
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "vsda",
|
||||
"version": "0.1.0",
|
||||
"files": [
|
||||
"vsda_bg.wasm",
|
||||
"vsda.js",
|
||||
"vsda.d.ts"
|
||||
],
|
||||
"module": "vsda.js",
|
||||
"types": "vsda.d.ts",
|
||||
"sideEffects": [
|
||||
"./snippets/*"
|
||||
]
|
||||
}
|
462
vscode-server-linux-x64-web/node_modules/vsda/rust/web/vsda.js
generated
vendored
Normal file
462
vscode-server-linux-x64-web/node_modules/vsda/rust/web/vsda.js
generated
vendored
Normal file
@ -0,0 +1,462 @@
|
||||
var vsda_web = (() => {
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var vsda_exports = {};
|
||||
__export(vsda_exports, {
|
||||
createNewMessage: () => createNewMessage,
|
||||
default: () => vsda_default,
|
||||
initSync: () => initSync,
|
||||
sign: () => sign,
|
||||
signer: () => signer,
|
||||
validate: () => validate,
|
||||
validator: () => validator
|
||||
});
|
||||
const import_meta = {};
|
||||
let wasm;
|
||||
const heap = new Array(32).fill(void 0);
|
||||
heap.push(void 0, null, true, false);
|
||||
function getObject(idx) {
|
||||
return heap[idx];
|
||||
}
|
||||
let heap_next = heap.length;
|
||||
function addHeapObject(obj) {
|
||||
if (heap_next === heap.length)
|
||||
heap.push(heap.length + 1);
|
||||
const idx = heap_next;
|
||||
heap_next = heap[idx];
|
||||
heap[idx] = obj;
|
||||
return idx;
|
||||
}
|
||||
function dropObject(idx) {
|
||||
if (idx < 36)
|
||||
return;
|
||||
heap[idx] = heap_next;
|
||||
heap_next = idx;
|
||||
}
|
||||
function takeObject(idx) {
|
||||
const ret = getObject(idx);
|
||||
dropObject(idx);
|
||||
return ret;
|
||||
}
|
||||
const cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
|
||||
cachedTextDecoder.decode();
|
||||
let cachedUint8Memory0 = new Uint8Array();
|
||||
function getUint8Memory0() {
|
||||
if (cachedUint8Memory0.byteLength === 0) {
|
||||
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachedUint8Memory0;
|
||||
}
|
||||
function getStringFromWasm0(ptr, len) {
|
||||
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
|
||||
}
|
||||
let WASM_VECTOR_LEN = 0;
|
||||
const cachedTextEncoder = new TextEncoder("utf-8");
|
||||
const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
|
||||
return cachedTextEncoder.encodeInto(arg, view);
|
||||
} : function(arg, view) {
|
||||
const buf = cachedTextEncoder.encode(arg);
|
||||
view.set(buf);
|
||||
return {
|
||||
read: arg.length,
|
||||
written: buf.length
|
||||
};
|
||||
};
|
||||
function passStringToWasm0(arg, malloc, realloc) {
|
||||
if (realloc === void 0) {
|
||||
const buf = cachedTextEncoder.encode(arg);
|
||||
const ptr2 = malloc(buf.length);
|
||||
getUint8Memory0().subarray(ptr2, ptr2 + buf.length).set(buf);
|
||||
WASM_VECTOR_LEN = buf.length;
|
||||
return ptr2;
|
||||
}
|
||||
let len = arg.length;
|
||||
let ptr = malloc(len);
|
||||
const mem = getUint8Memory0();
|
||||
let offset = 0;
|
||||
for (; offset < len; offset++) {
|
||||
const code = arg.charCodeAt(offset);
|
||||
if (code > 127)
|
||||
break;
|
||||
mem[ptr + offset] = code;
|
||||
}
|
||||
if (offset !== len) {
|
||||
if (offset !== 0) {
|
||||
arg = arg.slice(offset);
|
||||
}
|
||||
ptr = realloc(ptr, len, len = offset + arg.length * 3);
|
||||
const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
|
||||
const ret = encodeString(arg, view);
|
||||
offset += ret.written;
|
||||
}
|
||||
WASM_VECTOR_LEN = offset;
|
||||
return ptr;
|
||||
}
|
||||
let cachedInt32Memory0 = new Int32Array();
|
||||
function getInt32Memory0() {
|
||||
if (cachedInt32Memory0.byteLength === 0) {
|
||||
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachedInt32Memory0;
|
||||
}
|
||||
function createNewMessage(original) {
|
||||
try {
|
||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||
const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.createNewMessage(retptr, ptr0, len0);
|
||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||
return getStringFromWasm0(r0, r1);
|
||||
} finally {
|
||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||
wasm.__wbindgen_free(r0, r1);
|
||||
}
|
||||
}
|
||||
function sign(salted_message) {
|
||||
try {
|
||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||
const ptr0 = passStringToWasm0(salted_message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.sign(retptr, ptr0, len0);
|
||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||
return getStringFromWasm0(r0, r1);
|
||||
} finally {
|
||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||
wasm.__wbindgen_free(r0, r1);
|
||||
}
|
||||
}
|
||||
function validate(original_message, signature) {
|
||||
const ptr0 = passStringToWasm0(original_message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
const ptr1 = passStringToWasm0(signature, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
const ret = wasm.validate(ptr0, len0, ptr1, len1);
|
||||
return ret !== 0;
|
||||
}
|
||||
function handleError(f, args) {
|
||||
try {
|
||||
return f.apply(this, args);
|
||||
} catch (e) {
|
||||
wasm.__wbindgen_exn_store(addHeapObject(e));
|
||||
}
|
||||
}
|
||||
function getArrayU8FromWasm0(ptr, len) {
|
||||
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
|
||||
}
|
||||
const signerFinalization = new FinalizationRegistry((ptr) => wasm.__wbg_signer_free(ptr));
|
||||
class signer {
|
||||
static __wrap(ptr) {
|
||||
const obj = Object.create(signer.prototype);
|
||||
obj.ptr = ptr;
|
||||
signerFinalization.register(obj, obj.ptr, obj);
|
||||
return obj;
|
||||
}
|
||||
__destroy_into_raw() {
|
||||
const ptr = this.ptr;
|
||||
this.ptr = 0;
|
||||
signerFinalization.unregister(this);
|
||||
return ptr;
|
||||
}
|
||||
free() {
|
||||
const ptr = this.__destroy_into_raw();
|
||||
wasm.__wbg_signer_free(ptr);
|
||||
}
|
||||
/**
|
||||
*/
|
||||
constructor() {
|
||||
const ret = wasm.signer_new();
|
||||
return signer.__wrap(ret);
|
||||
}
|
||||
/**
|
||||
* @param {string} salted_message
|
||||
* @returns {string}
|
||||
*/
|
||||
sign(salted_message) {
|
||||
try {
|
||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||
const ptr0 = passStringToWasm0(salted_message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.signer_sign(retptr, this.ptr, ptr0, len0);
|
||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||
return getStringFromWasm0(r0, r1);
|
||||
} finally {
|
||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||
wasm.__wbindgen_free(r0, r1);
|
||||
}
|
||||
}
|
||||
}
|
||||
const validatorFinalization = new FinalizationRegistry((ptr) => wasm.__wbg_validator_free(ptr));
|
||||
class validator {
|
||||
static __wrap(ptr) {
|
||||
const obj = Object.create(validator.prototype);
|
||||
obj.ptr = ptr;
|
||||
validatorFinalization.register(obj, obj.ptr, obj);
|
||||
return obj;
|
||||
}
|
||||
__destroy_into_raw() {
|
||||
const ptr = this.ptr;
|
||||
this.ptr = 0;
|
||||
validatorFinalization.unregister(this);
|
||||
return ptr;
|
||||
}
|
||||
free() {
|
||||
const ptr = this.__destroy_into_raw();
|
||||
wasm.__wbg_validator_free(ptr);
|
||||
}
|
||||
/**
|
||||
*/
|
||||
constructor() {
|
||||
const ret = wasm.validator_new();
|
||||
return validator.__wrap(ret);
|
||||
}
|
||||
/**
|
||||
* @param {string} original
|
||||
* @returns {string}
|
||||
*/
|
||||
createNewMessage(original) {
|
||||
try {
|
||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||
const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.validator_createNewMessage(retptr, this.ptr, ptr0, len0);
|
||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||
return getStringFromWasm0(r0, r1);
|
||||
} finally {
|
||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||
wasm.__wbindgen_free(r0, r1);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param {string} signed_message
|
||||
* @returns {string}
|
||||
*/
|
||||
validate(signed_message) {
|
||||
try {
|
||||
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
||||
const ptr0 = passStringToWasm0(signed_message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
wasm.validator_validate(retptr, this.ptr, ptr0, len0);
|
||||
var r0 = getInt32Memory0()[retptr / 4 + 0];
|
||||
var r1 = getInt32Memory0()[retptr / 4 + 1];
|
||||
return getStringFromWasm0(r0, r1);
|
||||
} finally {
|
||||
wasm.__wbindgen_add_to_stack_pointer(16);
|
||||
wasm.__wbindgen_free(r0, r1);
|
||||
}
|
||||
}
|
||||
}
|
||||
async function load(module2, imports) {
|
||||
if (typeof Response === "function" && module2 instanceof Response) {
|
||||
if (typeof WebAssembly.instantiateStreaming === "function") {
|
||||
try {
|
||||
return await WebAssembly.instantiateStreaming(module2, imports);
|
||||
} catch (e) {
|
||||
if (module2.headers.get("Content-Type") != "application/wasm") {
|
||||
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
const bytes = await module2.arrayBuffer();
|
||||
return await WebAssembly.instantiate(bytes, imports);
|
||||
} else {
|
||||
const instance = await WebAssembly.instantiate(module2, imports);
|
||||
if (instance instanceof WebAssembly.Instance) {
|
||||
return { instance, module: module2 };
|
||||
} else {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
}
|
||||
function getImports() {
|
||||
const imports = {};
|
||||
imports.wbg = {};
|
||||
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||
const ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_crypto_e1d53a1d73fb10b8 = function(arg0) {
|
||||
const ret = getObject(arg0).crypto;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_is_object = function(arg0) {
|
||||
const val = getObject(arg0);
|
||||
const ret = typeof val === "object" && val !== null;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_process_038c26bf42b093f8 = function(arg0) {
|
||||
const ret = getObject(arg0).process;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_versions_ab37218d2f0b24a8 = function(arg0) {
|
||||
const ret = getObject(arg0).versions;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_node_080f4b19d15bc1fe = function(arg0) {
|
||||
const ret = getObject(arg0).node;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_is_string = function(arg0) {
|
||||
const ret = typeof getObject(arg0) === "string";
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
|
||||
takeObject(arg0);
|
||||
};
|
||||
imports.wbg.__wbg_msCrypto_6e7d3e1f92610cbb = function(arg0) {
|
||||
const ret = getObject(arg0).msCrypto;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithlength_f5933855e4f48a19 = function(arg0) {
|
||||
const ret = new Uint8Array(arg0 >>> 0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_require_78a3dcfbdba9cbce = function() {
|
||||
return handleError(function() {
|
||||
const ret = module.require;
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbindgen_is_function = function(arg0) {
|
||||
const ret = typeof getObject(arg0) === "function";
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
|
||||
const ret = getStringFromWasm0(arg0, arg1);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_call_168da88779e35f61 = function() {
|
||||
return handleError(function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_self_6d479506f72c6a71 = function() {
|
||||
return handleError(function() {
|
||||
const ret = self.self;
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_window_f2557cc78490aceb = function() {
|
||||
return handleError(function() {
|
||||
const ret = window.window;
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_globalThis_7f206bda628d5286 = function() {
|
||||
return handleError(function() {
|
||||
const ret = globalThis.globalThis;
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_global_ba75c50d1cf384f4 = function() {
|
||||
return handleError(function() {
|
||||
const ret = global.global;
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbindgen_is_undefined = function(arg0) {
|
||||
const ret = getObject(arg0) === void 0;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_newnoargs_b5b063fc6c2f0376 = function(arg0, arg1) {
|
||||
const ret = new Function(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_call_97ae9d8645dc388b = function() {
|
||||
return handleError(function(arg0, arg1) {
|
||||
const ret = getObject(arg0).call(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_randomFillSync_6894564c2c334c42 = function() {
|
||||
return handleError(function(arg0, arg1, arg2) {
|
||||
getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_subarray_58ad4efbb5bcb886 = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getRandomValues_805f1c3d65988a5a = function() {
|
||||
return handleError(function(arg0, arg1) {
|
||||
getObject(arg0).getRandomValues(getObject(arg1));
|
||||
}, arguments);
|
||||
};
|
||||
imports.wbg.__wbg_length_9e1ae1900cb0fbd5 = function(arg0) {
|
||||
const ret = getObject(arg0).length;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_memory = function() {
|
||||
const ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_buffer_3f3d764d4747d564 = function(arg0) {
|
||||
const ret = getObject(arg0).buffer;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_new_8c3f0052272a457a = function(arg0) {
|
||||
const ret = new Uint8Array(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_set_83db9690f9353e79 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).set(getObject(arg1), arg2 >>> 0);
|
||||
};
|
||||
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
|
||||
throw new Error(getStringFromWasm0(arg0, arg1));
|
||||
};
|
||||
return imports;
|
||||
}
|
||||
function initMemory(imports, maybe_memory) {
|
||||
}
|
||||
function finalizeInit(instance, module2) {
|
||||
wasm = instance.exports;
|
||||
init.__wbindgen_wasm_module = module2;
|
||||
cachedInt32Memory0 = new Int32Array();
|
||||
cachedUint8Memory0 = new Uint8Array();
|
||||
return wasm;
|
||||
}
|
||||
function initSync(module2) {
|
||||
const imports = getImports();
|
||||
initMemory(imports);
|
||||
if (!(module2 instanceof WebAssembly.Module)) {
|
||||
module2 = new WebAssembly.Module(module2);
|
||||
}
|
||||
const instance = new WebAssembly.Instance(module2, imports);
|
||||
return finalizeInit(instance, module2);
|
||||
}
|
||||
async function init(input) {
|
||||
if (typeof input === "undefined") {
|
||||
input = new URL("vsda_bg.wasm", import_meta.url);
|
||||
}
|
||||
const imports = getImports();
|
||||
if (typeof input === "string" || typeof Request === "function" && input instanceof Request || typeof URL === "function" && input instanceof URL) {
|
||||
input = fetch(input);
|
||||
}
|
||||
initMemory(imports);
|
||||
const { instance, module: module2 } = await load(await input, imports);
|
||||
return finalizeInit(instance, module2);
|
||||
}
|
||||
var vsda_default = init;
|
||||
return __toCommonJS(vsda_exports);
|
||||
})();
|
BIN
vscode-server-linux-x64-web/node_modules/vsda/rust/web/vsda_bg.wasm
generated
vendored
Normal file
BIN
vscode-server-linux-x64-web/node_modules/vsda/rust/web/vsda_bg.wasm
generated
vendored
Normal file
Binary file not shown.
53
vscode-server-linux-x64-web/node_modules/vsda/test.js
generated
vendored
Normal file
53
vscode-server-linux-x64-web/node_modules/vsda/test.js
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
'use strict';
|
||||
|
||||
const assert = require('assert');
|
||||
const vsda = require('./index');
|
||||
|
||||
describe('vsda module', () => {
|
||||
it('has signer interface', () => {
|
||||
assert.strictEqual(typeof vsda.signer, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.signer.prototype, 'sign').value, 'function');
|
||||
});
|
||||
|
||||
it('has validator interface', () => {
|
||||
assert.strictEqual(typeof vsda.validator, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.validator.prototype, 'createNewMessage').value, 'function');
|
||||
assert.strictEqual(typeof Object.getOwnPropertyDescriptor(
|
||||
vsda.validator.prototype, 'validate').value, 'function');
|
||||
});
|
||||
|
||||
it('can sign with a valid string input', () => {
|
||||
const signer = new vsda.signer();
|
||||
const validator = new vsda.validator();
|
||||
const message = validator.createNewMessage("test");
|
||||
const signed_message = signer.sign(message);
|
||||
assert.strictEqual(validator.validate(signed_message), "ok");
|
||||
})
|
||||
|
||||
it('throws for invalid input', () => {
|
||||
const signer = new vsda.signer();
|
||||
const validator = new vsda.validator();
|
||||
assert.throws(() => {
|
||||
validator.createNewMessage()
|
||||
}, "/^Error: Wrong number of arguments$/");
|
||||
assert.throws(() => {
|
||||
validator.createNewMessage(1)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
|
||||
assert.throws(() => {
|
||||
validator.validate(1, 2)
|
||||
}, "/^Error: Wrong number of arguments$/");
|
||||
assert.throws(() => {
|
||||
validator.validate(1)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
|
||||
assert.throws(() => {
|
||||
signer.sign("test1", "test2")
|
||||
}, "/^Error: Wrong number of arguments$/");
|
||||
assert.throws(() => {
|
||||
signer.sign(undefined)
|
||||
}, "/^Error: Wrong type of argment. Expects a string.$/");
|
||||
})
|
||||
});
|
Reference in New Issue
Block a user