Skip to content

Instantly share code, notes, and snippets.

@heavensrevenge
Created February 24, 2025 23:37
Show Gist options
  • Save heavensrevenge/b2a25327867b5d929829b13d3f7784db to your computer and use it in GitHub Desktop.
Save heavensrevenge/b2a25327867b5d929829b13d3f7784db to your computer and use it in GitHub Desktop.
generate or import private and public key pairs, sign and validate
async function generateKeyPair() {
let algoritm = {
name: "ECDSA",
namedCurve: "P-521"
};
let exportable = true;
let usage = ["sign", "verify"];
return await window.crypto.subtle.generateKey(algoritm, exportable, usage);
}
async function exportKeys(key) {
let format = "jwk";
let publicKey = await window.crypto.subtle.exportKey(format, key.publicKey);
let privateKey = await window.crypto.subtle.exportKey(format, key.privateKey);
return {
publicKey,
privateKey
};
}
async function importPrivateKey(privateKey) {
let format = "jwk";
let algoritm = {
name: "ECDSA",
namedCurve: "P-521"
};
let exportable = true;
let usage = ["sign"];
return await window.crypto.subtle.importKey(format, privateKey, algoritm, exportable, usage);
}
async function importPublicKey(publicKey) {
let format = "jwk";
let algoritm = {
name: "ECDSA",
namedCurve: "P-521"
};
let exportable = true;
let usage = ["verify"];
return await window.crypto.subtle.importKey(format, publicKey, algoritm, exportable, usage);
}
async function signMessage(privateKey, inputData) {
let algoritm = {
name: "ECDSA",
hash: {
name: "SHA-512"
}
};
let encodedData = new TextEncoder().encode(inputData);
return await window.crypto.subtle.sign(algoritm, privateKey, encodedData);
}
async function verifyMessage(publicKey, signature, inputData) {
let algoritm = {
name: "ECDSA",
hash: {
name: "SHA-512"
},
};
let encodedData = new TextEncoder().encode(inputData);
return await window.crypto.subtle.verify(algoritm, publicKey, signature, encodedData);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment