Improved performance of the safe prime generator #9

Merged
pdyraga merged 17 commits from master into master 2018-08-02 06:47:13 -04:00
pdyraga commented 2018-07-31 03:30:57 -04:00 (Migrated from github.com)

This PR aims at improving performance of the safe prime generator. The previous approach was as follows:

1. Generate prime `q` of `nBits - 1`
2. Compute `p = 2q + 1`.
3. Check if `p` is prime. If it is, return `(p,q)`. If not, go back to the point 1.

This approach was simple, but not fast enough. In this PR, we propose an alternative algorithm as well as make the search process concurrent.

The new algorithm is as follows:

1. Generate a random odd number `q` of length `pBitLen-1` with two the most
   significant bytes set to `1`.
2. Execute preliminary primality test on `q` checking whether it is coprime
   to all the elements of `smallPrimes`. It allows to eliminate trivial
   cases quickly, when `q` is obviously no prime, without running an
   expensive final primality tests.
   If `q` is coprime to all of the `smallPrimes`, then go to the point 3.
   If not, add `2` and try again. Do it at most 10 times.
3. Check the potentially prime `q`, whether `q = 1 (mod 3)`. This will
   happen for 50% of cases.
   If it is, then `p = 2q+1` will be a multiple of 3, so it will be obviously
   not a prime number. In this case, add `2` and try again. Do it at most 10
   times. If `q != 1 (mod 3)`, go to the point 4.
4. Now we know `q` is potentially prime and `p = 2q+1` is not a multiple of
   3. We execute a preliminary primality test on `p`, checking whether
   it is coprime to all the elements of `smallPrimes` just like we did for
   `q` in point 2. If `p` is not coprime to at least one element of the
   `smallPrimes`, then go back to point 1.
   If `p` is coprime to all the elements of `smallPrimes`, go to point 5.
5. At this point, we know `q` is potentially prime, and `p=q+1` is also
   potentially prime. We need to execute a final primality test for `q`.
   We apply Miller-Rabin and Baillie-PSW tests. If they succeed, it means
   that `q` is prime with a very high probability. Knowing `q` is prime,
   we use Pocklington's criterion to prove the primality of `p=2q+1`, that
   is, we execute Fermat primality test to base 2 checking whether
   `2^{p-1} = 1 (mod p)`. It's significantly faster than running full
   Miller-Rabin and Baillie-PSW for `p`.
   If `q` and `p` are found to be prime, return them as a result. If not, go
   back to the point 1.

How fast we generate a prime number is mostly a matter of luck and it depends on how lucky we are with choosing the first 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 finding algorithm, we can get the result faster. Such an approach is presented in this PR.

Detailed benchmark results are presented in the comment. We can observe an improvement in almost all cases (still, a small factor of luck is needed). I've tested for 512, 1024 and 2048 bit numbers on my MBP 3,1 GHz Intel Core i7 with concurrency level set to 4.
I did not present a result for 2048 bits, since the previous algorithm wasn't able to produce one 2048bit safe prime in one hour so I had nothing to compare.

If you want, you can compare the new approach with the performance of openssl dhparam -5 2048. (512/1024).

The original PR with a discussion/review on our side: https://github.com/keep-network/paillier/pull/8

This PR aims at improving performance of the safe prime generator. The previous approach was as follows: ``` 1. Generate prime `q` of `nBits - 1` 2. Compute `p = 2q + 1`. 3. Check if `p` is prime. If it is, return `(p,q)`. If not, go back to the point 1. ``` This approach was simple, but not fast enough. In this PR, we propose an alternative algorithm as well as make the search process concurrent. The new algorithm is as follows: ``` 1. Generate a random odd number `q` of length `pBitLen-1` with two the most significant bytes set to `1`. 2. Execute preliminary primality test on `q` checking whether it is coprime to all the elements of `smallPrimes`. It allows to eliminate trivial cases quickly, when `q` is obviously no prime, without running an expensive final primality tests. If `q` is coprime to all of the `smallPrimes`, then go to the point 3. If not, add `2` and try again. Do it at most 10 times. 3. Check the potentially prime `q`, whether `q = 1 (mod 3)`. This will happen for 50% of cases. If it is, then `p = 2q+1` will be a multiple of 3, so it will be obviously not a prime number. In this case, add `2` and try again. Do it at most 10 times. If `q != 1 (mod 3)`, go to the point 4. 4. Now we know `q` is potentially prime and `p = 2q+1` is not a multiple of 3. We execute a preliminary primality test on `p`, checking whether it is coprime to all the elements of `smallPrimes` just like we did for `q` in point 2. If `p` is not coprime to at least one element of the `smallPrimes`, then go back to point 1. If `p` is coprime to all the elements of `smallPrimes`, go to point 5. 5. At this point, we know `q` is potentially prime, and `p=q+1` is also potentially prime. We need to execute a final primality test for `q`. We apply Miller-Rabin and Baillie-PSW tests. If they succeed, it means that `q` is prime with a very high probability. Knowing `q` is prime, we use Pocklington's criterion to prove the primality of `p=2q+1`, that is, we execute Fermat primality test to base 2 checking whether `2^{p-1} = 1 (mod p)`. It's significantly faster than running full Miller-Rabin and Baillie-PSW for `p`. If `q` and `p` are found to be prime, return them as a result. If not, go back to the point 1. ``` How fast we generate a prime number is mostly a matter of luck and it depends on how lucky we are with choosing the first 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 finding algorithm, we can get the result faster. Such an approach is presented in this PR. Detailed benchmark results are presented in the comment. We can observe an improvement in almost all cases (still, a small factor of luck is needed). I've tested for `512`, `1024` and `2048` bit numbers on my MBP 3,1 GHz Intel Core i7 with concurrency level set to 4. I did not present a result for `2048` bits, since the previous algorithm wasn't able to produce one `2048`bit safe prime in one hour so I had nothing to compare. If you want, you can compare the new approach with the performance of `openssl dhparam -5 2048`. (512/1024). The original PR with a discussion/review on our side: https://github.com/keep-network/paillier/pull/8
pdyraga commented 2018-07-31 03:31:20 -04:00 (Migrated from github.com)

512-bit

benchmark               old ns/op       new ns/op      delta
BenchmarkPrimeGen-8     2268969681      203780104      -91.02%
BenchmarkPrimeGen-8     11386138267     359325036      -96.84%
BenchmarkPrimeGen-8     2631451953      157727754      -94.01%
BenchmarkPrimeGen-8     1934699051      164243527      -91.51%
BenchmarkPrimeGen-8     10074871723     192326900      -98.09%
BenchmarkPrimeGen-8     5705400096      203981665      -96.42%
BenchmarkPrimeGen-8     5569562094      242117912      -95.65%
BenchmarkPrimeGen-8     1784282054      154775349      -91.33%
BenchmarkPrimeGen-8     1239902622      133648270      -89.22%
BenchmarkPrimeGen-8     2478345181      218190369      -91.20%
BenchmarkPrimeGen-8     3105669082      269501266      -91.32%
BenchmarkPrimeGen-8     2015272750      230842844      -88.55%
BenchmarkPrimeGen-8     2052936393      151189573      -92.64%
BenchmarkPrimeGen-8     2870424928      170988297      -94.04%
BenchmarkPrimeGen-8     6326295939      262912971      -95.84%
BenchmarkPrimeGen-8     6128458193      217260736      -96.45%
BenchmarkPrimeGen-8     1991237139      265375042      -86.67%
BenchmarkPrimeGen-8     4419054637      207724906      -95.30%
BenchmarkPrimeGen-8     1278097111      449248604      -64.85%
BenchmarkPrimeGen-8     1596391885      332082367      -79.20%
BenchmarkPrimeGen-8     2874842860      172948847      -93.98%
BenchmarkPrimeGen-8     2763618377      274258647      -90.08%
BenchmarkPrimeGen-8     1894357212      336403987      -82.24%
BenchmarkPrimeGen-8     2820765637      362911869      -87.13%
BenchmarkPrimeGen-8     5442844899      295884848      -94.56%
BenchmarkPrimeGen-8     2317770026      197804613      -91.47%
BenchmarkPrimeGen-8     13632503186     197842397      -98.55%
BenchmarkPrimeGen-8     1627820128      268519766      -83.50%
BenchmarkPrimeGen-8     1618299835      267506384      -83.47%
BenchmarkPrimeGen-8     1563058438      298371712      -80.91%
BenchmarkPrimeGen-8     6981079384      251532928      -96.40%
BenchmarkPrimeGen-8     8583457685      318334811      -96.29%
BenchmarkPrimeGen-8     2920009879      238789346      -91.82%
BenchmarkPrimeGen-8     2855556611      1624911923     -43.10%
BenchmarkPrimeGen-8     4192479325      242686849      -94.21%
BenchmarkPrimeGen-8     2124136761      251099733      -88.18%
BenchmarkPrimeGen-8     3354065514      211003123      -93.71%
BenchmarkPrimeGen-8     4793574227      234297990      -95.11%
BenchmarkPrimeGen-8     7926695778      218152628      -97.25%
BenchmarkPrimeGen-8     3783685714      255740341      -93.24%
BenchmarkPrimeGen-8     5769461617      283868378      -95.08%
BenchmarkPrimeGen-8     3899060159      1150253120     -70.50%
BenchmarkPrimeGen-8     8162547820      222932890      -97.27%
BenchmarkPrimeGen-8     1162491142      228113950      -80.38%
BenchmarkPrimeGen-8     1292424634      248727494      -80.75%
BenchmarkPrimeGen-8     2615398761      219047911      -91.62%
BenchmarkPrimeGen-8     3015784825      244386603      -91.90%
BenchmarkPrimeGen-8     2652024361      256228240      -90.34%
BenchmarkPrimeGen-8     2649694963      169500925      -93.60%
BenchmarkPrimeGen-8     1152981067      429531922      -62.75%

benchmark               old allocs     new allocs     delta
BenchmarkPrimeGen-8     362387         376490         +3.89%
BenchmarkPrimeGen-8     1769941        673830         -61.93%
BenchmarkPrimeGen-8     419616         264518         -36.96%
BenchmarkPrimeGen-8     311689         297350         -4.60%
BenchmarkPrimeGen-8     1653901        349166         -78.89%
BenchmarkPrimeGen-8     947327         349920         -63.06%
BenchmarkPrimeGen-8     917727         430910         -53.05%
BenchmarkPrimeGen-8     293204         276787         -5.60%
BenchmarkPrimeGen-8     204671         233339         +14.01%
BenchmarkPrimeGen-8     412135         385804         -6.39%
BenchmarkPrimeGen-8     512568         463953         -9.48%
BenchmarkPrimeGen-8     336663         380767         +13.10%
BenchmarkPrimeGen-8     339021         237222         -30.03%
BenchmarkPrimeGen-8     475326         274541         -42.24%
BenchmarkPrimeGen-8     1045261        394713         -62.24%
BenchmarkPrimeGen-8     1009762        321582         -68.15%
BenchmarkPrimeGen-8     328106         385440         +17.47%
BenchmarkPrimeGen-8     727409         269998         -62.88%
BenchmarkPrimeGen-8     202614         606475         +199.33%
BenchmarkPrimeGen-8     263268         435912         +65.58%
BenchmarkPrimeGen-8     470412         232267         -50.62%
BenchmarkPrimeGen-8     444871         372689         -16.23%
BenchmarkPrimeGen-8     325247         457537         +40.67%
BenchmarkPrimeGen-8     496687         495494         -0.24%
BenchmarkPrimeGen-8     932339         402878         -56.79%
BenchmarkPrimeGen-8     382644         265367         -30.65%
BenchmarkPrimeGen-8     2351353        268830         -88.57%
BenchmarkPrimeGen-8     281696         364910         +29.54%
BenchmarkPrimeGen-8     284146         361908         +27.37%
BenchmarkPrimeGen-8     271630         407238         +49.92%
BenchmarkPrimeGen-8     1205117        341747         -71.64%
BenchmarkPrimeGen-8     1510913        432134         -71.40%
BenchmarkPrimeGen-8     501141         323307         -35.49%
BenchmarkPrimeGen-8     497295         2162787        +334.91%
BenchmarkPrimeGen-8     744680         329554         -55.75%
BenchmarkPrimeGen-8     370638         337829         -8.85%
BenchmarkPrimeGen-8     601074         284034         -52.75%
BenchmarkPrimeGen-8     846588         313105         -63.02%
BenchmarkPrimeGen-8     1353487        303223         -77.60%
BenchmarkPrimeGen-8     638008         359257         -43.69%
BenchmarkPrimeGen-8     1012358        389266         -61.55%
BenchmarkPrimeGen-8     688078         1582064        +129.93%
BenchmarkPrimeGen-8     1424913        312111         -78.10%
BenchmarkPrimeGen-8     200156         319101         +59.43%
BenchmarkPrimeGen-8     224154         350082         +56.18%
BenchmarkPrimeGen-8     445941         297836         -33.21%
BenchmarkPrimeGen-8     535468         346711         -35.25%
BenchmarkPrimeGen-8     458854         360107         -21.52%
BenchmarkPrimeGen-8     459767         237852         -48.27%
BenchmarkPrimeGen-8     200718         602341         +200.09%

benchmark               old bytes     new bytes     delta
BenchmarkPrimeGen-8     82728176      38798343      -53.10%
BenchmarkPrimeGen-8     409631096     69508454      -83.03%
BenchmarkPrimeGen-8     96872624      27121609      -72.00%
BenchmarkPrimeGen-8     71888744      30673025      -57.33%
BenchmarkPrimeGen-8     378938424     35973569      -90.51%
BenchmarkPrimeGen-8     217741152     36060750      -83.44%
BenchmarkPrimeGen-8     212017904     44437788      -79.04%
BenchmarkPrimeGen-8     67207840      28515551      -57.57%
BenchmarkPrimeGen-8     47274152      24045820      -49.14%
BenchmarkPrimeGen-8     95460120      39786659      -58.32%
BenchmarkPrimeGen-8     118061851     47853263      -59.47%
BenchmarkPrimeGen-8     78798712      39294056      -50.13%
BenchmarkPrimeGen-8     78144912      24473498      -68.68%
BenchmarkPrimeGen-8     108414480     28313912      -73.88%
BenchmarkPrimeGen-8     241962472     40718964      -83.17%
BenchmarkPrimeGen-8     232679504     33150925      -85.75%
BenchmarkPrimeGen-8     74858416      39741979      -46.91%
BenchmarkPrimeGen-8     167936024     27831160      -83.43%
BenchmarkPrimeGen-8     46505936      62419490      +34.22%
BenchmarkPrimeGen-8     60196144      45135324      -25.02%
BenchmarkPrimeGen-8     108738512     23909754      -78.01%
BenchmarkPrimeGen-8     102350984     38434684      -62.45%
BenchmarkPrimeGen-8     74867877      47209044      -36.94%
BenchmarkPrimeGen-8     114624815     51063228      -55.45%
BenchmarkPrimeGen-8     218440752     41554600      -80.98%
BenchmarkPrimeGen-8     86905816      27387320      -68.49%
BenchmarkPrimeGen-8     541723888     27707700      -94.89%
BenchmarkPrimeGen-8     64802296      37643486      -41.91%
BenchmarkPrimeGen-8     64726184      37278543      -42.41%
BenchmarkPrimeGen-8     62328698      42082143      -32.48%
BenchmarkPrimeGen-8     279747264     35185698      -87.42%
BenchmarkPrimeGen-8     347825616     44506653      -87.20%
BenchmarkPrimeGen-8     114803440     33470376      -70.85%
BenchmarkPrimeGen-8     113669288     222001528     +95.30%
BenchmarkPrimeGen-8     172993448     34011901      -80.34%
BenchmarkPrimeGen-8     84498152      35026334      -58.55%
BenchmarkPrimeGen-8     138581872     29250029      -78.89%
BenchmarkPrimeGen-8     193495360     32231944      -83.34%
BenchmarkPrimeGen-8     311015920     31260818      -89.95%
BenchmarkPrimeGen-8     147068656     37023272      -74.83%
BenchmarkPrimeGen-8     234513488     40191003      -82.86%
BenchmarkPrimeGen-8     159871800     162752760     +1.80%
BenchmarkPrimeGen-8     329108176     32146308      -90.23%
BenchmarkPrimeGen-8     45833152      32874548      -28.27%
BenchmarkPrimeGen-8     51570752      36101255      -30.00%
BenchmarkPrimeGen-8     102344696     30658607      -70.04%
BenchmarkPrimeGen-8     123446618     35831864      -70.97%
BenchmarkPrimeGen-8     105297912     37145212      -64.72%
BenchmarkPrimeGen-8     106156028     24578604      -76.85%
BenchmarkPrimeGen-8     45458288      61916476      +36.21%

1024-bit

benchmark               old ns/op        new ns/op       delta
BenchmarkPrimeGen-8     36861702183      2028029411      -94.50%
BenchmarkPrimeGen-8     45959705486      4034424505      -91.22%
BenchmarkPrimeGen-8     32302799509      5857204466      -81.87%
BenchmarkPrimeGen-8     10559412608      1118208532      -89.41%
BenchmarkPrimeGen-8     26361757373      7741049970      -70.64%
BenchmarkPrimeGen-8     29501857227      10468787412     -64.51%
BenchmarkPrimeGen-8     231272508288     2951481919      -98.72%
BenchmarkPrimeGen-8     7657751078       3623114510      -52.69%
BenchmarkPrimeGen-8     51558997401      9734591947      -81.12%
BenchmarkPrimeGen-8     16745757300      3662106162      -78.13%
BenchmarkPrimeGen-8     28182579779      4186072505      -85.15%
BenchmarkPrimeGen-8     19612730893      8350284991      -57.42%
BenchmarkPrimeGen-8     24840617742      3549950465      -85.71%
BenchmarkPrimeGen-8     2466813963       1229082030      -50.18%
BenchmarkPrimeGen-8     8494698198       3489757718      -58.92%
BenchmarkPrimeGen-8     24406594314      6860867774      -71.89%
BenchmarkPrimeGen-8     111450059549     4412554670      -96.04%
BenchmarkPrimeGen-8     9711480641       1544705780      -84.09%
BenchmarkPrimeGen-8     81936301479      2011204182      -97.55%
BenchmarkPrimeGen-8     2767979308       5385645947      +94.57%
BenchmarkPrimeGen-8     101696370631     4599258095      -95.48%
BenchmarkPrimeGen-8     22492110644      8224942742      -63.43%
BenchmarkPrimeGen-8     84566338764      8518647759      -89.93%
BenchmarkPrimeGen-8     17797979625      1120075567      -93.71%
BenchmarkPrimeGen-8     28036722072      2624979440      -90.64%
BenchmarkPrimeGen-8     26167954580      5402545689      -79.35%
BenchmarkPrimeGen-8     16405363943      4549220558      -72.27%
BenchmarkPrimeGen-8     4533869408       6277611905      +38.46%
BenchmarkPrimeGen-8     28292850899      3154577090      -88.85%
BenchmarkPrimeGen-8     58376102081      5058555291      -91.33%
BenchmarkPrimeGen-8     137515732119     8872658389      -93.55%
BenchmarkPrimeGen-8     5343562821       6414989815      +20.05%
BenchmarkPrimeGen-8     4214167930       1631263654      -61.29%
BenchmarkPrimeGen-8     57539380856      15259652544     -73.48%
BenchmarkPrimeGen-8     56463189239      6586140711      -88.34%
BenchmarkPrimeGen-8     31148876342      1541031706      -95.05%
BenchmarkPrimeGen-8     35924957141      9501304286      -73.55%
BenchmarkPrimeGen-8     37037673636      7761418403      -79.04%
BenchmarkPrimeGen-8     123071912422     6229731376      -94.94%
BenchmarkPrimeGen-8     18735582572      3162629339      -83.12%
BenchmarkPrimeGen-8     14950810812      1312778249      -91.22%
BenchmarkPrimeGen-8     45614828915      4644812942      -89.82%
BenchmarkPrimeGen-8     38343598558      2865488956      -92.53%
BenchmarkPrimeGen-8     37089393514      2191057855      -94.09%
BenchmarkPrimeGen-8     21408341771      3976707810      -81.42%
BenchmarkPrimeGen-8     82520362962      3960534907      -95.20%
BenchmarkPrimeGen-8     71017278949      3767476624      -94.69%
BenchmarkPrimeGen-8     34683384212      3285594016      -90.53%
BenchmarkPrimeGen-8     176688401313     10007708014     -94.34%
BenchmarkPrimeGen-8     27576279959      1812340656      -93.43%

benchmark               old allocs     new allocs     delta
BenchmarkPrimeGen-8     1296874        915655         -29.40%
BenchmarkPrimeGen-8     1629910        1813474        +11.26%
BenchmarkPrimeGen-8     1145560        2578585        +125.09%
BenchmarkPrimeGen-8     375806         442742         +17.81%
BenchmarkPrimeGen-8     936175         3080384        +229.04%
BenchmarkPrimeGen-8     1032492        4053990        +292.64%
BenchmarkPrimeGen-8     7860859        1128439        -85.64%
BenchmarkPrimeGen-8     278511         1335743        +379.60%
BenchmarkPrimeGen-8     1772920        3465450        +95.47%
BenchmarkPrimeGen-8     599647         1200613        +100.22%
BenchmarkPrimeGen-8     974381         1303572        +33.78%
BenchmarkPrimeGen-8     684946         2450948        +257.83%
BenchmarkPrimeGen-8     895839         986127         +10.08%
BenchmarkPrimeGen-8     84866          348326         +310.44%
BenchmarkPrimeGen-8     292856         980527         +234.82%
BenchmarkPrimeGen-8     865260         1752853        +102.58%
BenchmarkPrimeGen-8     3960309        1258875        -68.21%
BenchmarkPrimeGen-8     348814         439299         +25.94%
BenchmarkPrimeGen-8     2872539        521117         -81.86%
BenchmarkPrimeGen-8     96468          1559819        +1516.93%
BenchmarkPrimeGen-8     3535318        1460611        -58.69%
BenchmarkPrimeGen-8     774395         2542689        +228.35%
BenchmarkPrimeGen-8     2807298        2581099        -8.06%
BenchmarkPrimeGen-8     551587         352002         -36.18%
BenchmarkPrimeGen-8     909261         818918         -9.94%
BenchmarkPrimeGen-8     859315         1803050        +109.82%
BenchmarkPrimeGen-8     549266         1447562        +163.54%
BenchmarkPrimeGen-8     155427         1929606        +1141.49%
BenchmarkPrimeGen-8     976922         980262         +0.34%
BenchmarkPrimeGen-8     2063480        1695845        -17.82%
BenchmarkPrimeGen-8     4841641        2835719        -41.43%
BenchmarkPrimeGen-8     183380         2059248        +1022.94%
BenchmarkPrimeGen-8     147059         535376         +264.06%
BenchmarkPrimeGen-8     2041437        5092646        +149.46%
BenchmarkPrimeGen-8     1975536        2219626        +12.36%
BenchmarkPrimeGen-8     1074994        499865         -53.50%
BenchmarkPrimeGen-8     1287402        3238482        +151.55%
BenchmarkPrimeGen-8     1341691        2658899        +98.18%
BenchmarkPrimeGen-8     4409132        2130144        -51.69%
BenchmarkPrimeGen-8     658803         1005215        +52.58%
BenchmarkPrimeGen-8     516970         432836         -16.27%
BenchmarkPrimeGen-8     1628919        1550246        -4.83%
BenchmarkPrimeGen-8     1358365        981565         -27.74%
BenchmarkPrimeGen-8     1300251        787778         -39.41%
BenchmarkPrimeGen-8     773588         1350405        +74.56%
BenchmarkPrimeGen-8     2933710        1349526        -54.00%
BenchmarkPrimeGen-8     2551294        1288342        -49.50%
BenchmarkPrimeGen-8     1139499        1145489        +0.53%
BenchmarkPrimeGen-8     6096582        3471008        -43.07%
BenchmarkPrimeGen-8     974002         609313         -37.44%

benchmark               old bytes      new bytes     delta
BenchmarkPrimeGen-8     410531984      120005968     -70.77%
BenchmarkPrimeGen-8     516871536      237446256     -54.06%
BenchmarkPrimeGen-8     363488520      334296984     -8.03%
BenchmarkPrimeGen-8     118047720      57559776      -51.24%
BenchmarkPrimeGen-8     297614840      404117232     +35.79%
BenchmarkPrimeGen-8     328461424      530639784     +61.55%
BenchmarkPrimeGen-8     2498362152     146655272     -94.13%
BenchmarkPrimeGen-8     88981416       174243768     +95.82%
BenchmarkPrimeGen-8     562466976      452768648     -19.50%
BenchmarkPrimeGen-8     190238184      156798365     -17.58%
BenchmarkPrimeGen-8     309543552      172290192     -44.34%
BenchmarkPrimeGen-8     217364304      321025276     +47.69%
BenchmarkPrimeGen-8     284504936      129471416     -54.49%
BenchmarkPrimeGen-8     26543528       45600056      +71.79%
BenchmarkPrimeGen-8     92278832       128537784     +39.29%
BenchmarkPrimeGen-8     273084064      228649920     -16.27%
BenchmarkPrimeGen-8     1260919112     163888968     -87.00%
BenchmarkPrimeGen-8     110596312      58035824      -47.52%
BenchmarkPrimeGen-8     908471736      67798256      -92.54%
BenchmarkPrimeGen-8     31164144       202952584     +551.24%
BenchmarkPrimeGen-8     1126090384     191120288     -83.03%
BenchmarkPrimeGen-8     245900104      332266464     +35.12%
BenchmarkPrimeGen-8     892851912      337539136     -62.20%
BenchmarkPrimeGen-8     176047536      45909716      -73.92%
BenchmarkPrimeGen-8     289382520      107164232     -62.97%
BenchmarkPrimeGen-8     273224016      236085232     -13.59%
BenchmarkPrimeGen-8     173397688      190356416     +9.78%
BenchmarkPrimeGen-8     48816216       251743656     +415.70%
BenchmarkPrimeGen-8     309511600      127547596     -58.79%
BenchmarkPrimeGen-8     654125952      221186192     -66.19%
BenchmarkPrimeGen-8     1536756272     371946200     -75.80%
BenchmarkPrimeGen-8     57621800       271916640     +371.90%
BenchmarkPrimeGen-8     46709232       69726392      +49.28%
BenchmarkPrimeGen-8     646374992      665026640     +2.89%
BenchmarkPrimeGen-8     624530576      289691416     -53.61%
BenchmarkPrimeGen-8     342230304      65982736      -80.72%
BenchmarkPrimeGen-8     411465472      423620944     +2.95%
BenchmarkPrimeGen-8     427305360      348680728     -18.40%
BenchmarkPrimeGen-8     1403440376     278391536     -80.16%
BenchmarkPrimeGen-8     208987312      132752456     -36.48%
BenchmarkPrimeGen-8     163475552      56851360      -65.22%
BenchmarkPrimeGen-8     516464392      202416184     -60.81%
BenchmarkPrimeGen-8     432335688      128268376     -70.33%
BenchmarkPrimeGen-8     414238240      102396720     -75.28%
BenchmarkPrimeGen-8     246773984      177088104     -28.24%
BenchmarkPrimeGen-8     927995536      176423193     -80.99%
BenchmarkPrimeGen-8     813041256      169167776     -79.19%
BenchmarkPrimeGen-8     360886104      149682264     -58.52%
BenchmarkPrimeGen-8     1934911896     453022168     -76.59%
BenchmarkPrimeGen-8     309722576      80011776      -74.17%
# 512-bit ``` benchmark old ns/op new ns/op delta BenchmarkPrimeGen-8 2268969681 203780104 -91.02% BenchmarkPrimeGen-8 11386138267 359325036 -96.84% BenchmarkPrimeGen-8 2631451953 157727754 -94.01% BenchmarkPrimeGen-8 1934699051 164243527 -91.51% BenchmarkPrimeGen-8 10074871723 192326900 -98.09% BenchmarkPrimeGen-8 5705400096 203981665 -96.42% BenchmarkPrimeGen-8 5569562094 242117912 -95.65% BenchmarkPrimeGen-8 1784282054 154775349 -91.33% BenchmarkPrimeGen-8 1239902622 133648270 -89.22% BenchmarkPrimeGen-8 2478345181 218190369 -91.20% BenchmarkPrimeGen-8 3105669082 269501266 -91.32% BenchmarkPrimeGen-8 2015272750 230842844 -88.55% BenchmarkPrimeGen-8 2052936393 151189573 -92.64% BenchmarkPrimeGen-8 2870424928 170988297 -94.04% BenchmarkPrimeGen-8 6326295939 262912971 -95.84% BenchmarkPrimeGen-8 6128458193 217260736 -96.45% BenchmarkPrimeGen-8 1991237139 265375042 -86.67% BenchmarkPrimeGen-8 4419054637 207724906 -95.30% BenchmarkPrimeGen-8 1278097111 449248604 -64.85% BenchmarkPrimeGen-8 1596391885 332082367 -79.20% BenchmarkPrimeGen-8 2874842860 172948847 -93.98% BenchmarkPrimeGen-8 2763618377 274258647 -90.08% BenchmarkPrimeGen-8 1894357212 336403987 -82.24% BenchmarkPrimeGen-8 2820765637 362911869 -87.13% BenchmarkPrimeGen-8 5442844899 295884848 -94.56% BenchmarkPrimeGen-8 2317770026 197804613 -91.47% BenchmarkPrimeGen-8 13632503186 197842397 -98.55% BenchmarkPrimeGen-8 1627820128 268519766 -83.50% BenchmarkPrimeGen-8 1618299835 267506384 -83.47% BenchmarkPrimeGen-8 1563058438 298371712 -80.91% BenchmarkPrimeGen-8 6981079384 251532928 -96.40% BenchmarkPrimeGen-8 8583457685 318334811 -96.29% BenchmarkPrimeGen-8 2920009879 238789346 -91.82% BenchmarkPrimeGen-8 2855556611 1624911923 -43.10% BenchmarkPrimeGen-8 4192479325 242686849 -94.21% BenchmarkPrimeGen-8 2124136761 251099733 -88.18% BenchmarkPrimeGen-8 3354065514 211003123 -93.71% BenchmarkPrimeGen-8 4793574227 234297990 -95.11% BenchmarkPrimeGen-8 7926695778 218152628 -97.25% BenchmarkPrimeGen-8 3783685714 255740341 -93.24% BenchmarkPrimeGen-8 5769461617 283868378 -95.08% BenchmarkPrimeGen-8 3899060159 1150253120 -70.50% BenchmarkPrimeGen-8 8162547820 222932890 -97.27% BenchmarkPrimeGen-8 1162491142 228113950 -80.38% BenchmarkPrimeGen-8 1292424634 248727494 -80.75% BenchmarkPrimeGen-8 2615398761 219047911 -91.62% BenchmarkPrimeGen-8 3015784825 244386603 -91.90% BenchmarkPrimeGen-8 2652024361 256228240 -90.34% BenchmarkPrimeGen-8 2649694963 169500925 -93.60% BenchmarkPrimeGen-8 1152981067 429531922 -62.75% benchmark old allocs new allocs delta BenchmarkPrimeGen-8 362387 376490 +3.89% BenchmarkPrimeGen-8 1769941 673830 -61.93% BenchmarkPrimeGen-8 419616 264518 -36.96% BenchmarkPrimeGen-8 311689 297350 -4.60% BenchmarkPrimeGen-8 1653901 349166 -78.89% BenchmarkPrimeGen-8 947327 349920 -63.06% BenchmarkPrimeGen-8 917727 430910 -53.05% BenchmarkPrimeGen-8 293204 276787 -5.60% BenchmarkPrimeGen-8 204671 233339 +14.01% BenchmarkPrimeGen-8 412135 385804 -6.39% BenchmarkPrimeGen-8 512568 463953 -9.48% BenchmarkPrimeGen-8 336663 380767 +13.10% BenchmarkPrimeGen-8 339021 237222 -30.03% BenchmarkPrimeGen-8 475326 274541 -42.24% BenchmarkPrimeGen-8 1045261 394713 -62.24% BenchmarkPrimeGen-8 1009762 321582 -68.15% BenchmarkPrimeGen-8 328106 385440 +17.47% BenchmarkPrimeGen-8 727409 269998 -62.88% BenchmarkPrimeGen-8 202614 606475 +199.33% BenchmarkPrimeGen-8 263268 435912 +65.58% BenchmarkPrimeGen-8 470412 232267 -50.62% BenchmarkPrimeGen-8 444871 372689 -16.23% BenchmarkPrimeGen-8 325247 457537 +40.67% BenchmarkPrimeGen-8 496687 495494 -0.24% BenchmarkPrimeGen-8 932339 402878 -56.79% BenchmarkPrimeGen-8 382644 265367 -30.65% BenchmarkPrimeGen-8 2351353 268830 -88.57% BenchmarkPrimeGen-8 281696 364910 +29.54% BenchmarkPrimeGen-8 284146 361908 +27.37% BenchmarkPrimeGen-8 271630 407238 +49.92% BenchmarkPrimeGen-8 1205117 341747 -71.64% BenchmarkPrimeGen-8 1510913 432134 -71.40% BenchmarkPrimeGen-8 501141 323307 -35.49% BenchmarkPrimeGen-8 497295 2162787 +334.91% BenchmarkPrimeGen-8 744680 329554 -55.75% BenchmarkPrimeGen-8 370638 337829 -8.85% BenchmarkPrimeGen-8 601074 284034 -52.75% BenchmarkPrimeGen-8 846588 313105 -63.02% BenchmarkPrimeGen-8 1353487 303223 -77.60% BenchmarkPrimeGen-8 638008 359257 -43.69% BenchmarkPrimeGen-8 1012358 389266 -61.55% BenchmarkPrimeGen-8 688078 1582064 +129.93% BenchmarkPrimeGen-8 1424913 312111 -78.10% BenchmarkPrimeGen-8 200156 319101 +59.43% BenchmarkPrimeGen-8 224154 350082 +56.18% BenchmarkPrimeGen-8 445941 297836 -33.21% BenchmarkPrimeGen-8 535468 346711 -35.25% BenchmarkPrimeGen-8 458854 360107 -21.52% BenchmarkPrimeGen-8 459767 237852 -48.27% BenchmarkPrimeGen-8 200718 602341 +200.09% benchmark old bytes new bytes delta BenchmarkPrimeGen-8 82728176 38798343 -53.10% BenchmarkPrimeGen-8 409631096 69508454 -83.03% BenchmarkPrimeGen-8 96872624 27121609 -72.00% BenchmarkPrimeGen-8 71888744 30673025 -57.33% BenchmarkPrimeGen-8 378938424 35973569 -90.51% BenchmarkPrimeGen-8 217741152 36060750 -83.44% BenchmarkPrimeGen-8 212017904 44437788 -79.04% BenchmarkPrimeGen-8 67207840 28515551 -57.57% BenchmarkPrimeGen-8 47274152 24045820 -49.14% BenchmarkPrimeGen-8 95460120 39786659 -58.32% BenchmarkPrimeGen-8 118061851 47853263 -59.47% BenchmarkPrimeGen-8 78798712 39294056 -50.13% BenchmarkPrimeGen-8 78144912 24473498 -68.68% BenchmarkPrimeGen-8 108414480 28313912 -73.88% BenchmarkPrimeGen-8 241962472 40718964 -83.17% BenchmarkPrimeGen-8 232679504 33150925 -85.75% BenchmarkPrimeGen-8 74858416 39741979 -46.91% BenchmarkPrimeGen-8 167936024 27831160 -83.43% BenchmarkPrimeGen-8 46505936 62419490 +34.22% BenchmarkPrimeGen-8 60196144 45135324 -25.02% BenchmarkPrimeGen-8 108738512 23909754 -78.01% BenchmarkPrimeGen-8 102350984 38434684 -62.45% BenchmarkPrimeGen-8 74867877 47209044 -36.94% BenchmarkPrimeGen-8 114624815 51063228 -55.45% BenchmarkPrimeGen-8 218440752 41554600 -80.98% BenchmarkPrimeGen-8 86905816 27387320 -68.49% BenchmarkPrimeGen-8 541723888 27707700 -94.89% BenchmarkPrimeGen-8 64802296 37643486 -41.91% BenchmarkPrimeGen-8 64726184 37278543 -42.41% BenchmarkPrimeGen-8 62328698 42082143 -32.48% BenchmarkPrimeGen-8 279747264 35185698 -87.42% BenchmarkPrimeGen-8 347825616 44506653 -87.20% BenchmarkPrimeGen-8 114803440 33470376 -70.85% BenchmarkPrimeGen-8 113669288 222001528 +95.30% BenchmarkPrimeGen-8 172993448 34011901 -80.34% BenchmarkPrimeGen-8 84498152 35026334 -58.55% BenchmarkPrimeGen-8 138581872 29250029 -78.89% BenchmarkPrimeGen-8 193495360 32231944 -83.34% BenchmarkPrimeGen-8 311015920 31260818 -89.95% BenchmarkPrimeGen-8 147068656 37023272 -74.83% BenchmarkPrimeGen-8 234513488 40191003 -82.86% BenchmarkPrimeGen-8 159871800 162752760 +1.80% BenchmarkPrimeGen-8 329108176 32146308 -90.23% BenchmarkPrimeGen-8 45833152 32874548 -28.27% BenchmarkPrimeGen-8 51570752 36101255 -30.00% BenchmarkPrimeGen-8 102344696 30658607 -70.04% BenchmarkPrimeGen-8 123446618 35831864 -70.97% BenchmarkPrimeGen-8 105297912 37145212 -64.72% BenchmarkPrimeGen-8 106156028 24578604 -76.85% BenchmarkPrimeGen-8 45458288 61916476 +36.21% ``` # 1024-bit ``` benchmark old ns/op new ns/op delta BenchmarkPrimeGen-8 36861702183 2028029411 -94.50% BenchmarkPrimeGen-8 45959705486 4034424505 -91.22% BenchmarkPrimeGen-8 32302799509 5857204466 -81.87% BenchmarkPrimeGen-8 10559412608 1118208532 -89.41% BenchmarkPrimeGen-8 26361757373 7741049970 -70.64% BenchmarkPrimeGen-8 29501857227 10468787412 -64.51% BenchmarkPrimeGen-8 231272508288 2951481919 -98.72% BenchmarkPrimeGen-8 7657751078 3623114510 -52.69% BenchmarkPrimeGen-8 51558997401 9734591947 -81.12% BenchmarkPrimeGen-8 16745757300 3662106162 -78.13% BenchmarkPrimeGen-8 28182579779 4186072505 -85.15% BenchmarkPrimeGen-8 19612730893 8350284991 -57.42% BenchmarkPrimeGen-8 24840617742 3549950465 -85.71% BenchmarkPrimeGen-8 2466813963 1229082030 -50.18% BenchmarkPrimeGen-8 8494698198 3489757718 -58.92% BenchmarkPrimeGen-8 24406594314 6860867774 -71.89% BenchmarkPrimeGen-8 111450059549 4412554670 -96.04% BenchmarkPrimeGen-8 9711480641 1544705780 -84.09% BenchmarkPrimeGen-8 81936301479 2011204182 -97.55% BenchmarkPrimeGen-8 2767979308 5385645947 +94.57% BenchmarkPrimeGen-8 101696370631 4599258095 -95.48% BenchmarkPrimeGen-8 22492110644 8224942742 -63.43% BenchmarkPrimeGen-8 84566338764 8518647759 -89.93% BenchmarkPrimeGen-8 17797979625 1120075567 -93.71% BenchmarkPrimeGen-8 28036722072 2624979440 -90.64% BenchmarkPrimeGen-8 26167954580 5402545689 -79.35% BenchmarkPrimeGen-8 16405363943 4549220558 -72.27% BenchmarkPrimeGen-8 4533869408 6277611905 +38.46% BenchmarkPrimeGen-8 28292850899 3154577090 -88.85% BenchmarkPrimeGen-8 58376102081 5058555291 -91.33% BenchmarkPrimeGen-8 137515732119 8872658389 -93.55% BenchmarkPrimeGen-8 5343562821 6414989815 +20.05% BenchmarkPrimeGen-8 4214167930 1631263654 -61.29% BenchmarkPrimeGen-8 57539380856 15259652544 -73.48% BenchmarkPrimeGen-8 56463189239 6586140711 -88.34% BenchmarkPrimeGen-8 31148876342 1541031706 -95.05% BenchmarkPrimeGen-8 35924957141 9501304286 -73.55% BenchmarkPrimeGen-8 37037673636 7761418403 -79.04% BenchmarkPrimeGen-8 123071912422 6229731376 -94.94% BenchmarkPrimeGen-8 18735582572 3162629339 -83.12% BenchmarkPrimeGen-8 14950810812 1312778249 -91.22% BenchmarkPrimeGen-8 45614828915 4644812942 -89.82% BenchmarkPrimeGen-8 38343598558 2865488956 -92.53% BenchmarkPrimeGen-8 37089393514 2191057855 -94.09% BenchmarkPrimeGen-8 21408341771 3976707810 -81.42% BenchmarkPrimeGen-8 82520362962 3960534907 -95.20% BenchmarkPrimeGen-8 71017278949 3767476624 -94.69% BenchmarkPrimeGen-8 34683384212 3285594016 -90.53% BenchmarkPrimeGen-8 176688401313 10007708014 -94.34% BenchmarkPrimeGen-8 27576279959 1812340656 -93.43% benchmark old allocs new allocs delta BenchmarkPrimeGen-8 1296874 915655 -29.40% BenchmarkPrimeGen-8 1629910 1813474 +11.26% BenchmarkPrimeGen-8 1145560 2578585 +125.09% BenchmarkPrimeGen-8 375806 442742 +17.81% BenchmarkPrimeGen-8 936175 3080384 +229.04% BenchmarkPrimeGen-8 1032492 4053990 +292.64% BenchmarkPrimeGen-8 7860859 1128439 -85.64% BenchmarkPrimeGen-8 278511 1335743 +379.60% BenchmarkPrimeGen-8 1772920 3465450 +95.47% BenchmarkPrimeGen-8 599647 1200613 +100.22% BenchmarkPrimeGen-8 974381 1303572 +33.78% BenchmarkPrimeGen-8 684946 2450948 +257.83% BenchmarkPrimeGen-8 895839 986127 +10.08% BenchmarkPrimeGen-8 84866 348326 +310.44% BenchmarkPrimeGen-8 292856 980527 +234.82% BenchmarkPrimeGen-8 865260 1752853 +102.58% BenchmarkPrimeGen-8 3960309 1258875 -68.21% BenchmarkPrimeGen-8 348814 439299 +25.94% BenchmarkPrimeGen-8 2872539 521117 -81.86% BenchmarkPrimeGen-8 96468 1559819 +1516.93% BenchmarkPrimeGen-8 3535318 1460611 -58.69% BenchmarkPrimeGen-8 774395 2542689 +228.35% BenchmarkPrimeGen-8 2807298 2581099 -8.06% BenchmarkPrimeGen-8 551587 352002 -36.18% BenchmarkPrimeGen-8 909261 818918 -9.94% BenchmarkPrimeGen-8 859315 1803050 +109.82% BenchmarkPrimeGen-8 549266 1447562 +163.54% BenchmarkPrimeGen-8 155427 1929606 +1141.49% BenchmarkPrimeGen-8 976922 980262 +0.34% BenchmarkPrimeGen-8 2063480 1695845 -17.82% BenchmarkPrimeGen-8 4841641 2835719 -41.43% BenchmarkPrimeGen-8 183380 2059248 +1022.94% BenchmarkPrimeGen-8 147059 535376 +264.06% BenchmarkPrimeGen-8 2041437 5092646 +149.46% BenchmarkPrimeGen-8 1975536 2219626 +12.36% BenchmarkPrimeGen-8 1074994 499865 -53.50% BenchmarkPrimeGen-8 1287402 3238482 +151.55% BenchmarkPrimeGen-8 1341691 2658899 +98.18% BenchmarkPrimeGen-8 4409132 2130144 -51.69% BenchmarkPrimeGen-8 658803 1005215 +52.58% BenchmarkPrimeGen-8 516970 432836 -16.27% BenchmarkPrimeGen-8 1628919 1550246 -4.83% BenchmarkPrimeGen-8 1358365 981565 -27.74% BenchmarkPrimeGen-8 1300251 787778 -39.41% BenchmarkPrimeGen-8 773588 1350405 +74.56% BenchmarkPrimeGen-8 2933710 1349526 -54.00% BenchmarkPrimeGen-8 2551294 1288342 -49.50% BenchmarkPrimeGen-8 1139499 1145489 +0.53% BenchmarkPrimeGen-8 6096582 3471008 -43.07% BenchmarkPrimeGen-8 974002 609313 -37.44% benchmark old bytes new bytes delta BenchmarkPrimeGen-8 410531984 120005968 -70.77% BenchmarkPrimeGen-8 516871536 237446256 -54.06% BenchmarkPrimeGen-8 363488520 334296984 -8.03% BenchmarkPrimeGen-8 118047720 57559776 -51.24% BenchmarkPrimeGen-8 297614840 404117232 +35.79% BenchmarkPrimeGen-8 328461424 530639784 +61.55% BenchmarkPrimeGen-8 2498362152 146655272 -94.13% BenchmarkPrimeGen-8 88981416 174243768 +95.82% BenchmarkPrimeGen-8 562466976 452768648 -19.50% BenchmarkPrimeGen-8 190238184 156798365 -17.58% BenchmarkPrimeGen-8 309543552 172290192 -44.34% BenchmarkPrimeGen-8 217364304 321025276 +47.69% BenchmarkPrimeGen-8 284504936 129471416 -54.49% BenchmarkPrimeGen-8 26543528 45600056 +71.79% BenchmarkPrimeGen-8 92278832 128537784 +39.29% BenchmarkPrimeGen-8 273084064 228649920 -16.27% BenchmarkPrimeGen-8 1260919112 163888968 -87.00% BenchmarkPrimeGen-8 110596312 58035824 -47.52% BenchmarkPrimeGen-8 908471736 67798256 -92.54% BenchmarkPrimeGen-8 31164144 202952584 +551.24% BenchmarkPrimeGen-8 1126090384 191120288 -83.03% BenchmarkPrimeGen-8 245900104 332266464 +35.12% BenchmarkPrimeGen-8 892851912 337539136 -62.20% BenchmarkPrimeGen-8 176047536 45909716 -73.92% BenchmarkPrimeGen-8 289382520 107164232 -62.97% BenchmarkPrimeGen-8 273224016 236085232 -13.59% BenchmarkPrimeGen-8 173397688 190356416 +9.78% BenchmarkPrimeGen-8 48816216 251743656 +415.70% BenchmarkPrimeGen-8 309511600 127547596 -58.79% BenchmarkPrimeGen-8 654125952 221186192 -66.19% BenchmarkPrimeGen-8 1536756272 371946200 -75.80% BenchmarkPrimeGen-8 57621800 271916640 +371.90% BenchmarkPrimeGen-8 46709232 69726392 +49.28% BenchmarkPrimeGen-8 646374992 665026640 +2.89% BenchmarkPrimeGen-8 624530576 289691416 -53.61% BenchmarkPrimeGen-8 342230304 65982736 -80.72% BenchmarkPrimeGen-8 411465472 423620944 +2.95% BenchmarkPrimeGen-8 427305360 348680728 -18.40% BenchmarkPrimeGen-8 1403440376 278391536 -80.16% BenchmarkPrimeGen-8 208987312 132752456 -36.48% BenchmarkPrimeGen-8 163475552 56851360 -65.22% BenchmarkPrimeGen-8 516464392 202416184 -60.81% BenchmarkPrimeGen-8 432335688 128268376 -70.33% BenchmarkPrimeGen-8 414238240 102396720 -75.28% BenchmarkPrimeGen-8 246773984 177088104 -28.24% BenchmarkPrimeGen-8 927995536 176423193 -80.99% BenchmarkPrimeGen-8 813041256 169167776 -79.19% BenchmarkPrimeGen-8 360886104 149682264 -58.52% BenchmarkPrimeGen-8 1934911896 453022168 -76.59% BenchmarkPrimeGen-8 309722576 80011776 -74.17% ```
pdyraga (Migrated from github.com) reviewed 2018-07-31 03:36:00 -04:00
@@ -4,3 +4,2 @@
- 1.3
- 1.4
- 1.7
- tip
pdyraga (Migrated from github.com) commented 2018-07-31 03:36:00 -04:00

Go 1.7 moves the golang.org/x/net/context package into the standard library as context. Because of that, import "context" in the safe_prime_generator.go does not compile on Go versions prior to 1.7.

There is no easy way to support older versions without sacrificing quality. Since Go 1.7 was released two years ago, I think that supporting 1.7+ is an acceptable move.

Go 1.7 [moves](https://golang.org/doc/go1.7#context) the `golang.org/x/net/context` package into the standard library as `context`. Because of that, `import "context"` in the `safe_prime_generator.go` does not compile on Go versions prior to 1.7. There is no easy way to support older versions without sacrificing quality. Since Go 1.7 was released two years ago, I think that supporting 1.7+ is an acceptable move.
didiercrunch (Migrated from github.com) reviewed 2018-08-02 06:39:22 -04:00
@@ -4,3 +4,2 @@
- 1.3
- 1.4
- 1.7
- tip
didiercrunch (Migrated from github.com) commented 2018-08-02 06:39:22 -04:00

Totally okay with me.

Totally okay with me.
didiercrunch commented 2018-08-02 06:47:09 -04:00 (Migrated from github.com)

Outstanding code. I learn so much by reading your code review.

Thanks a lot for them.

didier

Outstanding code. I learn so much by reading your code review. Thanks a lot for them. didier
pdyraga commented 2018-08-02 09:36:36 -04:00 (Migrated from github.com)

Thanks! ❤️ 🎉

Thanks! :heart: :tada:
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: didier/paillier#9