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