@aws-crypto/material-management
Advanced tools
Comparing version
@@ -1,2 +0,2 @@ | ||
import { MixedBackendCryptoKey, SupportedAlgorithmSuites, AwsEsdkJsCryptoKey, AwsEsdkJsKeyUsage } from './types'; | ||
import { MixedBackendCryptoKey, SupportedAlgorithmSuites, AwsEsdkJsCryptoKey, AwsEsdkJsKeyUsage, EncryptionContext } from './types'; | ||
import { EncryptedDataKey } from './encrypted_data_key'; | ||
@@ -18,2 +18,3 @@ import { SignatureKey, VerificationKey } from './signature_key'; | ||
keyringTrace: KeyringTrace[]; | ||
encryptionContext: Readonly<EncryptionContext>; | ||
} | ||
@@ -48,3 +49,4 @@ export interface EncryptionMaterial<T extends CryptographicMaterial<T>> extends CryptographicMaterial<T> { | ||
signatureKey?: SignatureKey; | ||
constructor(suite: NodeAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: NodeAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -62,3 +64,4 @@ } | ||
verificationKey?: VerificationKey; | ||
constructor(suite: NodeAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: NodeAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -82,3 +85,4 @@ } | ||
validUsages: ReadonlyArray<AwsEsdkJsKeyUsage>; | ||
constructor(suite: WebCryptoAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: WebCryptoAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -100,3 +104,4 @@ } | ||
validUsages: ReadonlyArray<AwsEsdkJsKeyUsage>; | ||
constructor(suite: WebCryptoAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: WebCryptoAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -103,0 +108,0 @@ } |
@@ -24,2 +24,18 @@ "use strict"; | ||
const needs_1 = require("./needs"); | ||
/* | ||
* This public interface to the CryptographicMaterial object is provided for | ||
* developers of CMMs and keyrings only. If you are a user of the AWS Encryption | ||
* SDK and you are not developing your own CMMs and/or keyrings, you do not | ||
* need to use it and you should not do so. | ||
* | ||
* The CryptographicMaterial's purpose is to bind together all the required elements for | ||
* encrypting or decrypting a payload. | ||
* The functional data key (unencrypted or CryptoKey) is the most sensitive data and needs to | ||
* be protected. The longer this data persists in memory the | ||
* greater the opportunity to be invalidated. Because | ||
* a Caching CMM exists it is important to ensure that the | ||
* unencrypted data key and its meta data can not be manipulated, | ||
* and that the unencrypted data key can be zeroed when | ||
* it is no longer needed. | ||
*/ | ||
let timingSafeEqual; | ||
@@ -45,3 +61,3 @@ try { | ||
eval(''); // eslint-disable-line no-eval | ||
/* Check for early return (Postcondition): Size is well-know information | ||
/* Check for early return (Postcondition) UNTESTED: Size is well-know information. | ||
* and does not leak information about contents. | ||
@@ -58,3 +74,3 @@ */ | ||
class NodeEncryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -64,2 +80,5 @@ /* Precondition: NodeEncryptionMaterial suite must be NodeAlgorithmSuite. */ | ||
this.suite = suite; | ||
/* Precondition: NodeEncryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs_1.needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// EncryptionMaterial have generated a data key on setUnencryptedDataKey | ||
@@ -79,3 +98,3 @@ const setFlags = keyring_trace_1.KeyringTraceFlag.WRAPPING_KEY_GENERATED_DATA_KEY; | ||
class NodeDecryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -85,2 +104,5 @@ /* Precondition: NodeDecryptionMaterial suite must be NodeAlgorithmSuite. */ | ||
this.suite = suite; | ||
/* Precondition: NodeDecryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs_1.needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// DecryptionMaterial have decrypted a data key on setUnencryptedDataKey | ||
@@ -100,3 +122,3 @@ const setFlags = keyring_trace_1.KeyringTraceFlag.WRAPPING_KEY_DECRYPTED_DATA_KEY; | ||
class WebCryptoEncryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -107,2 +129,5 @@ /* Precondition: WebCryptoEncryptionMaterial suite must be WebCryptoAlgorithmSuite. */ | ||
this.validUsages = Object.freeze(['deriveKey', 'encrypt']); | ||
/* Precondition: WebCryptoEncryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs_1.needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// EncryptionMaterial have generated a data key on setUnencryptedDataKey | ||
@@ -123,3 +148,3 @@ const setFlag = keyring_trace_1.KeyringTraceFlag.WRAPPING_KEY_GENERATED_DATA_KEY; | ||
class WebCryptoDecryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -130,2 +155,5 @@ /* Precondition: WebCryptoDecryptionMaterial suite must be WebCryptoAlgorithmSuite. */ | ||
this.validUsages = Object.freeze(['deriveKey', 'decrypt']); | ||
/* Precondition: WebCryptoDecryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs_1.needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// DecryptionMaterial have decrypted a data key on setUnencryptedDataKey | ||
@@ -224,4 +252,5 @@ const setFlag = keyring_trace_1.KeyringTraceFlag.WRAPPING_KEY_DECRYPTED_DATA_KEY; | ||
unencryptedDataKeyZeroed = true; | ||
/* Postcondition: Both unencryptedDataKey and udkForVerification must be either set or unset. | ||
/* Postcondition UNTESTED: Both unencryptedDataKey and udkForVerification must be either set or unset. | ||
* If it is ever the case that only one was unset, then something is wrong in a profound way. | ||
* It is not clear how this could ever happen, unless someone is manipulating the OS... | ||
*/ | ||
@@ -370,3 +399,3 @@ needs_1.needs(unsetCount === 0 || unsetCount === 2, 'Either unencryptedDataKey or udkForVerification was not set.'); | ||
needs_1.needs(trace && trace.keyName && trace.keyNamespace, 'Malformed KeyringTrace'); | ||
/* Precondition: On set the required KeyringTraceFlag must be set. */ | ||
/* Precondition: On setting the CryptoKey the required KeyringTraceFlag must be set. */ | ||
needs_1.needs(trace.flags & setFlags, 'Required KeyringTraceFlag not set'); | ||
@@ -463,2 +492,2 @@ /* If I a setting a cryptoKey without an unencrypted data key, | ||
exports.subtleFunctionForMaterial = subtleFunctionForMaterial; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvZ3JhcGhpY19tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG9ncmFwaGljX21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUdILDZEQUF1RDtBQUN2RCxtREFBK0Q7QUFDL0QsdURBQWlFO0FBQ2pFLG1EQUFnRSxDQUFDLHFDQUFxQztBQUN0Ryx1REFBc0Q7QUFDdEQsbUVBQWlFO0FBQ2pFLG1DQUErQjtBQUUvQixJQUFJLGVBQTBELENBQUE7QUFDOUQsSUFBSTtJQUNGOzs7T0FHRztJQUNILE1BQU0sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEUsZUFBZSxHQUFHLG1CQUFtQixJQUFJLHVCQUF1QixDQUFBO0NBQ2pFO0FBQUMsT0FBTyxDQUFDLEVBQUU7SUFDVixlQUFlLEdBQUcsdUJBQXVCLENBQUE7Q0FDMUM7QUFDRCxzREFBc0Q7QUFDdEQsU0FBUyx1QkFBdUIsQ0FBRSxDQUFhLEVBQUUsQ0FBYTtJQUM1RDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUMsOEJBQThCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFL0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDcEI7SUFDRCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3JCLENBQUM7QUFvREQsTUFB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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvZ3JhcGhpY19tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG9ncmFwaGljX21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUdILDZEQUF1RDtBQUN2RCxtREFBK0Q7QUFDL0QsdURBQWlFO0FBQ2pFLG1EQUFnRSxDQUFDLHFDQUFxQztBQUN0Ryx1REFBc0Q7QUFDdEQsbUVBQWlFO0FBQ2pFLG1DQUErQjtBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxJQUFJLGVBQTBELENBQUE7QUFDOUQsSUFBSTtJQUNGOzs7T0FHRztJQUNILE1BQU0sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEUsZUFBZSxHQUFHLG1CQUFtQixJQUFJLHVCQUF1QixDQUFBO0NBQ2pFO0FBQUMsT0FBTyxDQUFDLEVBQUU7SUFDVixlQUFlLEdBQUcsdUJBQXVCLENBQUE7Q0FDMUM7QUFDRCxzREFBc0Q7QUFDdEQsU0FBUyx1QkFBdUIsQ0FBRSxDQUFhLEVBQUUsQ0FBYTtJQUM1RDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUMsOEJBQThCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFL0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDcEI7SUFDRCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxD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 |
import { EncryptedDataKey } from './encrypted_data_key'; | ||
import { EncryptionContext, EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { NodeAlgorithmSuite } from './node_algorithms'; | ||
import { WebCryptoAlgorithmSuite } from './web_crypto_algorithms'; | ||
export declare abstract class Keyring<S extends SupportedAlgorithmSuites> { | ||
onEncrypt(material: EncryptionMaterial<S>, context?: EncryptionContext): Promise<EncryptionMaterial<S>>; | ||
abstract _onEncrypt(material: EncryptionMaterial<S>, context?: EncryptionContext): Promise<EncryptionMaterial<S>>; | ||
onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext): Promise<DecryptionMaterial<S>>; | ||
abstract _onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext): Promise<DecryptionMaterial<S>>; | ||
onEncrypt(material: EncryptionMaterial<S>): Promise<EncryptionMaterial<S>>; | ||
abstract _onEncrypt(material: EncryptionMaterial<S>): Promise<EncryptionMaterial<S>>; | ||
onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[]): Promise<DecryptionMaterial<S>>; | ||
abstract _onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[]): Promise<DecryptionMaterial<S>>; | ||
} | ||
@@ -11,0 +11,0 @@ export declare abstract class KeyringNode extends Keyring<NodeAlgorithmSuite> { |
@@ -28,5 +28,5 @@ "use strict"; | ||
class Keyring { | ||
async onEncrypt(material, context) { | ||
async onEncrypt(material) { | ||
/* Precondition: material must be a type of isEncryptionMaterial. | ||
* There are several security properties that NodeEncryptionMaterial and WebCryptoEncrypionMaterial | ||
* There are several security properties that NodeEncryptionMaterial and WebCryptoEncryptionMaterial | ||
* posses. | ||
@@ -38,3 +38,3 @@ * The unencryptedDataKey can only be written once. | ||
needs_1.needs(cryptographic_material_1.isEncryptionMaterial(material), 'Unsupported type of material.'); | ||
const _material = await this._onEncrypt(material, context); | ||
const _material = await this._onEncrypt(material); | ||
/* Postcondition: The EncryptionMaterial objects must be the same. | ||
@@ -47,3 +47,3 @@ * See cryptographic_materials.ts. The CryptographicMaterial objects | ||
needs_1.needs(material === _material, 'New EncryptionMaterial instances can not be created.'); | ||
/* Postcondition: If this keyring generated data key, it must be the right length. | ||
/* Postcondition UNTESTED: If this keyring generated data key, it must be the right length. | ||
* See cryptographic_materials.ts This is handled in setUnencryptedDataKey | ||
@@ -65,3 +65,3 @@ * this condition is listed here to keep help keep track of important conditions | ||
*/ | ||
async onDecrypt(material, encryptedDataKeys, context) { | ||
async onDecrypt(material, encryptedDataKeys) { | ||
/* Precondition: material must be DecryptionMaterial. */ | ||
@@ -74,3 +74,3 @@ needs_1.needs(cryptographic_material_1.isDecryptionMaterial(material), 'Unsupported material type.'); | ||
needs_1.needs(encryptedDataKeys.every(edk => edk instanceof encrypted_data_key_1.EncryptedDataKey), 'Unsupported EncryptedDataKey type'); | ||
const _material = await this._onDecrypt(material, encryptedDataKeys, context); | ||
const _material = await this._onDecrypt(material, encryptedDataKeys); | ||
/* Postcondition: The DecryptionMaterial objects must be the same. | ||
@@ -102,2 +102,2 @@ * See cryptographic_materials.ts. The CryptographicMaterial objects | ||
immutable_class_1.immutableClass(KeyringWebCrypto); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILDZEQUF1RDtBQUN2RCx1REFBc0U7QUFFdEUscUVBQXFGO0FBRXJGLG1DQUErQjtBQUkvQjs7Ozs7R0FLRztBQUVILE1BQXNCLE9BQU87SUFDM0IsS0FBSyxDQUFDLFNBQVMsQ0FBRSxRQUErQixFQUFFLE9BQTJCO1FBQzNFOzs7Ozs7V0FNRztRQUNILGFBQUssQ0FBQyw2Q0FBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFFMUQ7Ozs7O1dBS0c7UUFDSCxhQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO1FBRXJGOzs7VUFHRTtRQUVGLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFJRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBRSxRQUErQixFQUFFLGlCQUFxQyxFQUFFLE9BQTJCO1FBQ2xILHdEQUF3RDtRQUN4RCxhQUFLLENBQUMsNkNBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsNEJBQTRCLENBQUMsQ0FBQTtRQUVuRSwwRkFBMEY7UUFDMUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxRQUFRLENBQUE7UUFFM0MsbUVBQW1FO1FBQ25FLGFBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVkscUNBQWdCLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFBO1FBRTNHLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFFN0U7Ozs7O1dBS0c7UUFDSCxhQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO1FBRXJGOzs7OztXQUtHO1FBRUgsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztDQUdGO0FBekVELDBCQXlFQztBQUVELG9DQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBRTNCLE1BQXNCLFdBQVksU0FBUSxPQUEyQjtDQUFHO0FBQXhFLGtDQUF3RTtBQUN4RSxnQ0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQzNCLE1BQXNCLGdCQUFpQixTQUFRLE9BQWdDO0NBQUc7QUFBbEYsNENBQWtGO0FBQ2xGLGdDQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSJ9 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILDZEQUF1RDtBQUN2RCx1REFBc0U7QUFFdEUscUVBQXFGO0FBRXJGLG1DQUErQjtBQUkvQjs7Ozs7R0FLRztBQUVILE1BQXNCLE9BQU87SUFDM0IsS0FBSyxDQUFDLFNBQVMsQ0FBRSxRQUErQjtRQUM5Qzs7Ozs7O1dBTUc7UUFDSCxhQUFLLENBQUMsNkNBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsK0JBQStCLENBQUMsQ0FBQTtRQUV0RSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFakQ7Ozs7O1dBS0c7UUFDSCxhQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO1FBRXJGOzs7VUFHRTtRQUVGLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFJRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBRSxRQUErQixFQUFFLGlCQUFxQztRQUNyRix3REFBd0Q7UUFDeEQsYUFBSyxDQUFDLDZDQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUE7UUFFbkUsMEZBQTBGO1FBQzFGLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sUUFBUSxDQUFBO1FBRTNDLG1FQUFtRTtRQUNuRSxhQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLHFDQUFnQixDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQTtRQUUzRyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFFcEU7Ozs7O1dBS0c7UUFDSCxhQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO1FBRXJGOzs7OztXQUtHO1FBRUgsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztDQUdGO0FBekVELDBCQXlFQztBQUVELG9DQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBRTNCLE1BQXNCLFdBQVksU0FBUSxPQUEyQjtDQUFHO0FBQXhFLGtDQUF3RTtBQUN4RSxnQ0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQzNCLE1BQXNCLGdCQUFpQixTQUFRLE9BQWdDO0NBQUc7QUFBbEYsNENBQWtGO0FBQ2xGLGdDQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSJ9 |
import { EncryptionRequest, DecryptionRequest } from '.'; | ||
import { EncryptionResponse, DecryptionResponse, SupportedAlgorithmSuites } from './types'; | ||
import { EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { NodeAlgorithmSuite } from './node_algorithms'; | ||
import { WebCryptoAlgorithmSuite } from './web_crypto_algorithms'; | ||
export interface GetEncryptionMaterials<S extends SupportedAlgorithmSuites> { | ||
(request: EncryptionRequest<S>): Promise<EncryptionResponse<S>>; | ||
(request: EncryptionRequest<S>): Promise<EncryptionMaterial<S>>; | ||
} | ||
export interface GetDecryptMaterials<S extends SupportedAlgorithmSuites> { | ||
(request: DecryptionRequest<S>): Promise<DecryptionResponse<S>>; | ||
(request: DecryptionRequest<S>): Promise<DecryptionMaterial<S>>; | ||
} | ||
@@ -11,0 +11,0 @@ export interface MaterialsManager<S extends SupportedAlgorithmSuites> { |
import { Keyring, // eslint-disable-line no-unused-vars | ||
KeyringNode, KeyringWebCrypto } from './keyring'; | ||
import { EncryptionContext, SupportedAlgorithmSuites } from './types'; | ||
import { SupportedAlgorithmSuites } from './types'; | ||
import { EncryptedDataKey } from './encrypted_data_key'; | ||
@@ -11,4 +11,4 @@ import { NodeAlgorithmSuite } from './node_algorithms'; | ||
constructor(input: MultiKeyringInput<NodeAlgorithmSuite>); | ||
_onEncrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeEncryptionMaterial, context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").NodeEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").NodeDecryptionMaterial>; | ||
_onEncrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeEncryptionMaterial) => Promise<import("./cryptographic_material").NodeEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[]) => Promise<import("./cryptographic_material").NodeDecryptionMaterial>; | ||
} | ||
@@ -19,4 +19,4 @@ export declare class MultiKeyringWebCrypto extends KeyringWebCrypto implements IMultiKeyring<WebCryptoAlgorithmSuite> { | ||
constructor(input: MultiKeyringInput<WebCryptoAlgorithmSuite>); | ||
_onEncrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoEncryptionMaterial, context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").WebCryptoEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").WebCryptoDecryptionMaterial>; | ||
_onEncrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoEncryptionMaterial) => Promise<import("./cryptographic_material").WebCryptoEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[]) => Promise<import("./cryptographic_material").WebCryptoDecryptionMaterial>; | ||
} | ||
@@ -23,0 +23,0 @@ interface MultiKeyringInput<S extends SupportedAlgorithmSuites> { |
@@ -51,18 +51,24 @@ "use strict"; | ||
function buildPrivateOnEncrypt() { | ||
return async function _onEncrypt(material, context) { | ||
return async function _onEncrypt(material) { | ||
/* Precondition: Only Keyrings explicitly designated as generators can generate material. | ||
* Technically, the precondition below will handle this. | ||
* Since if I do not have an unencrypted data key, | ||
* and I do not have a generator, | ||
* then generated.hasUnencryptedDataKey === false will throw. | ||
* But this is a much more meaningful error. | ||
*/ | ||
needs_1.needs(!material.hasUnencryptedDataKey ? this.generator : true, 'Only Keyrings explicitly designated as generators can generate material.'); | ||
const generated = this.generator | ||
? await this.generator.onEncrypt(material, context) | ||
? await this.generator.onEncrypt(material) | ||
: material; | ||
/* Precondition: A Generator Keyring *must* ensure generated material. */ | ||
needs_1.needs(this.generator && generated.hasUnencryptedDataKey, 'Generator Keyring has not generated material.'); | ||
/* Precondition: Only Keyrings explicitly designated as generators can generate material. */ | ||
needs_1.needs(generated.hasUnencryptedDataKey, 'Only Keyrings explicitly designated as generators can generate material.'); | ||
needs_1.needs(generated.hasUnencryptedDataKey, 'Generator Keyring has not generated material.'); | ||
/* By default this is a serial operation. A keyring _may_ perform an expensive operation | ||
* or create resource constraints such that encrypting with multiple keyrings could | ||
* fail in unexpected ways. | ||
* Additionally, "downstream" keyrings may make choices about the EncryptedDataKeys they | ||
* append based on already appended EDK's. | ||
*/ | ||
* or create resource constraints such that encrypting with multiple keyrings could | ||
* fail in unexpected ways. | ||
* Additionally, "downstream" keyrings may make choices about the EncryptedDataKeys they | ||
* append based on already appended EDK's. | ||
*/ | ||
for (const keyring of this.children) { | ||
await keyring.onEncrypt(generated, context); | ||
await keyring.onEncrypt(generated); | ||
} | ||
@@ -76,3 +82,3 @@ // Keyrings are required to not create new EncryptionMaterial instances, but | ||
function buildPrivateOnDecrypt() { | ||
return async function _onDecrypt(material, encryptedDataKeys, context) { | ||
return async function _onDecrypt(material, encryptedDataKeys) { | ||
const children = this.children.slice(); | ||
@@ -86,3 +92,3 @@ if (this.generator) | ||
try { | ||
await keyring.onDecrypt(material, encryptedDataKeys, context); | ||
await keyring.onDecrypt(material, encryptedDataKeys); | ||
} | ||
@@ -99,2 +105,2 @@ catch (e) { | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfa2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tdWx0aV9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILHVEQUFvRTtBQUNwRSx1Q0FJa0I7QUFFbEIsbUNBQStCO0FBSy9CLE1BQWEsZ0JBQWlCLFNBQVEscUJBQVc7SUFHL0MsWUFBYSxLQUE0QztRQUN2RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBc0IsQ0FBQTtRQUN4RCxlQUFVLEdBQUcscUJBQXFCLEVBQXNCLENBQUE7UUFIdEQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLHFCQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQztDQUdGO0FBVEQsNENBU0M7QUFDRCxnQ0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFFaEMsTUFBYSxxQkFBc0IsU0FBUSwwQkFBZ0I7SUFJekQsWUFBYSxLQUFpRDtRQUM1RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBMkIsQ0FBQTtRQUM3RCxlQUFVLEdBQUcscUJBQXFCLEVBQTJCLENBQUE7UUFIM0Qsa0JBQWtCLENBQUMsSUFBSSxFQUFFLDBCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ25ELENBQUM7Q0FHRjtBQVZELHNEQVVDO0FBQ0QsZ0NBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXJDLFNBQVMsa0JBQWtCLENBQ3pCLEdBQXFCLEVBQ3JCLFdBQWdCLEVBQ2hCLEVBQUUsU0FBUyxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQXdCO0lBRWxELG9EQUFvRDtJQUNwRCxhQUFLLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUscUNBQXFDLENBQUMsQ0FBQTtJQUMxRSxnREFBZ0Q7SUFDaEQsYUFBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxZQUFZLFdBQVcsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0lBQ3RGLGtEQUFrRDtJQUNsRCxhQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxXQUFXLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO0lBRWpGLGtDQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLGtDQUFnQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sS0FBSyxVQUFVLFVBQVUsQ0FFOUIsUUFBK0IsRUFBRSxPQUEyQjtRQUU1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztZQUM5QixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxRQUFRLENBQUE7UUFFWix5RUFBeUU7UUFDekUsYUFBSyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLHFCQUFxQixFQUFFLCtDQUErQyxDQUFDLENBQUE7UUFDekcsNEZBQTRGO1FBQzVGLGFBQUssQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsMEVBQTBFLENBQUMsQ0FBQTtRQUVsSDs7Ozs7UUFLQTtRQUNBLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzVDO1FBRUQsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxtQkFBbUI7UUFDbkIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sS0FBSyxVQUFVLFVBQVUsQ0FFOUIsUUFBK0IsRUFDL0IsaUJBQXFDLEVBQ3JDLE9BQTJCO1FBRTNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRXBELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQ2hDLGdHQUFnRztZQUM5RixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7Z0JBQUUsT0FBTyxRQUFRLENBQUE7WUFFM0MsSUFBSTtnQkFDRixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFBO2FBQzlEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1osNkNBQTZDO2dCQUM3QywwREFBMEQ7Z0JBQzFELDBEQUEwRDtnQkFDMUQsMkJBQTJCO2FBQzFCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDLENBQUE7QUFDSCxDQUFDIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfa2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tdWx0aV9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOztBQUVILHVEQUFvRTtBQUNwRSx1Q0FJa0I7QUFFbEIsbUNBQStCO0FBSy9CLE1BQWEsZ0JBQWlCLFNBQVEscUJBQVc7SUFHL0MsWUFBYSxLQUE0QztRQUN2RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBc0IsQ0FBQTtRQUN4RCxlQUFVLEdBQUcscUJBQXFCLEVBQXNCLENBQUE7UUFIdEQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLHFCQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQztDQUdGO0FBVEQsNENBU0M7QUFDRCxnQ0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFFaEMsTUFBYSxxQkFBc0IsU0FBUSwwQkFBZ0I7SUFJekQsWUFBYSxLQUFpRDtRQUM1RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBMkIsQ0FBQTtRQUM3RCxlQUFVLEdBQUcscUJBQXFCLEVBQTJCLENBQUE7UUFIM0Qsa0JBQWtCLENBQUMsSUFBSSxFQUFFLDBCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ25ELENBQUM7Q0FHRjtBQVZELHNEQVVDO0FBQ0QsZ0NBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXJDLFNBQVMsa0JBQWtCLENBQ3pCLEdBQXFCLEVBQ3JCLFdBQWdCLEVBQ2hCLEVBQUUsU0FBUyxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQXdCO0lBRWxELG9EQUFvRDtJQUNwRCxhQUFLLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUscUNBQXFDLENBQUMsQ0FBQTtJQUMxRSxnREFBZ0Q7SUFDaEQsYUFBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxZQUFZLFdBQVcsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0lBQ3RGLGtEQUFrRDtJQUNsRCxhQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxXQUFXLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO0lBRWpGLGtDQUFnQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLGtDQUFnQixDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sS0FBSyxVQUFVLFVBQVUsQ0FFOUIsUUFBK0I7UUFFL0I7Ozs7OztXQU1HO1FBQ0gsYUFBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsMEVBQTBFLENBQUMsQ0FBQTtRQUUxSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztZQUM5QixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDMUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUVaLHlFQUF5RTtRQUN6RSxhQUFLLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLCtDQUErQyxDQUFDLENBQUE7UUFFdkY7Ozs7O1dBS0c7UUFDSCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQ25DO1FBRUQsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxtQkFBbUI7UUFDbkIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sS0FBSyxVQUFVLFVBQVUsQ0FFOUIsUUFBK0IsRUFDL0IsaUJBQXFDO1FBRXJDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRXBELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQ2hDLGdHQUFnRztZQUM5RixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7Z0JBQUUsT0FBTyxRQUFRLENBQUE7WUFFM0MsSUFBSTtnQkFDRixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUE7YUFDckQ7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDWiw2Q0FBNkM7Z0JBQzdDLDBEQUEwRDtnQkFDMUQsMERBQTBEO2dCQUMxRCwyQkFBMkI7YUFDMUI7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUMsQ0FBQTtBQUNILENBQUMifQ== |
@@ -26,19 +26,10 @@ import { NodeAlgorithmSuite } from './node_algorithms'; | ||
readonly suite?: S; | ||
readonly encryptionContext?: EncryptionContext; | ||
readonly frameLength?: number; | ||
readonly encryptionContext: EncryptionContext; | ||
readonly plaintextLength?: number; | ||
} | ||
export interface EncryptionResponse<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
material: EncryptionMaterial<S>; | ||
context: EncryptionContext; | ||
} | ||
export interface DecryptionRequest<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
readonly suite: S; | ||
readonly encryptionContext?: EncryptionContext; | ||
readonly encryptionContext: EncryptionContext; | ||
readonly encryptedDataKeys: ReadonlyArray<EncryptedDataKey>; | ||
} | ||
export interface DecryptionResponse<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
material: DecryptionMaterial<S>; | ||
context: EncryptionContext; | ||
} | ||
export declare type SupportedAlgorithmSuites = NodeAlgorithmSuite | WebCryptoAlgorithmSuite; | ||
@@ -45,0 +36,0 @@ export declare type EncryptionMaterial<Suite> = Suite extends NodeAlgorithmSuite ? NodeEncryptionMaterial : Suite extends WebCryptoAlgorithmSuite ? WebCryptoEncryptionMaterial : never; |
@@ -1,2 +0,2 @@ | ||
import { MixedBackendCryptoKey, SupportedAlgorithmSuites, AwsEsdkJsCryptoKey, AwsEsdkJsKeyUsage } from './types'; | ||
import { MixedBackendCryptoKey, SupportedAlgorithmSuites, AwsEsdkJsCryptoKey, AwsEsdkJsKeyUsage, EncryptionContext } from './types'; | ||
import { EncryptedDataKey } from './encrypted_data_key'; | ||
@@ -18,2 +18,3 @@ import { SignatureKey, VerificationKey } from './signature_key'; | ||
keyringTrace: KeyringTrace[]; | ||
encryptionContext: Readonly<EncryptionContext>; | ||
} | ||
@@ -48,3 +49,4 @@ export interface EncryptionMaterial<T extends CryptographicMaterial<T>> extends CryptographicMaterial<T> { | ||
signatureKey?: SignatureKey; | ||
constructor(suite: NodeAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: NodeAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -62,3 +64,4 @@ } | ||
verificationKey?: VerificationKey; | ||
constructor(suite: NodeAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: NodeAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -82,3 +85,4 @@ } | ||
validUsages: ReadonlyArray<AwsEsdkJsKeyUsage>; | ||
constructor(suite: WebCryptoAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: WebCryptoAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -100,3 +104,4 @@ } | ||
validUsages: ReadonlyArray<AwsEsdkJsKeyUsage>; | ||
constructor(suite: WebCryptoAlgorithmSuite); | ||
encryptionContext: Readonly<EncryptionContext>; | ||
constructor(suite: WebCryptoAlgorithmSuite, encryptionContext: EncryptionContext); | ||
hasValidKey(): boolean; | ||
@@ -103,0 +108,0 @@ } |
@@ -22,2 +22,18 @@ /* | ||
import { needs } from './needs'; | ||
/* | ||
* This public interface to the CryptographicMaterial object is provided for | ||
* developers of CMMs and keyrings only. If you are a user of the AWS Encryption | ||
* SDK and you are not developing your own CMMs and/or keyrings, you do not | ||
* need to use it and you should not do so. | ||
* | ||
* The CryptographicMaterial's purpose is to bind together all the required elements for | ||
* encrypting or decrypting a payload. | ||
* The functional data key (unencrypted or CryptoKey) is the most sensitive data and needs to | ||
* be protected. The longer this data persists in memory the | ||
* greater the opportunity to be invalidated. Because | ||
* a Caching CMM exists it is important to ensure that the | ||
* unencrypted data key and its meta data can not be manipulated, | ||
* and that the unencrypted data key can be zeroed when | ||
* it is no longer needed. | ||
*/ | ||
let timingSafeEqual; | ||
@@ -43,3 +59,3 @@ try { | ||
eval(''); // eslint-disable-line no-eval | ||
/* Check for early return (Postcondition): Size is well-know information | ||
/* Check for early return (Postcondition) UNTESTED: Size is well-know information. | ||
* and does not leak information about contents. | ||
@@ -56,3 +72,3 @@ */ | ||
export class NodeEncryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -62,2 +78,5 @@ /* Precondition: NodeEncryptionMaterial suite must be NodeAlgorithmSuite. */ | ||
this.suite = suite; | ||
/* Precondition: NodeEncryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// EncryptionMaterial have generated a data key on setUnencryptedDataKey | ||
@@ -76,3 +95,3 @@ const setFlags = KeyringTraceFlag.WRAPPING_KEY_GENERATED_DATA_KEY; | ||
export class NodeDecryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -82,2 +101,5 @@ /* Precondition: NodeDecryptionMaterial suite must be NodeAlgorithmSuite. */ | ||
this.suite = suite; | ||
/* Precondition: NodeDecryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// DecryptionMaterial have decrypted a data key on setUnencryptedDataKey | ||
@@ -96,3 +118,3 @@ const setFlags = KeyringTraceFlag.WRAPPING_KEY_DECRYPTED_DATA_KEY; | ||
export class WebCryptoEncryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -103,2 +125,5 @@ /* Precondition: WebCryptoEncryptionMaterial suite must be WebCryptoAlgorithmSuite. */ | ||
this.validUsages = Object.freeze(['deriveKey', 'encrypt']); | ||
/* Precondition: WebCryptoEncryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// EncryptionMaterial have generated a data key on setUnencryptedDataKey | ||
@@ -118,3 +143,3 @@ const setFlag = KeyringTraceFlag.WRAPPING_KEY_GENERATED_DATA_KEY; | ||
export class WebCryptoDecryptionMaterial { | ||
constructor(suite) { | ||
constructor(suite, encryptionContext) { | ||
this.keyringTrace = []; | ||
@@ -125,2 +150,5 @@ /* Precondition: WebCryptoDecryptionMaterial suite must be WebCryptoAlgorithmSuite. */ | ||
this.validUsages = Object.freeze(['deriveKey', 'decrypt']); | ||
/* Precondition: WebCryptoDecryptionMaterial encryptionContext must be an object, even if it is empty. */ | ||
needs(encryptionContext && typeof encryptionContext === 'object', 'Encryption context must be set'); | ||
this.encryptionContext = Object.freeze({ ...encryptionContext }); | ||
// DecryptionMaterial have decrypted a data key on setUnencryptedDataKey | ||
@@ -216,4 +244,5 @@ const setFlag = KeyringTraceFlag.WRAPPING_KEY_DECRYPTED_DATA_KEY; | ||
unencryptedDataKeyZeroed = true; | ||
/* Postcondition: Both unencryptedDataKey and udkForVerification must be either set or unset. | ||
/* Postcondition UNTESTED: Both unencryptedDataKey and udkForVerification must be either set or unset. | ||
* If it is ever the case that only one was unset, then something is wrong in a profound way. | ||
* It is not clear how this could ever happen, unless someone is manipulating the OS... | ||
*/ | ||
@@ -359,3 +388,3 @@ needs(unsetCount === 0 || unsetCount === 2, 'Either unencryptedDataKey or udkForVerification was not set.'); | ||
needs(trace && trace.keyName && trace.keyNamespace, 'Malformed KeyringTrace'); | ||
/* Precondition: On set the required KeyringTraceFlag must be set. */ | ||
/* Precondition: On setting the CryptoKey the required KeyringTraceFlag must be set. */ | ||
needs(trace.flags & setFlags, 'Required KeyringTraceFlag not set'); | ||
@@ -447,2 +476,2 @@ /* If I a setting a cryptoKey without an unencrypted data key, | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvZ3JhcGhpY19tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG9ncmFwaGljX21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNqRSxPQUFPLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUEsQ0FBQyxxQ0FBcUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUUvQixJQUFJLGVBQTBELENBQUE7QUFDOUQsSUFBSTtJQUNGOzs7T0FHRztJQUNILE1BQU0sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEUsZUFBZSxHQUFHLG1CQUFtQixJQUFJLHVCQUF1QixDQUFBO0NBQ2pFO0FBQUMsT0FBTyxDQUFDLEVBQUU7SUFDVixlQUFlLEdBQUcsdUJBQXVCLENBQUE7Q0FDMUM7QUFDRCxzREFBc0Q7QUFDdEQsU0FBUyx1QkFBdUIsQ0FBRSxDQUFhLEVBQUUsQ0FBYTtJQUM1RDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUMsOEJBQThCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFL0Ms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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvZ3JhcGhpY19tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jcnlwdG9ncmFwaGljX21hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFHSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNqRSxPQUFPLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUEsQ0FBQyxxQ0FBcUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxJQUFJLGVBQTBELENBQUE7QUFDOUQsSUFBSTtJQUNGOzs7T0FHRztJQUNILE1BQU0sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEUsZUFBZSxHQUFHLG1CQUFtQixJQUFJLHVCQUF1QixDQUFBO0NBQ2pFO0FBQUMsT0FBTyxDQUFDLEVBQUU7SUFDVixlQUFlLEdBQUcsdUJBQXVCLENBQUE7Q0FDMUM7QUFDRCxzREFBc0Q7QUFDdEQsU0FBUyx1QkFBdUIsQ0FBRSxDQUFhLEVBQUUsQ0FBYTtJQUM1RDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUMsOEJBQThCO0lBQ3ZDOztPQUVHO0lBQ0gsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1FB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 |
import { EncryptedDataKey } from './encrypted_data_key'; | ||
import { EncryptionContext, EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { NodeAlgorithmSuite } from './node_algorithms'; | ||
import { WebCryptoAlgorithmSuite } from './web_crypto_algorithms'; | ||
export declare abstract class Keyring<S extends SupportedAlgorithmSuites> { | ||
onEncrypt(material: EncryptionMaterial<S>, context?: EncryptionContext): Promise<EncryptionMaterial<S>>; | ||
abstract _onEncrypt(material: EncryptionMaterial<S>, context?: EncryptionContext): Promise<EncryptionMaterial<S>>; | ||
onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext): Promise<DecryptionMaterial<S>>; | ||
abstract _onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext): Promise<DecryptionMaterial<S>>; | ||
onEncrypt(material: EncryptionMaterial<S>): Promise<EncryptionMaterial<S>>; | ||
abstract _onEncrypt(material: EncryptionMaterial<S>): Promise<EncryptionMaterial<S>>; | ||
onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[]): Promise<DecryptionMaterial<S>>; | ||
abstract _onDecrypt(material: DecryptionMaterial<S>, encryptedDataKeys: EncryptedDataKey[]): Promise<DecryptionMaterial<S>>; | ||
} | ||
@@ -11,0 +11,0 @@ export declare abstract class KeyringNode extends Keyring<NodeAlgorithmSuite> { |
@@ -26,5 +26,5 @@ /* | ||
export class Keyring { | ||
async onEncrypt(material, context) { | ||
async onEncrypt(material) { | ||
/* Precondition: material must be a type of isEncryptionMaterial. | ||
* There are several security properties that NodeEncryptionMaterial and WebCryptoEncrypionMaterial | ||
* There are several security properties that NodeEncryptionMaterial and WebCryptoEncryptionMaterial | ||
* posses. | ||
@@ -36,3 +36,3 @@ * The unencryptedDataKey can only be written once. | ||
needs(isEncryptionMaterial(material), 'Unsupported type of material.'); | ||
const _material = await this._onEncrypt(material, context); | ||
const _material = await this._onEncrypt(material); | ||
/* Postcondition: The EncryptionMaterial objects must be the same. | ||
@@ -45,3 +45,3 @@ * See cryptographic_materials.ts. The CryptographicMaterial objects | ||
needs(material === _material, 'New EncryptionMaterial instances can not be created.'); | ||
/* Postcondition: If this keyring generated data key, it must be the right length. | ||
/* Postcondition UNTESTED: If this keyring generated data key, it must be the right length. | ||
* See cryptographic_materials.ts This is handled in setUnencryptedDataKey | ||
@@ -63,3 +63,3 @@ * this condition is listed here to keep help keep track of important conditions | ||
*/ | ||
async onDecrypt(material, encryptedDataKeys, context) { | ||
async onDecrypt(material, encryptedDataKeys) { | ||
/* Precondition: material must be DecryptionMaterial. */ | ||
@@ -72,3 +72,3 @@ needs(isDecryptionMaterial(material), 'Unsupported material type.'); | ||
needs(encryptedDataKeys.every(edk => edk instanceof EncryptedDataKey), 'Unsupported EncryptedDataKey type'); | ||
const _material = await this._onDecrypt(material, encryptedDataKeys, context); | ||
const _material = await this._onDecrypt(material, encryptedDataKeys); | ||
/* Postcondition: The DecryptionMaterial objects must be the same. | ||
@@ -97,2 +97,2 @@ * See cryptographic_materials.ts. The CryptographicMaterial objects | ||
immutableClass(KeyringWebCrypto); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFckYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUkvQjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBZ0IsT0FBTztJQUMzQixLQUFLLENBQUMsU0FBUyxDQUFFLFFBQStCLEVBQUUsT0FBMkI7UUFDM0U7Ozs7OztXQU1HO1FBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLCtCQUErQixDQUFDLENBQUE7UUFFdEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUUxRDs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLHNEQUFzRCxDQUFDLENBQUE7UUFFckY7OztVQUdFO1FBRUYsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUlEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFFLFFBQStCLEVBQUUsaUJBQXFDLEVBQUUsT0FBMkI7UUFDbEgsd0RBQXdEO1FBQ3hELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO1FBRW5FLDBGQUEwRjtRQUMxRixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLFFBQVEsQ0FBQTtRQUUzQyxtRUFBbUU7UUFDbkUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxnQkFBZ0IsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDLENBQUE7UUFFM0csTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUU3RTs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLHNEQUFzRCxDQUFDLENBQUE7UUFFckY7Ozs7O1dBS0c7UUFFSCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0NBR0Y7QUFFRCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUUzQixNQUFNLE9BQWdCLFdBQVksU0FBUSxPQUEyQjtDQUFHO0FBQ3hFLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUMzQixNQUFNLE9BQWdCLGdCQUFpQixTQUFRLE9BQWdDO0NBQUc7QUFDbEYsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUEifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFckYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUkvQjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBZ0IsT0FBTztJQUMzQixLQUFLLENBQUMsU0FBUyxDQUFFLFFBQStCO1FBQzlDOzs7Ozs7V0FNRztRQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUVqRDs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLHNEQUFzRCxDQUFDLENBQUE7UUFFckY7OztVQUdFO1FBRUYsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUlEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFFLFFBQStCLEVBQUUsaUJBQXFDO1FBQ3JGLHdEQUF3RDtRQUN4RCxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsNEJBQTRCLENBQUMsQ0FBQTtRQUVuRSwwRkFBMEY7UUFDMUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxRQUFRLENBQUE7UUFFM0MsbUVBQW1FO1FBQ25FLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksZ0JBQWdCLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFBO1FBRTNHLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUVwRTs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLHNEQUFzRCxDQUFDLENBQUE7UUFFckY7Ozs7O1dBS0c7UUFFSCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0NBR0Y7QUFFRCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUUzQixNQUFNLE9BQWdCLFdBQVksU0FBUSxPQUEyQjtDQUFHO0FBQ3hFLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUMzQixNQUFNLE9BQWdCLGdCQUFpQixTQUFRLE9BQWdDO0NBQUc7QUFDbEYsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUEifQ== |
import { EncryptionRequest, DecryptionRequest } from '.'; | ||
import { EncryptionResponse, DecryptionResponse, SupportedAlgorithmSuites } from './types'; | ||
import { EncryptionMaterial, DecryptionMaterial, SupportedAlgorithmSuites } from './types'; | ||
import { NodeAlgorithmSuite } from './node_algorithms'; | ||
import { WebCryptoAlgorithmSuite } from './web_crypto_algorithms'; | ||
export interface GetEncryptionMaterials<S extends SupportedAlgorithmSuites> { | ||
(request: EncryptionRequest<S>): Promise<EncryptionResponse<S>>; | ||
(request: EncryptionRequest<S>): Promise<EncryptionMaterial<S>>; | ||
} | ||
export interface GetDecryptMaterials<S extends SupportedAlgorithmSuites> { | ||
(request: DecryptionRequest<S>): Promise<DecryptionResponse<S>>; | ||
(request: DecryptionRequest<S>): Promise<DecryptionMaterial<S>>; | ||
} | ||
@@ -11,0 +11,0 @@ export interface MaterialsManager<S extends SupportedAlgorithmSuites> { |
import { Keyring, // eslint-disable-line no-unused-vars | ||
KeyringNode, KeyringWebCrypto } from './keyring'; | ||
import { EncryptionContext, SupportedAlgorithmSuites } from './types'; | ||
import { SupportedAlgorithmSuites } from './types'; | ||
import { EncryptedDataKey } from './encrypted_data_key'; | ||
@@ -11,4 +11,4 @@ import { NodeAlgorithmSuite } from './node_algorithms'; | ||
constructor(input: MultiKeyringInput<NodeAlgorithmSuite>); | ||
_onEncrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeEncryptionMaterial, context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").NodeEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").NodeDecryptionMaterial>; | ||
_onEncrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeEncryptionMaterial) => Promise<import("./cryptographic_material").NodeEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<NodeAlgorithmSuite>, material: import("./cryptographic_material").NodeDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[]) => Promise<import("./cryptographic_material").NodeDecryptionMaterial>; | ||
} | ||
@@ -19,4 +19,4 @@ export declare class MultiKeyringWebCrypto extends KeyringWebCrypto implements IMultiKeyring<WebCryptoAlgorithmSuite> { | ||
constructor(input: MultiKeyringInput<WebCryptoAlgorithmSuite>); | ||
_onEncrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoEncryptionMaterial, context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").WebCryptoEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[], context?: EncryptionContext | undefined) => Promise<import("./cryptographic_material").WebCryptoDecryptionMaterial>; | ||
_onEncrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoEncryptionMaterial) => Promise<import("./cryptographic_material").WebCryptoEncryptionMaterial>; | ||
_onDecrypt: (this: IMultiKeyring<WebCryptoAlgorithmSuite>, material: import("./cryptographic_material").WebCryptoDecryptionMaterial, encryptedDataKeys: EncryptedDataKey[]) => Promise<import("./cryptographic_material").WebCryptoDecryptionMaterial>; | ||
} | ||
@@ -23,0 +23,0 @@ interface MultiKeyringInput<S extends SupportedAlgorithmSuites> { |
@@ -48,18 +48,24 @@ /* | ||
function buildPrivateOnEncrypt() { | ||
return async function _onEncrypt(material, context) { | ||
return async function _onEncrypt(material) { | ||
/* Precondition: Only Keyrings explicitly designated as generators can generate material. | ||
* Technically, the precondition below will handle this. | ||
* Since if I do not have an unencrypted data key, | ||
* and I do not have a generator, | ||
* then generated.hasUnencryptedDataKey === false will throw. | ||
* But this is a much more meaningful error. | ||
*/ | ||
needs(!material.hasUnencryptedDataKey ? this.generator : true, 'Only Keyrings explicitly designated as generators can generate material.'); | ||
const generated = this.generator | ||
? await this.generator.onEncrypt(material, context) | ||
? await this.generator.onEncrypt(material) | ||
: material; | ||
/* Precondition: A Generator Keyring *must* ensure generated material. */ | ||
needs(this.generator && generated.hasUnencryptedDataKey, 'Generator Keyring has not generated material.'); | ||
/* Precondition: Only Keyrings explicitly designated as generators can generate material. */ | ||
needs(generated.hasUnencryptedDataKey, 'Only Keyrings explicitly designated as generators can generate material.'); | ||
needs(generated.hasUnencryptedDataKey, 'Generator Keyring has not generated material.'); | ||
/* By default this is a serial operation. A keyring _may_ perform an expensive operation | ||
* or create resource constraints such that encrypting with multiple keyrings could | ||
* fail in unexpected ways. | ||
* Additionally, "downstream" keyrings may make choices about the EncryptedDataKeys they | ||
* append based on already appended EDK's. | ||
*/ | ||
* or create resource constraints such that encrypting with multiple keyrings could | ||
* fail in unexpected ways. | ||
* Additionally, "downstream" keyrings may make choices about the EncryptedDataKeys they | ||
* append based on already appended EDK's. | ||
*/ | ||
for (const keyring of this.children) { | ||
await keyring.onEncrypt(generated, context); | ||
await keyring.onEncrypt(generated); | ||
} | ||
@@ -73,3 +79,3 @@ // Keyrings are required to not create new EncryptionMaterial instances, but | ||
function buildPrivateOnDecrypt() { | ||
return async function _onDecrypt(material, encryptedDataKeys, context) { | ||
return async function _onDecrypt(material, encryptedDataKeys) { | ||
const children = this.children.slice(); | ||
@@ -83,3 +89,3 @@ if (this.generator) | ||
try { | ||
await keyring.onDecrypt(material, encryptedDataKeys, context); | ||
await keyring.onDecrypt(material, encryptedDataKeys); | ||
} | ||
@@ -96,2 +102,2 @@ catch (e) { | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfa2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tdWx0aV9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEUsT0FBTyxFQUNJLHFDQUFxQztBQUM5QyxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2pCLE1BQU0sV0FBVyxDQUFBO0FBRWxCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFLL0IsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFHL0MsWUFBYSxLQUE0QztRQUN2RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBc0IsQ0FBQTtRQUN4RCxlQUFVLEdBQUcscUJBQXFCLEVBQXNCLENBQUE7UUFIdEQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0NBR0Y7QUFDRCxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUVoQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZ0JBQWdCO0lBSXpELFlBQWEsS0FBaUQ7UUFDNUQsS0FBSyxFQUFFLENBQUE7UUFHVCxlQUFVLEdBQUcscUJBQXFCLEVBQTJCLENBQUE7UUFDN0QsZUFBVSxHQUFHLHFCQUFxQixFQUEyQixDQUFBO1FBSDNELGtCQUFrQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0NBR0Y7QUFDRCxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUVyQyxTQUFTLGtCQUFrQixDQUN6QixHQUFxQixFQUNyQixXQUFnQixFQUNoQixFQUFFLFNBQVMsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUF3QjtJQUVsRCxvREFBb0Q7SUFDcEQsS0FBSyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxDQUFDLENBQUE7SUFDMUUsZ0RBQWdEO0lBQ2hELEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsWUFBWSxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtJQUN0RixrREFBa0Q7SUFDbEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksV0FBVyxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtJQUVqRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNsRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBQy9DLENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLEtBQUssVUFBVSxVQUFVLENBRTlCLFFBQStCLEVBQUUsT0FBMkI7UUFFNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDOUIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztZQUNuRCxDQUFDLENBQUMsUUFBUSxDQUFBO1FBRVoseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFBO1FBQ3pHLDRGQUE0RjtRQUM1RixLQUFLLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLDBFQUEwRSxDQUFDLENBQUE7UUFFbEg7Ozs7O1FBS0E7UUFDQSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUM1QztRQUVELDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsbUJBQW1CO1FBQ25CLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLEtBQUssVUFBVSxVQUFVLENBRTlCLFFBQStCLEVBQy9CLGlCQUFxQyxFQUNyQyxPQUEyQjtRQUUzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVwRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUNoQyxnR0FBZ0c7WUFDOUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUFFLE9BQU8sUUFBUSxDQUFBO1lBRTNDLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQTthQUM5RDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNaLDZDQUE2QztnQkFDN0MsMERBQTBEO2dCQUMxRCwwREFBMEQ7Z0JBQzFELDJCQUEyQjthQUMxQjtTQUNGO1FBQ0QsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyJ9 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfa2V5cmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tdWx0aV9rZXlyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEUsT0FBTyxFQUNJLHFDQUFxQztBQUM5QyxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2pCLE1BQU0sV0FBVyxDQUFBO0FBRWxCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFLL0IsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFHL0MsWUFBYSxLQUE0QztRQUN2RCxLQUFLLEVBQUUsQ0FBQTtRQUdULGVBQVUsR0FBRyxxQkFBcUIsRUFBc0IsQ0FBQTtRQUN4RCxlQUFVLEdBQUcscUJBQXFCLEVBQXNCLENBQUE7UUFIdEQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0NBR0Y7QUFDRCxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUVoQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZ0JBQWdCO0lBSXpELFlBQWEsS0FBaUQ7UUFDNUQsS0FBSyxFQUFFLENBQUE7UUFHVCxlQUFVLEdBQUcscUJBQXFCLEVBQTJCLENBQUE7UUFDN0QsZUFBVSxHQUFHLHFCQUFxQixFQUEyQixDQUFBO1FBSDNELGtCQUFrQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0NBR0Y7QUFDRCxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUVyQyxTQUFTLGtCQUFrQixDQUN6QixHQUFxQixFQUNyQixXQUFnQixFQUNoQixFQUFFLFNBQVMsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUF3QjtJQUVsRCxvREFBb0Q7SUFDcEQsS0FBSyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxDQUFDLENBQUE7SUFDMUUsZ0RBQWdEO0lBQ2hELEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsWUFBWSxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtJQUN0RixrREFBa0Q7SUFDbEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksV0FBVyxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtJQUVqRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNsRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBQy9DLENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLEtBQUssVUFBVSxVQUFVLENBRTlCLFFBQStCO1FBRS9COzs7Ozs7V0FNRztRQUNILEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLDBFQUEwRSxDQUFDLENBQUE7UUFFMUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDOUIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFFWix5RUFBeUU7UUFDekUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFBO1FBRXZGOzs7OztXQUtHO1FBQ0gsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25DLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUNuQztRQUVELDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsbUJBQW1CO1FBQ25CLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLEtBQUssVUFBVSxVQUFVLENBRTlCLFFBQStCLEVBQy9CLGlCQUFxQztRQUVyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVwRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUNoQyxnR0FBZ0c7WUFDOUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUFFLE9BQU8sUUFBUSxDQUFBO1lBRTNDLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO2FBQ3JEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1osNkNBQTZDO2dCQUM3QywwREFBMEQ7Z0JBQzFELDBEQUEwRDtnQkFDMUQsMkJBQTJCO2FBQzFCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDLENBQUE7QUFDSCxDQUFDIn0= |
@@ -26,19 +26,10 @@ import { NodeAlgorithmSuite } from './node_algorithms'; | ||
readonly suite?: S; | ||
readonly encryptionContext?: EncryptionContext; | ||
readonly frameLength?: number; | ||
readonly encryptionContext: EncryptionContext; | ||
readonly plaintextLength?: number; | ||
} | ||
export interface EncryptionResponse<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
material: EncryptionMaterial<S>; | ||
context: EncryptionContext; | ||
} | ||
export interface DecryptionRequest<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
readonly suite: S; | ||
readonly encryptionContext?: EncryptionContext; | ||
readonly encryptionContext: EncryptionContext; | ||
readonly encryptedDataKeys: ReadonlyArray<EncryptedDataKey>; | ||
} | ||
export interface DecryptionResponse<S extends NodeAlgorithmSuite | WebCryptoAlgorithmSuite> { | ||
material: DecryptionMaterial<S>; | ||
context: EncryptionContext; | ||
} | ||
export declare type SupportedAlgorithmSuites = NodeAlgorithmSuite | WebCryptoAlgorithmSuite; | ||
@@ -45,0 +36,0 @@ export declare type EncryptionMaterial<Suite> = Suite extends NodeAlgorithmSuite ? NodeEncryptionMaterial : Suite extends WebCryptoAlgorithmSuite ? WebCryptoEncryptionMaterial : never; |
@@ -6,2 +6,16 @@ # Change Log | ||
# [0.2.0-preview.3](/compare/@aws-crypto/material-management@0.2.0-preview.2...@aws-crypto/material-management@0.2.0-preview.3) (2019-08-08) | ||
### Bug Fixes | ||
* Conditions for materials-management (#185) 7f7228b, closes #185 | ||
* Encryption Context changes (#148) 5a7e9ca, closes #148 #54 | ||
* framLength is not passed to the CMM (#190) b60f653, closes #190 #161 | ||
* Multi keyrings should not require a generator (#165) 11ff819, closes #165 | ||
# [0.2.0-preview.2](/compare/@aws-crypto/material-management@0.2.0-preview.1...@aws-crypto/material-management@0.2.0-preview.2) (2019-07-24) | ||
@@ -8,0 +22,0 @@ |
{ | ||
"name": "@aws-crypto/material-management", | ||
"version": "0.2.0-preview.2", | ||
"version": "0.2.0-preview.3", | ||
"scripts": { | ||
@@ -52,3 +52,3 @@ "prepublishOnly": "npm run build", | ||
}, | ||
"gitHead": "970dbfad262186db90bd9ad2eba7a36d8a54ca18" | ||
"gitHead": "698180f30c85ef77a5739ebadd676d4b41ad441f" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
614202
2.91%3988
1.48%