mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[test] Add tests for aes
This commit is contained in:
		
							
								
								
									
										36
									
								
								devscripts/generate_aes_testdata.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								devscripts/generate_aes_testdata.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import codecs | ||||
| import subprocess | ||||
|  | ||||
| import os | ||||
| import sys | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from youtube_dl.utils import intlist_to_bytes | ||||
| from youtube_dl.aes import aes_encrypt, key_expansion | ||||
|  | ||||
| secret_msg = b'Secret message goes here' | ||||
|  | ||||
|  | ||||
| def hex_str(int_list): | ||||
|     return codecs.encode(intlist_to_bytes(int_list), 'hex') | ||||
|  | ||||
|  | ||||
| def openssl_encode(algo, key, iv): | ||||
|     cmd = ['openssl', 'enc', '-e', '-' + algo, '-K', hex_str(key), '-iv', hex_str(iv)] | ||||
|     prog = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) | ||||
|     out, _ = prog.communicate(secret_msg) | ||||
|     return out | ||||
|  | ||||
| iv = key = [0x20, 0x15] + 14 * [0] | ||||
|  | ||||
| r = openssl_encode('aes-128-cbc', key, iv) | ||||
| print('aes_cbc_decrypt') | ||||
| print(repr(r)) | ||||
|  | ||||
| password = key | ||||
| new_key = aes_encrypt(password, key_expansion(password)) | ||||
| r = openssl_encode('aes-128-ctr', new_key, iv) | ||||
| print('aes_decrypt_text') | ||||
| print(repr(r)) | ||||
							
								
								
									
										47
									
								
								test/test_aes.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test/test_aes.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from youtube_dl.aes import aes_decrypt, aes_encrypt, aes_cbc_decrypt, aes_decrypt_text | ||||
| from youtube_dl.utils import bytes_to_intlist, intlist_to_bytes | ||||
| import base64 | ||||
|  | ||||
| # the encrypted data can be generate with 'devscripts/generate_aes_testdata.py' | ||||
|  | ||||
|  | ||||
| class TestAES(unittest.TestCase): | ||||
|     def setUp(self): | ||||
|         self.key = self.iv = [0x20, 0x15] + 14 * [0] | ||||
|         self.secret_msg = b'Secret message goes here' | ||||
|  | ||||
|     def test_encrypt(self): | ||||
|         msg = b'message' | ||||
|         key = list(range(16)) | ||||
|         encrypted = aes_encrypt(bytes_to_intlist(msg), key) | ||||
|         decrypted = intlist_to_bytes(aes_decrypt(encrypted, key)) | ||||
|         self.assertEqual(decrypted, msg) | ||||
|  | ||||
|     def test_cbc_decrypt(self): | ||||
|         data = bytes_to_intlist( | ||||
|             b"\x97\x92+\xe5\x0b\xc3\x18\x91ky9m&\xb3\xb5@\xe6'\xc2\x96.\xc8u\x88\xab9-[\x9e|\xf1\xcd" | ||||
|         ) | ||||
|         decrypted = intlist_to_bytes(aes_cbc_decrypt(data, self.key, self.iv)) | ||||
|         self.assertEqual(decrypted.rstrip(b'\x08'), self.secret_msg) | ||||
|  | ||||
|     def test_decrypt_text(self): | ||||
|         password = intlist_to_bytes(self.key).decode('utf-8') | ||||
|         encrypted = base64.b64encode( | ||||
|             intlist_to_bytes(self.iv[:8]) + | ||||
|             b'\x17\x15\x93\xab\x8d\x80V\xcdV\xe0\t\xcdo\xc2\xa5\xd8ksM\r\xe27N\xae' | ||||
|         ) | ||||
|         decrypted = (aes_decrypt_text(encrypted, password, 16)) | ||||
|         self.assertEqual(decrypted, self.secret_msg) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
		Reference in New Issue
	
	Block a user