@li0ard/magma
Version:
Magma cipher implementation in pure TypeScript
77 lines (76 loc) • 2.95 kB
TypeScript
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";