UNPKG

tink-crypto

Version:

A multi-language, cross-platform library that provides cryptographic APIs that are secure, easy to use correctly, and hard(er) to misuse.

74 lines 8.95 kB
/** * @license * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { InvalidArgumentsException } from '../../../exception/invalid_arguments_exception'; import * as ellipticCurves from '../../../subtle/elliptic_curves'; import * as hpkeUtil from './hpke_util'; /** * Private keys used in Diffie-Hellman-based P256 and P521 HPKE KEM * variants. */ export class NistCurvesHpkeKemPrivateKey { constructor(privateKey, publicKey) { this.privateKey = privateKey; this.publicKey = publicKey; } getSerializedPublicKey() { return __awaiter(this, void 0, void 0, function* () { return yield hpkeUtil.getByteArrayFromPublicKey(this.publicKey); }); } } /** * Converts an uncompressed point encoded `publicKey` and its associated * `privateKey` into a `NistCurvesHpkeKemPrivateKey`. */ export function fromBytes({ privateKey, publicKey, curveType }) { return __awaiter(this, void 0, void 0, function* () { if (!privateKey) { throw new InvalidArgumentsException('KEM private key was null or undefined'); } if (!publicKey) { throw new InvalidArgumentsException('KEM public key was null or undefined'); } const publicCryptoKey = yield hpkeUtil.getPublicKeyFromByteArray(ellipticCurves.curveToString(curveType), publicKey); const privateCryptoKey = yield hpkeUtil.getPrivateKeyFromByteArray({ curveType: ellipticCurves.curveToString(curveType), publicKey, privateKey }); return new NistCurvesHpkeKemPrivateKey(privateCryptoKey, publicCryptoKey); }); } /** * Converts a `CryptoKeyPair` into a `NistCurvesHpkeKemPrivateKey`. The * algorithm on both keys must be ECDH and both keys should be valid. */ export function fromCryptoKeyPair(keyPair) { return __awaiter(this, void 0, void 0, function* () { validateECDHCryptoKey(keyPair.privateKey, 'private'); validateECDHCryptoKey(keyPair.publicKey, 'public'); return new NistCurvesHpkeKemPrivateKey(keyPair.privateKey, keyPair.publicKey); }); } function validateECDHCryptoKey(key, type) { if (type !== key.type) { throw new InvalidArgumentsException(`keyPair ${type} key was of type ${key.type}`); } const alg = key.algorithm; if ('ECDH' !== alg.name) { throw new InvalidArgumentsException(`keyPair ${type} key should be ECDH but found ${alg.name}`); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlzdF9jdXJ2ZXNfaHBrZV9rZW1fcHJpdmF0ZV9rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9oeWJyaWQvaW50ZXJuYWwvaHBrZS9uaXN0X2N1cnZlc19ocGtlX2tlbV9wcml2YXRlX2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHOzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxLQUFLLGNBQWMsTUFBTSxpQ0FBaUMsQ0FBQztBQUdsRSxPQUFPLEtBQUssUUFBUSxNQUFNLGFBQWEsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLFlBQXFCLFVBQXFCLEVBQVcsU0FBb0I7UUFBcEQsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUFXLGNBQVMsR0FBVCxTQUFTLENBQVc7SUFBRyxDQUFDO0lBRXZFLHNCQUFzQjs7WUFDMUIsT0FBTyxNQUFNLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsQ0FBQztLQUFBO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQWdCLFNBQVMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUloRTs7UUFDQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsTUFBTSxJQUFJLHlCQUF5QixDQUMvQix1Q0FBdUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQzdFO1FBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQzVELGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFeEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQztZQUNqRSxTQUFTLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDbEQsU0FBUztZQUNULFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksMkJBQTJCLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUUsQ0FBQztDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFnQixpQkFBaUIsQ0FBQyxPQUFzQjs7UUFFNUQscUJBQXFCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRixDQUFDO0NBQUE7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEdBQWMsRUFBRSxJQUF3QjtJQUNyRSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSx5QkFBeUIsQ0FDL0IsV0FBVyxJQUFJLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNwRDtJQUNELE1BQU0sR0FBRyxHQUFtQixHQUFHLENBQUMsU0FBMkIsQ0FBQztJQUU1RCxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSx5QkFBeUIsQ0FDL0IsV0FBVyxJQUFJLGlDQUFpQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7SW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbn0gZnJvbSAnLi4vLi4vLi4vZXhjZXB0aW9uL2ludmFsaWRfYXJndW1lbnRzX2V4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBlbGxpcHRpY0N1cnZlcyBmcm9tICcuLi8uLi8uLi9zdWJ0bGUvZWxsaXB0aWNfY3VydmVzJztcblxuaW1wb3J0IHtIcGtlS2VtUHJpdmF0ZUtleX0gZnJvbSAnLi9ocGtlX2tlbV9wcml2YXRlX2tleSc7XG5pbXBvcnQgKiBhcyBocGtlVXRpbCBmcm9tICcuL2hwa2VfdXRpbCc7XG5cbi8qKlxuICogUHJpdmF0ZSBrZXlzIHVzZWQgaW4gRGlmZmllLUhlbGxtYW4tYmFzZWQgUDI1NiBhbmQgUDUyMSBIUEtFIEtFTVxuICogdmFyaWFudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOaXN0Q3VydmVzSHBrZUtlbVByaXZhdGVLZXkgaW1wbGVtZW50cyBIcGtlS2VtUHJpdmF0ZUtleSB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHByaXZhdGVLZXk6IENyeXB0b0tleSwgcmVhZG9ubHkgcHVibGljS2V5OiBDcnlwdG9LZXkpIHt9XG5cbiAgYXN5bmMgZ2V0U2VyaWFsaXplZFB1YmxpY0tleSgpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gYXdhaXQgaHBrZVV0aWwuZ2V0Qnl0ZUFycmF5RnJvbVB1YmxpY0tleSh0aGlzLnB1YmxpY0tleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiB1bmNvbXByZXNzZWQgcG9pbnQgZW5jb2RlZCBgcHVibGljS2V5YCBhbmQgaXRzIGFzc29jaWF0ZWRcbiAqIGBwcml2YXRlS2V5YCBpbnRvIGEgYE5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmcm9tQnl0ZXMoe3ByaXZhdGVLZXksIHB1YmxpY0tleSwgY3VydmVUeXBlfToge1xuICBwcml2YXRlS2V5OiBVaW50OEFycmF5LFxuICBwdWJsaWNLZXk6IFVpbnQ4QXJyYXksXG4gIGN1cnZlVHlwZTogZWxsaXB0aWNDdXJ2ZXMuQ3VydmVUeXBlLlAyNTZ8ZWxsaXB0aWNDdXJ2ZXMuQ3VydmVUeXBlLlA1MjFcbn0pOiBQcm9taXNlPE5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleT4ge1xuICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbihcbiAgICAgICAgJ0tFTSBwcml2YXRlIGtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgfVxuICBpZiAoIXB1YmxpY0tleSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdLRU0gcHVibGljIGtleSB3YXMgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgfVxuICBjb25zdCBwdWJsaWNDcnlwdG9LZXkgPSBhd2FpdCBocGtlVXRpbC5nZXRQdWJsaWNLZXlGcm9tQnl0ZUFycmF5KFxuICAgICAgZWxsaXB0aWNDdXJ2ZXMuY3VydmVUb1N0cmluZyhjdXJ2ZVR5cGUpLCBwdWJsaWNLZXkpO1xuXG4gIGNvbnN0IHByaXZhdGVDcnlwdG9LZXkgPSBhd2FpdCBocGtlVXRpbC5nZXRQcml2YXRlS2V5RnJvbUJ5dGVBcnJheSh7XG4gICAgY3VydmVUeXBlOiBlbGxpcHRpY0N1cnZlcy5jdXJ2ZVRvU3RyaW5nKGN1cnZlVHlwZSksXG4gICAgcHVibGljS2V5LFxuICAgIHByaXZhdGVLZXlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBOaXN0Q3VydmVzSHBrZUtlbVByaXZhdGVLZXkocHJpdmF0ZUNyeXB0b0tleSwgcHVibGljQ3J5cHRvS2V5KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBDcnlwdG9LZXlQYWlyYCBpbnRvIGEgYE5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleWAuIFRoZVxuICogYWxnb3JpdGhtIG9uIGJvdGgga2V5cyBtdXN0IGJlIEVDREggYW5kIGJvdGgga2V5cyBzaG91bGQgYmUgdmFsaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmcm9tQ3J5cHRvS2V5UGFpcihrZXlQYWlyOiBDcnlwdG9LZXlQYWlyKTpcbiAgICBQcm9taXNlPE5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleT4ge1xuICB2YWxpZGF0ZUVDREhDcnlwdG9LZXkoa2V5UGFpci5wcml2YXRlS2V5LCAncHJpdmF0ZScpO1xuICB2YWxpZGF0ZUVDREhDcnlwdG9LZXkoa2V5UGFpci5wdWJsaWNLZXksICdwdWJsaWMnKTtcbiAgcmV0dXJuIG5ldyBOaXN0Q3VydmVzSHBrZUtlbVByaXZhdGVLZXkoa2V5UGFpci5wcml2YXRlS2V5LCBrZXlQYWlyLnB1YmxpY0tleSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRUNESENyeXB0b0tleShrZXk6IENyeXB0b0tleSwgdHlwZTogJ3B1YmxpYyd8J3ByaXZhdGUnKSB7XG4gIGlmICh0eXBlICE9PSBrZXkudHlwZSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKFxuICAgICAgICBga2V5UGFpciAke3R5cGV9IGtleSB3YXMgb2YgdHlwZSAke2tleS50eXBlfWApO1xuICB9XG4gIGNvbnN0IGFsZzogRWNLZXlHZW5QYXJhbXMgPSBrZXkuYWxnb3JpdGhtIGFzIEVjS2V5R2VuUGFyYW1zO1xuXG4gIGlmICgnRUNESCcgIT09IGFsZy5uYW1lKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudHNFeGNlcHRpb24oXG4gICAgICAgIGBrZXlQYWlyICR7dHlwZX0ga2V5IHNob3VsZCBiZSBFQ0RIIGJ1dCBmb3VuZCAke2FsZy5uYW1lfWApO1xuICB9XG59XG4iXX0=