mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-14 17:48:05 -05:00

This function has to make an array containing a specific number of random values that are +1 or -1, and all the rest zero. The simplest way I could think of to do it at first was to make the array with all the zeroes at the end and then shuffle the array. But I couldn't think of a time-safe algorithm to shuffle an array in such a way that all orders come out equiprobable, that was better than quadratic time. In fact I still can't think of one. (Making a random Benes network is the best idea I've come up with: it arranges that every output order is _possible_, and runs in O(N log N) time, but it skews the probabilities, which makes it unacceptable.) However, there's no need to shuffle an array in this application anyway: we're not actually trying to generate a random _permutation_, only a random element of (n choose w). So we can just walk linearly along the array remembering how many nonzero elements we have yet to output, and using an appropriately chosen random number at each step to decide whether this will be one of them. This isn't a significant improvement in the performance of NTRU overall, but it satisfies my sense of rightness a little, and at least means I don't have to have a comment in the code apologising for the terrible algorithm any more.
…
…
…
…
…
…
…
This is the README for PuTTY, a free Windows and Unix Telnet and SSH client. PuTTY is built using CMake <https://cmake.org/>. To compile in the simplest way (on any of Linux, Windows or Mac), run these commands in the source directory: cmake . cmake --build . Documentation (in various formats including Windows Help and Unix `man' pages) is built from the Halibut (`.but') files in the `doc' subdirectory using `doc/Makefile'. If you aren't using one of our source snapshots, you'll need to do this yourself. Halibut can be found at <https://www.chiark.greenend.org.uk/~sgtatham/halibut/>. The PuTTY home web site is https://www.chiark.greenend.org.uk/~sgtatham/putty/ If you want to send bug reports or feature requests, please read the Feedback section of the web site before doing so. Sending one-line reports saying `it doesn't work' will waste your time as much as ours. See the file LICENCE for the licence conditions.
Description
Languages
C
89.7%
Python
8%
Perl
0.9%
CMake
0.8%
Shell
0.4%
Other
0.1%