[utils] Add OHDave's RSA encryption function
parent
958759f44b
commit
5bc880b988
|
@ -35,6 +35,7 @@ from youtube_dl.utils import (
|
||||||
is_html,
|
is_html,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
limit_length,
|
limit_length,
|
||||||
|
ohdave_rsa_encrypt,
|
||||||
OnDemandPagedList,
|
OnDemandPagedList,
|
||||||
orderedSet,
|
orderedSet,
|
||||||
parse_duration,
|
parse_duration,
|
||||||
|
@ -792,6 +793,13 @@ The first line
|
||||||
{'nocheckcertificate': False}, '--check-certificate', 'nocheckcertificate', 'false', 'true', '='),
|
{'nocheckcertificate': False}, '--check-certificate', 'nocheckcertificate', 'false', 'true', '='),
|
||||||
['--check-certificate=true'])
|
['--check-certificate=true'])
|
||||||
|
|
||||||
|
def test_ohdave_rsa_encrypt(self):
|
||||||
|
N = 0xab86b6371b5318aaa1d3c9e612a9f1264f372323c8c0f19875b5fc3b3fd3afcc1e5bec527aa94bfa85bffc157e4245aebda05389a5357b75115ac94f074aefcd
|
||||||
|
e = 65537
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
ohdave_rsa_encrypt(b'aa111222', e, N),
|
||||||
|
'726664bd9a23fd0c70f9f1b84aab5e3905ce1e45a584e9cbcf9bcc7510338fc1986d6c599ff990d923aa43c51c0d9013cd572e13bc58f4ae48f2ed8c0b0ba881')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
import binascii
|
||||||
import calendar
|
import calendar
|
||||||
import codecs
|
import codecs
|
||||||
import contextlib
|
import contextlib
|
||||||
|
@ -2582,3 +2583,20 @@ class PerRequestProxyHandler(compat_urllib_request.ProxyHandler):
|
||||||
return None # No Proxy
|
return None # No Proxy
|
||||||
return compat_urllib_request.ProxyHandler.proxy_open(
|
return compat_urllib_request.ProxyHandler.proxy_open(
|
||||||
self, req, proxy, type)
|
self, req, proxy, type)
|
||||||
|
|
||||||
|
|
||||||
|
def ohdave_rsa_encrypt(data, exponent, modulus):
|
||||||
|
'''
|
||||||
|
Implement OHDave's RSA algorithm. See http://www.ohdave.com/rsa/
|
||||||
|
|
||||||
|
Input:
|
||||||
|
data: data to encrypt, bytes-like object
|
||||||
|
exponent, modulus: parameter e and N of RSA algorithm, both integer
|
||||||
|
Output: hex string of encrypted data
|
||||||
|
|
||||||
|
Limitation: supports one block encryption only
|
||||||
|
'''
|
||||||
|
|
||||||
|
payload = int(binascii.hexlify(data[::-1]), 16)
|
||||||
|
encrypted = pow(payload, exponent, modulus)
|
||||||
|
return '%x' % encrypted
|
||||||
|
|
Loading…
Reference in New Issue