cipher_magma 0.8.3

Block Cipher Magma (GOST R 34.12-2015, former GOST 28147-89)
Documentation
/// Substitution Box (S-Box) data according to [Appendix C. RFC7836](https://datatracker.ietf.org/doc/html/rfc7836#appendix-C)
///
/// Parameter set: id-tc26-gost-28147-param-Z
pub const SUBSTITUTION_BOX_RFC7836: [u8; 128] = [
    0xC, 0x4, 0x6, 0x2, 0xA, 0x5, 0xB, 0x9, 0xE, 0x8, 0xD, 0x7, 0x0, 0x3, 0xF, 0x1, 0x6, 0x8,
    0x2, 0x3, 0x9, 0xA, 0x5, 0xC, 0x1, 0xE, 0x4, 0x7, 0xB, 0xD, 0x0, 0xF, 0xB, 0x3, 0x5, 0x8,
    0x2, 0xF, 0xA, 0xD, 0xE, 0x1, 0x7, 0x4, 0xC, 0x9, 0x6, 0x0, 0xC, 0x8, 0x2, 0x1, 0xD, 0x4,
    0xF, 0x6, 0x7, 0x0, 0xA, 0x5, 0x3, 0xE, 0x9, 0xB, 0x7, 0xF, 0x5, 0xA, 0x8, 0x1, 0x6, 0xD,
    0x0, 0x9, 0x3, 0xE, 0xB, 0x4, 0x2, 0xC, 0x5, 0xD, 0xF, 0x6, 0x9, 0x2, 0xC, 0xA, 0xB, 0x7,
    0x8, 0x1, 0x4, 0x3, 0xE, 0x0, 0x8, 0xE, 0x2, 0x5, 0x6, 0x9, 0x1, 0xC, 0xF, 0x4, 0xB, 0x0,
    0xD, 0xA, 0x3, 0x7, 0x1, 0x7, 0xE, 0xD, 0x0, 0x5, 0x8, 0x3, 0x4, 0xF, 0xA, 0x6, 0x9, 0xC,
    0xB, 0x2,
];

/// Substitution Box (S-Box) data according to [RFC5831](https://datatracker.ietf.org/doc/html/rfc5831#section-7.1)
///
/// As per [Appendix B of RFC8891](https://datatracker.ietf.org/doc/html/rfc8891.html#section-appendix.b) data values converted
/// from little-endian to big-endian format.
///
/// OID: 1.2.643.2.2.30.0
pub const SUBSTITUTION_BOX_RFC5831: [u8; 128] = [
    0x4, 0xA, 0x9, 0x2, 0xD, 0x8, 0x0, 0xE, 0x6, 0xB, 0x1, 0xC, 0x7, 0xF, 0x5, 0x3, 0xE, 0xB,
    0x4, 0xC, 0x6, 0xD, 0xF, 0xA, 0x2, 0x3, 0x8, 0x1, 0x0, 0x7, 0x5, 0x9, 0x5, 0x8, 0x1, 0xD,
    0xA, 0x3, 0x4, 0x2, 0xE, 0xF, 0xC, 0x7, 0x6, 0x0, 0x9, 0xB, 0x7, 0xD, 0xA, 0x1, 0x0, 0x8,
    0x9, 0xF, 0xE, 0x4, 0x6, 0xC, 0xB, 0x2, 0x5, 0x3, 0x6, 0xC, 0x7, 0x1, 0x5, 0xF, 0xD, 0x8,
    0x4, 0xA, 0x9, 0xE, 0x0, 0x3, 0xB, 0x2, 0x4, 0xB, 0xA, 0x0, 0x7, 0x2, 0x1, 0xD, 0x3, 0x6,
    0x8, 0x5, 0x9, 0xC, 0xF, 0xE, 0xD, 0xB, 0x4, 0x1, 0x3, 0xF, 0x5, 0x9, 0x0, 0xA, 0xE, 0x7,
    0x6, 0x8, 0x2, 0xC, 0x1, 0xF, 0xD, 0x0, 0x5, 0x7, 0xA, 0x4, 0x9, 0x2, 0x3, 0xE, 0x6, 0xB,
    0x8, 0xC,
];

/// Initialization Vector (IV)
///  
/// [GOST R 34.13-2015](https://www.tc26.ru/standard/gost/GOST_R_3413-2015.pdf)
///
/// CTR Mode: Page 36, Section A.2.2, uses MSB(32) part of IV
///
/// OFB Mode: Page 37, Section A.2.3, uses MSB(128) part of IV
///
/// CFB Mode: Page 39, Section A.2.5, uses MSB(128) part of IV
pub const IV_GOST_R3413_2015: [u64; 3] = [
    0x1234567890abcdef_u64,
    0x234567890abcdef1_u64,
    0x34567890abcdef12_u64,
];

/// Р 1323565.1.017—2018
///
/// Section size N
///
/// Page 7, CTR-ACPKM
pub const CTR_ACPKM_SECTION_SIZE_N: usize = 128;

/// Р 1323565.1.017—2018
///
/// Constant D for ACPKM function
///
/// Page 8, CTR-ACPKM
pub const CTR_ACPKM_D: [u8; 32] = [
    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
    0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D,
    0x9E, 0x9F,
];