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