Skip to content

IntPowMod

IntPowMod

Description

Generic modular exponentiation convenience macro.

Parameters

Name Direction Description
result out Destination for the reduced power
base in Base value
exponent in Exponent selected through generic dispatch
modulus in Modulus

Usage example (from documentation)

  IntPowMod(&result, &base, 65537u, &modulus);

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    void(IntPowMod)(Int *result, Int *base, Int *exponent, Int *modulus) {
        ValidateInt(result);
        ValidateInt(base);
            MISRA_PRIV_IntAddU64(&exponent, &exponent, 1);
            IntShiftRight(&exponent, 2);
            IntPowMod(&root, &a, &exponent, modulus);
    
            IntDeinit(&exponent);
            }
    
            IntPowMod(&c, &z, &q, modulus);
            IntPowMod(&t, &a, &q, modulus);
    
            IntPowMod(&c, &z, &q, modulus);
            IntPowMod(&t, &a, &q, modulus);
    
            exponent = IntClone(&q);
            MISRA_PRIV_IntAddU64(&exponent, &exponent, 1);
            IntShiftRight(&exponent, 1);
            IntPowMod(&r, &a, &exponent, modulus);
    
            while (MISRA_PRIV_IntCompareU64(&t, 1) != 0) {
                }
    
                IntPowMod(&x, &base, &d, value);
                if ((MISRA_PRIV_IntCompareU64(&x, 1) == 0) || IntEQ(&x, &n_minus_one)) {
                    IntDeinit(&base);
    
    bool test_int_pow_mod_scalar(void) {
        WriteFmt("Testing IntPowMod scalar-exponent dispatch\n");
    
        Int base = IntFrom(7);
        Int result_value = IntInit();
    
        IntPowMod(&result_value, &base, 20u, &mod);
    
        bool result = IntToU64(&result_value) == 3;
    
    bool test_int_pow_mod_integer_exponent(void) {
        WriteFmt("Testing IntPowMod Int-exponent dispatch\n");
    
        Int base = IntFrom(4);
        Int result_value = IntInit();
    
        IntPowMod(&result_value, &base, &exp, &mod);
    
        bool result = IntToU64(&result_value) == 445;
    
    bool test_int_pow_mod_scalar_zero_modulus(void) {
        WriteFmt("Testing IntPowMod scalar-exponent zero modulus handling\n");
    
        Int base = IntFrom(2);
        Int result_value = IntInit();
    
        IntPowMod(&result_value, &base, 8u, &mod);
        return false;
    }
    
    bool test_int_pow_mod_integer_zero_modulus(void) {
        WriteFmt("Testing IntPowMod Int-exponent zero modulus handling\n");
    
        Int base = IntFrom(2);
        Int result_value = IntInit();
    
        IntPowMod(&result_value, &base, &exp, &mod);
        return false;
    }
    /// TAGS: Int, Math, Modular, Power
    ///
    void (IntPowMod)(Int *result, Int *base, Int *exponent, Int *modulus);
    ///
    /// Compute the multiplicative inverse of a value modulo `modulus`.
                (exponent),                                                                                                \
                Int: MISRA_PRIV_IntPowModValue,                                                                            \
                Int *: IntPowMod,                                                                                          \
                const Int *: MISRA_PRIV_IntPowModConst,                                                                    \
                unsigned char: MISRA_PRIV_IntPowU64Mod,                                                                    \
Last updated on