Skip to content

IntModMul

IntModMul

Description

Compute (a * b) mod modulus.

Parameters

Name Direction Description
result out Destination for the reduced product
a in Left operand
b in Right operand
modulus in Modulus

Usage example (from documentation)

  IntModMul(&result, &a, &b, &modulus);

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    void IntModMul(Int *result, Int *a, Int *b, Int *modulus) {
        ValidateInt(result);
        ValidateInt(a);
        }
    
        IntModMul(&value, a, &inverse, modulus);
    
        IntDeinit(&inverse);
    
    void IntSquareMod(Int *result, Int *value, Int *modulus) {
        IntModMul(result, value, value, modulus);
    }
                Int next = IntInit();
    
                IntModMul(&next, &acc, &base_mod, modulus);
                IntDeinit(&acc);
                acc = next;
                Int next = IntInit();
    
                IntModMul(&next, &base_mod, &base_mod, modulus);
                IntDeinit(&base_mod);
                base_mod = next;
                Int next = IntInit();
    
                IntModMul(&next, &acc, &base_mod, modulus);
                IntDeinit(&acc);
                acc = next;
                Int next = IntInit();
    
                IntModMul(&next, &base_mod, &base_mod, modulus);
                IntDeinit(&base_mod);
                base_mod = next;
                    }
    
                    IntModMul(&next, &r, &b, modulus);
                    IntDeinit(&r);
                    r = next;
                    IntSquareMod(&b_sq, &b, modulus);
                    next = IntInit();
                    IntModMul(&next, &t, &b_sq, modulus);
                    IntDeinit(&t);
                    t = next;
    
    bool test_int_mod_mul(void) {
        WriteFmt("Testing IntModMul\n");
    
        Int a = IntFrom(123);
        Int result_value = IntInit();
    
        IntModMul(&result_value, &a, &b, &m);
    
        bool result = IntToU64(&result_value) == 22;
        result      = result && (IntToU64(&result_value) == 12);
    
        IntModMul(&check, &result_value, &b, &m);
        result = result && (IntCompare(&check, 10) == 0);
        result      = result && (IntToU64(&result_value) == 4);
    
        IntModMul(&check, &value, &result_value, &mod);
        result = result && (IntToU64(&check) == 1);
Last updated on