Commit Graph
8 Commits
Author SHA1 Message Date
Piotr Dyraga 65d7ad4e73 Fixed typo in the documentation 2018-07-27 17:43:46 +02:00
Piotr Dyraga ca756b481b Removed deprecated GenerateSafePrimes function
The new function should be now called directly.
2018-07-27 17:42:05 +02:00
Piotr Dyraga 78ea6668f8 Improved safe prime generator documentation 2018-07-27 17:31:27 +02:00
Piotr Dyraga 7f7e390737 Removed not needed code 2018-07-27 16:56:48 +02:00
Piotr Dyraga 2c0d4e093d Wait for all goroutines to finish
Initially, we did not wait for all goroutines to finish which was fine
as long as we did not run all tests with `go test` and observe deadlock
in 50% of cases. This is interesting, since deadlock never occurred when
running safe_prime_generator_test.go. Anyway, waiting for all go
routines to finish shouldn't harm the performance a lot and it gives a
guarantee we did not miss anything.
2018-07-26 11:12:23 +02:00
Piotr Dyraga 21d6230b20 Improved documentation for the safe prime generator 2018-07-26 10:19:20 +02:00
Piotr Dyraga e0b836a4bc Generate safe prime concurrently
How fast we generate a prime number is mostly a matter of luck. It
varies from miliseconds to seconds and depends how lucky we are with
drawing bytes.

With today's multicore processors, we can execute the process on
multiple cores concurrently, accept the first valid result and cancel
the rest of work. This way, with the same algorithm, we get the result
faster.
2018-07-26 08:53:23 +02:00
Piotr Dyraga f5a107a36f Draft implementation of a safe prime generator
I've adapted a Go code for generating random numbers by inserting some
optimisations that will allow us to generate safe primes faster than
with the previous, naive approach.

First of all, having q which can be prime, we first check whether q%3=1.
If that's true, there is no chance p=2q+1 is prime. It lets us to reject
candidate numbers quicker without running an expensive primality tests.

Also, before we run a primality test for q, we may check p=2q+1 against
the primes between 3-53 (We are limited by Go's uint64 range).

If all those conditions are met and we know p is prime, it's enough to
check Pocklington criterion for q instead of running an expensive
primality test for it.
2018-07-25 10:55:49 +02:00