home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Demo / rsa / rsakeys.py < prev    next >
Text File  |  1992-12-09  |  863b  |  43 lines

  1.  
  2. from find import makepprime
  3. from mpz import gcd, divm
  4.  
  5. default_pk = 7
  6.  
  7. # makersaset(RSASIZE, RF, PK=DEFAULT_PK)
  8. #
  9. #    makes an RSA keyset. RSASIZE is the size in bits, minimal value should
  10. #    be around 512 bits.  RF is a function object that, when called as RF(N),
  11. #    should return a random number 0 <= X < N.  Normally, PK is a small
  12. #    prime.
  13. #
  14. #    returns a tuple (MODULUS, SK), where modulus is the RSA modulus of the
  15. #    requested size, and SK complementary key of PK.
  16. #
  17. def makersaset(RSAsize, rf, *rest):
  18.  
  19.     if rest:
  20.         pk, = rest
  21.     else:
  22.         pk = default_pk
  23.  
  24.  
  25.     n1size = RSAsize/2 - 1
  26.  
  27.     while 1:
  28.         n1 = makepprime(1L << n1size, rf)
  29.         if gcd(n1-1, pk) == 1:
  30.             break
  31.  
  32.  
  33.     while 1:
  34.         n2 = makepprime((1L << RSAsize) / n1, rf)
  35.         if gcd(n2-1, pk) == 1:
  36.             break
  37.             
  38.     n = n1 * n2            # this is the RSA modulus
  39.     
  40.     sk = divm(1, pk, (n1-1)*(n2-1))
  41.  
  42.     return n, sk
  43.