def verify(self, mpk, ID, M, sig): h = hashObj.copy() h.update(bytes(ID, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v=[] for i in range(mpk['x']): binsubstr = bstr[mpk['l']*i : mpk['l']*(i+1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) k = v h = hashObj.copy() h.update(bytes(M, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v=[] for i in range(mpk['x']): binsubstr = bstr[mpk['l']*i : mpk['l']*(i+1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) m = v S1 = sig['S1'] S2 = sig['S2'] S3 = sig['S3'] A = mpk['A'] g2 = mpk['g2'] comp1 = dotprod(group.init(G2), -1, mpk['x'], lam_func, mpk['ub'], k) comp2 = dotprod(group.init(G2), -1, mpk['x'], lam_func, mpk['ub'], m) if (pair(S1, g2) * pair(S2, mpk['u1b'] * comp1) * pair(S3, mpk['u2b'] * comp2)) == A: return True return False
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global lam_func, hashObj, debug group = groupObjParam N = len(verifyArgsDict) l = 5 incorrectIndices = [] lam_func = lambda i,a,b: a[i] ** b[i] __init__(group) for z in range(0, N): #for arg in verifyFuncArgs: #if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): #sys.exit("ALERT: Group membership check failed!!!!\n") pass if debug : print( "Verify..." ) k = strToId( verifyArgsDict[z]['mpk'][bodyKey] , verifyArgsDict[z]['ID'][bodyKey] ) m = strToId( verifyArgsDict[z]['mpk'][bodyKey] , verifyArgsDict[z]['M'][bodyKey] ) ( S1 , S2 , S3 ) = verifyArgsDict[z]['sig'][bodyKey][ 'S1' ] , verifyArgsDict[z]['sig'][bodyKey][ 'S2' ] , verifyArgsDict[z]['sig'][bodyKey][ 'S3' ] A , g2 = verifyArgsDict[z]['mpk'][bodyKey][ 'A' ] , verifyArgsDict[z]['mpk'][bodyKey][ 'g2' ] comp1 = dotprod( group.init( G2 ) , -1 , verifyArgsDict[z]['mpk'][bodyKey][ 'z' ] , lam_func , verifyArgsDict[z]['mpk'][bodyKey][ 'ub' ] , k ) comp2 = dotprod( group.init( G2 ) , -1 , verifyArgsDict[z]['mpk'][bodyKey][ 'z' ] , lam_func , verifyArgsDict[z]['mpk'][bodyKey][ 'ub' ] , m ) if( pair( S1 , g2 ) * pair( S2 , verifyArgsDict[z]['mpk'][bodyKey][ 'u1b' ] * comp1 ) * pair( S3 , verifyArgsDict[z]['mpk'][bodyKey][ 'u2b' ] * comp2 ) ) == A : pass else: incorrectIndices.append(z) return incorrectIndices
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global lam_func, hashObj, debug group = groupObjParam N = len(verifyArgsDict) z = 0 l = 5 incorrectIndices = [] lam_func = lambda i, a, b: a[i] ** b[i] __init__(group) for z in range(0, N): for arg in verifyFuncArgs: if group.ismember(verifyArgsDict[z][arg][bodyKey]) == False: sys.exit("ALERT: Group membership check failed!!!!\n") pass if debug: print("Verify...") k = strToId(verifyArgsDict[z]["mpk"][bodyKey], verifyArgsDict[z]["ID"][bodyKey]) m = strToId(verifyArgsDict[z]["mpk"][bodyKey], verifyArgsDict[z]["M"][bodyKey]) (S1, S2, S3) = ( verifyArgsDict[z]["sig"][bodyKey]["S1"], verifyArgsDict[z]["sig"][bodyKey]["S2"], verifyArgsDict[z]["sig"][bodyKey]["S3"], ) A, g2 = verifyArgsDict[z]["mpk"][bodyKey]["A"], verifyArgsDict[z]["mpk"][bodyKey]["g2"] comp1 = dotprod( group.init(G2), -1, verifyArgsDict[z]["mpk"][bodyKey]["z"], lam_func, verifyArgsDict[z]["mpk"][bodyKey]["ub"], k, ) comp2 = dotprod( group.init(G2), -1, verifyArgsDict[z]["mpk"][bodyKey]["z"], lam_func, verifyArgsDict[z]["mpk"][bodyKey]["ub"], m, ) if ( pair(S1, g2) * pair(S2, verifyArgsDict[z]["mpk"][bodyKey]["u1b"] * comp1) * pair(S3, verifyArgsDict[z]["mpk"][bodyKey]["u2b"] * comp2) ) == A: pass else: if z not in incorrectIndices: incorrectIndices.append(z) return incorrectIndices
def prove(self, sk, x): pi = [i for i in range(sk['n'])] for i in range(sk['n']): result = dotprod(group.init(ZR, 1), -1, i+1, lam_func, sk['u'], x) pi[i] = sk['g1'] ** (sk['u_t'] * result) result0 = dotprod(group.init(ZR, 1), -1, sk['n'], lam_func, sk['u'], x) pi_0 = sk['g1'] ** (sk['u_t'] * sk['u'][0] * result0) y = self.F(sk, x) return { 'y':y, 'pi':pi, 'pi0':pi_0 }
def prove(self, sk, x): pi = [i for i in range(sk['n'])] for i in range(sk['n']): result = dotprod(group.init(ZR, 1), -1, i + 1, lam_func, sk['u'], x) pi[i] = sk['g1']**(sk['u_t'] * result) result0 = dotprod(group.init(ZR, 1), -1, sk['n'], lam_func, sk['u'], x) pi_0 = sk['g1']**(sk['u_t'] * sk['u'][0] * result0) y = self.F(sk, x) return {'y': y, 'pi': pi, 'pi0': pi_0}
def verify(self, mpk, ID, M, sig): if debug: print("Verify...") k = self.strToId(mpk, ID) m = self.strToId(mpk, M) (S1, S2, S3) = sig['S1'], sig['S2'], sig['S3'] A, g2 = mpk['A'], mpk['g2'] comp1 = dotprod(group.init(G2), -1, mpk['z'], lam_func, mpk['ub'], k) comp2 = dotprod(group.init(G2), -1, mpk['z'], lam_func, mpk['ub'], m) if (pair(S1, g2) * pair(S2, mpk['u1b'] * comp1) * pair(S3, mpk['u2b'] * comp2)) == A: return True return False
def verify(self, mpk, ID, M, sig): if debug: print("Verify...") k = self.strToId(mpk, ID) m = self.strToId(mpk, M) (S1, S2, S3) = sig["S1"], sig["S2"], sig["S3"] A, g2 = mpk["A"], mpk["g2"] comp1 = dotprod(group.init(G2), -1, mpk["z"], lam_func, mpk["ub"], k) comp2 = dotprod(group.init(G2), -1, mpk["z"], lam_func, mpk["ub"], m) if (pair(S1, g2) * pair(S2, mpk["u1b"] * comp1) * pair(S3, mpk["u2b"] * comp2)) == A: return True return False
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global debug, hashObj, lam_func group = groupObjParam N = len(verifyArgsDict) z = 0 incorrectIndices = [] lam_func = lambda i,a,b: a[i] ** b[i] __init__(group) for z in range(0, N): #for arg in verifyFuncArgs: #if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): #sys.exit("ALERT: Group membership check failed!!!!\n") pass #M= verifyArgsDict[z]['message'][bodyKey] #h= group.hash( M , G1 ) M= strToId( verifyArgsDict[z]['mpk'][bodyKey] , verifyArgsDict[z]['message'][bodyKey] ) #print( "M :=" , M ) h= verifyArgsDict[z]['mpk'][bodyKey][ 'u0' ] * dotprod( 1 , -1 , verifyArgsDict[z]['mpk'][bodyKey][ 'z' ] , lam_func , verifyArgsDict[z]['mpk'][bodyKey][ 'u' ] , M ) #print( "h :=" , h ) sig= verifyArgsDict[z]['sigDict'][bodyKey][ 'sig1' ] t= verifyArgsDict[z]['sigDict'][bodyKey][ 'sig2' ] if pair( sig ,( verifyArgsDict[z]['pk'][bodyKey][ 'g' ] ** t ) )==( pair( h , verifyArgsDict[z]['pk'][bodyKey][ 'g^x' ] ) ** t ) : pass else: if z not in incorrectIndices: incorrectIndices.append(z) return incorrectIndices
def sign(self, sk, L, M): (IDs, IDpk, IDsk) = sk assert IDs in L, "signer should be an element in L" Lt = "" for i in L: Lt += ":" + i num_signers = len(L) u = [group.init(G1) for i in range(num_signers)] h = [group.init(ZR, 1) for i in range(num_signers)] for i in range(num_signers): if IDs != L[i]: u[i] = group.random(G1) h[i] = H2(M, Lt, u[i]) else: s = i r = group.random(ZR) pk = [H1(i) for i in L] # get all signers pub keys u[s] = (IDpk**r) * ~dotprod(group.init(G1), s, num_signers, lam_func, u, pk, h) h[s] = H2(M, Lt, u[s]) S = IDsk**(h[s] + r) sig = {'u': u, 'S': S} return sig
def keygen(self, mpk, msk, ID): if debug: print("Keygen alg...") k = self.strToId(mpk, ID) # return list from k1,...,kz if debug: print("k =>", k) r = group.random(ZR) k1 = msk * ((mpk['u1t'] * dotprod(group.init(G1), -1, mpk['z'], lam_func, mpk['u'], k)) ** r) k2 = mpk['g1'] ** -r return (k1, k2)
def sign(self, mpk, sk, M): if debug: print("Sign alg...") m = self.strToId(mpk, M) # return list from m1,...,mz if debug: print("m =>", m) (k1, k2) = sk s = group.random(ZR) S1 = k1 * ((mpk['u2t'] * dotprod(group.init(G1), -1, mpk['z'], lam_func, mpk['u'], m)) ** s) S2 = k2 S3 = mpk['g1'] ** -s return {'S1':S1, 'S2':S2, 'S3':S3}
def sign(self, mpk, sk, M): if debug: print("Sign alg...") m = self.strToId(mpk, M) # return list from m1,...,mz if debug: print("m =>", m) (k1, k2) = sk s = group.random(ZR) S1 = k1 * ((mpk["u2t"] * dotprod(group.init(G1), -1, mpk["z"], lam_func, mpk["u"], m)) ** s) S2 = k2 S3 = mpk["g1"] ** -s return {"S1": S1, "S2": S2, "S3": S3}
def verify(self, mpk, L, M, sig): u, S = sig['u'], sig['S'] Lt = self.concat(L) num_signers = len(L) h = [group.init(ZR, 1) for i in range(num_signers)] for i in range(num_signers): h[i] = H2(M, Lt, u[i]) pk = [ H1(i) for i in L] # get all signers pub keys result = dotprod(group.init(G1), -1, num_signers, lam_func, u, pk, h) if pair(result, mpk['Pub']) == pair(S, mpk['g']): return True return False
def verify(self, mpk, pk, sigDict, message): #M = message #h = group.hash(M, G1) M = self.strToId(mpk, message) #print("M :=", M) h = mpk['u0'] * dotprod(1, -1, mpk['z'], lam_func, mpk['u'], M) #print("h :=", h) sig = sigDict['sig1'] t = sigDict['sig2'] if pair(sig, (pk['g'] ** t)) == (pair(h, pk['g^x']) ** t): return True return False
def verify(self, mpk, pk, sigDict, message): #M = message #h = group.hash(M, G1) M = self.strToId(mpk, message) #print("M :=", M) h = mpk['u0'] * dotprod(1, -1, mpk['z'], lam_func, mpk['u'], M) #print("h :=", h) sig = sigDict['sig1'] t = sigDict['sig2'] if pair(sig, (pk['g']**t)) == (pair(h, pk['g^x'])**t): return True return False
def verify(self, mpk, L, M, sig): u, S = sig['u'], sig['S'] Lt = self.concat(L) l = len(L) h = [group.init(ZR, 1) for i in range(l)] for i in range(l): h[i] = H2(M, Lt, u[i]) pk = [H1(i) for i in L] # get all signers pub keys result = dotprod(group.init(G1), -1, l, lam_func, u, pk, h) if pair(result, mpk['Pub']) == pair(S, mpk['g']): return True return False
def sign(self, mpk, x, message): M = self.strToId(mpk, message) #print("M :=", M) #M = message #sig1 = group.hash(M, G1) ** x if debug: print("Message => '%s'" % M) sig1 = (mpk['u0'] * dotprod(1, -1, mpk['z'], lam_func, mpk['u'], M))**x #print("sig1 :=", sig1) sig2 = group.random() sig = {} sig['sig1'] = sig1 sig['sig2'] = sig2 return sig
def sign(self, mpk, x, message): M = self.strToId(mpk, message) #print("M :=", M) #M = message #sig1 = group.hash(M, G1) ** x if debug: print("Message => '%s'" % M) sig1 = (mpk['u0'] * dotprod(1, -1, mpk['z'], lam_func, mpk['u'], M)) ** x #print("sig1 :=", sig1) sig2 = group.random() sig = {} sig['sig1'] = sig1 sig['sig2'] = sig2 return sig
def verify(self, mpk, ID, M, sig): h = hashObj.copy() h.update(bytes(ID, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v = [] for i in range(mpk['x']): binsubstr = bstr[mpk['l'] * i:mpk['l'] * (i + 1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) k = v h = hashObj.copy() h.update(bytes(M, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v = [] for i in range(mpk['x']): binsubstr = bstr[mpk['l'] * i:mpk['l'] * (i + 1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) m = v S1 = sig['S1'] S2 = sig['S2'] S3 = sig['S3'] A = mpk['A'] g2 = mpk['g2'] comp1 = dotprod(group.init(G2), -1, mpk['x'], lam_func, mpk['ub'], k) comp2 = dotprod(group.init(G2), -1, mpk['x'], lam_func, mpk['ub'], m) if (pair(S1, g2) * pair(S2, mpk['u1b'] * comp1) * pair(S3, mpk['u2b'] * comp2)) == A: return True return False
def verify(self, mpk, L, M, sig): u = sig['u'] S = sig['S'] Lt = "" for i in L: Lt = Lt + ":" + i num_signers = len(L) h = [group.init(ZR, 1) for i in range(num_signers)] for i in range(num_signers): h[i] = H2(M, Lt, u[i]) pk = [H1(i) for i in L] # get all signers pub keys result = dotprod(group.init(G1), -1, num_signers, lam_func, u, pk, h) if pair(result, mpk['Pub']) == pair(S, mpk['g']): return True return False
def keygen(self, mpk, msk, ID): h = hashObj.copy() h.update(bytes(ID, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v=[] for i in range(mpk['x']): binsubstr = bstr[mpk['l']*i : mpk['l']*(i+1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) k = v r = group.random(ZR) k1 = msk * ((mpk['u1t'] * dotprod(group.init(G1), -1, mpk['x'], lam_func, mpk['u'], k)) ** r) k2 = mpk['g1'] ** -r sk = (k1, k2) return sk
def run_Batch_Sorted(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global debug, hashObj, lam_func group = groupObjParam N = len(verifyArgsDict) z = 0 delta = {} for z in range(0, N): delta[z] = prng_bits(80) incorrectIndices = [] lam_func = lambda i,a,b: a[i] ** b[i] __init__(group) for z in range(0, N): #for arg in verifyFuncArgs: #if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): #sys.exit("ALERT: Group membership check failed!!!!\n") pass z = 0 startSigNum = 0 endSigNum = N dotA = {} dotB = {} for z in range(0, N): M= strToId( verifyArgsDict[z]['mpk'][bodyKey] , verifyArgsDict[z]['message'][bodyKey] ) h= verifyArgsDict[z]['mpk'][bodyKey][ 'u0' ] * dotprod( 1 , -1 , verifyArgsDict[z]['mpk'][bodyKey][ 'z' ] , lam_func , verifyArgsDict[z]['mpk'][bodyKey][ 'u' ] , M ) sig= verifyArgsDict[z]['sigDict'][bodyKey][ 'sig1' ] t= verifyArgsDict[z]['sigDict'][bodyKey][ 'sig2' ] dotA[z] = h **( t * delta [ z ] ) dotB[z] = sig **( delta [ z ] * t ) verifySigsRecursive(verifyArgsDict, group, incorrectIndices, 0, N, delta, dotA, dotB) return incorrectIndices
def sign(self, mpk, sk, M): h = hashObj.copy() h.update(bytes(M, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v=[] for i in range(mpk['x']): binsubstr = bstr[mpk['l']*i : mpk['l']*(i+1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) m = v (k1, k2) = sk s = group.random(ZR) S1 = k1 * ((mpk['u2t'] * dotprod(group.init(G1), -1, mpk['x'], lam_func, mpk['u'], m)) ** s) S2 = k2 S3 = mpk['g1'] ** -s sig = {'S1':S1, 'S2':S2, 'S3':S3} return sig
def keygen(self, mpk, msk, ID): h = hashObj.copy() h.update(bytes(ID, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v = [] for i in range(mpk['x']): binsubstr = bstr[mpk['l'] * i:mpk['l'] * (i + 1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) k = v r = group.random(ZR) k1 = msk * ( (mpk['u1t'] * dotprod(group.init(G1), -1, mpk['x'], lam_func, mpk['u'], k))**r) k2 = mpk['g1']**-r sk = (k1, k2) return sk
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global debug, H1, H2, lam_func group = groupObjParam N = len(verifyArgsDict) z = 0 l = len(verifyArgsDict[z]['L'][bodyKey]) incorrectIndices = [] lam_func = lambda i, a, b, c: a[i] * (b[i]**c[i] ) # => u * (pk ** h) for all signers H1 = lambda x: group.hash(('1', str(x)), G1) H2 = lambda a, b, c: group.hash(('2', a, b, c), ZR) __init__(group) for z in range(0, N): for arg in verifyFuncArgs: if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): sys.exit("ALERT: Group membership check failed!!!!\n") pass u, S = verifyArgsDict[z]['sig'][bodyKey]['u'], verifyArgsDict[z][ 'sig'][bodyKey]['S'] Lt = concat(verifyArgsDict[z]['L'][bodyKey]) l = len(verifyArgsDict[z]['L'][bodyKey]) h = [group.init(ZR, 1) for i in range(l)] for i in range(l): pass h[i] = H2(verifyArgsDict[z]['M'][bodyKey], Lt, u[i]) pk = [H1(i) for i in verifyArgsDict[z]['L'][bodyKey] ] # get all signers pub keys result = dotprod(group.init(G1), -1, l, lam_func, u, pk, h) if pair(result, verifyArgsDict[z]['mpk'][bodyKey]['Pub']) == pair( S, verifyArgsDict[z]['mpk'][bodyKey]['g']): pass else: if z not in incorrectIndices: incorrectIndices.append(z) return incorrectIndices
def sign(self, sk, L, M): (IDs, IDpk, IDsk) = sk assert IDs in L, "signer should be an element in L" Lt = self.concat(L) num_signers = len(L) u = [group.init(G1) for i in range(num_signers)] h = [group.init(ZR, 1) for i in range(num_signers)] for i in range(num_signers): if IDs != L[i]: u[i] = group.random(G1) h[i] = H2(M, Lt, u[i]) else: s = i r = group.random(ZR) pk = [ H1(i) for i in L] # get all signers pub keys u[s] = (IDpk ** r) * ~dotprod(group.init(G1), s, num_signers, lam_func, u, pk, h) h[s] = H2(M, Lt, u[s]) S = IDsk ** (h[s] + r) sig = { 'u':u, 'S':S } return sig
def sign(self, mpk, sk, M): h = hashObj.copy() h.update(bytes(M, 'utf-8')) hash = Bytes(h.digest()) val = Conversion.OS2IP(hash) bstr = bin(val)[2:] v = [] for i in range(mpk['x']): binsubstr = bstr[mpk['l'] * i:mpk['l'] * (i + 1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) m = v (k1, k2) = sk s = group.random(ZR) S1 = k1 * ( (mpk['u2t'] * dotprod(group.init(G1), -1, mpk['x'], lam_func, mpk['u'], m))**s) S2 = k2 S3 = mpk['g1']**-s sig = {'S1': S1, 'S2': S2, 'S3': S3} return sig
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global debug, H1, H2, lam_func group = groupObjParam N = len(verifyArgsDict) z = 0 l= len( verifyArgsDict[z]['L'][bodyKey] ) incorrectIndices = [] lam_func = lambda i,a,b,c: a[i] * (b[i] ** c[i]) # => u * (pk ** h) for all signers H1 = lambda x: group.hash(('1', str(x)), G1) H2 = lambda a, b, c: group.hash(('2', a, b, c), ZR) __init__(group) for z in range(0, N): for arg in verifyFuncArgs: if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): sys.exit("ALERT: Group membership check failed!!!!\n") pass u , S= verifyArgsDict[z]['sig'][bodyKey][ 'u' ] , verifyArgsDict[z]['sig'][bodyKey][ 'S' ] Lt= concat( verifyArgsDict[z]['L'][bodyKey] ) l= len( verifyArgsDict[z]['L'][bodyKey] ) h= [ group.init( ZR , 1 ) for i in range( l ) ] for i in range( l ) : pass h [ i ]= H2( verifyArgsDict[z]['M'][bodyKey] , Lt , u [ i ] ) pk= [ H1( i ) for i in verifyArgsDict[z]['L'][bodyKey] ] # get all signers pub keys result= dotprod( group.init( G1 ) , -1 , l , lam_func , u , pk , h ) if pair( result , verifyArgsDict[z]['mpk'][bodyKey][ 'Pub' ] )== pair( S , verifyArgsDict[z]['mpk'][bodyKey][ 'g' ] ) : pass else: if z not in incorrectIndices: incorrectIndices.append(z) return incorrectIndices
def run_Ind(verifyArgsDict, groupObjParam, verifyFuncArgs): global group global debug, hashObj, lam_func group = groupObjParam N = len(verifyArgsDict) z = 0 incorrectIndices = [] lam_func = lambda i, a, b: a[i]**b[i] __init__(group) for z in range(0, N): #for arg in verifyFuncArgs: #if (group.ismember(verifyArgsDict[z][arg][bodyKey]) == False): #sys.exit("ALERT: Group membership check failed!!!!\n") pass #M= verifyArgsDict[z]['message'][bodyKey] #h= group.hash( M , G1 ) M = strToId(verifyArgsDict[z]['mpk'][bodyKey], verifyArgsDict[z]['message'][bodyKey]) #print( "M :=" , M ) h = verifyArgsDict[z]['mpk'][bodyKey]['u0'] * dotprod( 1, -1, verifyArgsDict[z]['mpk'][bodyKey]['z'], lam_func, verifyArgsDict[z]['mpk'][bodyKey]['u'], M) #print( "h :=" , h ) sig = verifyArgsDict[z]['sigDict'][bodyKey]['sig1'] t = verifyArgsDict[z]['sigDict'][bodyKey]['sig2'] if pair(sig, (verifyArgsDict[z]['pk'][bodyKey]['g']**t)) == (pair( h, verifyArgsDict[z]['pk'][bodyKey]['g^x'])**t): pass else: if z not in incorrectIndices: incorrectIndices.append(z) return incorrectIndices
) # => u * (pk ** h) for all signers for sigIndex in range(0, numSigs): for arg in verifyFuncArgs: if (sigNumKey in verifyArgsDict[sigIndex][arg]): argSigIndexMap[arg] = int( verifyArgsDict[sigIndex][arg][sigNumKey]) else: argSigIndexMap[arg] = sigIndex u = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey]['u'] S = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey]['S'] Lt = "" for i in verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey]: Lt = Lt + ":" + i num_signers = len(verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey]) h = [group.init(ZR, 1) for i in range(num_signers)] for i in range(num_signers): h[i] = H2(verifyArgsDict[argSigIndexMap['M']]['M'][bodyKey], Lt, u[i]) pk = [ H1(i) for i in verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey] ] # get all signers pub keys result = dotprod(group.init(G1), -1, num_signers, lam_func, u, pk, h) if pair( result, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey] ['Pub']) == pair( S, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['g']): pass else: print("Verification of signature " + str(sigIndex) + " failed.\n")
binsubstr = bstr[ verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['l'] * i:verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['l'] * (i + 1)] intval = int(binsubstr, 2) intelement = group.init(ZR, intval) v.append(intelement) m = v S1 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey]['S1'] S2 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey]['S2'] S3 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey]['S3'] A = verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['A'] g2 = verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['g2'] comp1 = dotprod( group.init(G2), -1, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['x'], lam_func, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['ub'], k) comp2 = dotprod( group.init(G2), -1, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['x'], lam_func, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['ub'], m) if (pair(S1, g2) * pair( S2, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey] ['u1b'] * comp1) * pair( S3, verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey]['u2b'] * comp2)) == A: pass else:
def F(self, sk, x): result = dotprod(group.init(ZR, 1), -1, sk['n'], lam_func, sk['u'], x) return pair(sk['g1']**(sk['u_t'] * sk['u'][0] * result), sk['h'])
verifyArgsDict[sigIndex][arg][bodyKey] = tempBuf argSigIndexMap = {} group = pairing('/Users/matt/Documents/charm/param/a.param') H1 = lambda x: group.H(('1', str(x)), G1) H2 = lambda a, b, c: group.H(('2', a, b, c), ZR) lam_func = lambda i,a,b,c: a[i] * (b[i] ** c[i]) # => u * (pk ** h) for all signers for sigIndex in range(0, numSigs): for arg in verifyFuncArgs: if (sigNumKey in verifyArgsDict[sigIndex][arg]): argSigIndexMap[arg] = int(verifyArgsDict[sigIndex][arg][sigNumKey]) else: argSigIndexMap[arg] = sigIndex u = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey][ 'u' ] S = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey][ 'S' ] Lt = "" for i in verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey] : Lt = Lt + ":" + i num_signers = len( verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey] ) h = [ group.init( ZR , 1 ) for i in range( num_signers ) ] for i in range( num_signers ) : h [ i ] = H2( verifyArgsDict[argSigIndexMap['M']]['M'][bodyKey] , Lt , u [ i ] ) pk = [ H1( i ) for i in verifyArgsDict[argSigIndexMap['L']]['L'][bodyKey] ] # get all signers pub keys result = dotprod( group.init( G1 ) , - 1 , num_signers , lam_func , u , pk , h ) if pair( result , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'Pub' ] ) == pair( S , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'g' ] ) : pass else: print("Verification of signature " + str(sigIndex) + " failed.\n")
v = [ ] for i in range( verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'x' ] ) : binsubstr = bstr [ verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'l' ] * i : verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'l' ] *( i + 1 ) ] intval = int( binsubstr , 2 ) intelement = group.init( ZR , intval ) v.append( intelement ) k = v h = hashObj.copy( ) h.update( bytes( verifyArgsDict[argSigIndexMap['M']]['M'][bodyKey] , 'utf-8' ) ) hash = Bytes( h.digest( ) ) val = Conversion.OS2IP( hash ) bstr = bin( val ) [ 2 : ] v = [ ] for i in range( verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'x' ] ) : binsubstr = bstr [ verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'l' ] * i : verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'l' ] *( i + 1 ) ] intval = int( binsubstr , 2 ) intelement = group.init( ZR , intval ) v.append( intelement ) m = v S1 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey][ 'S1' ] S2 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey][ 'S2' ] S3 = verifyArgsDict[argSigIndexMap['sig']]['sig'][bodyKey][ 'S3' ] A = verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'A' ] g2 = verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'g2' ] comp1 = dotprod( group.init( G2 ) , - 1 , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'x' ] , lam_func , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'ub' ] , k ) comp2 = dotprod( group.init( G2 ) , - 1 , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'x' ] , lam_func , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'ub' ] , m ) if( pair( S1 , g2 ) * pair( S2 , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'u1b' ] * comp1 ) * pair( S3 , verifyArgsDict[argSigIndexMap['mpk']]['mpk'][bodyKey][ 'u2b' ] * comp2 ) ) == A : pass else: print("Verification of signature " + str(sigIndex) + " failed.\n")
def F(self, sk, x): result = dotprod(group.init(ZR, 1), -1, sk['n'], lam_func, sk['u'], x) return pair(sk['g1'] ** (sk['u_t'] * sk['u'][0] * result), sk['h'])