%PDF- %PDF-
Direktori : /usr/lib64/python2.7/site-packages/Crypto/Signature/ |
Current File : //usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyc |
� Bd\Rc @ s� d Z d Z d d g Z d d l Z d d l m Z d d l m Z m Z m Z d d l Td d d � � YZ d � Z d � Z d S( sr RSA digital signature protocol according to PKCS#1 v1.5 See RFC3447__ or the `original RSA Labs specification`__. This scheme is more properly called ``RSASSA-PKCS1-v1_5``. For example, a sender may authenticate a message using SHA-1 like this: >>> from Crypto.Signature import PKCS1_v1_5 >>> from Crypto.Hash import SHA >>> from Crypto.PublicKey import RSA >>> >>> message = 'To be signed' >>> key = RSA.importKey(open('privkey.der').read()) >>> h = SHA.new(message) >>> signer = PKCS1_v1_5.new(key) >>> signature = signer.sign(h) At the receiver side, verification can be done using the public part of the RSA key: >>> key = RSA.importKey(open('pubkey.der').read()) >>> h = SHA.new(message) >>> verifier = PKCS1_v1_5.new(key) >>> if verifier.verify(h, signature): >>> print "The signature is authentic." >>> else: >>> print "The signature is not authentic." :undocumented: __revision__, __package__ .. __: http://www.ietf.org/rfc/rfc3447.txt .. __: http://www.rsa.com/rsalabs/node.asp?id=2125 s $Id$t newt PKCS115_SigSchemei����N( t ceil_div( t DerSequencet DerNullt DerOctetString( t *c B s2 e Z d Z d � Z d � Z d � Z d � Z RS( sL This signature scheme can perform PKCS#1 v1.5 RSA signature or verification.c C s | | _ d S( s Initialize this PKCS#1 v1.5 signature scheme object. :Parameters: key : an RSA key object If a private half is given, both signature and verification are possible. If a public half is given, only verification is possible. N( t _key( t selft key( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyt __init__G s c C s | j j � S( sC Return True if this cipher object can be used for signing messages.( R t has_private( R ( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyt can_signQ s c C sm t j j j | j j � } t | d � } t | | � } | j j | � } t d � | t | � | } | S( sz Produce the PKCS#1 v1.5 signature of a message. This function is named ``RSASSA-PKCS1-V1_5-SIGN``, and is specified in section 8.2.1 of RFC3447. :Parameters: mhash : hash object The hash that was carried out over the message. This is an object belonging to the `Crypto.Hash` module. :Return: The signature encoded as a string. :Raise ValueError: If the RSA key length is not sufficiently long to deal with the given hash algorithm. :Raise TypeError: If the RSA key has no private half. i i ( t Cryptot Utilt numbert sizeR t nR t EMSA_PKCS1_V1_5_ENCODEt decryptt bchrt len( R t mhasht modBitst kt emt mt S( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyt signU s c C s� t j j j | j j � } t | d � } t | � | k r@ d S| j j | d � d } t d � | t | � | } y t | | � } Wn t k r� d SX| | k S( s� Verify that a certain PKCS#1 v1.5 signature is authentic. This function checks if the party holding the private half of the key really signed the message. This function is named ``RSASSA-PKCS1-V1_5-VERIFY``, and is specified in section 8.2.2 of RFC3447. :Parameters: mhash : hash object The hash that was carried out over the message. This is an object belonging to the `Crypto.Hash` module. S : string The signature that needs to be validated. :Return: True if verification is correct. False otherwise. i i ( R R R R R R R R t encryptR R t ValueError( R R R R R R t em1t em2( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyt verifyu s ( t __name__t __module__t __doc__R R R R! ( ( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyR D s c C s� t | j t � j � g � } t | j � � } t | j � | j � g � j � } | t | � d k r� t d t | � � � n t d � | t | � d } t d � | t d � | S( s@ Implement the ``EMSA-PKCS1-V1_5-ENCODE`` function, as defined in PKCS#1 v2.1 (RFC3447, 9.2). ``EMSA-PKCS1-V1_5-ENCODE`` actually accepts the message ``M`` as input, and hash it internally. Here, we expect that the message has already been hashed instead. :Parameters: hash : hash object The hash object that holds the digest of the message being signed. emLen : int The length the final encoding must have, in bytes. :attention: the early standard (RFC2313) stated that ``DigestInfo`` had to be BER-encoded. This means that old signatures might have length tags in indefinite form, which is not supported in DER. Such encoding cannot be reproduced by this function. :attention: the same standard defined ``DigestAlgorithm`` to be of ``AlgorithmIdentifier`` type, where the PARAMETERS item is optional. Encodings for ``MD2/4/5`` without ``PARAMETERS`` cannot be reproduced by this function. :Return: An ``emLen`` byte long string that encodes the hash. i s8 Selected hash algorith has a too long digest (%d bytes).i� i t i ( R t oidR t encodeR t digestR R R t b( t hasht emLent digestAlgoR( t digestInfot PS( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyR � s 0 c C s t | � S( sH Return a signature scheme object `PKCS115_SigScheme` that can be used to perform PKCS#1 v1.5 signature or verification. :Parameters: key : RSA key object The key to use to sign or verify the message. This is a `Crypto.PublicKey.RSA` object. Signing is only possible if *key* is a private RSA key. ( R ( R ( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyR � s ( ( R$ t __revision__t __all__t Crypto.Util.numberR R t Crypto.Util.asn1R R R t Crypto.Util.py3compatR R R ( ( ( sA /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyt <module>: s _ >