def decrypt(self, sk, cipher_adjlist, query_attr_list): ''' Decryption requires master_public_key, user secret key, and cipher ''' res_graph = SymbolDiGraphLst(query_attr_list, AdjListDiGraph(len(query_attr_list))) for attr in query_attr_list: cipherlist = cipher_adjlist.get_list(attr) for node in cipherlist: candi = pair(node,sk['gas'][attr]) for key in sk['g2at']: if candi == sk['g2at'][key]: res_graph.add_edge(attr,key) return res_graph
def testPairEnc_ct(nodes,E): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() encLists = list_graph.encrypt() #print sg return len(str(encLists))
def decrypt(self, sk, cipher_adjlist, query_attr_list): ''' Decryption requires master_public_key, user secret key, and cipher ''' res_graph = SymbolDiGraphLst(query_attr_list, AdjListDiGraph(len(query_attr_list))) for attr in query_attr_list: cipherlist = cipher_adjlist.get_list(attr) for node in cipherlist: candi = pair(node, sk['gas'][attr]) for key in sk['g2at']: if candi == sk['g2at'][key]: res_graph.add_edge(attr, key) return res_graph
def testPairEnc_keygen(nodes,E,attr_list): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() t0 = time.clock() list_graph.key_generation(attr_list) t1 = time.clock() return t1-t0
def testPairEnc_enc(nodes,E): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() t0 = time.clock() list_graph.encrypt() #print list_graph._enc_adjlist t1 = time.clock() return t1-t0
def testPairEnc_subgraph(nodes,E, vertices): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() enc_adjlist = list_graph.encrypt() t0 = time.clock() list_graph.subgraph(enc_adjlist, vertices) t1 = time.clock() return t1-t0
def testPairEnc_dk(nodes,E, A): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() dk = list_graph.key_generation(A) return len(str(dk))
def testPairEnc_pp(nodes,E): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() return len(str(list_graph._pk))
def testPairEnc_subgraph_size(nodes,E, vertices): sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() enc_adjlist = list_graph.encrypt() return len(str(list_graph.subgraph(enc_adjlist, vertices)))
def compare_dec_rt(N, E, K): nodes = [] for i in xrange(0,N): nodes.append('v%d'%(i+1)) attributes = [] vertices = [] policy = "(" for i in xrange(0, K): if i!=0: policy+=" OR " policy+="v%dr"%(i+1) attributes.append('V%dR'%(i+1)) attributes.append('V%dC'%(i+1)) vertices.append('v%d'%(i+1)) policy+=") AND (" for i in xrange(0, K): if i!=0: policy+=" OR " policy+="v%dc"%(i+1) policy+=")" sg = SymbolDiGraphMat(nodes, rand_E=E) cpabe_graph = CPABESymbolDiGraph(sg) cpabe_graph.setup() cpabeEncMat = cpabe_graph.encrypt() kpabe_graph = KPABESymbolDiGraph(sg) kpabe_graph.setup() kpabeEncMat = kpabe_graph.encrypt() sg = SymbolDiGraphLst(nodes,rand_E=E) list_graph = PairEncSymbolDiGraph(sg) list_graph.setup() pairEncList = list_graph.encrypt() cpabe_dk = cpabe_graph.key_generation(attributes) kpabe_dk = kpabe_graph.key_generation(policy) plist_dk = list_graph.key_generation(vertices) Q = 2 subnodes = [] for i in xrange(0, Q): subnodes.append('v%d'%(i+1)) print "CPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testCPABE_dec(cpabe_graph._master_public_key, cpabe_dk, cpabeEncMat, subnodes)) print "KPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testKPABE_dec(kpabe_dk, kpabeEncMat, subnodes)) print "PAIRE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testPairEnc_dec( plist_dk, pairEncList, subnodes )) print "" Q = 4 subnodes = [] for i in xrange(0, Q): subnodes.append('v%d'%(i+1)) print "CPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testCPABE_dec(cpabe_graph._master_public_key, cpabe_dk, cpabeEncMat, subnodes)) print "KPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testKPABE_dec(kpabe_dk, kpabeEncMat, subnodes)) print "PAIRE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testPairEnc_dec( plist_dk, pairEncList, subnodes )) print "" Q = 6 subnodes = [] for i in xrange(0, Q): subnodes.append('v%d'%(i+1)) print "CPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testCPABE_dec(cpabe_graph._master_public_key,cpabe_dk, cpabeEncMat, subnodes)) print "KPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testKPABE_dec(kpabe_dk, kpabeEncMat, subnodes)) print "PAIRE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testPairEnc_dec( plist_dk, pairEncList, subnodes )) print "" Q = 8 subnodes = [] for i in xrange(0, Q): subnodes.append('v%d'%(i+1)) print "CPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testCPABE_dec(cpabe_graph._master_public_key,cpabe_dk, cpabeEncMat, subnodes)) print "KPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testKPABE_dec(kpabe_dk, kpabeEncMat, subnodes)) print "PAIRE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testPairEnc_dec( plist_dk, pairEncList, subnodes )) print "" Q = 10 subnodes = [] for i in xrange(0, Q): subnodes.append('v%d'%(i+1)) print "CPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testCPABE_dec(cpabe_graph._master_public_key,cpabe_dk, cpabeEncMat, subnodes)) print "KPABE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testKPABE_dec(kpabe_dk, kpabeEncMat, subnodes)) print "PAIRE with %d vertices and %d edges and %d queried subnodes %s s"%(N, E, Q, testPairEnc_dec( plist_dk, pairEncList, subnodes )) print ""
subenc_adjlist = SymbolLinkedlists(vertices=vertices) for i in range(0, len(vertices)): for item in enc_adjlist.get_list(vertices[i]): subenc_adjlist.add_item(item, i) return subenc_adjlist if __name__ == '__main__': pass '''Owner side''' nodes = [] for i in xrange(0, 4): nodes.append('v%d' % (i + 1)) sg = SymbolDiGraphLst(nodes, rand_E=10) print sg #encrypt graph list_graph = PairEncSymbolDiGraph(sg) t0 = time.clock() list_graph.setup() t1 = time.clock() cipher_adjlist = list_graph.encrypt() t2 = time.clock() print cipher_adjlist sk = list_graph.key_generation(['v2', 'v3']) t3 = time.clock() print sk