async def submitPublicKeys(self, id: ID, pk: PublicKey, pkR: RevocationPublicKey = None, signatureType='CL') -> \ (PublicKey, RevocationPublicKey): data = {} if pk is not None: data[PRIMARY] = pk.to_str_dict() if pkR is not None: data[REVOCATION] = pkR.toStrDict() op = { TXN_TYPE: CLAIM_DEF, REF: id.schemaId, DATA: data, SIGNATURE_TYPE: signatureType } _, seqNo = await self._sendSubmitReq(op) if seqNo: pk = pk._replace(seqId=seqNo) if pkR is not None: pkR = pkR._replace(seqId=seqNo) return pk, pkR
async def submitPublicKeys(self, id: ID, pk: PublicKey, pkR: RevocationPublicKey = None, signatureType='CL') -> \ (PublicKey, RevocationPublicKey): data = {} if pk is not None: data[PRIMARY] = pk.to_str_dict() if pkR is not None: data[REVOCATION] = pkR.toStrDict() op = { TXN_TYPE: CLAIM_DEF, REF: id.schemaId, DATA: data, SIGNATURE_TYPE: signatureType } _, seqNo = await self._sendSubmitReq(op) if seqNo: pk = pk._replace(seqId=seqNo) if pkR is not None: pkR = pkR._replace(seqId=seqNo) return pk, pkR
async def submitPublicKeys(self, id: ID, pk: PublicKey, pkR: RevocationPublicKey = None ) -> (PublicKey, RevocationPublicKey): pkData = pk.toStrDict() pkRData = pkR.toStrDict() op = { TXN_TYPE: ISSUER_KEY, REF: id.schemaId, DATA: { PRIMARY: pkData, REVOCATION: pkRData } } try: data, seqNo = await self._sendSubmitReq(op) except TimeoutError: logger.error('Operation timed out {}'.format(op)) return None if not seqNo: return None pk = pk._replace(seqId=seqNo) pkR = pkR._replace(seqId=seqNo) return pk, pkR
async def genRevocationKeys( self) -> (RevocationPublicKey, RevocationSecretKey): group = cmod.PairingGroup( PAIRING_GROUP) # super singular curve, 1024 bits g = group.random(cmod.G1) gprime = group.random(cmod.G2) h = group.random(cmod.G1) # random element of the group G h0 = group.random(cmod.G1) h1 = group.random(cmod.G1) h2 = group.random(cmod.G1) htilde = group.random(cmod.G1) u = group.random(cmod.G2) hhat = group.random(cmod.G2) qr = group.order() # order q_R of the group x = group.random(cmod.ZR) # random(qr) sk = group.random(cmod.ZR) # random(qr) pk = g**sk y = hhat**x return (RevocationPublicKey(qr, g, gprime, h, h0, h1, h2, htilde, hhat, u, pk, y), RevocationSecretKey(x, sk))
async def submitPublicKeys(self, id: ID, pk: PublicKey, pkR: RevocationPublicKey = None) -> ( PublicKey, RevocationPublicKey): pkData = pk.toStrDict() pkRData = pkR.toStrDict() op = { TXN_TYPE: ISSUER_KEY, REF: id.schemaId, DATA: {PRIMARY: pkData, REVOCATION: pkRData} } data, seqNo = await self._sendSubmitReq(op) if not seqNo: return None pk = pk._replace(seqId=seqNo) pkR = pkR._replace(seqId=seqNo) return pk, pkR
async def getPublicKeyRevocation(self, id: ID) -> RevocationPublicKey: op = { TXN_TYPE: GET_ISSUER_KEY, REF: id.claimDefId, ORIGIN: id.claimDefKey.issuerId } data, seqNo = await self._sendGetReq(op) if not data: return None data = data[DATA][REVOCATION] pkR = RevocationPublicKey.fromStrDict(data)._replace(seqId=seqNo) return pkR
async def getPublicKeyRevocation(self, id: ID, signatureType = 'CL') -> Optional[RevocationPublicKey]: op = { TXN_TYPE: GET_CLAIM_DEF, REF: id.schemaId, ORIGIN: id.schemaKey.issuerId, SIGNATURE_TYPE: signatureType } data, seqNo = await self._sendGetReq(op) if not data: return None data = data[REVOCATION] pkR = RevocationPublicKey.fromStrDict(data)._replace(seqId=seqNo) return pkR
async def submitPublicKeys(self, schemaId: ID, pk: PublicKey, pkR: RevocationPublicKey = None ) -> (PublicKey, RevocationPublicKey): pk = pk._replace(seqId=self._pkId) self._pkId += 1 await self._cacheValueForId(self._pks, schemaId, pk) if pkR: pkR = pkR._replace(seqId=self._pkRId) self._pkRId += 1 await self._cacheValueForId(self._pkRs, schemaId, pkR) return pk, pkR
async def getPublicKeyRevocation(self, id: ID, signatureType = 'CL') -> RevocationPublicKey: op = { TXN_TYPE: GET_CLAIM_DEF, REF: id.schemaId, ORIGIN: id.schemaKey.issuerId, SIGNATURE_TYPE: signatureType } data, seqNo = await self._sendGetReq(op) if not data: return None data = data[DATA][REVOCATION] pkR = RevocationPublicKey.fromStrDict(data)._replace(seqId=seqNo) return pkR
async def getPublicKeyRevocation(self, id: ID, signatureType='CL') -> Optional[RevocationPublicKey]: op = { TXN_TYPE: GET_CLAIM_DEF, REF: id.schemaId, ORIGIN: id.schemaKey.issuerId, SIGNATURE_TYPE: signatureType } data, seqNo = await self._sendGetReq(op) if not data: raise ValueError( 'No CLAIM_DEF for schema with ID={} and key={}'.format( id.schemaId, id.schemaKey)) if REVOCATION not in data: return None data = data[REVOCATION] pkR = RevocationPublicKey.fromStrDict(data)._replace(seqId=seqNo) return pkR
async def getPublicKeyRevocation(self, id: ID) -> RevocationPublicKey: op = { TXN_TYPE: GET_ISSUER_KEY, REF: id.schemaId, ORIGIN: id.schemaKey.issuerId } try: data, seqNo = await self._sendGetReq(op) except TimeoutError: logger.error('Operation timed out {}'.format(op)) return None if not data: return None data = data[DATA][REVOCATION] pkR = RevocationPublicKey.fromStrDict(data)._replace(seqId=seqNo) return pkR