0

我有 ac 结构

typedef struct u128b {
    uint64_t hi, 
    uint64_t lo
} u128b

当所有 3 个变量 x、ė 和 m 都是 u128b 结构时,我将如何执行模表达式 x^e mod m?

我试图从https://stackoverflow.com/a/20114154/11667622运行代码

u128b mul_mod(u128b a, u128b b, u128b m)
{
    if (m == 0)
        return a * b;

    u128b r = {0, 0};

    while(a > 0)
    {
        if (a & 1)
            if ((r += b) > m) r %= m;
        a >>= 1;
        if ((b <<= 1) > m) b %= m;
    }
    return r;
}

//https://stackoverflow.com/questions/20111827/various-questions-about-rsa-encryption/20114154#20114154
u128b pow_mod(u128b base, u128b expon, u128b mod)
{
    u128b remainder = {0, 1};

    while (expon > 0) {
        if (expon & 1)
            remainder = mul_mod(r, base, mod);
        base = mul_mod(base, base, mod);
        expon >>= 1;
    }
    return remainder;
}

这在所有参数和变量都是 uint64_t 时有效,但是我如何将它应用于所有 3 个变量的两个单独的 64 位变量 hi 和 low ?在 hi 和 lo 之间移动位?模如何与高位和低位一起工作?

4

0 回答 0