Compare commits

..

No commits in common. "88def95e47ace9fbb4215e91b420e74c7bdfd871" and "8745c2226896daee95695931d2ed0bdb806ba818" have entirely different histories.

3 changed files with 27 additions and 16 deletions

View file

@ -6,4 +6,3 @@ ColumnLimit: 80 # Wrap lines after 80 characters
AllowShortLoopsOnASingleLine: true AllowShortLoopsOnASingleLine: true
AlwaysBreakTemplateDeclarations: true AlwaysBreakTemplateDeclarations: true
BreakConstructorInitializers: BeforeComma BreakConstructorInitializers: BeforeComma
AllowShortIfStatementsOnASingleLine: true

36
rsa.c
View file

@ -7,16 +7,20 @@ u64 gcd(u64 a, u64 b) { return extended_euclid(a, b, NULL, NULL); }
u64 extended_euclid(u64 a, u64 b, u64 *x, u64 *y) { u64 extended_euclid(u64 a, u64 b, u64 *x, u64 *y) {
if (b == 0) { if (b == 0) {
if (x) *x = 1; if (x)
if (y) *y = 0; *x = 1;
if (y)
*y = 0;
return a; return a;
} }
u64 x1, y1; u64 x1, y1;
u64 gcd = extended_euclid(b, a % b, &x1, &y1); u64 gcd = extended_euclid(b, a % b, &x1, &y1);
if (x) *x = y1; if (x)
if (y) *y = x1 - (a / b) * y1; *x = y1;
if (y)
*y = x1 - (a / b) * y1;
return gcd; return gcd;
} }
@ -82,17 +86,20 @@ u64 gen_prime(u64 min, u64 max) {
} }
bool is_prime(u64 n) { bool is_prime(u64 n) {
if (n < 2) return false; if (n < 2)
return false;
for (int i = 2; i < n / 2 + 1; i++) { for (int i = 2; i < n / 2 + 1; i++) {
if (n % i == 0) return false; if (n % i == 0)
return false;
} }
return true; return true;
} }
bool miller_rabin(u64 n, u64 k) { bool miller_rabin(u64 n, u64 k) {
if (n < 2) return false; if (n < 2)
return false;
u64 d = n - 1; u64 d = n - 1;
u64 s = 0; u64 s = 0;
@ -106,14 +113,17 @@ bool miller_rabin(u64 n, u64 k) {
u64 a = prand_range(2, n - 2); u64 a = prand_range(2, n - 2);
u64 x = modexp(a, d, n); u64 x = modexp(a, d, n);
if (x == 1 || x == n - 1) continue; if (x == 1 || x == n - 1)
continue;
for (u64 r = 1; r < s; r++) { for (u64 r = 1; r < s; r++) {
x = modexp(x, 2, n); x = modexp(x, 2, n);
if (x == n - 1) break; if (x == n - 1)
break;
} }
if (x != n - 1) return false; // Not prime if (x != n - 1)
return false; // Not prime
} }
return true; // Likely prime return true; // Likely prime
@ -124,7 +134,8 @@ u64 mod_inverse(u64 a, u64 m) {
u64 y = 0, x = 1; u64 y = 0, x = 1;
// Modular inverse does not exist when m is 1 // Modular inverse does not exist when m is 1
if (m == 1) return 0; if (m == 1)
return 0;
while (a > 1) { while (a > 1) {
// q is quotient // q is quotient
@ -142,7 +153,8 @@ u64 mod_inverse(u64 a, u64 m) {
} }
// Make x positive // Make x positive
if (x < 0) x += m0; if (x < 0)
x += m0;
return x; return x;
} }