1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-12 22:44:11 +00:00

Add xwing and ed25519

This commit is contained in:
Bernd Schoolmann
2024-11-11 15:02:50 +01:00
parent 4a2c14dc2e
commit 7cf8460f45

View File

@@ -1,4 +1,6 @@
import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { WebCryptoFunctionService } from "@bitwarden/common/platform/services/web-crypto-function.service";
import * as sdk from "@bitwarden/sdk-internal";
/**
@@ -12,6 +14,92 @@ export class WebSdkClientFactory implements SdkClientFactory {
(sdk as any).init(module);
let start = performance.now();
let iterations = 20000;
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.generate_xwing_keypair();
}
let end = performance.now();
console.log("[xwing] generated", iterations, "keys in ", end-start, "ms which is ", 1000/(end-start)*iterations, "keys per second");
let test_key = sdk.ClientCrypto.generate_xwing_keypair();
let pk = test_key.slice(32);
let sk = test_key.slice(0,32);
start = performance.now();
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.encapsulate_xwing(pk);
}
end = performance.now();
console.log("[xwing] encapsulated", iterations, "keys in ", end-start, "ms which is ", 1000/(end-start)*iterations, "keys per second");
let encapsulated_test_key = sdk.ClientCrypto.encapsulate_xwing(pk);
let ct = encapsulated_test_key.slice(0,1120);
let ss_sender = encapsulated_test_key.slice(1120);
start = performance.now();
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.decapsulate_xwing(sk, ct);
}
end = performance.now();
console.log("[xwing] decapsulated", iterations, "keys in ", end-start, "ms which is ", 1000/(end-start)*iterations, "keys per second");
start = performance.now();
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.generate_ed25519_keypair();
}
end = performance.now();
console.log("[ed25519] generated", iterations, "keys in ", end-start, "ms which is ", 1000/(end-start)*iterations, "keys per second");
let ed25519keypair = sdk.ClientCrypto.generate_ed25519_keypair();
let signingKey = ed25519keypair.slice(0,32);
let verifyingKey = ed25519keypair.slice(32);
let testmsg = "hello world";
let testmsgUint8 = Utils.fromByteStringToArray(testmsg);
start = performance.now();
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.sign_ed25519(testmsgUint8, signingKey);
}
end = performance.now();
console.log("[ed25510] signed", iterations, "msgs in ", end-start, "ms which is ", 1000/(end-start)*iterations, "sigs per second");
let signature = sdk.ClientCrypto.sign_ed25519(testmsgUint8, signingKey);
start = performance.now();
for (let i = 0; i < iterations; i++) {
sdk.ClientCrypto.verify_ed25519(testmsgUint8, signature, verifyingKey);
}
end = performance.now();
console.log("[ed25519] verified", iterations, "msgs in ", end-start, "ms which is ", 1000/(end-start)*iterations, "verify per second");
let webcryptofunctionservice = new WebCryptoFunctionService(window);
start = performance.now();
iterations = 1000;
for (let i = 0; i < iterations/50; i++) {
await webcryptofunctionservice.rsaGenerateKeyPair(2048);
}
end = performance.now();
console.log("[rsa-webcrypto] generated", iterations, " 2048 bit keys in ", end-start, "ms which is ", 1000/(end-start)*iterations, "keys per second");
let rsakey = await webcryptofunctionservice.rsaGenerateKeyPair(2048);
iterations = 100000;
start = performance.now();
for (let i = 0; i < iterations; i++) {
await webcryptofunctionservice.rsaEncrypt(testmsgUint8, rsakey[0], "sha256");
}
end = performance.now();
console.log("[rsa-webcrypto] encrypted", iterations, "msg using 2048 bit key in ", end-start, "ms which is ", 1000/(end-start)*iterations, "encs per second");
let encrypted = await webcryptofunctionservice.rsaEncrypt(testmsgUint8, rsakey[0], "sha256");
start = performance.now();
for (let i = 0; i < iterations; i++) {
await webcryptofunctionservice.rsaDecrypt(encrypted, rsakey[1], "sha256");
}
end = performance.now();
console.log("[rsa-webcrypto] decrypted", iterations, "msg using 2048 bit key in ", end-start, "ms which is ", 1000/(end-start)*iterations, "encs per second");
return Promise.resolve(new sdk.BitwardenClient(...args));
}
}
@@ -37,6 +125,6 @@ async function load() {
if (supported) {
return await import("@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm");
} else {
return await import("@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm.js");
//return await import("@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm.js");
}
}