def generate_RSA(): fh = open('/etc/eko/prikey.pickle', 'wb') p = pickle.Pickler(fh) key = RSA.generate(512, os.urandom) p.dump(key) fh.close() baseconv = BaseConverter('0123456789abcdef') fh2 = open('/etc/eko/pubkey.text', 'w') fh2.write('Public Key e Parameter\n') fh2.write(baseconv.from_decimal(key.publickey().e)) fh2.write('\nPublic key n Parameter\n') fh2.write(baseconv.from_decimal(key.publickey().n)) fh2.close() print "New Key Generated!" print "-"*20 print "pubkey.e : %s" % key.publickey().e print "" print "pubkey.n : %s" % key.publickey().n print "-"*20 return key
def send_heartbeat(url, key): json_msg = {} json_msg['method'] = 'heartbeat' json_msg['id'] = 4 params = {} params['kiosk-id'] = DIEID if UPTIME < 60: # under a minute uptimestr = "%.2f seconds" % UPTIME elif UPTIME < 60*60: # under a hour uptimestr = "%.2f minutes" % (UPTIME/(60.0)) elif UPTIME < 60*60*24*3: # under 3 days uptimestr = "%.2f hours" % (UPTIME/(60.0*60.0)) else: # over 3 days uptimestr = "%.2f days" % (UPTIME/(60.0*60.0*24.0)) params['uptime'] = uptimestr params['sw-version'] = '1.0.0' params['time'] = datetime.utcnow() json_msg['params'] = params jsstr = json.dumps(json_msg) hash = MD5.new(jsstr).digest() baseconverter = BaseConverter('0123456789abcdef') sign_16encode = baseconverter.from_decimal(key.sign(hash, "")[0]) #print "encoded: %s" % sign_16encode #print "signature: %d" % key.sign(hash, "")[0] #print "hash: %s" % "".join(["%02x " % ord(x) for x in hash]) headers = {'X-eko-signature': sign_16encode} print jsstr #test decoding x = key.publickey().verify(hash, (baseconverter.to_decimal(sign_16encode),)) req = urllib2.Request(url, jsstr, headers) response = urllib2.urlopen(req) the_page = response.read() print the_page
def get_messages(url, key): json_msg = {} json_msg['method'] = 'get_messages' json_msg['id'] = 4 json_msg['params'] = {'kiosk-id': DIEID} jsstr = json.dumps(json_msg) hash = MD5.new(jsstr).digest() baseconverter = BaseConverter('0123456789abcdef') sign_16encode = baseconverter.from_decimal(key.sign(hash, "")[0]) #print "encoded: %s" % sign_16encode #print "signature: %d" % key.sign(hash, "")[0] #print "hash: %s" % "".join(["%02x " % ord(x) for x in hash]) headers = {'X-eko-signature': sign_16encode} print jsstr #test decoding x = key.publickey().verify(hash, (baseconverter.to_decimal(sign_16encode),)) req = urllib2.Request(url, jsstr, headers) response = urllib2.urlopen(req) the_page = response.read() print the_page
print('*** Generating new key ***') return generate_RSA() def generate_RSA(): fh = open('/etc/eko/prikey.pickle', 'wb') p = pickle.Pickler(fh) key = RSA.generate(512, os.urandom) p.dump(key) fh.close() baseconv = BaseConverter('0123456789abcdef') fh2 = open('/etc/eko/pubkey.text', 'w') fh2.write('Public Key e Parameter\n') fh2.write(baseconv.from_decimal(key.publickey().e)) fh2.write('\nPublic key n Parameter\n') fh2.write(baseconv.from_decimal(key.publickey().n)) fh2.close() print "New Key Generated!" print "-"*20 print "pubkey.e : %s" % key.publickey().e print "" print "pubkey.n : %s" % key.publickey().n print "-"*20 return key if __name__=="__main__": key = load_RSA() print('Public Key e Parameter\n') print(baseconv.from_decimal(key.publickey().e)) print('\nPublic key n Parameter\n') print(baseconv.from_decimal(key.publickey().n)) exit(0)
def solve_challenge(challenge): baseconv = BaseConverter('0123456789abcdef') key = load_RSA() signature = key.sign(challenge, "") sig_encoded = baseconv.from_decimal(signature[0]) return sig_encoded