import { FieldContext, FieldRuleExecutor, FieldTransform, FieldType, RuleContext, RuleExecutor } from "../../serde/serde"; import { DekClient, Dek, Kek } from "./dekregistry/dekregistry-client"; import { ClientConfig } from "../../rest-service"; import { KmsClient } from "./kms-registry"; export declare enum DekFormat { AES128_GCM = "AES128_GCM", AES256_GCM = "AES256_GCM", AES256_SIV = "AES256_SIV" } interface KekId { name: string; deleted: boolean; } interface DekId { kekName: string; subject: string; version: number | null; algorithm: string; deleted: boolean; } export declare class Clock { now(): number; } export declare class EncryptionExecutor implements RuleExecutor { config: Map | null; client: DekClient | null; clock: Clock; /** * Register the field encryption executor with the rule registry. */ static register(): EncryptionExecutor; static registerWithClock(clock: Clock): EncryptionExecutor; constructor(clock?: Clock); configure(clientConfig: ClientConfig, config: Map): void; type(): string; transform(ctx: RuleContext, msg: any): Promise; newTransform(ctx: RuleContext): EncryptionExecutorTransform; close(): Promise; private getCryptor; private getKekName; private getDekExpiryDays; } export declare class Cryptor { static readonly EMPTY_AAD: Uint8Array; dekFormat: DekFormat; isDeterministic: boolean; constructor(dekFormat: DekFormat); private keySize; generateKey(): Buffer; encrypt(dek: Buffer, plaintext: Buffer): Promise; decrypt(dek: Buffer, ciphertext: Buffer): Promise; encryptWithAesSiv(key: Uint8Array, plaintext: Uint8Array): Promise>; decryptWithAesSiv(key: Uint8Array, ciphertext: Uint8Array): Promise>; encryptWithAesGcm(key: Uint8Array, plaintext: Uint8Array): Promise>; decryptWithAesGcm(key: Uint8Array, ciphertext: Uint8Array): Promise>; } export declare class EncryptionExecutorTransform { private executor; private cryptor; private kekName; private kek; private dekExpiryDays; constructor(executor: EncryptionExecutor, cryptor: Cryptor, kekName: string, dekExpiryDays: number); isDekRotated(): boolean; getKek(ctx: RuleContext): Promise; getOrCreateKek(ctx: RuleContext): Promise; retrieveKekFromRegistry(key: KekId): Promise; storeKekToRegistry(key: KekId, kmsType: string, kmsKeyId: string, shared: boolean): Promise; getOrCreateDek(ctx: RuleContext, version: number | null): Promise; createDek(dekId: DekId, newVersion: number | null, encryptedDek: Buffer | null): Promise; retrieveDekFromRegistry(key: DekId): Promise; storeDekToRegistry(key: DekId, encryptedDek: Buffer | null): Promise; isExpired(ctx: RuleContext, dek: Dek | null): boolean; transform(ctx: RuleContext, fieldType: FieldType, fieldValue: any): Promise; prefixVersion(version: number, ciphertext: Buffer): Buffer; extractVersion(ciphertext: Buffer): number | null; toBytes(type: FieldType, value: any): Buffer | null; toObject(type: FieldType, value: Buffer): any; } export declare class FieldEncryptionExecutor extends FieldRuleExecutor { executor: EncryptionExecutor; /** * Register the field encryption executor with the rule registry. */ static register(): FieldEncryptionExecutor; static registerWithClock(clock: Clock): FieldEncryptionExecutor; constructor(clock?: Clock); configure(clientConfig: ClientConfig, config: Map): void; type(): string; newTransform(ctx: RuleContext): FieldTransform; close(): Promise; } export declare class FieldEncryptionExecutorTransform implements FieldTransform { private executorTransform; constructor(executorTransform: EncryptionExecutorTransform); transform(ctx: RuleContext, fieldCtx: FieldContext, fieldValue: any): Promise; } export declare class KmsClientWrapper implements KmsClient { private config; private kek; private kekId; private kmsKeyIds; constructor(config: Map, kek: Kek); getKmsKeyIds(): string[]; supported(keyUri: string): boolean; encrypt(rawKey: Buffer): Promise; decrypt(encryptedKey: Buffer): Promise; } export {};