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.

86 lines 11.6 kB
/** * @license * Copyright 2023 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { InvalidArgumentsException } from '../../../exception/invalid_arguments_exception'; import { PbHpkeAead, PbHpkeKdf, PbHpkeKem } from '../../../internal/proto'; import * as ellipticCurves from '../../../subtle/elliptic_curves'; import { AesGcmHpkeAead } from './aes_gcm_hpke_aead'; import { HkdfHpkeKdf } from './hkdf_hpke_kdf'; import * as hpkeUtil from './hpke_util'; import { NistCurvesHpkeKem } from './nist_curves_hpke_kem'; /** * Helper class for creating HPKE primitives from either algorithm identifiers * or HpkeParams. */ export class HpkePrimitiveFactory { constructor() { } /** Returns an HpkeKem primitive corresponding to the kemId. */ static createKemFromId(kemId) { switch (kemId) { case hpkeUtil.P256_HKDF_SHA256_KEM_ID: return NistCurvesHpkeKem.fromCurve(ellipticCurves.CurveType.P256); case hpkeUtil.P521_HKDF_SHA512_KEM_ID: return NistCurvesHpkeKem.fromCurve(ellipticCurves.CurveType.P521); default: throw new InvalidArgumentsException('Unrecognized HPKE KEM identifier'); } } /** Returns an HpkeKem primitive corresponding to the given parameters. */ static createKemFromParams(params) { switch (params.getKem()) { case PbHpkeKem.DHKEM_P256_HKDF_SHA256: return NistCurvesHpkeKem.fromCurve(ellipticCurves.CurveType.P256); case PbHpkeKem.DHKEM_P521_HKDF_SHA512: return NistCurvesHpkeKem.fromCurve(ellipticCurves.CurveType.P521); default: throw new InvalidArgumentsException('Unrecognized HPKE KEM identifier'); } } /** Returns an HpkeKdf primitive corresponding to the kdfId. */ static createKdfFromId(kdfId) { switch (kdfId) { case hpkeUtil.HKDF_SHA256_KDF_ID: return new HkdfHpkeKdf('SHA-256'); case hpkeUtil.HKDF_SHA512_KDF_ID: return new HkdfHpkeKdf('SHA-512'); default: throw new InvalidArgumentsException('Unrecognized HPKE KDF identifier'); } } /** Returns an HpkeKdf primitive corresponding to the given parameters. */ static createKdfFromParams(params) { switch (params.getKdf()) { case PbHpkeKdf.HKDF_SHA256: return new HkdfHpkeKdf('SHA-256'); case PbHpkeKdf.HKDF_SHA512: return new HkdfHpkeKdf('SHA-512'); default: throw new InvalidArgumentsException('Unrecognized HPKE KDF identifier'); } } /** Returns an HpkeAead primitive corresponding to the aeadId. */ static createAeadFromId(aeadId) { switch (aeadId) { case hpkeUtil.AES_128_GCM_AEAD_ID: return new AesGcmHpkeAead(16); case hpkeUtil.AES_256_GCM_AEAD_ID: return new AesGcmHpkeAead(32); default: throw new InvalidArgumentsException('Unrecognized HPKE AEAD identifier'); } } /** Returns an HpkeAead primitive corresponding to the given parameters. */ static createAeadFromParams(params) { switch (params.getAead()) { case PbHpkeAead.AES_128_GCM: return new AesGcmHpkeAead(16); case PbHpkeAead.AES_256_GCM: return new AesGcmHpkeAead(32); default: throw new InvalidArgumentsException('Unrecognized HPKE AEAD identifier'); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHBrZV9wcmltaXRpdmVfZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2h5YnJpZC9pbnRlcm5hbC9ocGtlL2hwa2VfcHJpbWl0aXZlX2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxjQUFjLE1BQU0saUNBQWlDLENBQUM7QUFFbEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUk1QyxPQUFPLEtBQUssUUFBUSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLGdCQUF1QixDQUFDO0lBRXhCLCtEQUErRDtJQUMvRCxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQWlCO1FBQ3RDLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxRQUFRLENBQUMsdUJBQXVCO2dCQUNuQyxPQUFPLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLEtBQUssUUFBUSxDQUFDLHVCQUF1QjtnQkFDbkMsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRTtnQkFDRSxNQUFNLElBQUkseUJBQXlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQW9CO1FBQzdDLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3ZCLEtBQUssU0FBUyxDQUFDLHNCQUFzQjtnQkFDbkMsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxLQUFLLFNBQVMsQ0FBQyxzQkFBc0I7Z0JBQ25DLE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEU7Z0JBQ0UsTUFBTSxJQUFJLHlCQUF5QixDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBaUI7UUFDdEMsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFFBQVEsQ0FBQyxrQkFBa0I7Z0JBQzlCLE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsS0FBSyxRQUFRLENBQUMsa0JBQWtCO2dCQUM5QixPQUFPLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDO2dCQUNFLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBb0I7UUFDN0MsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsS0FBSyxTQUFTLENBQUMsV0FBVztnQkFDeEIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxLQUFLLFNBQVMsQ0FBQyxXQUFXO2dCQUN4QixPQUFPLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDO2dCQUNFLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBa0I7UUFDeEMsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLFFBQVEsQ0FBQyxtQkFBbUI7Z0JBQy9CLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsS0FBSyxRQUFRLENBQUMsbUJBQW1CO2dCQUMvQixPQUFPLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDO2dCQUNFLE1BQU0sSUFBSSx5QkFBeUIsQ0FDL0IsbUNBQW1DLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQW9CO1FBQzlDLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLEtBQUssVUFBVSxDQUFDLFdBQVc7Z0JBQ3pCLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsS0FBSyxVQUFVLENBQUMsV0FBVztnQkFDekIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQztnQkFDRSxNQUFNLElBQUkseUJBQXlCLENBQy9CLG1DQUFtQyxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7SW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbn0gZnJvbSAnLi4vLi4vLi4vZXhjZXB0aW9uL2ludmFsaWRfYXJndW1lbnRzX2V4Y2VwdGlvbic7XG5pbXBvcnQge1BiSHBrZUFlYWQsIFBiSHBrZUtkZiwgUGJIcGtlS2VtLCBQYkhwa2VQYXJhbXN9IGZyb20gJy4uLy4uLy4uL2ludGVybmFsL3Byb3RvJztcbmltcG9ydCAqIGFzIGVsbGlwdGljQ3VydmVzIGZyb20gJy4uLy4uLy4uL3N1YnRsZS9lbGxpcHRpY19jdXJ2ZXMnO1xuXG5pbXBvcnQge0Flc0djbUhwa2VBZWFkfSBmcm9tICcuL2Flc19nY21faHBrZV9hZWFkJztcbmltcG9ydCB7SGtkZkhwa2VLZGZ9IGZyb20gJy4vaGtkZl9ocGtlX2tkZic7XG5pbXBvcnQge0hwa2VBZWFkfSBmcm9tICcuL2hwa2VfYWVhZCc7XG5pbXBvcnQge0hwa2VLZGZ9IGZyb20gJy4vaHBrZV9rZGYnO1xuaW1wb3J0IHtIcGtlS2VtfSBmcm9tICcuL2hwa2Vfa2VtJztcbmltcG9ydCAqIGFzIGhwa2VVdGlsIGZyb20gJy4vaHBrZV91dGlsJztcbmltcG9ydCB7TmlzdEN1cnZlc0hwa2VLZW19IGZyb20gJy4vbmlzdF9jdXJ2ZXNfaHBrZV9rZW0nO1xuXG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBIUEtFIHByaW1pdGl2ZXMgZnJvbSBlaXRoZXIgYWxnb3JpdGhtIGlkZW50aWZpZXJzXG4gKiBvciBIcGtlUGFyYW1zLlxuICovXG5leHBvcnQgY2xhc3MgSHBrZVByaW1pdGl2ZUZhY3Rvcnkge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKiogUmV0dXJucyBhbiBIcGtlS2VtIHByaW1pdGl2ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZW1JZC4gKi9cbiAgc3RhdGljIGNyZWF0ZUtlbUZyb21JZChrZW1JZDogVWludDhBcnJheSk6IEhwa2VLZW0ge1xuICAgIHN3aXRjaCAoa2VtSWQpIHtcbiAgICAgIGNhc2UgaHBrZVV0aWwuUDI1Nl9IS0RGX1NIQTI1Nl9LRU1fSUQ6XG4gICAgICAgIHJldHVybiBOaXN0Q3VydmVzSHBrZUtlbS5mcm9tQ3VydmUoZWxsaXB0aWNDdXJ2ZXMuQ3VydmVUeXBlLlAyNTYpO1xuICAgICAgY2FzZSBocGtlVXRpbC5QNTIxX0hLREZfU0hBNTEyX0tFTV9JRDpcbiAgICAgICAgcmV0dXJuIE5pc3RDdXJ2ZXNIcGtlS2VtLmZyb21DdXJ2ZShlbGxpcHRpY0N1cnZlcy5DdXJ2ZVR5cGUuUDUyMSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbignVW5yZWNvZ25pemVkIEhQS0UgS0VNIGlkZW50aWZpZXInKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmV0dXJucyBhbiBIcGtlS2VtIHByaW1pdGl2ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAqL1xuICBzdGF0aWMgY3JlYXRlS2VtRnJvbVBhcmFtcyhwYXJhbXM6IFBiSHBrZVBhcmFtcyk6IEhwa2VLZW0ge1xuICAgIHN3aXRjaCAocGFyYW1zLmdldEtlbSgpKSB7XG4gICAgICBjYXNlIFBiSHBrZUtlbS5ESEtFTV9QMjU2X0hLREZfU0hBMjU2OlxuICAgICAgICByZXR1cm4gTmlzdEN1cnZlc0hwa2VLZW0uZnJvbUN1cnZlKGVsbGlwdGljQ3VydmVzLkN1cnZlVHlwZS5QMjU2KTtcbiAgICAgIGNhc2UgUGJIcGtlS2VtLkRIS0VNX1A1MjFfSEtERl9TSEE1MTI6XG4gICAgICAgIHJldHVybiBOaXN0Q3VydmVzSHBrZUtlbS5mcm9tQ3VydmUoZWxsaXB0aWNDdXJ2ZXMuQ3VydmVUeXBlLlA1MjEpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudHNFeGNlcHRpb24oJ1VucmVjb2duaXplZCBIUEtFIEtFTSBpZGVudGlmaWVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybnMgYW4gSHBrZUtkZiBwcmltaXRpdmUgY29ycmVzcG9uZGluZyB0byB0aGUga2RmSWQuICovXG4gIHN0YXRpYyBjcmVhdGVLZGZGcm9tSWQoa2RmSWQ6IFVpbnQ4QXJyYXkpOiBIcGtlS2RmIHtcbiAgICBzd2l0Y2ggKGtkZklkKSB7XG4gICAgICBjYXNlIGhwa2VVdGlsLkhLREZfU0hBMjU2X0tERl9JRDpcbiAgICAgICAgcmV0dXJuIG5ldyBIa2RmSHBrZUtkZignU0hBLTI1NicpO1xuICAgICAgY2FzZSBocGtlVXRpbC5IS0RGX1NIQTUxMl9LREZfSUQ6XG4gICAgICAgIHJldHVybiBuZXcgSGtkZkhwa2VLZGYoJ1NIQS01MTInKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCdVbnJlY29nbml6ZWQgSFBLRSBLREYgaWRlbnRpZmllcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGFuIEhwa2VLZGYgcHJpbWl0aXZlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtZXRlcnMuICovXG4gIHN0YXRpYyBjcmVhdGVLZGZGcm9tUGFyYW1zKHBhcmFtczogUGJIcGtlUGFyYW1zKTogSHBrZUtkZiB7XG4gICAgc3dpdGNoIChwYXJhbXMuZ2V0S2RmKCkpIHtcbiAgICAgIGNhc2UgUGJIcGtlS2RmLkhLREZfU0hBMjU2OlxuICAgICAgICByZXR1cm4gbmV3IEhrZGZIcGtlS2RmKCdTSEEtMjU2Jyk7XG4gICAgICBjYXNlIFBiSHBrZUtkZi5IS0RGX1NIQTUxMjpcbiAgICAgICAgcmV0dXJuIG5ldyBIa2RmSHBrZUtkZignU0hBLTUxMicpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudHNFeGNlcHRpb24oJ1VucmVjb2duaXplZCBIUEtFIEtERiBpZGVudGlmaWVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybnMgYW4gSHBrZUFlYWQgcHJpbWl0aXZlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFlYWRJZC4gKi9cbiAgc3RhdGljIGNyZWF0ZUFlYWRGcm9tSWQoYWVhZElkOiBVaW50OEFycmF5KTogSHBrZUFlYWQge1xuICAgIHN3aXRjaCAoYWVhZElkKSB7XG4gICAgICBjYXNlIGhwa2VVdGlsLkFFU18xMjhfR0NNX0FFQURfSUQ6XG4gICAgICAgIHJldHVybiBuZXcgQWVzR2NtSHBrZUFlYWQoMTYpO1xuICAgICAgY2FzZSBocGtlVXRpbC5BRVNfMjU2X0dDTV9BRUFEX0lEOlxuICAgICAgICByZXR1cm4gbmV3IEFlc0djbUhwa2VBZWFkKDMyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKFxuICAgICAgICAgICAgJ1VucmVjb2duaXplZCBIUEtFIEFFQUQgaWRlbnRpZmllcicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGFuIEhwa2VBZWFkIHByaW1pdGl2ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAqL1xuICBzdGF0aWMgY3JlYXRlQWVhZEZyb21QYXJhbXMocGFyYW1zOiBQYkhwa2VQYXJhbXMpOiBIcGtlQWVhZCB7XG4gICAgc3dpdGNoIChwYXJhbXMuZ2V0QWVhZCgpKSB7XG4gICAgICBjYXNlIFBiSHBrZUFlYWQuQUVTXzEyOF9HQ006XG4gICAgICAgIHJldHVybiBuZXcgQWVzR2NtSHBrZUFlYWQoMTYpO1xuICAgICAgY2FzZSBQYkhwa2VBZWFkLkFFU18yNTZfR0NNOlxuICAgICAgICByZXR1cm4gbmV3IEFlc0djbUhwa2VBZWFkKDMyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKFxuICAgICAgICAgICAgJ1VucmVjb2duaXplZCBIUEtFIEFFQUQgaWRlbnRpZmllcicpO1xuICAgIH1cbiAgfVxufVxuIl19