diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2016-02-17 06:01:44 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2016-02-20 19:54:58 +0800 | 
| commit | 5bc880b9887c9689fef171683eae279adbbfc186 (patch) | |
| tree | c5f19e816b4f1ebd8116262b62f24007f554ac52 | |
| parent | 958759f44b3e7c37509394568d9764e2794f713a (diff) | |
[utils] Add OHDave's RSA encryption function
| -rw-r--r-- | test/test_utils.py | 8 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 18 | 
2 files changed, 26 insertions, 0 deletions
| diff --git a/test/test_utils.py b/test/test_utils.py index a1e416dd5..e6887be9f 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -35,6 +35,7 @@ from youtube_dl.utils import (      is_html,      js_to_json,      limit_length, +    ohdave_rsa_encrypt,      OnDemandPagedList,      orderedSet,      parse_duration, @@ -792,6 +793,13 @@ The first line                  {'nocheckcertificate': False}, '--check-certificate', 'nocheckcertificate', 'false', '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__':      unittest.main() diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 672ce05ea..7ce661b09 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -4,6 +4,7 @@  from __future__ import unicode_literals  import base64 +import binascii  import calendar  import codecs  import contextlib @@ -2582,3 +2583,20 @@ class PerRequestProxyHandler(compat_urllib_request.ProxyHandler):              return None  # No Proxy          return compat_urllib_request.ProxyHandler.proxy_open(              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 | 
