[utils] Add generic caesar cipher and rot47
This commit is contained in:
		
							parent
							
								
									6ddd4bf6ac
								
							
						
					
					
						commit
						1ced222120
					
				
					 2 changed files with 29 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -19,6 +19,7 @@ from youtube_dl.utils import (
 | 
			
		|||
    age_restricted,
 | 
			
		||||
    args_to_str,
 | 
			
		||||
    encode_base_n,
 | 
			
		||||
    caesar,
 | 
			
		||||
    clean_html,
 | 
			
		||||
    date_from_str,
 | 
			
		||||
    DateRange,
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +70,7 @@ from youtube_dl.utils import (
 | 
			
		|||
    remove_start,
 | 
			
		||||
    remove_end,
 | 
			
		||||
    remove_quotes,
 | 
			
		||||
    rot47,
 | 
			
		||||
    shell_quote,
 | 
			
		||||
    smuggle_url,
 | 
			
		||||
    str_to_int,
 | 
			
		||||
| 
						 | 
				
			
			@ -1369,6 +1371,20 @@ Line 1
 | 
			
		|||
        self.assertRaises(ValueError, encode_base_n, 0, 70)
 | 
			
		||||
        self.assertRaises(ValueError, encode_base_n, 0, 60, custom_table)
 | 
			
		||||
 | 
			
		||||
    def test_caesar(self):
 | 
			
		||||
        self.assertEqual(caesar('ace', 'abcdef', 2), 'cea')
 | 
			
		||||
        self.assertEqual(caesar('cea', 'abcdef', -2), 'ace')
 | 
			
		||||
        self.assertEqual(caesar('ace', 'abcdef', -2), 'eac')
 | 
			
		||||
        self.assertEqual(caesar('eac', 'abcdef', 2), 'ace')
 | 
			
		||||
        self.assertEqual(caesar('ace', 'abcdef', 0), 'ace')
 | 
			
		||||
        self.assertEqual(caesar('xyz', 'abcdef', 2), 'xyz')
 | 
			
		||||
        self.assertEqual(caesar('abc', 'acegik', 2), 'ebg')
 | 
			
		||||
        self.assertEqual(caesar('ebg', 'acegik', -2), 'abc')
 | 
			
		||||
 | 
			
		||||
    def test_rot47(self):
 | 
			
		||||
        self.assertEqual(rot47('youtube-dl'), r'J@FEF36\5=')
 | 
			
		||||
        self.assertEqual(rot47('YOUTUBE-DL'), r'*~&%&qt\s{')
 | 
			
		||||
 | 
			
		||||
    def test_urshift(self):
 | 
			
		||||
        self.assertEqual(urshift(3, 1), 1)
 | 
			
		||||
        self.assertEqual(urshift(-3, 1), 2147483646)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5383,6 +5383,19 @@ def decode_packed_codes(code):
 | 
			
		|||
        obfucasted_code)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def caesar(s, alphabet, shift):
 | 
			
		||||
    if shift == 0:
 | 
			
		||||
        return s
 | 
			
		||||
    l = len(alphabet)
 | 
			
		||||
    return ''.join(
 | 
			
		||||
        alphabet[(alphabet.index(c) + shift) % l] if c in alphabet else c
 | 
			
		||||
        for c in s)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def rot47(s):
 | 
			
		||||
    return caesar(s, r'''!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~''', 47)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_m3u8_attributes(attrib):
 | 
			
		||||
    info = {}
 | 
			
		||||
    for (key, val) in re.findall(r'(?P<key>[A-Z0-9-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)', attrib):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue