Example #1
0
def create_ledger(key):
    global ledger, privkey

    # Create root block
    root_block = block.Block(block.BlockType.key, None, utils.encode_key(key))
    root_block.sign(key)

    ledger = Ledger()
    ledger.append(root_block)
    privkey = key

    # Start Listeners
    ledger_listeners(True)
Example #2
0
def join_ledger(public_key_hash, member):
    global ledger

    # Check to make sure we aren't part of a ledger yet
    if joined():
        print("You are already a member of a ledger")
        return

    utils.log_message("Spawning TCP Connection Thread to {0}".format(member))
    join_message = messaging.Message(settings.MSG_TYPE_JOIN,
                                     public_key_hash).prep_tcp()
    thread = messaging.TCPMessageThread(member, join_message)
    thread.start()
    thread.join()

    # If the message is a success, import the key
    try:

        message = json.loads(thread.message, object_hook=utils.message_decoder)

        if message.msg_type == settings.MSG_TYPE_SUCCESS:
            key = utils.get_key(message.msg)
            key_hash = utils.gen_hash(utils.encode_key(key))

            if public_key_hash == key_hash:
                # Hooray! We have a match
                utils.log_message("Joined ledger {}".format(public_key_hash),
                                  utils.Level.FORCE)

                # Sync Ledger
                messaging.block_sync(member)

                # Request peers
                messaging.peer_sync(member)

                # Start Listeners
                ledger_listeners(True)

            else:
                raise ValueError(
                    'Public key returned does not match requested hash: {0}'.
                    format(key_hash))

        else:
            raise ValueError('Response was not as expected: {0}'.format(
                message.msg_type))

    except (ValueError, TypeError) as e:
        utils.log_message("Not a valid response from {0}: {1}".format(
            member, e))
Example #3
0
    def do_key(self, args):
        """Manage your local private key

        Arguments:
        gen: Generate a new RSA key
        pub (default): Prints the public key
        priv: Prints the private key
        """

        args = args.lower()

        if len(args) <= 0 or args == 'pub':
            if daemon.privkey is not None:
                print(utils.encode_key(daemon.privkey))
            else:
                print("You don't have a key to display")
        elif args == 'priv':
            print(utils.encode_key(daemon.privkey, public=False))
        elif args == 'gen':
            daemon.privkey = utils.gen_privkey()
            self.do_key('')
        else:
            print("Unknown argument(s): {}".format(args))
Example #4
0
    def sign(self, privkey):
        # Sign the block body hash
        h = SHA256.new(self.body.encode('utf-8'))
        signer = PKCS1_v1_5.new(privkey)

        # Set the block signature values
        self.signature = utils.encode(signer.sign(h))
        self.signatory_hash = utils.gen_hash(utils.encode_key(privkey))

        # Validate our signature is correct
        if not self.validate(privkey.publickey()):
            self.signature = None
            self.signatory_hash = None

            raise RuntimeError(
                "Could not sign the block - signature validation failed")
Example #5
0
def is_root():
    if ledger is not None and ledger.root is not None and privkey is not None:
        return ledger.root.message == utils.encode_key(privkey)
    else:
        return False