rustdesk/src/globals.js

76 lines
1.7 KiB
JavaScript
Raw Normal View History

2022-01-20 12:49:57 +08:00
import Connection from "./connection";
import _sodium from "libsodium-wrappers";
2022-01-20 02:27:49 +08:00
window.currentConnection = undefined;
export function setConn(conn) {
window.currentConnection = conn;
}
export function getConn() {
2022-01-20 18:02:20 +08:00
return window.currentConnection;
2022-01-20 12:49:57 +08:00
}
2022-01-20 18:02:20 +08:00
export function close() {
getConn()?.close();
setConn(undefined);
}
export function newConn() {
window.currentConnection?.close();
2022-01-20 12:49:57 +08:00
const conn = new Connection();
setConn(conn);
2022-01-20 18:02:20 +08:00
return conn;
2022-01-20 12:49:57 +08:00
}
let sodium;
export async function verify(signed, pk) {
if (!sodium) {
await _sodium.ready;
sodium = _sodium;
}
2022-01-20 15:41:11 +08:00
if (typeof pk == 'string') {
pk = decodeBase64(pk);
}
2022-01-20 12:49:57 +08:00
return sodium.crypto_sign_open(signed, pk);
}
2022-01-20 15:41:11 +08:00
export function decodeBase64(pk) {
return sodium.from_base64(pk, sodium.base64_variants.ORIGINAL);
}
export function genBoxKeyPair() {
const pair = sodium.crypto_box_keypair();
const sk = pair.privateKey;
const pk = pair.publicKey;
return [sk, pk];
}
export function genSecretKey() {
return sodium.crypto_secretbox_keygen();
}
export function seal(unsigned, theirPk, ourSk) {
const nonce = Uint8Array.from(Array(24).fill(0));
return sodium.crypto_box_easy(unsigned, nonce, theirPk, ourSk);
}
2022-01-20 18:02:20 +08:00
function makeOnce(value) {
var byteArray = Array(24).fill(0);
for (var index = 0; index < byteArray.length && value > 0; index++) {
var byte = value & 0xff;
byteArray[index] = byte;
value = (value - byte) / 256;
}
return Uint8Array.from(byteArray);
};
2022-01-20 15:41:11 +08:00
export function encrypt(unsigned, nonce, key) {
2022-01-20 18:02:20 +08:00
return sodium.crypto_secretbox_easy(unsigned, makeOnce(nonce), key);
2022-01-20 15:41:11 +08:00
}
export function decrypt(signed, nonce, key) {
2022-01-20 18:02:20 +08:00
return sodium.crypto_secretbox_open_easy(signed, makeOnce(nonce), key);
}