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
JavaScript
/**
* @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=