[pycrypto] Confused about some code in PubKey/RSA/_slowmath.py
luoshoufu at gmail.com
Mon Nov 5 00:26:46 EST 2012
I'm trying to encrypt a message with my private key and release the encrypted to others who will use my public key to decrypt. But, I failed.
I was confused by the follwing code from PubKey/RSA/_slowmath.py of pyCrypto-2.6. If anyone can give any clues to answer the following questions, I will appreciate.
1. Theoretically, if I encrypt date using private key, I can decrypt the encrypted data using public key, and vice versa. Why the key must be a private key in decryption function, line 51-52? Can't I use private key to decrypt?
2. _sign() should be the signature process using private key to encrypt a piece of data, why it is trying to decrypt at line 70, and it should be decryption in '_verify', but why it is _encrypt()?
49 def _decrypt(self, c):
50 # compute c**d (mod n)
51 if not self.has_private():
52 raise TypeError("No private key")
53 if (hasattr(self,'p') and hasattr(self,'q') and hasattr(self,'u')):
54 m1 = pow(c, self.d % (self.p-1), self.p)
55 m2 = pow(c, self.d % (self.q-1), self.q)
56 h = m2 - m1
57 if (h<0):
58 h = h + self.q
59 h = h*self.u % self.q
60 return h*self.p+m1
61 return pow(c, self.d, self.n)
63 def _encrypt(self, m):
64 # compute m**d (mod n)
65 return pow(m, self.e, self.n)
67 def _sign(self, m): # alias for _decrypt
68 if not self.has_private():
69 raise TypeError("No private key")
70 return self._decrypt(m)
72 def _verify(self, m, sig):
73 return self._encrypt(sig) == m
More information about the pycrypto