UNPKG

@jackallabs/dogwood-tree

Version:

Jackal Labs JS Merkletree implementation

298 lines (280 loc) 9.24 kB
export declare interface IGenericObject { [key: string]: any; } /** * @interface IHashFunctionOptions * @desc - Merkletree hashing options. * @since 1.0.0 * * @prop {function} sha3_512 - Hashes using SHA3-512. */ export declare interface IHashFunctionOptions { blake3: (a: ArrayBuffer) => ArrayBuffer; sha3_512: (a: ArrayBuffer) => ArrayBuffer; } /** * @interface IMerkletree * @desc - Merkletree Proving Structure. * @since 1.0.0 * * @prop {getRoot} getRoot * @prop {getRootAsHex} getRootAsHex * @prop {getSalt} getSalt * @prop {generatePollard} generatePollard * @prop {generateProof} generateProof */ export declare interface IMerkletree { /** * @method getRoot * @desc - Get raw merkletree root node. * @returns {ArrayBuffer} */ getRoot(): ArrayBuffer; /** * @method getRootAsHex * @desc - Get merkletree root node as hex encoding. * @returns {string} */ getRootAsHex(): string; /** * @method getSalt * @desc - Check if salt was used in creating merkletree. * @returns {boolean} */ getSalt(): boolean; /** * @method generatePollard * @desc - Generate IPollard instance from merkletree. * @param {number} height - Height to use for creating pollard. * @returns {IPollard} */ generatePollard(height: number): IPollard; /** * @method generateProof * @desc - Generate IProof instance from merkletree. * @param {ArrayBuffer} data - ArrayBuffer to check for comparison. * @param {number} height - Height to use for creating internal pollard. * @returns {IProof} */ generateProof(data: ArrayBuffer, height: number): IProof; } /** * @interface IMerkletreeCompact * @desc - Memory efficient Merkletree Hashing Structure. * @since 1.1.0 * * @prop {getRoot} getRoot * @prop {getRootAsHex} getRootAsHex */ export declare interface IMerkletreeCompact { /** * @method getRoot * @desc - Get raw merkletree root node. * @returns {ArrayBuffer} */ getRoot(): ArrayBuffer; /** * @method getRootAsHex * @desc - Get merkletree root node as hex encoding. * @returns {string} */ getRootAsHex(): string; } /** * @interface IMerkletreeCompactSource * @desc - Memory efficient Merkletree creation parameters. * @since 1.1.0 * * @prop {File} [raw] - Raw File source to use default pre-processing. * @prop {ArrayBuffer} [seed] - Raw ArrayBuffer to use default pre-processing. * @prop {Array<ArrayBuffer>} [sapling] - Prepared array of ArrayBuffers. * @prop {number} [chunkSize] - Chunk size to use with seed. * @prop {string} [hashType] - Tag of hashing type to use, currently only supports SHA3_512. */ export declare interface IMerkletreeCompactSource { raw?: File; seed?: ArrayBuffer; sapling?: Array<ArrayBuffer>; chunkSize?: number; hashType?: TBranchHashOptionKeys; } /** * @interface IMerkletreeSource * @desc - Merkletree creation parameters. * @since 1.0.0 * * @prop {ArrayBuffer} [seed] - Raw ArrayBuffer to use default pre-processing. * @prop {Array<ArrayBuffer>} [sapling] - Prepared array of ArrayBuffers. * @prop {number} [chunkSize] - Chunk size to use with seed. * @prop {string} [hashType] - Tag of hashing type to use, currently only supports SHA3_512. * @prop {boolean} [useSalt] - If merkletree should be salted, not yet implemented. * @prop {boolean} [sort] - If merkletree should be sorted, not yet implemented. * @prop {boolean} [preserve] - If merkletree should preserve full tree or only final root. */ export declare interface IMerkletreeSource { seed?: ArrayBuffer; sapling?: Array<ArrayBuffer>; chunkSize?: number; hashType?: TBranchHashOptionKeys; useSalt?: boolean; sort?: boolean; preserve?: boolean; } export declare interface IMultiProof { verify(data: Array<ArrayBuffer>): Promise<boolean>; } /** * @interface IPollard * @desc - Merkletree Pollard. * @since 1.0.0 * * @prop {getHashes} getHashes * @prop {getHeight} getHeight * @prop {getLength} getLength * @prop {verify} verify */ export declare interface IPollard { /** * @method getHashes * @desc - Get hashes in pollard. * @returns {Array<ArrayBuffer>} */ getHashes(): Array<ArrayBuffer>; /** * @method getHeight * @desc - Get height in parent merkletree of this pollard. * @returns {number} */ getHeight(): number; /** * @method getLength * @desc - Get number of hashes in pollard. * @returns {number} */ getLength(): number; /** * @method verify * @desc - Async check if this is a valid merkletree pollard. * @returns {Promise<boolean>} */ verify(): Promise<boolean>; } /** * @interface IProof * @desc - Merkletree Proof. * @since 1.0.0 * * @prop {verify} verify */ export declare interface IProof { /** * @method verify * @desc - Async check if ArrayBuffer is present in merkletree. * @param {ArrayBuffer} data - ArrayBuffer to check for comparison. * @returns {Promise<boolean>} */ verify(data: ArrayBuffer): Promise<boolean>; } /** * @class Merkletree * @desc - Merkletree instance. * @see {IMerkletree} */ export declare class Merkletree implements IMerkletree { protected readonly root: ArrayBuffer; protected readonly source: Array<ArrayBuffer>; protected readonly nodes: Array<ArrayBuffer>; protected readonly hash: TBranchHashOptionKeys; protected readonly salted: boolean; protected readonly sorted: boolean; /** * @constructor Merkletree * @protected */ protected constructor(r: ArrayBuffer, p: boolean, sap: Array<ArrayBuffer>, n: Array<ArrayBuffer>, h: TBranchHashOptionKeys, u: boolean, s: boolean); /** * @constructor Merkletree * @param {IMerkletreeSource} input - Merkletree creation parameters. * @returns {Promise<IMerkletree>} */ static grow(input: IMerkletreeSource): Promise<IMerkletree>; getRoot(): ArrayBuffer; getRootAsHex(): string; getSalt(): boolean; generatePollard(height: number): IPollard; generateProof(data: ArrayBuffer, height: number): IProof; } /** * @class MerkletreeCompact * @desc - Merkletree Compact instance. * @see {IMerkletreeCompact} */ export declare class MerkletreeCompact implements IMerkletreeCompact { protected readonly root: ArrayBuffer; /** * @constructor MerkletreeCompact * @protected */ protected constructor(r: ArrayBuffer); /** * @constructor MerkletreeCompact * @param {IMerkletreeCompactSource} input - Merkletree Compact creation parameters. * @returns {Promise<IMerkletreeCompact>} */ static grow(input: IMerkletreeCompactSource): Promise<IMerkletreeCompact>; getRoot(): ArrayBuffer; getRootAsHex(): string; } export declare class MultiProof implements IMultiProof { constructor(); verify(data: Array<ArrayBuffer>): Promise<boolean>; } export declare type OneOf<T, V extends any[], NK extends keyof V = Exclude<keyof V, keyof any[]>> = { [K in NK]: T extends V[K] ? V[K] : never; }[NK]; /** * @class Pollard * @desc - Merkletree Pollard. * @see {IPollard} */ export declare class Pollard implements IPollard { protected readonly hashes: Array<ArrayBuffer>; protected readonly hashType: TBranchHashOptionKeys; protected readonly height: number; /** * @constructor Pollard * @param {Array<ArrayBuffer>} hashes - Merkletree hashes. * @param {TBranchHashOptionKeys} hashType - Merkletree hash type used. * @param {number} height - Height in Merkletree. */ constructor(hashes: Array<ArrayBuffer>, hashType: TBranchHashOptionKeys, height: number); getHashes(): Array<ArrayBuffer>; getHeight(): number; getLength(): number; verify(): Promise<boolean>; } /** * @class Proof * @desc - Merkletree Proof. * @see {IProof} */ export declare class Proof implements IProof { protected readonly hashes: Array<ArrayBuffer>; protected readonly index: number; protected readonly hashType: TBranchHashOptionKeys; protected readonly salted: boolean; protected readonly pollard: IPollard; /** * @constructor Proof * @param {Array<ArrayBuffer>} hashes - Merkletree hashes. * @param {number} index - Merkletree index. * @param {TBranchHashOptionKeys} hashType - Merkletree hash type used. * @param {boolean} salted - If merkletree was salted. * @param {IPollard} pollard - Pollard instance to use as source. */ constructor(hashes: Array<ArrayBuffer>, index: number, hashType: TBranchHashOptionKeys, salted: boolean, pollard: IPollard); verify(data: ArrayBuffer): Promise<boolean>; } export declare type TBranchHashOptionKeys = 'sha3_512'; export declare type TTypedArrays = Uint8Array | Uint16Array | Uint32Array; export { }