UNPKG

@li0ard/magma

Version:

Magma cipher implementation in pure TypeScript

77 lines (76 loc) 2.95 kB
import { type Sbox } from "./const"; /** Magma core class */ export declare class Magma { private key; private sbox; private roundKeys; /** * Magma core class * @param key Encryption key * @param sbox S-Box */ constructor(key: Uint8Array, sbox?: Sbox); /** Regenerate round keys for sequence */ regenerateRoundKeys(sequence: number[]): number[]; /** * Applies substitution transformation (T-transformation) using S-box. * Breaks input value into 4-bit parts, substitutes each part using corresponding S-box row, * and reconstructs transformed value. * @param value Value to be transformed * @returns {number} Transformed 32-bit value after substitution */ transformT(value: number): number; /** * Applies the G-transformation (Feistel round function) to input value. * Performs addition with round key, applies T-transformation, and performs cyclic left shift. * @param a Input 32-bit value to be transformed * @param k Round key used in the transformation * @returns {number} Transformed 32-bit value after G-transformation */ transformG(a: number, k: number): number; /** * Returns round keys * @returns {number[]} */ getRoundKeys(): number[]; /** * Proceed single block of data using Magma cipher * @param block Block * @param sequence Sequence of `K_i` S-Box applying * @returns {Uint8Array} Proceeded block * @throws {CipherError} Block size is invalid or data is too short */ proceedBlock(block: Uint8Array, sequence: number[]): Uint8Array; /** * Encrypts single block of data using Magma cipher. * @param block Block to be encrypted */ encryptBlock(block: Uint8Array): Uint8Array; /** * Decrypts single block of data using Magma cipher. * @param block Block to be decrypted */ decryptBlock(block: Uint8Array): Uint8Array; /** Encrypt single block of data using old Magma (GOST 28147-89) algorithm */ encryptLegacy(block: Uint8Array): Uint8Array; /** Decrypt single block of data using old Magma (GOST 28147-89) algorithm */ decryptLegacy(block: Uint8Array): Uint8Array; /** Convert bytes to uint32 number */ static bytesToU32(bytes: Uint8Array): number; /** Convert uint32 number to bytes */ static u32ToBytes(value: number): Uint8Array; /** Backward compatibility key preparation for 28147-89 key schedule */ static reverseKey(key: Uint8Array): Uint8Array; /** Backward compatibility block preparation for 28147-89 */ static reverseChunks(data: Uint8Array): Uint8Array; } export * from "./const"; export * from "./modes/ecb"; export * from "./modes/cbc"; export * from "./modes/cfb"; export * from "./modes/ctr"; export * from "./modes/ofb"; export * from "./modes/mac"; export * from "./modes/acpkm"; export * from "./modes/mgm"; export * from "./modes/wrap";