Viewing File: /usr/lib64/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.pyo
ó
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
_ >
Back to Directory
File Manager