Source code for sigma1
'''
**Sigma Protocol 1 (Sigma1)**
*Authors:* Charm Developers
| **Notes:** Sigma protocol for proving knowledge in pairing-based settings
.. rubric:: Scheme Properties
* **Type:** sigma protocol (zero-knowledge proof)
* **Setting:** bilinear groups (pairing-based)
* **Assumption:** DL
.. rubric:: Implementation
:Authors: J. Ayo Akinyele
:Date: 2/2012
'''
from charm.toolbox.sigmaprotocol import Sigma
from charm.toolbox.pairinggroup import ZR,G2,pair
[docs]
class SigmaProtocol1(Sigma):
def __init__(self, groupObj, common_input=None):
Sigma.__init__(self, groupObj, common_input)
[docs]
def prover_state1(self):
(g, h, H) = Sigma.get(self, ['g', 'h', 'H'])
r = self.group.random(G2)
a = pair(g, r)
Sigma.setState(self, 3)
return { 'r':r, 'a':a, 'g':g, 'h':h, 'H':H }
[docs]
def prover_state3(self, input):
(r, h, c) = Sigma.get(self, ['r','h','c'])
z = r * (h ** -c)
Sigma.setState(self, 5)
return {'z':z }
[docs]
def prover_state5(self, input):
Sigma.setState(self, None)
Sigma.setErrorCode(self, input)
return None
[docs]
def verifier_state2(self, input):
c = self.group.random(ZR)
Sigma.setState(self, 4)
return {'c':c }
[docs]
def verifier_state4(self, input):
(g, H, a, c, z) = Sigma.get(self, ['g','H','a','c','z'])
if a == (pair(g,z) * (H ** c)):
print("SUCCESS!!!!!!!"); result = 'OK'
else:
print("Failed!!!"); result = 'FAIL'
Sigma.setState(self, 6)
Sigma.setErrorCode(self, result)
return result
[docs]
def verifier_state6(self, input):
Sigma.setState(self, None)
return None