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