UNPKG

@li0ard/kupyna

Version:

Kupyna (DSTU 7564:2014) hash function in pure TypeScript

104 lines (103 loc) 3.12 kB
import { KupynaBase, KupynaDerived } from "./modes/kupyna.js"; export {} from "./const.js"; export { KupynaBase, KupynaDerived } from "./modes/kupyna.js"; export * from "./kmac.js"; /** Kupyna 256 bit version */ export class Kupyna256 extends KupynaBase { outputLen = 32; rounds = 10; offsets = [0, 1, 2, 3, 4, 5, 6, 7]; /** Kupyna 256 bit version */ constructor() { super(64); } _cloneInto(to) { to ||= new Kupyna256(); to.s = new BigUint64Array(this.s); to.x = new Uint8Array(this.x); to.nx = this.nx; to.len = this.len; return to; } clone() { return this._cloneInto(); } /** Create hash instance */ static create() { return new Kupyna256(); } } /** Kupyna 512 bit version */ export class Kupyna512 extends KupynaBase { outputLen = 64; rounds = 14; offsets = [0, 1, 2, 3, 4, 5, 6, 11]; /** Kupyna 512 bit version */ constructor() { super(128); } _cloneInto(to) { to ||= new Kupyna512(); to.s = new BigUint64Array(this.s); to.x = new Uint8Array(this.x); to.nx = this.nx; to.len = this.len; return to; } clone() { return this._cloneInto(); } /** Create hash instance */ static create() { return new Kupyna512(); } } /** Kupyna 48 bit */ export class Kupyna48 extends KupynaDerived { constructor() { super(Kupyna256.create, -6); } /** Create hash instance */ static create() { return new Kupyna48(); } _cloneInto(to) { to ||= new Kupyna48(); to.buffer = new Uint8Array(this.buffer); return to; } clone() { return this._cloneInto(); } } /** Kupyna 304 bit */ export class Kupyna304 extends KupynaDerived { constructor() { super(Kupyna512.create, -38); } /** Create hash instance */ static create() { return new Kupyna304(); } _cloneInto(to) { to ||= new Kupyna304(); to.buffer = new Uint8Array(this.buffer); return to; } clone() { return this._cloneInto(); } } /** Kupyna 384 bit */ export class Kupyna384 extends KupynaDerived { constructor() { super(Kupyna512.create, -48); } /** Create hash instance */ static create() { return new Kupyna384(); } _cloneInto(to) { to ||= new Kupyna384(); to.buffer = new Uint8Array(this.buffer); return to; } clone() { return this._cloneInto(); } } /** * Compute hash with Kupyna 48 bit * @param data Input data */ export const kupyna48 = (data) => new Kupyna48().update(data).digest(); /** * Compute hash with Kupyna 256 bit * @param data Input data */ export const kupyna256 = (data) => new Kupyna256().update(data).digest(); /** * Compute hash with Kupyna 304 bit * @param data Input data */ export const kupyna304 = (data) => new Kupyna304().update(data).digest(); /** * Compute hash with Kupyna 384 bit * @param data Input data */ export const kupyna384 = (data) => new Kupyna384().update(data).digest(); /** * Compute hash with Kupyna 512 bit * @param data Input data */ export const kupyna512 = (data) => new Kupyna512().update(data).digest();