def decrypt(self, C, t=None, h=None, mgf=None, L=None):
"""
Decrypt ciphertext 'C' using 't' decryption scheme where 't' can be:
- None: the ciphertext 'C' is directly applied the RSADP decryption
primitive, as described in PKCS#1 v2.1, i.e. RFC 3447
Sect 5.1.2. Simply, put the message undergo a modular
exponentiation using the private key. Additionnal method
parameters are just ignored.
- 'pkcs': the ciphertext 'C' is applied RSAES-PKCS1-V1_5-DECRYPT
decryption scheme as described in section 7.2.2 of RFC 3447.
In that context, other parameters ('h', 'mgf', 'l') are not
used.
- 'oaep': the ciphertext 'C' is applied the RSAES-OAEP-DECRYPT decryption
scheme, as described in PKCS#1 v2.1, i.e. RFC 3447 Sect
7.1.2. In that context,
o 'h' parameter provides the name of the hash method to use.
Possible values are "md2", "md4", "md5", "sha1", "tls",
"sha224", "sha256", "sha384" and "sha512". if none is provided,
sha1 is used by default.
o 'mgf' is the mask generation function. By default, mgf
is derived from the provided hash function using the
generic MGF1 (see pkcs_mgf1() for details).
o 'L' is the optional label to be associated with the
message. If not provided, the default value is used, i.e
the empty string. No check is done on the input limitation
of the hash function regarding the size of 'L' (for
instance, 2^61 - 1 for SHA-1). You have been warned.
"""
if t is None:
C = pkcs_os2ip(C)
c = self._rsadp(C)
l = int(math.ceil(math.log(c, 2) / 8.)) # Hack
return pkcs_i2osp(c, l)
elif t == "pkcs":
return self._rsaes_pkcs1_v1_5_decrypt(C)
elif t == "oaep":
return self._rsaes_oaep_decrypt(C, h, mgf, L)
else:
warning("Key.decrypt(): Unknown decryption type (%s) provided" % t)
return None
### Below are signature related methods. Verification ones are inherited from
### PubKey
评论列表
文章目录