diff options
| author | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-12-26 23:22:49 +0100 | 
|---|---|---|
| committer | Filippo Valsorda <filippo.valsorda@gmail.com> | 2012-12-30 19:50:33 +0100 | 
| commit | cb6ff87fbb05e421f77b57a79699c647866ceb09 (patch) | |
| tree | dc0f225e70391aed736227e6df89915a36d6c264 /youtube_dl/utils.py | |
| parent | 0deac3a2d8aeca756ae9f0620af9185449c6feb2 (diff) | |
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. | 
