Source code for pksig_bls04
'''
:Boneh-Lynn-Shacham Identity Based Signature
| From: "D. Boneh, B. Lynn, H. Shacham Short Signatures from the Weil Pairing"
| Published in: Journal of Cryptology 2004
| Available from: http://
| Notes: This is the IBE (2-level HIBE) implementation of the HIBE scheme BB_2.
* type: signature (identity-based)
* setting: bilinear groups (asymmetric)
:Authors: J. Ayo Akinyele
:Date: 1/2011
'''
from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,pair
from charm.core.engine.util import objectToBytes
from charm.toolbox.IBSig import *
debug = False
[docs]class BLS01(IBSig):
"""
>>> from charm.toolbox.pairinggroup import PairingGroup
>>> group = PairingGroup('MNT224')
>>> messages = { 'a':"hello world!!!" , 'b':"test message" }
>>> ib = BLS01(group)
>>> (public_key, secret_key) = ib.keygen()
>>> signature = ib.sign(secret_key['x'], messages)
>>> ib.verify(public_key, signature, messages)
True
"""
def __init__(self, groupObj):
IBSig.__init__(self)
global group
group = groupObj
[docs] def dump(self, obj):
return objectToBytes(obj, group)
[docs] def keygen(self, secparam=None):
g, x = group.random(G2), group.random()
g_x = g ** x
pk = { 'g^x':g_x, 'g':g, 'identity':str(g_x), 'secparam':secparam }
sk = { 'x':x }
return (pk, sk)
[docs] def sign(self, x, message):
M = self.dump(message)
if debug: print("Message => '%s'" % M)
return group.hash(M, G1) ** x
[docs] def verify(self, pk, sig, message):
M = self.dump(message)
h = group.hash(M, G1)
if pair(sig, pk['g']) == pair(h, pk['g^x']):
return True
return False
[docs]def main():
groupObj = PairingGroup('MNT224')
m = { 'a':"hello world!!!" , 'b':"test message" }
bls = BLS01(groupObj)
(pk, sk) = bls.keygen()
sig = bls.sign(sk['x'], m)
if debug: print("Message: '%s'" % m)
if debug: print("Signature: '%s'" % sig)
assert bls.verify(pk, sig, m), "Failure!!!"
if debug: print('SUCCESS!!!')
if __name__ == "__main__":
debug = True
main()