Esempio n. 1
0
    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)
Esempio n. 2
0
    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))
Esempio n. 3
0
 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()))
Esempio n. 4
0
 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()))
Esempio n. 5
0
 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))
Esempio n. 8
0
    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))