def __init__( self, currency: str, pubkey: str, challenge: Optional[str] = None, signature: Optional[str] = None, ) -> None: """ Init Connect message document :param currency: Name of the currency :param pubkey: Public key of the node :param challenge: [Optional, default=None] Big random string, typically an uuid :param signature: [Optional, default=None] Base64 encoded signature of raw formated document """ if signature is not None: signatures = [signature] else: signatures = [] super().__init__(self.version, currency, signatures) self.pubkey = pubkey if challenge is None: # create challenge self.challenge = get_ws2p_challenge() else: self.challenge = challenge if signature is not None: # verify signature verifying_key = VerifyingKey(self.pubkey) verifying_key.verify_document(self)
def test_block_document(self): block_document = """Version: 10 Type: Block Currency: g1 Number: 15145 PoWMin: 80 Time: 1493684276 MedianTime: 1493681245 UnitBase: 0 Issuer: 6fFt4zdvtNyVcfJn7Y41mKLmMDizyK3nVeNW3qdDXzpc IssuersFrame: 106 IssuersFrameVar: 0 DifferentIssuersCount: 21 PreviousHash: 00000A0CE0AE54F3F6B63383F386067160C477B5338FB93AF3AF0776A959AA32 PreviousIssuer: D9D2zaJoWYWveii1JRYLVK3J4Z7ZH3QczoKrnQeiM6mx MembersCount: 98 Identities: Joiners: Actives: Leavers: Revoked: Excluded: Certifications: Transactions: InnerHash: AA01ABD5C6D3F99A189C0CF0E37768DA0F876526AF93FE150E92B135D4AD0D85 Nonce: 10300000099432 """ block_signature = "Uxa3L+/m/dWLex2xSh7Jv1beAn4f99BmoYAs7iX3Lr+t1l5jzJpd9m4iI1cHppIizCgbg6ztaiZedQ+Mp6KuDg==" block = Block.from_signed_raw(block_document + block_signature + "\n") verifying_key = VerifyingKey(block.issuer) self.assertTrue(verifying_key.verify_document(block))
def handle_new_node(self, peer): key = VerifyingKey(peer.pubkey) if key.verify_document(peer): if len(self._discovery_stack) < 1000 \ and peer.signatures[0] not in [p.signatures[0] for p in self._discovery_stack]: self._logger.debug("Stacking new peer document : {0}".format(peer.pubkey)) self._discovery_stack.append(peer) else: self._logger.debug("Wrong document received : {0}".format(peer.signed_raw()))
def handle_new_node(self, peer): key = VerifyingKey(peer.pubkey) if key.verify_document(peer): if len(self._discovery_stack) < 1000 \ and peer.signatures[0] not in [p.signatures[0] for p in self._discovery_stack]: logging.debug("Stacking new peer document : {0}".format(peer.pubkey)) self._discovery_stack.append(peer) else: logging.debug("Wrong document received : {0}".format(peer.signed_raw()))
def handle_new_node(self, peer): key = VerifyingKey(peer.pubkey) if key.verify_document(peer): if len(self._discovery_stack) < 1000 \ and peer.blockUID.number + 2400 > self.current_buid().number \ and peer.signatures not in [p.signatures[0] for p in self._discovery_stack]: self._logger.debug("Stacking new peer document : {0}".format(peer.pubkey)) self._discovery_stack.append(peer) else: self._logger.debug("Wrong document received : {0}".format(peer.signed_raw()))
def test_peer_signature(self): signed_raw = """Version: 2 Type: Peer Currency: test_net PublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU Block: 2086-00005D6FC6E22FB308D8815A565A01C66FFB7DC761D616DE0698F6322565F1D6 Endpoints: BASIC_MERKLED_API testnet.duniter.inso.ovh 80 4aQ/sfqFAFUeYkkLdC2OfgXqTBjCIcMptpR/GIlGqbe4aFVJcy9NEVAFx7sHiLuAb+VNnec3XHHC+xOk3MLzDA== """ "" peer = Peer.from_signed_raw(signed_raw) pubkey = "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU" verifying_key = VerifyingKey(pubkey) self.assertTrue(verifying_key.verify_document(peer))
def test_peer_signature(self): signed_raw = """Version: 2 Type: Peer Currency: test_net PublicKey: 8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU Block: 2086-00005D6FC6E22FB308D8815A565A01C66FFB7DC761D616DE0698F6322565F1D6 Endpoints: BASIC_MERKLED_API testnet.duniter.inso.ovh 80 4aQ/sfqFAFUeYkkLdC2OfgXqTBjCIcMptpR/GIlGqbe4aFVJcy9NEVAFx7sHiLuAb+VNnec3XHHC+xOk3MLzDA== """"" peer = Peer.from_signed_raw(signed_raw) pubkey = "8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU" verifying_key = VerifyingKey(pubkey) self.assertTrue(verifying_key.verify_document(peer))
def test_transaction_document(self): transaction_document = """TX:10:1:6:6:2:1:0 278644-000004546FCB16F2851A8B6D1066219B0EBB3580C882850411618E35241719EA 8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278052 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278333 1011:0:D:8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse:278609 1011:0:T:4116D06975AE613C96183390FC5A2BE2561F36C86F5CFE69EB23E3B517AA6F17:1 20330:0:T:56D8A0ACE3BC7E1173FF8BFB8A97A2F3353B6F3AEBCF4923C8BE2E81FDCC0685:1 11121:0:T:7CC29A8707D72936ED0EB9C618CEB3278DFAB4647B6639AA09620FA31EAD95D8:1 0:SIG(0) 1:SIG(0) 2:SIG(0) 3:SIG(0) 4:SIG(0) 5:SIG(0) 30000:0:SIG(2mKmto464oWCVsRgcYM6vpwsLsGk6MhMtrBKf7DTAU34) 5495:0:SIG(8rYgYd64F2Y3Gfxwohjrc7K3zSNpDz79yNxRJorUwmse) Solde huile Millepertuis rgjOmzFH5h+hkDbJLk1b88X7Z83HMgTa5rBckeMSdF/yZtItN3zMn09MphcXjffdrKcK+MebwoisLJqV+jXrDg== """ tx = Transaction.from_compact("g1", transaction_document) verifying_key = VerifyingKey(tx.issuers[0]) self.assertTrue(verifying_key.verify_document(tx))