The new updates system, relies on gh-pages, secured by RSA, uses external web servers

This commit is contained in:
Filippo Valsorda 2012-12-26 23:22:49 +01:00
parent 0deac3a2d8
commit cb6ff87fbb
6 changed files with 224 additions and 58 deletions

View file

@ -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.