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.

36 lines 4.97 kB
/** * @license * Copyright 2023 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { InvalidArgumentsException } from '../../../exception/invalid_arguments_exception'; import { PbHpkeKem } from '../../../internal/proto'; import { bytesAsU8 } from '../../../internal/proto_shims'; import * as hpkeUtil from './hpke_util'; import * as nistCurvesHpkeKemPrivateKey from './nist_curves_hpke_kem_private_key'; /** Helper class for creating HPKE KEM asymmetric keys. */ export class HpkeKemKeyFactory { constructor() { } static createPrivate(privateKey) { const publicKey = privateKey.getPublicKey(); if (!publicKey) { throw new InvalidArgumentsException('Public key not set'); } const params = publicKey.getParams(); if (!params) { throw new InvalidArgumentsException('Params not set'); } switch (params.getKem()) { case PbHpkeKem.DHKEM_P256_HKDF_SHA256: case PbHpkeKem.DHKEM_P521_HKDF_SHA512: return nistCurvesHpkeKemPrivateKey.fromBytes({ privateKey: bytesAsU8(privateKey.getPrivateKey()), publicKey: bytesAsU8(publicKey.getPublicKey()), curveType: hpkeUtil.nistHpkeKemToCurve(params.getKem()) }); default: throw new InvalidArgumentsException('Unrecognized HPKE KEM identifier'); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHBrZV9rZW1fa2V5X2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9oeWJyaWQvaW50ZXJuYWwvaHBrZS9ocGtlX2tlbV9rZXlfZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFDLFNBQVMsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFHeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxLQUFLLDJCQUEyQixNQUFNLG9DQUFvQyxDQUFDO0FBRWxGLDBEQUEwRDtBQUMxRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLGdCQUF1QixDQUFDO0lBRXhCLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBNEI7UUFFL0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxNQUFNLElBQUkseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUMzRDtRQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDdkQ7UUFDRCxRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QixLQUFLLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztZQUN0QyxLQUFLLFNBQVMsQ0FBQyxzQkFBc0I7Z0JBQ25DLE9BQU8sMkJBQTJCLENBQUMsU0FBUyxDQUFDO29CQUMzQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDakQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzlDLFNBQVMsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN4RCxDQUFDLENBQUM7WUFDTDtnQkFDRSxNQUFNLElBQUkseUJBQXlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9ufSBmcm9tICcuLi8uLi8uLi9leGNlcHRpb24vaW52YWxpZF9hcmd1bWVudHNfZXhjZXB0aW9uJztcbmltcG9ydCB7UGJIcGtlS2VtLCBQYkhwa2VQcml2YXRlS2V5fSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbC9wcm90byc7XG5pbXBvcnQge2J5dGVzQXNVOH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvcHJvdG9fc2hpbXMnO1xuXG5pbXBvcnQge0hwa2VLZW1Qcml2YXRlS2V5fSBmcm9tICcuL2hwa2Vfa2VtX3ByaXZhdGVfa2V5JztcbmltcG9ydCAqIGFzIGhwa2VVdGlsIGZyb20gJy4vaHBrZV91dGlsJztcbmltcG9ydCAqIGFzIG5pc3RDdXJ2ZXNIcGtlS2VtUHJpdmF0ZUtleSBmcm9tICcuL25pc3RfY3VydmVzX2hwa2Vfa2VtX3ByaXZhdGVfa2V5JztcblxuLyoqIEhlbHBlciBjbGFzcyBmb3IgY3JlYXRpbmcgSFBLRSBLRU0gYXN5bW1ldHJpYyBrZXlzLiAqL1xuZXhwb3J0IGNsYXNzIEhwa2VLZW1LZXlGYWN0b3J5IHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGNyZWF0ZVByaXZhdGUocHJpdmF0ZUtleTogUGJIcGtlUHJpdmF0ZUtleSk6XG4gICAgICBQcm9taXNlPEhwa2VLZW1Qcml2YXRlS2V5PiB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gcHJpdmF0ZUtleS5nZXRQdWJsaWNLZXkoKTtcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudHNFeGNlcHRpb24oJ1B1YmxpYyBrZXkgbm90IHNldCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXMgPSBwdWJsaWNLZXkuZ2V0UGFyYW1zKCk7XG4gICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdQYXJhbXMgbm90IHNldCcpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHBhcmFtcy5nZXRLZW0oKSkge1xuICAgICAgY2FzZSBQYkhwa2VLZW0uREhLRU1fUDI1Nl9IS0RGX1NIQTI1NjpcbiAgICAgIGNhc2UgUGJIcGtlS2VtLkRIS0VNX1A1MjFfSEtERl9TSEE1MTI6XG4gICAgICAgIHJldHVybiBuaXN0Q3VydmVzSHBrZUtlbVByaXZhdGVLZXkuZnJvbUJ5dGVzKHtcbiAgICAgICAgICBwcml2YXRlS2V5OiBieXRlc0FzVTgocHJpdmF0ZUtleS5nZXRQcml2YXRlS2V5KCkpLFxuICAgICAgICAgIHB1YmxpY0tleTogYnl0ZXNBc1U4KHB1YmxpY0tleS5nZXRQdWJsaWNLZXkoKSksXG4gICAgICAgICAgY3VydmVUeXBlOiBocGtlVXRpbC5uaXN0SHBrZUtlbVRvQ3VydmUocGFyYW1zLmdldEtlbSgpKVxuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdVbnJlY29nbml6ZWQgSFBLRSBLRU0gaWRlbnRpZmllcicpO1xuICAgIH1cbiAgfVxufVxuIl19