...
This commit is contained in:
@ -1,4 +1,9 @@
|
||||
import { cryptoRandom, generate_prime, KEY_SIZE } from "./random_primes.js";
|
||||
import {
|
||||
cryptoRandom,
|
||||
generate_prime,
|
||||
generate_safe_prime,
|
||||
KEY_SIZE,
|
||||
} from "./random_primes.js";
|
||||
import { gcd, mod_exp } from "./math.js";
|
||||
|
||||
const PAILLIER = 0;
|
||||
@ -371,25 +376,8 @@ export function generate_keypair() {
|
||||
p = BigInt(window.sessionStorage.getItem("p"));
|
||||
q = BigInt(window.sessionStorage.getItem("q"));
|
||||
} else {
|
||||
let p1 = generate_prime();
|
||||
while (p1 % 4n !== 3n) {
|
||||
p1 = generate_prime();
|
||||
}
|
||||
|
||||
let primes = [p1];
|
||||
|
||||
while (
|
||||
check_gcd(primes.slice(0, primes.length - 1), primes[primes.length - 1]) ===
|
||||
null
|
||||
) {
|
||||
q = generate_prime();
|
||||
while (q % 4n !== 3n) {
|
||||
q = generate_prime();
|
||||
}
|
||||
primes.push(q);
|
||||
}
|
||||
|
||||
p = check_gcd(primes.slice(0, primes.length - 1), primes[primes.length - 1]);
|
||||
p = generate_safe_prime();
|
||||
q = generate_safe_prime();
|
||||
}
|
||||
|
||||
window.sessionStorage.setItem("p", p);
|
||||
|
@ -97,6 +97,15 @@ export function generate_prime() {
|
||||
}
|
||||
}
|
||||
|
||||
export function generate_safe_prime() {
|
||||
while (true) {
|
||||
let n = generate_prime();
|
||||
if (small_prime_test((n - 1n) / 2n) && miller_rabin((n - 1n) / 2n, 40)) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const SMALL_PRIMES = [
|
||||
2n,
|
||||
3n,
|
||||
|
Reference in New Issue
Block a user