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.
102 lines • 11.3 kB
JavaScript
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { PbHpkeAead, PbHpkeKdf, PbHpkeKem, PbHpkeKeyFormat, PbHpkeParams, PbKeyTemplate, PbOutputPrefixType } from '../../../internal/proto';
import { HpkePrivateKeyManager } from './hpke_private_key_manager';
/**
* Pre-generated KeyTemplates for keys for HPKE.
*
* One can use these templates to generate new Keyset with
* KeysetHandle.generateNew method. To generate a new keyset that contains a
* single HpkeKey, one can do:
*
* HybridConfig.Register();
* KeysetHandle handle = KeysetHandle.generateNew(
* hpkeP256HkdfSha256Aes128Gcm());
*/
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P256_HKDF_SHA256
* KDF: HKDF_SHA256
* AEAD: AES_128_GCM
* OutputPrefixType: RAW
*/
export function hpkeP256HkdfSha256Aes128GcmRaw() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P256_HKDF_SHA256, PbHpkeKdf.HKDF_SHA256, PbHpkeAead.AES_128_GCM, PbOutputPrefixType.RAW);
}
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P256_HKDF_SHA256
* KDF: HKDF_SHA256
* AEAD: AES_128_GCM
* OutputPrefixType: TINK
*/
export function hpkeP256HkdfSha256Aes128Gcm() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P256_HKDF_SHA256, PbHpkeKdf.HKDF_SHA256, PbHpkeAead.AES_128_GCM, PbOutputPrefixType.TINK);
}
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P256_HKDF_SHA256
* KDF: HKDF_SHA256
* AEAD: AES_256_GCM
* OutputPrefixType: RAW
*/
export function hpkeP256HkdfSha256Aes256GcmRaw() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P256_HKDF_SHA256, PbHpkeKdf.HKDF_SHA256, PbHpkeAead.AES_256_GCM, PbOutputPrefixType.RAW);
}
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P256_HKDF_SHA256
* KDF: HKDF_SHA256
* AEAD: AES_256_GCM
* OutputPrefixType: TINK
*/
export function hpkeP256HkdfSha256Aes256Gcm() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P256_HKDF_SHA256, PbHpkeKdf.HKDF_SHA256, PbHpkeAead.AES_256_GCM, PbOutputPrefixType.TINK);
}
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P521_HKDF_SHA512
* KDF: HKDF_SHA256
* AEAD: AES_256_GCM
* OutputPrefixType: RAW
*/
export function hpkeP521HkdfSha512Aes256GcmRaw() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P521_HKDF_SHA512, PbHpkeKdf.HKDF_SHA512, PbHpkeAead.AES_256_GCM, PbOutputPrefixType.RAW);
}
/**
* Returns a KeyTemplate that generates new instances of
* HpkePrivateKey with the following parameters:
*
* KEM: DHKEM_P521_HKDF_SHA512
* KDF: HKDF_SHA256
* AEAD: AES_256_GCM
* OutputPrefixType: TINK
*/
export function hpkeP521HkdfSha512Aes256Gcm() {
return createHpkeKeyTemplate(PbHpkeKem.DHKEM_P521_HKDF_SHA512, PbHpkeKdf.HKDF_SHA512, PbHpkeAead.AES_256_GCM, PbOutputPrefixType.TINK);
}
function createHpkeKeyTemplate(kem, kdf, aead, outputPrefix) {
// key format
const keyFormat = (new PbHpkeKeyFormat())
.setParams(new PbHpkeParams().setKem(kem).setKdf(kdf).setAead(aead));
// key template
const keyTemplate = (new PbKeyTemplate())
.setTypeUrl(HpkePrivateKeyManager.KEY_TYPE)
.setValue(keyFormat.serializeBinary())
.setOutputPrefixType(outputPrefix);
return keyTemplate;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHBrZV9rZXlfdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vaHlicmlkL2ludGVybmFsL2hwa2UvaHBrZV9rZXlfdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUzSSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRTs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCO0lBQzVDLE9BQU8scUJBQXFCLENBQ3hCLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUN2RCxVQUFVLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFDRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSwyQkFBMkI7SUFDekMsT0FBTyxxQkFBcUIsQ0FDeEIsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ3ZELFVBQVUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUNEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QjtJQUM1QyxPQUFPLHFCQUFxQixDQUN4QixTQUFTLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFDdkQsVUFBVSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCO0lBQ3pDLE9BQU8scUJBQXFCLENBQ3hCLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUN2RCxVQUFVLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSw4QkFBOEI7SUFDNUMsT0FBTyxxQkFBcUIsQ0FDeEIsU0FBUyxDQUFDLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ3ZELFVBQVUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQjtJQUN6QyxPQUFPLHFCQUFxQixDQUN4QixTQUFTLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFDdkQsVUFBVSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDMUIsR0FBYyxFQUFFLEdBQWMsRUFBRSxJQUFnQixFQUNoRCxZQUFnQztJQUNsQyxhQUFhO0lBQ2IsTUFBTSxTQUFTLEdBQ1gsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1NBQ2xCLFNBQVMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFN0UsZUFBZTtJQUNmLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztTQUNoQixVQUFVLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDO1NBQzFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDckMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtQYkhwa2VBZWFkLCBQYkhwa2VLZGYsIFBiSHBrZUtlbSwgUGJIcGtlS2V5Rm9ybWF0LCBQYkhwa2VQYXJhbXMsIFBiS2V5VGVtcGxhdGUsIFBiT3V0cHV0UHJlZml4VHlwZX0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWwvcHJvdG8nO1xuXG5pbXBvcnQge0hwa2VQcml2YXRlS2V5TWFuYWdlcn0gZnJvbSAnLi9ocGtlX3ByaXZhdGVfa2V5X21hbmFnZXInO1xuXG4vKipcbiAqIFByZS1nZW5lcmF0ZWQgS2V5VGVtcGxhdGVzIGZvciBrZXlzIGZvciBIUEtFLlxuICpcbiAqIE9uZSBjYW4gdXNlIHRoZXNlIHRlbXBsYXRlcyB0byBnZW5lcmF0ZSBuZXcgS2V5c2V0IHdpdGhcbiAqIEtleXNldEhhbmRsZS5nZW5lcmF0ZU5ldyBtZXRob2QuIFRvIGdlbmVyYXRlIGEgbmV3IGtleXNldCB0aGF0IGNvbnRhaW5zIGFcbiAqIHNpbmdsZSBIcGtlS2V5LCBvbmUgY2FuIGRvOlxuICpcbiAqIEh5YnJpZENvbmZpZy5SZWdpc3RlcigpO1xuICogS2V5c2V0SGFuZGxlIGhhbmRsZSA9IEtleXNldEhhbmRsZS5nZW5lcmF0ZU5ldyhcbiAqICAgICBocGtlUDI1NkhrZGZTaGEyNTZBZXMxMjhHY20oKSk7XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgS2V5VGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbmV3IGluc3RhbmNlcyBvZlxuICogSHBrZVByaXZhdGVLZXkgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICogICBLRU06IERIS0VNX1AyNTZfSEtERl9TSEEyNTZcbiAqICAgS0RGOiBIS0RGX1NIQTI1NlxuICogICBBRUFEOiBBRVNfMTI4X0dDTVxuICogICBPdXRwdXRQcmVmaXhUeXBlOiBSQVdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhwa2VQMjU2SGtkZlNoYTI1NkFlczEyOEdjbVJhdygpOiBQYktleVRlbXBsYXRlIHtcbiAgcmV0dXJuIGNyZWF0ZUhwa2VLZXlUZW1wbGF0ZShcbiAgICAgIFBiSHBrZUtlbS5ESEtFTV9QMjU2X0hLREZfU0hBMjU2LCBQYkhwa2VLZGYuSEtERl9TSEEyNTYsXG4gICAgICBQYkhwa2VBZWFkLkFFU18xMjhfR0NNLCBQYk91dHB1dFByZWZpeFR5cGUuUkFXKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEtleVRlbXBsYXRlIHRoYXQgZ2VuZXJhdGVzIG5ldyBpbnN0YW5jZXMgb2ZcbiAqIEhwa2VQcml2YXRlS2V5IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqICAgS0VNOiBESEtFTV9QMjU2X0hLREZfU0hBMjU2XG4gKiAgIEtERjogSEtERl9TSEEyNTZcbiAqICAgQUVBRDogQUVTXzEyOF9HQ01cbiAqICAgT3V0cHV0UHJlZml4VHlwZTogVElOS1xuICovXG5leHBvcnQgZnVuY3Rpb24gaHBrZVAyNTZIa2RmU2hhMjU2QWVzMTI4R2NtKCk6IFBiS2V5VGVtcGxhdGUge1xuICByZXR1cm4gY3JlYXRlSHBrZUtleVRlbXBsYXRlKFxuICAgICAgUGJIcGtlS2VtLkRIS0VNX1AyNTZfSEtERl9TSEEyNTYsIFBiSHBrZUtkZi5IS0RGX1NIQTI1NixcbiAgICAgIFBiSHBrZUFlYWQuQUVTXzEyOF9HQ00sIFBiT3V0cHV0UHJlZml4VHlwZS5USU5LKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEtleVRlbXBsYXRlIHRoYXQgZ2VuZXJhdGVzIG5ldyBpbnN0YW5jZXMgb2ZcbiAqIEhwa2VQcml2YXRlS2V5IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqICAgS0VNOiBESEtFTV9QMjU2X0hLREZfU0hBMjU2XG4gKiAgIEtERjogSEtERl9TSEEyNTZcbiAqICAgQUVBRDogQUVTXzI1Nl9HQ01cbiAqICAgT3V0cHV0UHJlZml4VHlwZTogUkFXXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBocGtlUDI1NkhrZGZTaGEyNTZBZXMyNTZHY21SYXcoKTogUGJLZXlUZW1wbGF0ZSB7XG4gIHJldHVybiBjcmVhdGVIcGtlS2V5VGVtcGxhdGUoXG4gICAgICBQYkhwa2VLZW0uREhLRU1fUDI1Nl9IS0RGX1NIQTI1NiwgUGJIcGtlS2RmLkhLREZfU0hBMjU2LFxuICAgICAgUGJIcGtlQWVhZC5BRVNfMjU2X0dDTSwgUGJPdXRwdXRQcmVmaXhUeXBlLlJBVyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEtleVRlbXBsYXRlIHRoYXQgZ2VuZXJhdGVzIG5ldyBpbnN0YW5jZXMgb2ZcbiAqIEhwa2VQcml2YXRlS2V5IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqICAgS0VNOiBESEtFTV9QMjU2X0hLREZfU0hBMjU2XG4gKiAgIEtERjogSEtERl9TSEEyNTZcbiAqICAgQUVBRDogQUVTXzI1Nl9HQ01cbiAqICAgT3V0cHV0UHJlZml4VHlwZTogVElOS1xuICovXG5leHBvcnQgZnVuY3Rpb24gaHBrZVAyNTZIa2RmU2hhMjU2QWVzMjU2R2NtKCk6IFBiS2V5VGVtcGxhdGUge1xuICByZXR1cm4gY3JlYXRlSHBrZUtleVRlbXBsYXRlKFxuICAgICAgUGJIcGtlS2VtLkRIS0VNX1AyNTZfSEtERl9TSEEyNTYsIFBiSHBrZUtkZi5IS0RGX1NIQTI1NixcbiAgICAgIFBiSHBrZUFlYWQuQUVTXzI1Nl9HQ00sIFBiT3V0cHV0UHJlZml4VHlwZS5USU5LKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgS2V5VGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbmV3IGluc3RhbmNlcyBvZlxuICogSHBrZVByaXZhdGVLZXkgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICogICBLRU06IERIS0VNX1A1MjFfSEtERl9TSEE1MTJcbiAqICAgS0RGOiBIS0RGX1NIQTI1NlxuICogICBBRUFEOiBBRVNfMjU2X0dDTVxuICogICBPdXRwdXRQcmVmaXhUeXBlOiBSQVdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhwa2VQNTIxSGtkZlNoYTUxMkFlczI1NkdjbVJhdygpOiBQYktleVRlbXBsYXRlIHtcbiAgcmV0dXJuIGNyZWF0ZUhwa2VLZXlUZW1wbGF0ZShcbiAgICAgIFBiSHBrZUtlbS5ESEtFTV9QNTIxX0hLREZfU0hBNTEyLCBQYkhwa2VLZGYuSEtERl9TSEE1MTIsXG4gICAgICBQYkhwa2VBZWFkLkFFU18yNTZfR0NNLCBQYk91dHB1dFByZWZpeFR5cGUuUkFXKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgS2V5VGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbmV3IGluc3RhbmNlcyBvZlxuICogSHBrZVByaXZhdGVLZXkgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICogICBLRU06IERIS0VNX1A1MjFfSEtERl9TSEE1MTJcbiAqICAgS0RGOiBIS0RGX1NIQTI1NlxuICogICBBRUFEOiBBRVNfMjU2X0dDTVxuICogICBPdXRwdXRQcmVmaXhUeXBlOiBUSU5LXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBocGtlUDUyMUhrZGZTaGE1MTJBZXMyNTZHY20oKTogUGJLZXlUZW1wbGF0ZSB7XG4gIHJldHVybiBjcmVhdGVIcGtlS2V5VGVtcGxhdGUoXG4gICAgICBQYkhwa2VLZW0uREhLRU1fUDUyMV9IS0RGX1NIQTUxMiwgUGJIcGtlS2RmLkhLREZfU0hBNTEyLFxuICAgICAgUGJIcGtlQWVhZC5BRVNfMjU2X0dDTSwgUGJPdXRwdXRQcmVmaXhUeXBlLlRJTkspO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIcGtlS2V5VGVtcGxhdGUoXG4gICAga2VtOiBQYkhwa2VLZW0sIGtkZjogUGJIcGtlS2RmLCBhZWFkOiBQYkhwa2VBZWFkLFxuICAgIG91dHB1dFByZWZpeDogUGJPdXRwdXRQcmVmaXhUeXBlKTogUGJLZXlUZW1wbGF0ZSB7XG4gIC8vIGtleSBmb3JtYXRcbiAgY29uc3Qga2V5Rm9ybWF0ID1cbiAgICAgIChuZXcgUGJIcGtlS2V5Rm9ybWF0KCkpXG4gICAgICAgICAgLnNldFBhcmFtcyhuZXcgUGJIcGtlUGFyYW1zKCkuc2V0S2VtKGtlbSkuc2V0S2RmKGtkZikuc2V0QWVhZChhZWFkKSk7XG5cbiAgLy8ga2V5IHRlbXBsYXRlXG4gIGNvbnN0IGtleVRlbXBsYXRlID0gKG5ldyBQYktleVRlbXBsYXRlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlVXJsKEhwa2VQcml2YXRlS2V5TWFuYWdlci5LRVlfVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKGtleUZvcm1hdC5zZXJpYWxpemVCaW5hcnkoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE91dHB1dFByZWZpeFR5cGUob3V0cHV0UHJlZml4KTtcbiAgcmV0dXJuIGtleVRlbXBsYXRlO1xufVxuIl19