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.

59 lines 6.87 kB
/** * @license * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { insecureIvAesGcmFromRawKey, IV_SIZE_IN_BYTES } from '../../../aead/internal/insecure_iv_aes_gcm'; import { SecurityException } from '../../../exception/security_exception'; import * as hpkeUtil from './hpke_util'; /** * AES-GCM HPKE AEAD variant. * @see https://www.rfc-editor.org/rfc/rfc9180.html#section-5.2 */ export class AesGcmHpkeAead { constructor(keyLength) { this.keyLength = keyLength; } seal({ key, nonce, plaintext, associatedData }) { return __awaiter(this, void 0, void 0, function* () { if (key.length !== this.keyLength) { throw new SecurityException('Unexpected key length: ' + key.length.toString()); } const aead = yield insecureIvAesGcmFromRawKey({ key, prependIv: false }); return yield aead.encrypt(nonce, plaintext, associatedData); }); } open({ key, nonce, ciphertext, associatedData }) { return __awaiter(this, void 0, void 0, function* () { if (key.length !== this.keyLength) { throw new SecurityException('Unexpected key length: ' + key.length.toString()); } const aead = yield insecureIvAesGcmFromRawKey({ key, prependIv: false }); return aead.decrypt(nonce, ciphertext, associatedData); }); } getAeadId() { switch (this.keyLength) { case 16: return hpkeUtil.AES_128_GCM_AEAD_ID; case 32: return hpkeUtil.AES_256_GCM_AEAD_ID; } } getKeyLength() { return this.keyLength; } getNonceLength() { return IV_SIZE_IN_BYTES; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWVzX2djbV9ocGtlX2FlYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9oeWJyaWQvaW50ZXJuYWwvaHBrZS9hZXNfZ2NtX2hwa2VfYWVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHOzs7Ozs7Ozs7O0FBRUgsT0FBTyxFQUFDLDBCQUEwQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDeEcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFHeEUsT0FBTyxLQUFLLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBNkIsU0FBZ0I7UUFBaEIsY0FBUyxHQUFULFNBQVMsQ0FBTztJQUFHLENBQUM7SUFFM0MsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUtoRDs7WUFDQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakMsTUFBTSxJQUFJLGlCQUFpQixDQUN2Qix5QkFBeUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDeEQ7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLDBCQUEwQixDQUFDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUQsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUtqRDs7WUFDQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakMsTUFBTSxJQUFJLGlCQUFpQixDQUN2Qix5QkFBeUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDeEQ7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLDBCQUEwQixDQUFDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7S0FBQTtJQUVELFNBQVM7UUFDUCxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEIsS0FBSyxFQUFFO2dCQUNMLE9BQU8sUUFBUSxDQUFDLG1CQUFtQixDQUFDO1lBQ3RDLEtBQUssRUFBRTtnQkFDTCxPQUFPLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7aW5zZWN1cmVJdkFlc0djbUZyb21SYXdLZXksIElWX1NJWkVfSU5fQllURVN9IGZyb20gJy4uLy4uLy4uL2FlYWQvaW50ZXJuYWwvaW5zZWN1cmVfaXZfYWVzX2djbSc7XG5pbXBvcnQge1NlY3VyaXR5RXhjZXB0aW9ufSBmcm9tICcuLi8uLi8uLi9leGNlcHRpb24vc2VjdXJpdHlfZXhjZXB0aW9uJztcblxuaW1wb3J0IHtIcGtlQWVhZH0gZnJvbSAnLi9ocGtlX2FlYWQnO1xuaW1wb3J0ICogYXMgaHBrZVV0aWwgZnJvbSAnLi9ocGtlX3V0aWwnO1xuXG4vKipcbiAqIEFFUy1HQ00gSFBLRSBBRUFEIHZhcmlhbnQuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTgwLmh0bWwjc2VjdGlvbi01LjJcbiAqL1xuZXhwb3J0IGNsYXNzIEFlc0djbUhwa2VBZWFkIGltcGxlbWVudHMgSHBrZUFlYWQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGtleUxlbmd0aDogMTZ8MzIpIHt9XG5cbiAgYXN5bmMgc2VhbCh7a2V5LCBub25jZSwgcGxhaW50ZXh0LCBhc3NvY2lhdGVkRGF0YX06IHtcbiAgICBrZXk6IFVpbnQ4QXJyYXksXG4gICAgbm9uY2U6IFVpbnQ4QXJyYXksXG4gICAgcGxhaW50ZXh0OiBVaW50OEFycmF5LFxuICAgIGFzc29jaWF0ZWREYXRhOiBVaW50OEFycmF5XG4gIH0pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gdGhpcy5rZXlMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgICAnVW5leHBlY3RlZCBrZXkgbGVuZ3RoOiAnICsga2V5Lmxlbmd0aC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgYWVhZCA9IGF3YWl0IGluc2VjdXJlSXZBZXNHY21Gcm9tUmF3S2V5KHtrZXksIHByZXBlbmRJdjogZmFsc2V9KTtcbiAgICByZXR1cm4gYXdhaXQgYWVhZC5lbmNyeXB0KG5vbmNlLCBwbGFpbnRleHQsIGFzc29jaWF0ZWREYXRhKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW4oe2tleSwgbm9uY2UsIGNpcGhlcnRleHQsIGFzc29jaWF0ZWREYXRhfToge1xuICAgIGtleTogVWludDhBcnJheSxcbiAgICBub25jZTogVWludDhBcnJheSxcbiAgICBjaXBoZXJ0ZXh0OiBVaW50OEFycmF5LFxuICAgIGFzc29jaWF0ZWREYXRhOiBVaW50OEFycmF5XG4gIH0pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gdGhpcy5rZXlMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihcbiAgICAgICAgICAnVW5leHBlY3RlZCBrZXkgbGVuZ3RoOiAnICsga2V5Lmxlbmd0aC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgY29uc3QgYWVhZCA9IGF3YWl0IGluc2VjdXJlSXZBZXNHY21Gcm9tUmF3S2V5KHtrZXksIHByZXBlbmRJdjogZmFsc2V9KTtcbiAgICByZXR1cm4gYWVhZC5kZWNyeXB0KG5vbmNlLCBjaXBoZXJ0ZXh0LCBhc3NvY2lhdGVkRGF0YSk7XG4gIH1cblxuICBnZXRBZWFkSWQoKTogVWludDhBcnJheSB7XG4gICAgc3dpdGNoICh0aGlzLmtleUxlbmd0aCkge1xuICAgICAgY2FzZSAxNjpcbiAgICAgICAgcmV0dXJuIGhwa2VVdGlsLkFFU18xMjhfR0NNX0FFQURfSUQ7XG4gICAgICBjYXNlIDMyOlxuICAgICAgICByZXR1cm4gaHBrZVV0aWwuQUVTXzI1Nl9HQ01fQUVBRF9JRDtcbiAgICB9XG4gIH1cblxuICBnZXRLZXlMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5rZXlMZW5ndGg7XG4gIH1cblxuICBnZXROb25jZUxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiBJVl9TSVpFX0lOX0JZVEVTO1xuICB9XG59XG4iXX0=