iocane
Version:
Textual encryption library
63 lines (62 loc) • 2.89 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import { Readable, Writable } from "stream";
export type BufferLike = Buffer | ArrayBuffer;
export type DataLike = string | Buffer | ArrayBuffer;
export interface DerivedKeyInfo {
salt: string;
key: Buffer | ArrayBuffer;
hmac: Buffer | ArrayBuffer | null;
rounds: number;
}
export interface EncryptedBinaryComponents extends EncryptedComponentsBase {
content: Buffer | ArrayBuffer;
}
export interface EncryptedComponents extends EncryptedComponentsBase {
content: string;
}
export type EncryptedComponentsBase = EncryptedPayloadHeader & EncryptedPayloadFooter;
export interface EncryptedPayloadFooter {
auth: string;
}
export interface EncryptedPayloadHeader {
iv: string;
salt: string;
rounds: number;
method: EncryptionAlgorithm;
}
export declare enum EncryptionAlgorithm {
CBC = "cbc",
GCM = "gcm"
}
export interface EncryptFunction {
(target: string | BufferLike, options?: EncryptFunctionOptions): Promise<any>;
}
export interface EncryptFunctionOptions {
algo?: EncryptionAlgorithm;
}
export interface IocaneAdapterBase {
algorithm: EncryptionAlgorithm;
decrypt: (encrypted: DataLike, password: string) => Promise<DataLike>;
decryptCBC: (encryptedComponents: EncryptedComponents | EncryptedBinaryComponents, keyDerivationInfo: DerivedKeyInfo) => Promise<string | BufferLike>;
decryptGCM: (encryptedComponents: EncryptedComponents | EncryptedBinaryComponents, keyDerivationInfo: DerivedKeyInfo) => Promise<string | BufferLike>;
derivationRounds: number;
deriveKey: (password: string, salt: string) => Promise<DerivedKeyInfo>;
encrypt: (text: DataLike, password: string) => Promise<DataLike>;
encryptCBC: (content: string | BufferLike, keyDerivationInfo: DerivedKeyInfo, iv: BufferLike) => Promise<EncryptedComponents | EncryptedBinaryComponents>;
encryptGCM: (content: string | BufferLike, keyDerivationInfo: DerivedKeyInfo, iv: BufferLike) => Promise<EncryptedComponents | EncryptedBinaryComponents>;
generateIV: () => Promise<BufferLike>;
generateSalt: (length: number) => Promise<string>;
packData: (encryptedComponents: EncryptedBinaryComponents | EncryptedComponentsBase) => BufferLike;
packText: (encryptedComponents: EncryptedComponents) => PackedEncryptedText;
setAlgorithm: (algo: EncryptionAlgorithm) => IocaneAdapterBase;
setDerivationRounds: (rounds: number) => IocaneAdapterBase;
unpackData: (encryptedContent: BufferLike) => EncryptedBinaryComponents;
unpackText: (encryptedContent: PackedEncryptedText) => EncryptedComponents;
}
export interface IocaneAdapter extends IocaneAdapterBase {
createDecryptStream: (password: string) => Readable;
createEncryptStream: (password: string) => Writable;
}
export type PackedEncryptedText = string;