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.

61 lines 6.52 kB
/** * @license * Copyright 2020 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 { Aead } from '../aead/internal/aead'; import { InsecureIvAesGcm, IV_SIZE_IN_BYTES } from '../aead/internal/insecure_iv_aes_gcm'; import { randBytes } from './random'; import * as validators from './validators'; /** * Implementation of AES-GCM, wrapped around InsecureIvAesGcm. * * @final */ export class AesGcm extends Aead { constructor(key) { super(); this.key = key; this.insecureIvAesGcm = new InsecureIvAesGcm({ key, prependIv: true }); } encrypt(plaintext, associatedData) { return __awaiter(this, void 0, void 0, function* () { const iv = randBytes(IV_SIZE_IN_BYTES); return this.insecureIvAesGcm.encrypt(iv, plaintext, associatedData); }); } decrypt(ciphertext, associatedData) { return __awaiter(this, void 0, void 0, function* () { const iv = new Uint8Array(IV_SIZE_IN_BYTES); iv.set(ciphertext.subarray(0, IV_SIZE_IN_BYTES)); return this.insecureIvAesGcm.decrypt(iv, ciphertext, associatedData); }); } } /** Returns an AEAD instantiation genererated from a given raw `key` */ export function fromRawKey(key) { return __awaiter(this, void 0, void 0, function* () { validators.validateAesKeySize(key.length); const webCryptoKey = yield self.crypto.subtle.importKey( /* format */ 'raw', key, /* keyData */ { 'name': 'AES-GCM', 'length': key.length }, /* algo */ false, /* extractable*/ ['encrypt', 'decrypt']); /* usage */ return new AesGcm(webCryptoKey); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWVzX2djbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1YnRsZS9hZXNfZ2NtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFeEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEtBQUssVUFBVSxNQUFNLGNBQWMsQ0FBQztBQUUzQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLE1BQU8sU0FBUSxJQUFJO0lBRzlCLFlBQXFCLEdBQWM7UUFDakMsS0FBSyxFQUFFLENBQUM7UUFEVyxRQUFHLEdBQUgsR0FBRyxDQUFXO1FBRWpDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFSyxPQUFPLENBQUMsU0FBcUIsRUFBRSxjQUEyQjs7WUFFOUQsTUFBTSxFQUFFLEdBQWUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUFBO0lBRUssT0FBTyxDQUFDLFVBQXNCLEVBQUUsY0FBMkI7O1lBRS9ELE1BQU0sRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkUsQ0FBQztLQUFBO0NBQ0Y7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFnQixVQUFVLENBQUMsR0FBZTs7UUFDOUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDbkQsWUFBWTtRQUNaLEtBQUssRUFBRSxHQUFHO1FBQ1YsYUFBYTtRQUNiLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBQztRQUN6QyxVQUFVO1FBQ1YsS0FBSztRQUNMLGdCQUFnQjtRQUNoQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTVCLFdBQVc7UUFDWCxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtBZWFkfSBmcm9tICcuLi9hZWFkL2ludGVybmFsL2FlYWQnO1xuaW1wb3J0IHtJbnNlY3VyZUl2QWVzR2NtLCBJVl9TSVpFX0lOX0JZVEVTfSBmcm9tICcuLi9hZWFkL2ludGVybmFsL2luc2VjdXJlX2l2X2Flc19nY20nO1xuXG5pbXBvcnQge3JhbmRCeXRlc30gZnJvbSAnLi9yYW5kb20nO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIEFFUy1HQ00sIHdyYXBwZWQgYXJvdW5kIEluc2VjdXJlSXZBZXNHY20uXG4gKlxuICogQGZpbmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBZXNHY20gZXh0ZW5kcyBBZWFkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnNlY3VyZUl2QWVzR2NtOiBJbnNlY3VyZUl2QWVzR2NtO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGtleTogQ3J5cHRvS2V5KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmluc2VjdXJlSXZBZXNHY20gPSBuZXcgSW5zZWN1cmVJdkFlc0djbSh7a2V5LCBwcmVwZW5kSXY6IHRydWV9KTtcbiAgfVxuXG4gIGFzeW5jIGVuY3J5cHQocGxhaW50ZXh0OiBVaW50OEFycmF5LCBhc3NvY2lhdGVkRGF0YT86IFVpbnQ4QXJyYXkpOlxuICAgICAgUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgY29uc3QgaXY6IFVpbnQ4QXJyYXkgPSByYW5kQnl0ZXMoSVZfU0laRV9JTl9CWVRFUyk7XG4gICAgcmV0dXJuIHRoaXMuaW5zZWN1cmVJdkFlc0djbS5lbmNyeXB0KGl2LCBwbGFpbnRleHQsIGFzc29jaWF0ZWREYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGRlY3J5cHQoY2lwaGVydGV4dDogVWludDhBcnJheSwgYXNzb2NpYXRlZERhdGE/OiBVaW50OEFycmF5KTpcbiAgICAgIFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGl2ID0gbmV3IFVpbnQ4QXJyYXkoSVZfU0laRV9JTl9CWVRFUyk7XG4gICAgaXYuc2V0KGNpcGhlcnRleHQuc3ViYXJyYXkoMCwgSVZfU0laRV9JTl9CWVRFUykpO1xuICAgIHJldHVybiB0aGlzLmluc2VjdXJlSXZBZXNHY20uZGVjcnlwdChpdiwgY2lwaGVydGV4dCwgYXNzb2NpYXRlZERhdGEpO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIGFuIEFFQUQgaW5zdGFudGlhdGlvbiBnZW5lcmVyYXRlZCBmcm9tIGEgZ2l2ZW4gcmF3IGBrZXlgICAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21SYXdLZXkoa2V5OiBVaW50OEFycmF5KTogUHJvbWlzZTxBZWFkPiB7XG4gIHZhbGlkYXRvcnMudmFsaWRhdGVBZXNLZXlTaXplKGtleS5sZW5ndGgpO1xuICBjb25zdCB3ZWJDcnlwdG9LZXkgPSBhd2FpdCBzZWxmLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgLyogZm9ybWF0ICovXG4gICAgICAncmF3Jywga2V5LFxuICAgICAgLyoga2V5RGF0YSAqL1xuICAgICAgeyduYW1lJzogJ0FFUy1HQ00nLCAnbGVuZ3RoJzoga2V5Lmxlbmd0aH0sXG4gICAgICAvKiBhbGdvICovXG4gICAgICBmYWxzZSxcbiAgICAgIC8qIGV4dHJhY3RhYmxlKi9cbiAgICAgIFsnZW5jcnlwdCcsICdkZWNyeXB0J10pO1xuXG4gIC8qIHVzYWdlICovXG4gIHJldHVybiBuZXcgQWVzR2NtKHdlYkNyeXB0b0tleSk7XG59XG4iXX0=