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