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.

65 lines 7.24 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 { SecurityException } from '../exception/security_exception'; import * as Bytes from '../subtle/bytes'; import { HybridEncrypt } from './internal/hybrid_encrypt'; /** * @final */ class WrappedHybridEncrypt extends HybridEncrypt { // The constructor should be @private, but it is not supported by Closure // (see https://github.com/google/closure-compiler/issues/2761). constructor(hybridEncryptPrimitiveSet) { super(); this.hybridEncryptPrimitiveSet = hybridEncryptPrimitiveSet; } static newHybridEncrypt(hybridEncryptPrimitiveSet) { if (!hybridEncryptPrimitiveSet) { throw new SecurityException('Primitive set has to be non-null.'); } if (!hybridEncryptPrimitiveSet.getPrimary()) { throw new SecurityException('Primary has to be non-null.'); } return new WrappedHybridEncrypt(hybridEncryptPrimitiveSet); } encrypt(plaintext, opt_contextInfo) { return __awaiter(this, void 0, void 0, function* () { if (!plaintext) { throw new SecurityException('Plaintext has to be non-null.'); } const primary = this.hybridEncryptPrimitiveSet.getPrimary(); if (!primary) { throw new SecurityException('Primary not set.'); } const primitive = primary.getPrimitive(); const ciphertext = yield primitive.encrypt(plaintext, opt_contextInfo); const keyId = primary.getIdentifier(); return Bytes.concat(keyId, ciphertext); }); } } export class HybridEncryptWrapper { /** */ wrap(primitiveSet) { return WrappedHybridEncrypt.newHybridEncrypt(primitiveSet); } /** */ getPrimitiveType() { return HybridEncrypt; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlicmlkX2VuY3J5cHRfd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2h5YnJpZC9oeWJyaWRfZW5jcnlwdF93cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7QUFFSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUdsRSxPQUFPLEtBQUssS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQU0sb0JBQXFCLFNBQVEsYUFBYTtJQUM5Qyx5RUFBeUU7SUFDekUsZ0VBQWdFO0lBQ2hFLFlBQTZCLHlCQUMyQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQUZtQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQ0U7SUFFeEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFDNEM7UUFFbEUsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQzlCLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxJQUFJLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVLLE9BQU8sQ0FBQyxTQUFxQixFQUFFLGVBQTRCOztZQUMvRCxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDakQ7WUFDRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN2RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6QyxDQUFDO0tBQUE7Q0FDRjtBQUVELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7T0FDRztJQUNILElBQUksQ0FBQyxZQUFzRDtRQUN6RCxPQUFPLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDtPQUNHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQge1NlY3VyaXR5RXhjZXB0aW9ufSBmcm9tICcuLi9leGNlcHRpb24vc2VjdXJpdHlfZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFByaW1pdGl2ZVNldCBmcm9tICcuLi9pbnRlcm5hbC9wcmltaXRpdmVfc2V0JztcbmltcG9ydCB7UHJpbWl0aXZlV3JhcHBlcn0gZnJvbSAnLi4vaW50ZXJuYWwvcHJpbWl0aXZlX3dyYXBwZXInO1xuaW1wb3J0ICogYXMgQnl0ZXMgZnJvbSAnLi4vc3VidGxlL2J5dGVzJztcblxuaW1wb3J0IHtIeWJyaWRFbmNyeXB0fSBmcm9tICcuL2ludGVybmFsL2h5YnJpZF9lbmNyeXB0JztcblxuLyoqXG4gKiBAZmluYWxcbiAqL1xuY2xhc3MgV3JhcHBlZEh5YnJpZEVuY3J5cHQgZXh0ZW5kcyBIeWJyaWRFbmNyeXB0IHtcbiAgLy8gVGhlIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBAcHJpdmF0ZSwgYnV0IGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgQ2xvc3VyZVxuICAvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9pc3N1ZXMvMjc2MSkuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHlicmlkRW5jcnlwdFByaW1pdGl2ZVNldDpcbiAgICAgICAgICAgICAgICAgIFByaW1pdGl2ZVNldC5QcmltaXRpdmVTZXQ8SHlicmlkRW5jcnlwdD4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc3RhdGljIG5ld0h5YnJpZEVuY3J5cHQoaHlicmlkRW5jcnlwdFByaW1pdGl2ZVNldDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW1pdGl2ZVNldC5QcmltaXRpdmVTZXQ8SHlicmlkRW5jcnlwdD4pOlxuICAgICAgSHlicmlkRW5jcnlwdCB7XG4gICAgaWYgKCFoeWJyaWRFbmNyeXB0UHJpbWl0aXZlU2V0KSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oJ1ByaW1pdGl2ZSBzZXQgaGFzIHRvIGJlIG5vbi1udWxsLicpO1xuICAgIH1cbiAgICBpZiAoIWh5YnJpZEVuY3J5cHRQcmltaXRpdmVTZXQuZ2V0UHJpbWFyeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oJ1ByaW1hcnkgaGFzIHRvIGJlIG5vbi1udWxsLicpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdyYXBwZWRIeWJyaWRFbmNyeXB0KGh5YnJpZEVuY3J5cHRQcmltaXRpdmVTZXQpO1xuICB9XG5cbiAgYXN5bmMgZW5jcnlwdChwbGFpbnRleHQ6IFVpbnQ4QXJyYXksIG9wdF9jb250ZXh0SW5mbz86IFVpbnQ4QXJyYXkpIHtcbiAgICBpZiAoIXBsYWludGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCdQbGFpbnRleHQgaGFzIHRvIGJlIG5vbi1udWxsLicpO1xuICAgIH1cbiAgICBjb25zdCBwcmltYXJ5ID0gdGhpcy5oeWJyaWRFbmNyeXB0UHJpbWl0aXZlU2V0LmdldFByaW1hcnkoKTtcbiAgICBpZiAoIXByaW1hcnkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbignUHJpbWFyeSBub3Qgc2V0LicpO1xuICAgIH1cbiAgICBjb25zdCBwcmltaXRpdmUgPSBwcmltYXJ5LmdldFByaW1pdGl2ZSgpO1xuICAgIGNvbnN0IGNpcGhlcnRleHQgPSBhd2FpdCBwcmltaXRpdmUuZW5jcnlwdChwbGFpbnRleHQsIG9wdF9jb250ZXh0SW5mbyk7XG4gICAgY29uc3Qga2V5SWQgPSBwcmltYXJ5LmdldElkZW50aWZpZXIoKTtcbiAgICByZXR1cm4gQnl0ZXMuY29uY2F0KGtleUlkLCBjaXBoZXJ0ZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHlicmlkRW5jcnlwdFdyYXBwZXIgaW1wbGVtZW50cyBQcmltaXRpdmVXcmFwcGVyPEh5YnJpZEVuY3J5cHQ+IHtcbiAgLyoqXG4gICAqL1xuICB3cmFwKHByaW1pdGl2ZVNldDogUHJpbWl0aXZlU2V0LlByaW1pdGl2ZVNldDxIeWJyaWRFbmNyeXB0Pikge1xuICAgIHJldHVybiBXcmFwcGVkSHlicmlkRW5jcnlwdC5uZXdIeWJyaWRFbmNyeXB0KHByaW1pdGl2ZVNldCk7XG4gIH1cblxuICAvKipcbiAgICovXG4gIGdldFByaW1pdGl2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIEh5YnJpZEVuY3J5cHQ7XG4gIH1cbn1cbiJdfQ==