У меня есть структура c
typedef struct u128b {
uint64_t hi,
uint64_t lo
} u128b
Как бы я выполнил выражение по модулю x ^ e mod m, когда все 3 переменные, x, ė и m все являются структурами u128b?
Я пытался запустить код из 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, но как мне применить это к двум отдельным 64-битным переменным hi и low для всех 3 переменных?
сдвигая биты через привет и вот? и как будет работать модуль по битам hi и lo?