UNPKG

@li0ard/kalyna

Version:

Kalyna (DSTU 7624:2014) cipher implementation in pure TypeScript

33 lines (32 loc) 1.08 kB
import { bytesToHex, hexToNumber, numberToBytesBE } from "@li0ard/gost3413/dist/utils"; export const bytesToNumberLE = (bytes) => hexToNumber(bytesToHex(bytes.slice().reverse())); export const numberToBytesLE = (n, len) => numberToBytesBE(n, len).reverse(); export const bytesToUint64s = (b) => { const size = Math.floor(b.length / 8); const result = new BigUint64Array(size); for (let i = 0; i < size; i++) result[i] = bytesToNumberLE(b.slice(i * 8, i * 8 + 8)); return result; }; export const uint64sToBytes = (w) => { const result = new Uint8Array(w.length * 8); for (let i = 0; i < w.length; i++) result.set(numberToBytesLE(w[i], 8), i * 8); return result; }; export const swap_block = (k, N) => { if (N <= 1) return; const t = k[0]; for (let i = 0; i < N - 1; i++) k[i] = k[i + 1]; k[N - 1] = t; }; export const equalBytes = (a, b) => { if (a.length !== b.length) return false; let diff = 0; for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i]; return diff === 0; };