I have a c struct as
typedef struct u128b { uint64_t hi, uint64_t lo } u128b How would I perform a modulo expression x^e mod m when all 3 variables, x, ė, and m are all u128b structs?
I've attempted to run the code from 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; } This works when all the parameters and variables are uint64_t but how would I apply this to two separate 64 bit variables hi and low for all 3 variables? shifting bits across hi and lo? and how would the modulo work with the hi and lo bits?