import { PrivateKey } from "../PrivateKey"; import { PublicKey } from "../PublicKey"; /** * JWK */ export type JWK = JWK.EC | JWK.OCT | JWK.OKP | JWK.RSA; /** * JWK definitions * based on https://www.iana.org/assignments/jose/jose.xhtml */ export declare namespace JWK { type key_ops = "sign" | "verify" | "encrypt" | "decrypt" | "wrapKey" | "unwrapKey" | "deriveKey" | "deriveBits"; interface Base { alg?: string; ext?: boolean; key_ops?: key_ops[]; kid?: string; kty?: string; use?: "sig" | "enc"; x5c?: string[]; x5t?: string; 'x5t#S256'?: string; x5u?: string; [propName: string]: unknown; } interface EC extends Base { kty: "EC"; crv: string; d?: string; x?: string; y?: string; } interface OCT extends Base { kty: "oct"; k: string; } interface OKP extends Base { kty: "OKP"; crv: string; d?: string; x: string; } interface RSA extends Base { kty: "RSA"; d: string; dp: string; dq: string; e: string; n: string; oth: Array<{ d?: string; r?: string; t?: string; }>; p: string; q: string; qi: string; } /** * create a JWK from a given Key * * @param {PublicKey | PrivateKey} key * @param base - set of JWK properties to be added * @returns {JWK} */ const fromKey: (key: PublicKey | PrivateKey, base?: Base) => JWK; }