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.

100 lines 11.4 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { AeadKeyTemplates } from '../aead/aead_key_templates'; import { PbEciesAeadDemParams, PbEciesAeadHkdfKeyFormat, PbEciesAeadHkdfParams, PbEciesHkdfKemParams, PbEllipticCurveType, PbHashType, PbKeyTemplate, PbOutputPrefixType, PbPointFormat } from '../internal/proto'; import * as HybridConfig from './hybrid_config'; /** * Pre-generated KeyTemplates for keys for hybrid encryption. * * One can use these templates to generate new Keyset with * KeysetHandle.generateNew method. To generate a new keyset that contains a * single EciesAeadHkdfKey, one can do: * * HybridConfig.Register(); * KeysetHandle handle = KeysetHandle.generateNew( * HybridKeyTemplates.eciesP256HkdfHmacSha256Aes128Gcm()); * * @final */ export class HybridKeyTemplates { /** * Returns a KeyTemplate that generates new instances of * EciesAeadHkdfPrivateKey with the following parameters: * * KEM: ECDH over NIST P-256 * DEM: AES128-GCM * KDF: HKDF-HMAC-SHA256 with an empty salt * OutputPrefixType: TINK * */ static eciesP256HkdfHmacSha256Aes128Gcm() { return createEciesAeadHkdfKeyTemplate_( /* curveType = */ PbEllipticCurveType.NIST_P256, /* hkdfHash = */ PbHashType.SHA256, /* pointFormat = */ PbPointFormat.UNCOMPRESSED, /* demKeyTemplate = */ AeadKeyTemplates.aes128Gcm(), /* hkdfSalt = */ new Uint8Array(0)); } /** * Returns a KeyTemplate that generates new instances of * EciesAeadHkdfPrivateKey with the following parameters: * * KEM: ECDH over NIST P-256 * DEM: AES128-CTR-HMAC-SHA256 with * - AES key size: 16 bytes * - AES CTR IV size: 16 bytes * - HMAC key size: 32 bytes * - HMAC tag size: 16 bytes * KDF: HKDF-HMAC-SHA256 with an empty salt * OutputPrefixType: TINK * */ static eciesP256HkdfHmacSha256Aes128CtrHmacSha256() { return createEciesAeadHkdfKeyTemplate_( /* curveType = */ PbEllipticCurveType.NIST_P256, /* hkdfHash = */ PbHashType.SHA256, /* pointFormat = */ PbPointFormat.UNCOMPRESSED, /* demKeyTemplate = */ AeadKeyTemplates.aes128CtrHmacSha256(), /* hkdfSalt = */ new Uint8Array(0)); } } function createEciesAeadHkdfKeyTemplate_(curveType, hkdfHash, pointFormat, demKeyTemplate, hkdfSalt) { // key format const keyFormat = (new PbEciesAeadHkdfKeyFormat()) .setParams(createEciesAeadHkdfParams_(curveType, hkdfHash, pointFormat, demKeyTemplate, hkdfSalt)); // key template const keyTemplate = (new PbKeyTemplate()) .setTypeUrl(HybridConfig.ECIES_AEAD_HKDF_PRIVATE_KEY_TYPE) .setValue(keyFormat.serializeBinary()) .setOutputPrefixType(PbOutputPrefixType.TINK); return keyTemplate; } function createEciesAeadHkdfParams_(curveType, hkdfHash, pointFormat, demKeyTemplate, hkdfSalt) { // KEM params const kemParams = (new PbEciesHkdfKemParams()) .setCurveType(curveType) .setHkdfHashType(hkdfHash) .setHkdfSalt(hkdfSalt); // DEM params const demParams = (new PbEciesAeadDemParams()).setAeadDem(demKeyTemplate); // params const params = (new PbEciesAeadHkdfParams()) .setKemParams(kemParams) .setDemParams(demParams) .setEcPointFormat(pointFormat); return params; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlicmlkX2tleV90ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9oeWJyaWQvaHlicmlkX2tleV90ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpOLE9BQU8sS0FBSyxZQUFZLE1BQU0saUJBQWlCLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsZ0NBQWdDO1FBQ3JDLE9BQU8sK0JBQStCO1FBQ2xDLGlCQUFpQjtRQUNqQixtQkFBbUIsQ0FBQyxTQUFTO1FBQzdCLGdCQUFnQjtRQUNoQixVQUFVLENBQUMsTUFBTTtRQUNqQixtQkFBbUI7UUFDbkIsYUFBYSxDQUFDLFlBQVk7UUFDMUIsc0JBQXNCO1FBQ3RCLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtRQUM1QixnQkFBZ0I7UUFDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILE1BQU0sQ0FBQywwQ0FBMEM7UUFDL0MsT0FBTywrQkFBK0I7UUFDbEMsaUJBQWlCO1FBQ2pCLG1CQUFtQixDQUFDLFNBQVM7UUFDN0IsZ0JBQWdCO1FBQ2hCLFVBQVUsQ0FBQyxNQUFNO1FBQ2pCLG1CQUFtQjtRQUNuQixhQUFhLENBQUMsWUFBWTtRQUMxQixzQkFBc0I7UUFDdEIsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUU7UUFDdEMsZ0JBQWdCO1FBQ2hCLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsU0FBUywrQkFBK0IsQ0FDcEMsU0FBOEIsRUFBRSxRQUFvQixFQUNwRCxXQUEwQixFQUFFLGNBQTZCLEVBQ3pELFFBQW9CO0lBQ3RCLGFBQWE7SUFDYixNQUFNLFNBQVMsR0FDWCxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQztTQUMzQixTQUFTLENBQUMsMEJBQTBCLENBQ2pDLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRXpFLGVBQWU7SUFDZixNQUFNLFdBQVcsR0FDYixDQUFDLElBQUksYUFBYSxFQUFFLENBQUM7U0FDaEIsVUFBVSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsQ0FBQztTQUN6RCxRQUFRLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3JDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUMvQixTQUE4QixFQUFFLFFBQW9CLEVBQ3BELFdBQTBCLEVBQUUsY0FBNkIsRUFDekQsUUFBb0I7SUFDdEIsYUFBYTtJQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1NBQ3ZCLFlBQVksQ0FBQyxTQUFTLENBQUM7U0FDdkIsZUFBZSxDQUFDLFFBQVEsQ0FBQztTQUN6QixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0MsYUFBYTtJQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTFFLFNBQVM7SUFDVCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQztTQUN4QixZQUFZLENBQUMsU0FBUyxDQUFDO1NBQ3ZCLFlBQVksQ0FBQyxTQUFTLENBQUM7U0FDdkIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtBZWFkS2V5VGVtcGxhdGVzfSBmcm9tICcuLi9hZWFkL2FlYWRfa2V5X3RlbXBsYXRlcyc7XG5pbXBvcnQge1BiRWNpZXNBZWFkRGVtUGFyYW1zLCBQYkVjaWVzQWVhZEhrZGZLZXlGb3JtYXQsIFBiRWNpZXNBZWFkSGtkZlBhcmFtcywgUGJFY2llc0hrZGZLZW1QYXJhbXMsIFBiRWxsaXB0aWNDdXJ2ZVR5cGUsIFBiSGFzaFR5cGUsIFBiS2V5VGVtcGxhdGUsIFBiT3V0cHV0UHJlZml4VHlwZSwgUGJQb2ludEZvcm1hdH0gZnJvbSAnLi4vaW50ZXJuYWwvcHJvdG8nO1xuXG5pbXBvcnQgKiBhcyBIeWJyaWRDb25maWcgZnJvbSAnLi9oeWJyaWRfY29uZmlnJztcblxuLyoqXG4gKiBQcmUtZ2VuZXJhdGVkIEtleVRlbXBsYXRlcyBmb3Iga2V5cyBmb3IgaHlicmlkIGVuY3J5cHRpb24uXG4gKlxuICogT25lIGNhbiB1c2UgdGhlc2UgdGVtcGxhdGVzIHRvIGdlbmVyYXRlIG5ldyBLZXlzZXQgd2l0aFxuICogS2V5c2V0SGFuZGxlLmdlbmVyYXRlTmV3IG1ldGhvZC4gVG8gZ2VuZXJhdGUgYSBuZXcga2V5c2V0IHRoYXQgY29udGFpbnMgYVxuICogc2luZ2xlIEVjaWVzQWVhZEhrZGZLZXksIG9uZSBjYW4gZG86XG4gKlxuICogSHlicmlkQ29uZmlnLlJlZ2lzdGVyKCk7XG4gKiBLZXlzZXRIYW5kbGUgaGFuZGxlID0gS2V5c2V0SGFuZGxlLmdlbmVyYXRlTmV3KFxuICogICAgIEh5YnJpZEtleVRlbXBsYXRlcy5lY2llc1AyNTZIa2RmSG1hY1NoYTI1NkFlczEyOEdjbSgpKTtcbiAqXG4gKiBAZmluYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEh5YnJpZEtleVRlbXBsYXRlcyB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgS2V5VGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbmV3IGluc3RhbmNlcyBvZlxuICAgKiBFY2llc0FlYWRIa2RmUHJpdmF0ZUtleSB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAgICpcbiAgICogICBLRU06IEVDREggb3ZlciBOSVNUIFAtMjU2XG4gICAqICAgREVNOiBBRVMxMjgtR0NNXG4gICAqICAgS0RGOiBIS0RGLUhNQUMtU0hBMjU2IHdpdGggYW4gZW1wdHkgc2FsdFxuICAgKiAgIE91dHB1dFByZWZpeFR5cGU6IFRJTktcbiAgICpcbiAgICovXG4gIHN0YXRpYyBlY2llc1AyNTZIa2RmSG1hY1NoYTI1NkFlczEyOEdjbSgpOiBQYktleVRlbXBsYXRlIHtcbiAgICByZXR1cm4gY3JlYXRlRWNpZXNBZWFkSGtkZktleVRlbXBsYXRlXyhcbiAgICAgICAgLyogY3VydmVUeXBlID0gKi9cbiAgICAgICAgUGJFbGxpcHRpY0N1cnZlVHlwZS5OSVNUX1AyNTYsXG4gICAgICAgIC8qIGhrZGZIYXNoID0gKi9cbiAgICAgICAgUGJIYXNoVHlwZS5TSEEyNTYsXG4gICAgICAgIC8qIHBvaW50Rm9ybWF0ID0gKi9cbiAgICAgICAgUGJQb2ludEZvcm1hdC5VTkNPTVBSRVNTRUQsXG4gICAgICAgIC8qIGRlbUtleVRlbXBsYXRlID0gKi9cbiAgICAgICAgQWVhZEtleVRlbXBsYXRlcy5hZXMxMjhHY20oKSxcbiAgICAgICAgLyogaGtkZlNhbHQgPSAqL1xuICAgICAgICBuZXcgVWludDhBcnJheSgwKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEtleVRlbXBsYXRlIHRoYXQgZ2VuZXJhdGVzIG5ldyBpbnN0YW5jZXMgb2ZcbiAgICogRWNpZXNBZWFkSGtkZlByaXZhdGVLZXkgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gICAqXG4gICAqICAgS0VNOiBFQ0RIIG92ZXIgTklTVCBQLTI1NlxuICAgKiAgIERFTTogQUVTMTI4LUNUUi1ITUFDLVNIQTI1NiB3aXRoXG4gICAqICAgICAgICAtIEFFUyBrZXkgc2l6ZTogMTYgYnl0ZXNcbiAgICogICAgICAgIC0gQUVTIENUUiBJViBzaXplOiAxNiBieXRlc1xuICAgKiAgICAgICAgLSBITUFDIGtleSBzaXplOiAzMiBieXRlc1xuICAgKiAgICAgICAgLSBITUFDIHRhZyBzaXplOiAxNiBieXRlc1xuICAgKiAgIEtERjogSEtERi1ITUFDLVNIQTI1NiB3aXRoIGFuIGVtcHR5IHNhbHRcbiAgICogICBPdXRwdXRQcmVmaXhUeXBlOiBUSU5LXG4gICAqXG4gICAqL1xuICBzdGF0aWMgZWNpZXNQMjU2SGtkZkhtYWNTaGEyNTZBZXMxMjhDdHJIbWFjU2hhMjU2KCk6IFBiS2V5VGVtcGxhdGUge1xuICAgIHJldHVybiBjcmVhdGVFY2llc0FlYWRIa2RmS2V5VGVtcGxhdGVfKFxuICAgICAgICAvKiBjdXJ2ZVR5cGUgPSAqL1xuICAgICAgICBQYkVsbGlwdGljQ3VydmVUeXBlLk5JU1RfUDI1NixcbiAgICAgICAgLyogaGtkZkhhc2ggPSAqL1xuICAgICAgICBQYkhhc2hUeXBlLlNIQTI1NixcbiAgICAgICAgLyogcG9pbnRGb3JtYXQgPSAqL1xuICAgICAgICBQYlBvaW50Rm9ybWF0LlVOQ09NUFJFU1NFRCxcbiAgICAgICAgLyogZGVtS2V5VGVtcGxhdGUgPSAqL1xuICAgICAgICBBZWFkS2V5VGVtcGxhdGVzLmFlczEyOEN0ckhtYWNTaGEyNTYoKSxcbiAgICAgICAgLyogaGtkZlNhbHQgPSAqL1xuICAgICAgICBuZXcgVWludDhBcnJheSgwKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWNpZXNBZWFkSGtkZktleVRlbXBsYXRlXyhcbiAgICBjdXJ2ZVR5cGU6IFBiRWxsaXB0aWNDdXJ2ZVR5cGUsIGhrZGZIYXNoOiBQYkhhc2hUeXBlLFxuICAgIHBvaW50Rm9ybWF0OiBQYlBvaW50Rm9ybWF0LCBkZW1LZXlUZW1wbGF0ZTogUGJLZXlUZW1wbGF0ZSxcbiAgICBoa2RmU2FsdDogVWludDhBcnJheSk6IFBiS2V5VGVtcGxhdGUge1xuICAvLyBrZXkgZm9ybWF0XG4gIGNvbnN0IGtleUZvcm1hdCA9XG4gICAgICAobmV3IFBiRWNpZXNBZWFkSGtkZktleUZvcm1hdCgpKVxuICAgICAgICAgIC5zZXRQYXJhbXMoY3JlYXRlRWNpZXNBZWFkSGtkZlBhcmFtc18oXG4gICAgICAgICAgICAgIGN1cnZlVHlwZSwgaGtkZkhhc2gsIHBvaW50Rm9ybWF0LCBkZW1LZXlUZW1wbGF0ZSwgaGtkZlNhbHQpKTtcblxuICAvLyBrZXkgdGVtcGxhdGVcbiAgY29uc3Qga2V5VGVtcGxhdGUgPVxuICAgICAgKG5ldyBQYktleVRlbXBsYXRlKCkpXG4gICAgICAgICAgLnNldFR5cGVVcmwoSHlicmlkQ29uZmlnLkVDSUVTX0FFQURfSEtERl9QUklWQVRFX0tFWV9UWVBFKVxuICAgICAgICAgIC5zZXRWYWx1ZShrZXlGb3JtYXQuc2VyaWFsaXplQmluYXJ5KCkpXG4gICAgICAgICAgLnNldE91dHB1dFByZWZpeFR5cGUoUGJPdXRwdXRQcmVmaXhUeXBlLlRJTkspO1xuICByZXR1cm4ga2V5VGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVjaWVzQWVhZEhrZGZQYXJhbXNfKFxuICAgIGN1cnZlVHlwZTogUGJFbGxpcHRpY0N1cnZlVHlwZSwgaGtkZkhhc2g6IFBiSGFzaFR5cGUsXG4gICAgcG9pbnRGb3JtYXQ6IFBiUG9pbnRGb3JtYXQsIGRlbUtleVRlbXBsYXRlOiBQYktleVRlbXBsYXRlLFxuICAgIGhrZGZTYWx0OiBVaW50OEFycmF5KTogUGJFY2llc0FlYWRIa2RmUGFyYW1zIHtcbiAgLy8gS0VNIHBhcmFtc1xuICBjb25zdCBrZW1QYXJhbXMgPSAobmV3IFBiRWNpZXNIa2RmS2VtUGFyYW1zKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q3VydmVUeXBlKGN1cnZlVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRIa2RmSGFzaFR5cGUoaGtkZkhhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0SGtkZlNhbHQoaGtkZlNhbHQpO1xuXG4gIC8vIERFTSBwYXJhbXNcbiAgY29uc3QgZGVtUGFyYW1zID0gKG5ldyBQYkVjaWVzQWVhZERlbVBhcmFtcygpKS5zZXRBZWFkRGVtKGRlbUtleVRlbXBsYXRlKTtcblxuICAvLyBwYXJhbXNcbiAgY29uc3QgcGFyYW1zID0gKG5ldyBQYkVjaWVzQWVhZEhrZGZQYXJhbXMoKSlcbiAgICAgICAgICAgICAgICAgICAgIC5zZXRLZW1QYXJhbXMoa2VtUGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICAgLnNldERlbVBhcmFtcyhkZW1QYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAuc2V0RWNQb2ludEZvcm1hdChwb2ludEZvcm1hdCk7XG4gIHJldHVybiBwYXJhbXM7XG59XG4iXX0=