derivePublicKey
derivePublicKey
Derive the matching public key from an imported (or generated) private key.
The import* functions that read a PKCS#8 / PKCS#1 / SEC 1 / JWK private key return a bare CryptoKey with only sign (or, for RSA-OAEP, decrypt) usage — there is no accompanying public handle. This bridges that gap: it exports the private key's JWK, strips the private components, and re-imports the public half with verify (RSA-OAEP: encrypt) usage, so callers can go straight to exportSpkiDer / exportSpkiPem (e.g. to rebuild a self-signed cert or distribute the public key when only the private key is on disk).
Supports RSA (n/e), ECDSA (x/y), and Ed25519 (x). The derived key inherits the private key's algorithm parameters (hash, curve).
function derivePublicKey(
privateKey: CryptoKey,
): Promise<CryptoKey>Parameters
privateKey:CryptoKey— An extractable privateCryptoKey
Returns — Extractable public CryptoKey with verify (RSA-OAEP: encrypt) usage
Throws
Error— If the key is not a private key, is non-extractable, or uses an unsupported key type
See also
exportSpkiDerfor exporting the derived key
Examples
const privateKey = await importPkcs8PemOrThrow(pem, { kind: 'ecdsa', curve: 'P-256' });
const publicKey = await derivePublicKey(privateKey);
const spkiPem = await exportSpkiPem(publicKey);