Guest User

Untitled

a guest
May 21st, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. from base64 import b64encode
  2. import json
  3. from urllib import quote
  4.  
  5. from twisted.internet import reactor
  6. from twisted.internet.defer import inlineCallbacks, returnValue
  7. from twisted.internet.task import deferLater
  8.  
  9. from roles import initialize_peer, make_request, sleep, stop_peers
  10.  
  11.  
  12. print "Initializing peers"
  13. idowner, idowner_restapi = initialize_peer("idowner")
  14. attester, attester_restapi = initialize_peer("attester")
  15. verifier, verifier_restapi = initialize_peer("verifier")
  16.  
  17.  
  18. @inlineCallbacks
  19. def wait_for_peers(idowner_restapi):
  20. # Wait a second, if we fail to find peers: repeat, otherwise: return the result
  21. peers = yield make_request(idowner_restapi, 'GET', {
  22. 'type': 'peers'
  23. })
  24. if peers != "[]":
  25. returnValue(peers)
  26. else:
  27. print "No peers have connected yet, waiting for 4 seconds!"
  28. peers = yield deferLater(reactor, 4.0, wait_for_peers, idowner_restapi)
  29. returnValue(peers)
  30.  
  31.  
  32. @inlineCallbacks
  33. def wait_for_attestation_request(attester_restapi):
  34. # Wait a second, if we fail to find pending requests: repeat, otherwise: return the result
  35. requests = yield make_request(attester_restapi, 'GET', {
  36. 'type': 'outstanding'
  37. })
  38. if requests != "[]":
  39. returnValue(requests)
  40. else:
  41. print "No attestation requests have been received yet, waiting for 4 seconds!"
  42. requests = yield deferLater(reactor, 4.0, wait_for_attestation_request, attester_restapi)
  43. returnValue(requests)
  44.  
  45.  
  46. @inlineCallbacks
  47. def make_attribute():
  48. global attester, attester_restapi, idowner, idowner_restapi, verifier, verifier_restapi
  49. try:
  50. idowner_id = quote(b64encode(idowner.keys["anonymous id"].mid))
  51. attest_id = quote(b64encode(attester.keys["anonymous id"].mid))
  52. verifier_id = quote(b64encode(verifier.keys["anonymous id"].mid))
  53.  
  54. value = yield wait_for_peers(idowner_restapi)
  55. print "Known peers for id owner:", value
  56. print "Requesting attestation for QR from", b64encode(attester.keys["anonymous id"].mid),\
  57. "(generates one-time EC key)"
  58. yield make_request(idowner_restapi, 'POST', {
  59. 'type': 'request',
  60. 'mid': attest_id,
  61. 'attribute_name': 'QR'
  62. })
  63. value = yield wait_for_attestation_request(attester_restapi)
  64. print "Pending attestation request for attester:", value
  65. print "Attesting QR for", b64encode(idowner.keys["anonymous id"].mid)
  66. yield make_request(attester_restapi, 'POST', {
  67. 'type': 'attest',
  68. 'mid': idowner_id,
  69. 'attribute_name': 'QR',
  70. 'attribute_value': quote(b64encode('binarydata'))
  71. })
  72. value = yield make_request(idowner_restapi, 'GET', {
  73. 'type': 'attributes',
  74. 'mid': attest_id
  75. })
  76. print "ID Owner attributes:", value
  77. yield make_request(verifier_restapi, 'POST', {
  78. 'type': 'verify',
  79. 'mid': idowner_id,
  80. 'attribute_hash': quote(json.loads(value)[0][1]),
  81. 'attribute_values': quote(b64encode('binarydata'))
  82. })
  83. yield sleep(2)
  84. i = 0
  85. while i < 20:
  86. value = yield make_request(verifier_restapi, 'GET', {
  87. 'type': 'verification_output'
  88. })
  89. print "Verification output:", value
  90. yield sleep(0.2)
  91. i += 1
  92. yield stop_peers(attester, idowner)
  93. except:
  94. import traceback
  95. traceback.print_exc()
  96.  
  97.  
  98. deferLater(reactor, 0.5, make_attribute)
  99. reactor.run()
Add Comment
Please, Sign In to add comment