diff options
| -rw-r--r-- | test/test_utils.py | 9 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 15 | 
2 files changed, 24 insertions, 0 deletions
| diff --git a/test/test_utils.py b/test/test_utils.py index 3cdb21d40..aefd94518 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -52,6 +52,7 @@ from youtube_dl.utils import (      parse_filesize,      parse_count,      parse_iso8601, +    pkcs1pad,      read_batch_urls,      sanitize_filename,      sanitize_path, @@ -1104,6 +1105,14 @@ The first line              ohdave_rsa_encrypt(b'aa111222', e, N),              '726664bd9a23fd0c70f9f1b84aab5e3905ce1e45a584e9cbcf9bcc7510338fc1986d6c599ff990d923aa43c51c0d9013cd572e13bc58f4ae48f2ed8c0b0ba881') +    def test_pkcs1pad(self): +        data = [1, 2, 3] +        padded_data = pkcs1pad(data, 32) +        self.assertEqual(padded_data[:2], [0, 2]) +        self.assertEqual(padded_data[28:], [0, 1, 2, 3]) + +        self.assertRaises(ValueError, pkcs1pad, data, 8) +      def test_encode_base_n(self):          self.assertEqual(encode_base_n(0, 30), '0')          self.assertEqual(encode_base_n(80, 30), '2k') diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 17b83794a..8bd075eaf 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -3336,6 +3336,21 @@ def ohdave_rsa_encrypt(data, exponent, modulus):      return '%x' % encrypted +def pkcs1pad(data, length): +    """ +    Padding input data with PKCS#1 scheme + +    @param {int[]} data        input data +    @param {int}   length      target length +    @returns {int[]}           padded data +    """ +    if len(data) > length - 11: +        raise ValueError('Input data too long for PKCS#1 padding') + +    pseudo_random = [random.randint(0, 254) for _ in range(length - len(data) - 3)] +    return [0, 2] + pseudo_random + [0] + data + +  def encode_base_n(num, n, table=None):      FULL_TABLE = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'      if not table: | 
