Exemple #1
0
 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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
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 }
Exemple #5
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}
Exemple #6
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
Exemple #7
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
Exemple #8
0
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
Exemple #9
0
    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
Exemple #10
0
 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)
Exemple #11
0
 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}
Exemple #12
0
 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}
Exemple #13
0
    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
Exemple #14
0
    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 
Exemple #15
0
    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
Exemple #17
0
 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
Exemple #18
0
 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
Exemple #19
0
 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
Exemple #20
0
    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
Exemple #21
0
 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
Exemple #22
0
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
Exemple #23
0
 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
Exemple #24
0
 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
Exemple #25
0
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
Exemple #26
0
    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
Exemple #27
0
 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
Exemple #28
0
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
Exemple #29
0
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
Exemple #30
0
                                          )  # => 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")
Exemple #31
0
     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:
Exemple #32
0
 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'])
Exemple #33
0
				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")
Exemple #34
0
		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")
Exemple #35
0
 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'])