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.

84 lines 9.09 kB
/** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { PbAesCtrHmacAeadKeyFormat, PbAesCtrKeyFormat, PbAesCtrParams, PbHashType, PbHmacKeyFormat, PbHmacParams, PbKeyTemplate, PbOutputPrefixType } from '../internal/proto'; import { AesCtrHmacAeadKeyManager } from './aes_ctr_hmac_aead_key_manager'; /** * Pre-generated KeyTemplates for AES CTR HMAC AEAD keys. * * @final */ export class AesCtrHmacAeadKeyTemplates { /** * Returns a KeyTemplate that generates new instances of AesCtrHmacAeadKey * with the following parameters: * AES key size: 16 bytes * AES IV size: 16 bytes * HMAC key size: 32 bytes * HMAC tag size: 16 bytes * HMAC hash function: SHA256 * OutputPrefixType: TINK * */ static aes128CtrHmacSha256() { return AesCtrHmacAeadKeyTemplates.newAesCtrHmacSha256KeyTemplate( /* aesKeySize = */ 16, /* ivSize = */ 16, /* hmacKeySize = */ 32, /* tagSize = */ 16); } /* tagSize = */ /** * Returns a KeyTemplate that generates new instances of AesCtrHmacAeadKey * with the following parameters: * AES key size: 32 bytes * AES IV size: 16 bytes * HMAC key size: 32 bytes * HMAC tag size: 32 bytes * HMAC hash function: SHA256 * OutputPrefixType: TINK * */ static aes256CtrHmacSha256() { return AesCtrHmacAeadKeyTemplates.newAesCtrHmacSha256KeyTemplate( /* aesKeySize = */ 32, /* ivSize = */ 16, /* hmacKeySize = */ 32, /* tagSize = */ 32); } /* tagSize = */ static newAesCtrHmacSha256KeyTemplate(aesKeySize, ivSize, hmacKeySize, tagSize) { // Define AES CTR key format. const aesCtrKeyFormat = (new PbAesCtrKeyFormat()) .setKeySize(aesKeySize) .setParams(new PbAesCtrParams()); aesCtrKeyFormat.getParams().setIvSize(ivSize); // Define HMAC key format. const hmacKeyFormat = (new PbHmacKeyFormat()) .setKeySize(hmacKeySize) .setParams(new PbHmacParams()); hmacKeyFormat.getParams().setTagSize(tagSize); hmacKeyFormat.getParams().setHash(PbHashType.SHA256); // Define AES CTR HMAC AEAD key format. const keyFormat = (new PbAesCtrHmacAeadKeyFormat()) .setAesCtrKeyFormat(aesCtrKeyFormat) .setHmacKeyFormat(hmacKeyFormat); // Define key template. const keyTemplate = (new PbKeyTemplate()) .setTypeUrl(AesCtrHmacAeadKeyManager.KEY_TYPE) .setOutputPrefixType(PbOutputPrefixType.TINK) .setValue(keyFormat.serializeBinary()); return keyTemplate; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWVzX2N0cl9obWFjX2FlYWRfa2V5X3RlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FlYWQvYWVzX2N0cl9obWFjX2FlYWRfa2V5X3RlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU3SyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQzs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQjtRQUN4QixPQUFPLDBCQUEwQixDQUFDLDhCQUE4QjtRQUM1RCxrQkFBa0I7UUFDbEIsRUFBRTtRQUNGLGNBQWM7UUFDZCxFQUFFO1FBQ0YsbUJBQW1CO1FBQ25CLEVBQUU7UUFDRixlQUFlO1FBQ2YsRUFBRSxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZTtJQUNmOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsbUJBQW1CO1FBQ3hCLE9BQU8sMEJBQTBCLENBQUMsOEJBQThCO1FBQzVELGtCQUFrQjtRQUNsQixFQUFFO1FBQ0YsY0FBYztRQUNkLEVBQUU7UUFDRixtQkFBbUI7UUFDbkIsRUFBRTtRQUNGLGVBQWU7UUFDZixFQUFFLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxlQUFlO0lBQ1AsTUFBTSxDQUFDLDhCQUE4QixDQUN6QyxVQUFrQixFQUFFLE1BQWMsRUFBRSxXQUFtQixFQUN2RCxPQUFlO1FBQ2pCLDZCQUE2QjtRQUM3QixNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQzthQUNwQixVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ3RCLFNBQVMsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLFNBQVMsRUFBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO2FBQ2xCLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDdkIsU0FBUyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN6RCxhQUFhLENBQUMsU0FBUyxFQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxTQUFTLEVBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRELHVDQUF1QztRQUN2QyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUkseUJBQXlCLEVBQUUsQ0FBQzthQUM1QixrQkFBa0IsQ0FBQyxlQUFlLENBQUM7YUFDbkMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQzthQUNoQixVQUFVLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDO2FBQzdDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUM1QyxRQUFRLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDL0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQge1BiQWVzQ3RySG1hY0FlYWRLZXlGb3JtYXQsIFBiQWVzQ3RyS2V5Rm9ybWF0LCBQYkFlc0N0clBhcmFtcywgUGJIYXNoVHlwZSwgUGJIbWFjS2V5Rm9ybWF0LCBQYkhtYWNQYXJhbXMsIFBiS2V5VGVtcGxhdGUsIFBiT3V0cHV0UHJlZml4VHlwZX0gZnJvbSAnLi4vaW50ZXJuYWwvcHJvdG8nO1xuXG5pbXBvcnQge0Flc0N0ckhtYWNBZWFkS2V5TWFuYWdlcn0gZnJvbSAnLi9hZXNfY3RyX2htYWNfYWVhZF9rZXlfbWFuYWdlcic7XG5cbi8qKlxuICogUHJlLWdlbmVyYXRlZCBLZXlUZW1wbGF0ZXMgZm9yIEFFUyBDVFIgSE1BQyBBRUFEIGtleXMuXG4gKlxuICogQGZpbmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBZXNDdHJIbWFjQWVhZEtleVRlbXBsYXRlcyB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgS2V5VGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbmV3IGluc3RhbmNlcyBvZiBBZXNDdHJIbWFjQWVhZEtleVxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAgICogICAgQUVTIGtleSBzaXplOiAxNiBieXRlc1xuICAgKiAgICBBRVMgSVYgc2l6ZTogMTYgYnl0ZXNcbiAgICogICAgSE1BQyBrZXkgc2l6ZTogMzIgYnl0ZXNcbiAgICogICAgSE1BQyB0YWcgc2l6ZTogMTYgYnl0ZXNcbiAgICogICAgSE1BQyBoYXNoIGZ1bmN0aW9uOiBTSEEyNTZcbiAgICogICAgT3V0cHV0UHJlZml4VHlwZTogVElOS1xuICAgKlxuICAgKi9cbiAgc3RhdGljIGFlczEyOEN0ckhtYWNTaGEyNTYoKTogUGJLZXlUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIEFlc0N0ckhtYWNBZWFkS2V5VGVtcGxhdGVzLm5ld0Flc0N0ckhtYWNTaGEyNTZLZXlUZW1wbGF0ZShcbiAgICAgICAgLyogYWVzS2V5U2l6ZSA9ICovXG4gICAgICAgIDE2LFxuICAgICAgICAvKiBpdlNpemUgPSAqL1xuICAgICAgICAxNixcbiAgICAgICAgLyogaG1hY0tleVNpemUgPSAqL1xuICAgICAgICAzMixcbiAgICAgICAgLyogdGFnU2l6ZSA9ICovXG4gICAgICAgIDE2KTtcbiAgfVxuXG4gIC8qIHRhZ1NpemUgPSAqL1xuICAvKipcbiAgICogUmV0dXJucyBhIEtleVRlbXBsYXRlIHRoYXQgZ2VuZXJhdGVzIG5ldyBpbnN0YW5jZXMgb2YgQWVzQ3RySG1hY0FlYWRLZXlcbiAgICogd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gICAqICAgIEFFUyBrZXkgc2l6ZTogMzIgYnl0ZXNcbiAgICogICAgQUVTIElWIHNpemU6IDE2IGJ5dGVzXG4gICAqICAgIEhNQUMga2V5IHNpemU6IDMyIGJ5dGVzXG4gICAqICAgIEhNQUMgdGFnIHNpemU6IDMyIGJ5dGVzXG4gICAqICAgIEhNQUMgaGFzaCBmdW5jdGlvbjogU0hBMjU2XG4gICAqICAgIE91dHB1dFByZWZpeFR5cGU6IFRJTktcbiAgICpcbiAgICovXG4gIHN0YXRpYyBhZXMyNTZDdHJIbWFjU2hhMjU2KCk6IFBiS2V5VGVtcGxhdGUge1xuICAgIHJldHVybiBBZXNDdHJIbWFjQWVhZEtleVRlbXBsYXRlcy5uZXdBZXNDdHJIbWFjU2hhMjU2S2V5VGVtcGxhdGUoXG4gICAgICAgIC8qIGFlc0tleVNpemUgPSAqL1xuICAgICAgICAzMixcbiAgICAgICAgLyogaXZTaXplID0gKi9cbiAgICAgICAgMTYsXG4gICAgICAgIC8qIGhtYWNLZXlTaXplID0gKi9cbiAgICAgICAgMzIsXG4gICAgICAgIC8qIHRhZ1NpemUgPSAqL1xuICAgICAgICAzMik7XG4gIH1cblxuICAvKiB0YWdTaXplID0gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbmV3QWVzQ3RySG1hY1NoYTI1NktleVRlbXBsYXRlKFxuICAgICAgYWVzS2V5U2l6ZTogbnVtYmVyLCBpdlNpemU6IG51bWJlciwgaG1hY0tleVNpemU6IG51bWJlcixcbiAgICAgIHRhZ1NpemU6IG51bWJlcik6IFBiS2V5VGVtcGxhdGUge1xuICAgIC8vIERlZmluZSBBRVMgQ1RSIGtleSBmb3JtYXQuXG4gICAgY29uc3QgYWVzQ3RyS2V5Rm9ybWF0ID0gKG5ldyBQYkFlc0N0cktleUZvcm1hdCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0S2V5U2l6ZShhZXNLZXlTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UGFyYW1zKG5ldyBQYkFlc0N0clBhcmFtcygpKTtcbiAgICBhZXNDdHJLZXlGb3JtYXQuZ2V0UGFyYW1zKCkhLnNldEl2U2l6ZShpdlNpemUpO1xuXG4gICAgLy8gRGVmaW5lIEhNQUMga2V5IGZvcm1hdC5cbiAgICBjb25zdCBobWFjS2V5Rm9ybWF0ID0gKG5ldyBQYkhtYWNLZXlGb3JtYXQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlTaXplKGhtYWNLZXlTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBhcmFtcyhuZXcgUGJIbWFjUGFyYW1zKCkpO1xuICAgIGhtYWNLZXlGb3JtYXQuZ2V0UGFyYW1zKCkhLnNldFRhZ1NpemUodGFnU2l6ZSk7XG4gICAgaG1hY0tleUZvcm1hdC5nZXRQYXJhbXMoKSEuc2V0SGFzaChQYkhhc2hUeXBlLlNIQTI1Nik7XG5cbiAgICAvLyBEZWZpbmUgQUVTIENUUiBITUFDIEFFQUQga2V5IGZvcm1hdC5cbiAgICBjb25zdCBrZXlGb3JtYXQgPSAobmV3IFBiQWVzQ3RySG1hY0FlYWRLZXlGb3JtYXQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEFlc0N0cktleUZvcm1hdChhZXNDdHJLZXlGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRIbWFjS2V5Rm9ybWF0KGhtYWNLZXlGb3JtYXQpO1xuXG4gICAgLy8gRGVmaW5lIGtleSB0ZW1wbGF0ZS5cbiAgICBjb25zdCBrZXlUZW1wbGF0ZSA9IChuZXcgUGJLZXlUZW1wbGF0ZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlVXJsKEFlc0N0ckhtYWNBZWFkS2V5TWFuYWdlci5LRVlfVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0T3V0cHV0UHJlZml4VHlwZShQYk91dHB1dFByZWZpeFR5cGUuVElOSylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoa2V5Rm9ybWF0LnNlcmlhbGl6ZUJpbmFyeSgpKTtcbiAgICByZXR1cm4ga2V5VGVtcGxhdGU7XG4gIH1cbn1cbiJdfQ==