cabaadd533e7aa080abfc4a3fed2d3f5963b28dd
[enigma2.git] / lib / python / Plugins / SystemPlugins / CrashlogAutoSubmit / __init__.py
1 import sha\r
2 \r
3 def bin2long(s):\r
4         return reduce( lambda x,y:(x<<8L)+y, map(ord, s))\r
5 \r
6 def long2bin(l):\r
7         res = ""\r
8         for byte in range(128):\r
9                 res += chr((l >> (1024 - (byte + 1) * 8)) & 0xff)\r
10         return res\r
11 \r
12 def rsa_pub1024(src, mod):\r
13         return long2bin(pow(bin2long(src), 65537, bin2long(mod)))\r
14         \r
15 def decrypt_block(src, mod):\r
16         if len(src) != 128 and len(src) != 202:\r
17                 return None\r
18         dest = rsa_pub1024(src[:128], mod)\r
19         hash = sha.new(dest[1:107])\r
20         if len(src) == 202:\r
21                 hash.update(src[131:192])       \r
22         result = hash.digest()\r
23         if result == dest[107:127]:\r
24                 return dest\r
25         return None\r
26 \r
27 def validate_cert(cert, key):\r
28         buf = decrypt_block(cert[8:], key) \r
29         if buf is None:\r
30                 return None\r
31         return buf[36:107] + cert[139:196]\r
32 \r
33 def read_random():\r
34         try:\r
35                 fd = open("/dev/urandom", "r")\r
36                 buf = fd.read(8)\r
37                 fd.close()\r
38                 return buf\r
39         except:\r
40                 return None