diff options
author | Filippo Valsorda <[email protected]> | 2012-12-26 23:22:49 +0100 |
---|---|---|
committer | Filippo Valsorda <[email protected]> | 2012-12-30 19:50:33 +0100 |
commit | cb6ff87fbb05e421f77b57a79699c647866ceb09 (patch) | |
tree | dc0f225e70391aed736227e6df89915a36d6c264 /youtube_dl/utils.py | |
parent | 0deac3a2d8aeca756ae9f0620af9185449c6feb2 (diff) | |
download | youtube-dl-cb6ff87fbb05e421f77b57a79699c647866ceb09.tar.gz youtube-dl-cb6ff87fbb05e421f77b57a79699c647866ceb09.zip |
The new updates system, relies on gh-pages, secured by RSA, uses external web servers
Diffstat (limited to 'youtube_dl/utils.py')
-rw-r--r-- | youtube_dl/utils.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 463804e18..7d6041929 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -410,6 +410,34 @@ def encodeFilename(s): else: return s.encode(sys.getfilesystemencoding(), 'ignore') +def rsa_verify(message, signature, key): + from struct import pack + from hashlib import sha256 + from sys import version_info + def b(x): + if version_info[0] == 2: return x + else: return x.encode('latin1') + assert(type(message) == type(b(''))) + block_size = 0 + n = key[0] + while n: + block_size += 1 + n >>= 8 + signature = pow(int(signature, 16), key[1], key[0]) + raw_bytes = [] + while signature: + raw_bytes.insert(0, pack("B", signature & 0xFF)) + signature >>= 8 + signature = (block_size - len(raw_bytes)) * b('\x00') + b('').join(raw_bytes) + if signature[0:2] != b('\x00\x01'): return False + signature = signature[2:] + if not b('\x00') in signature: return False + signature = signature[signature.index(b('\x00'))+1:] + if not signature.startswith(b('\x30\x31\x30\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20')): return False + signature = signature[19:] + if signature != sha256(message).digest(): return False + return True + class DownloadError(Exception): """Download Error exception. |