diff options
author | Legrandin <gooksankoo@hoiptorrow.mailexpire.com> | 2011-01-16 22:05:54 +0100 |
---|---|---|
committer | Legrandin <gooksankoo@hoiptorrow.mailexpire.com> | 2011-01-16 22:05:54 +0100 |
commit | 1221bebb3eb2eb1b6e075cf13c0fb4f550404134 (patch) | |
tree | ee69d43d001baa7e9908153b85878d46af20d176 /lib/Crypto/PublicKey | |
parent | 894bbc23e986ca21ae6d712604b000169dd88317 (diff) | |
download | pycrypto-1221bebb3eb2eb1b6e075cf13c0fb4f550404134.tar.gz |
Pure tab-to-space conversion with :retab in vim.
Diffstat (limited to 'lib/Crypto/PublicKey')
-rw-r--r-- | lib/Crypto/PublicKey/RSA.py | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/lib/Crypto/PublicKey/RSA.py b/lib/Crypto/PublicKey/RSA.py index bcb7f58..44a9487 100644 --- a/lib/Crypto/PublicKey/RSA.py +++ b/lib/Crypto/PublicKey/RSA.py @@ -134,37 +134,37 @@ class _RSAobj(pubkey.pubkey): return "<%s @0x%x %s>" % (self.__class__.__name__, id(self), ",".join(attrs)) def exportKey(self, format='PEM'): - """Export the RSA key. A string is returned - with the encoded public or the private half - under the selected format. - - format: 'DER' (PKCS#1) or 'PEM' (RFC1421) - """ - der = DerSequence() - if self.has_private(): - keyType = "RSA PRIVATE" - der[:] = [ 0, self.n, self.e, self.d, self.p, self.q, - self.d % (self.p-1), self.d % (self.q-1), - inverse(self.q, self.p) ] - else: - keyType = "PUBLIC" - der.append('\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00') - bitmap = DerObject('BIT STRING') - derPK = DerSequence() - derPK[:] = [ self.n, self.e ] - bitmap.payload = '\x00' + derPK.encode() - der.append(bitmap.encode()) - if format=='DER': - return der.encode() - if format=='PEM': - pem = "-----BEGIN %s KEY-----\n" % keyType - binaryKey = der.encode() - # Each BASE64 line can take up to 64 characters (=48 bytes of data) - chunks = [ binascii.b2a_base64(binaryKey[i:i+48]) for i in range(0, len(binaryKey), 48) ] - pem += ''.join(chunks) - pem += "-----END %s KEY-----" % keyType - return pem - return ValueError("Unknown key format '%s'. Cannot export the RSA key." % format) + """Export the RSA key. A string is returned + with the encoded public or the private half + under the selected format. + + format: 'DER' (PKCS#1) or 'PEM' (RFC1421) + """ + der = DerSequence() + if self.has_private(): + keyType = "RSA PRIVATE" + der[:] = [ 0, self.n, self.e, self.d, self.p, self.q, + self.d % (self.p-1), self.d % (self.q-1), + inverse(self.q, self.p) ] + else: + keyType = "PUBLIC" + der.append('\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00') + bitmap = DerObject('BIT STRING') + derPK = DerSequence() + derPK[:] = [ self.n, self.e ] + bitmap.payload = '\x00' + derPK.encode() + der.append(bitmap.encode()) + if format=='DER': + return der.encode() + if format=='PEM': + pem = "-----BEGIN %s KEY-----\n" % keyType + binaryKey = der.encode() + # Each BASE64 line can take up to 64 characters (=48 bytes of data) + chunks = [ binascii.b2a_base64(binaryKey[i:i+48]) for i in range(0, len(binaryKey), 48) ] + pem += ''.join(chunks) + pem += "-----END %s KEY-----" % keyType + return pem + return ValueError("Unknown key format '%s'. Cannot export the RSA key." % format) class RSAImplementation(object): def __init__(self, **kwargs): @@ -217,15 +217,15 @@ class RSAImplementation(object): return _RSAobj(self, key) def _importKeyDER(self, externKey): - der = DerSequence() - der.decode(externKey, True) - if len(der)==9 and der.hasOnlyInts() and der[0]==0: - # ASN.1 RSAPrivateKey element - del der[6:] # Remove d mod (p-1), d mod (q-1), and q^{-1} mod p + der = DerSequence() + der.decode(externKey, True) + if len(der)==9 and der.hasOnlyInts() and der[0]==0: + # ASN.1 RSAPrivateKey element + del der[6:] # Remove d mod (p-1), d mod (q-1), and q^{-1} mod p der.append(inverse(der[4],der[5])) # Add p^{-1} mod q - del der[0] # Remove version - return self.construct(der[:]) - if len(der)==2: + del der[0] # Remove version + return self.construct(der[:]) + if len(der)==2: # The DER object is a SEQUENCE with two elements: # a SubjectPublicKeyInfo SEQUENCE and an opaque BIT STRING. # @@ -237,33 +237,33 @@ class RSAImplementation(object): # 0x05 0x00 NULL # # The second encapsulates the actual ASN.1 RSAPublicKey element. - if der[0]=='\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00': - bitmap = DerObject() - bitmap.decode(der[1], True) - if bitmap.typeTag=='\x03' and bitmap.payload[0]=='\x00': - der.decode(bitmap.payload[1:], True) - if len(der)==2 and der.hasOnlyInts(): - return self.construct(der[:]) - raise ValueError("RSA key format is not supported") + if der[0]=='\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00': + bitmap = DerObject() + bitmap.decode(der[1], True) + if bitmap.typeTag=='\x03' and bitmap.payload[0]=='\x00': + der.decode(bitmap.payload[1:], True) + if len(der)==2 and der.hasOnlyInts(): + return self.construct(der[:]) + raise ValueError("RSA key format is not supported") def importKey(self, externKey): - """Import an RSA key (public or private half). + """Import an RSA key (public or private half). - externKey: the RSA key to import, encoded as a string. - The key can be in DER (PKCS#1) or in unencrypted - PEM format (RFC1421). + externKey: the RSA key to import, encoded as a string. + The key can be in DER (PKCS#1) or in unencrypted + PEM format (RFC1421). Raises a ValueError/IndexError if the given key cannot be parsed. - """ - if externKey.startswith('-----'): - # This is probably a PEM encoded key - lines = externKey.replace(" ",'').split() - der = binascii.a2b_base64(''.join(lines[1:-1])) - return self._importKeyDER(der) - if externKey[0]=='\x30': - # This is probably a DER encoded key - return self._importKeyDER(externKey) - raise ValueError("RSA key format is not supported") + """ + if externKey.startswith('-----'): + # This is probably a PEM encoded key + lines = externKey.replace(" ",'').split() + der = binascii.a2b_base64(''.join(lines[1:-1])) + return self._importKeyDER(der) + if externKey[0]=='\x30': + # This is probably a DER encoded key + return self._importKeyDER(externKey) + raise ValueError("RSA key format is not supported") _impl = RSAImplementation() generate = _impl.generate |