I wrote a brief J script to generate random RSA keys in various lengths.  I
put a copy in my Dropbox at the following URL…

https://www.dropbox.com/s/0y0tpgtjtv4vvd2/rsakeys.ijs

In this script is a function called “genkey” which crashes J.

genkey =: 3 : 0"0

q =. p =. randprime y

while. q = p

do.

q =. randprime y

end.

if. p < q

do.

'p q'=. q,p

end.

(p*q),p,q

)

randprime y returns a random prime of length y bits with the upper two bits
set as an extended precision integer.  It seems rock solid and has been
called millions of times without issue.

genkey picks a prime, p, and another prime not equal to it, q, and swaps
them if necessary so p is the larger one.  It then returns a vector of
length 3, consisting of p*q, p, and q.

If you load this script, and type “genkey 32”, you get a “J has stopped
working, reporting to Microsoft” dialogue box immediately.

If I write another function, “keygen” which does the same thing as genkey,
but phrased slightly differently, it works perfectly.

keygen =: 3 : 0"0

z =. ''

while. 2 > #z

do.

z =. ~. z , randprime y

end.

(*/z),\:~z

)

keygen 5#32

13636890702424146503 3697445573 3688192411

14042631972443509627 3975272443 3532495489

15856784938324374101 4290006247 3696214883

12482175669738327193 3743048207 3334762199

14012721502477771067 4146478969 3379426643


I’m new to J programming, so I’m sure I’ve just done something dumb.  Any
insights would be appreciated.

Thanks.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to