@li0ard/kupyna
Version:
Kupyna (DSTU 7564:2014) hash function in pure TypeScript
104 lines (103 loc) • 3.12 kB
JavaScript
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();