@nfen/webcrypto-ts
Version:
Enforced Webcrypto wrapper
123 lines • 3.8 kB
JavaScript
/**
* Code related to RSASSA_PKCS1_v1_5
* @module
*/
import * as proxy from "../proxy.js";
import { Alg as SHA } from "../sha/shared.js";
import { Alg, RsaShared, } from "./shared.js";
const handlers = {
privHandler: {
get(target, prop) {
switch (prop) {
case "self":
return target;
case "sign":
return (data) => sign(target, data);
case "exportKey":
return (format) => exportKey(format, target);
}
return Reflect.get(target, prop);
},
},
pubHandler: {
get(target, prop) {
switch (prop) {
case "self":
return target;
case "verify":
return (signature, data) => verify(target, signature, data);
case "exportKey":
return (format) => exportKey(format, target);
}
return Reflect.get(target, prop);
},
},
};
/**
* Generate a new RSASSA_PKCS1_v1_5 keypair
* @example
* ```ts
* const keyPair = await RSASSA_PKCS1_v1_5.generateKey();
* ```
*/
export const generateKey = async (algorithm = {
hash: SHA.Variant.SHA_512,
modulusLength: 4096,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
}, extractable, keyUsages) => {
const keyPair = (await RsaShared.generateKey({
...algorithm,
name: Alg.Variant.RSASSA_PKCS1_v1_5,
}, extractable, keyUsages));
return proxy.proxifyKeyPair(handlers)(keyPair);
};
/**
* Generate a new RSASSA_PKCS1_v1_5 keypair
* @alias generateKey
* @example
* ```ts
* const keyPair = await RSASSA_PKCS1_v1_5.generateKeyPair();
* ```
*/
export const generateKeyPair = generateKey;
/**
* Import an RSASSA_PKCS1_v1_5 public or private key
* @example
* ```ts
* const key = await RSASSA_PKCS1_v1_5.importKey("jwk", pubKey, { hash: "SHA-512" }, true, ['verify']);
* ```
*/
export const importKey = async (format, key, algorithm, extractable, keyUsages) => {
const importedKey = await RsaShared.importKey(format, key, { ...algorithm, name: Alg.Variant.RSASSA_PKCS1_v1_5 }, extractable, keyUsages);
if (importedKey.type === "private") {
return proxy.proxifyKey(handlers.privHandler)(importedKey);
}
else {
return proxy.proxifyKey(handlers.pubHandler)(importedKey);
}
};
/**
* Export an RSASSA_PKCS1_v1_5 public or private key
* @example
* ```ts
* const pubKeyJwk = await RSASSA_PKCS1_v1_5.importKey("jwk", keyPair.publicKey.self);
* ```
* @example
* ```ts
* const pubKeyJwk = await keyPair.publicKey.importKey("jwk");
* ```
*/
export const exportKey = async (format, key) => RsaShared.exportKey(format, key);
/**
* Sign a given payload
* @example
* ```ts
* const message = new TextEncoder().encode("a message");
* const signature = await RSASSA_PKCS1_v1_5.sign(keyPair.privateKey.self, message);
* ```
* @example
* ```ts
* const message = new TextEncoder().encode("a message");
* const signature = await keyPair.privateKey.sign(message);
* ```
*/
export const sign = async (key, data) => await RsaShared.sign({
name: Alg.Variant.RSASSA_PKCS1_v1_5,
}, key, data);
/**
* Verify a given signature
* @example
* ```ts
* const message = new TextEncoder().encode("a message");
* const isVerified = await RSASSA_PKCS1_v1_5.verify(keyPair.publicKey.self, signature, message);
* ```
* @example
* ```ts
* const message = new TextEncoder().encode("a message");
* const isVerified = await keyPair.publicKey.verify( signature, message);
* ```
*/
export const verify = async (key, signature, data) => await RsaShared.verify({
name: Alg.Variant.RSASSA_PKCS1_v1_5,
}, key, signature, data);
//# sourceMappingURL=rsassa_pkcs1_v1_5.js.map