def _sign_identity(self, identity, challenge_hidden, challenge_visual): coin = coindef.types['Bitcoin'] m = hashlib.sha256() m.update(struct.pack("<I", identity.index)) uri = '' if identity.proto: uri += identity.proto + '://' if identity.user: uri += identity.user + '@' if identity.host: uri += identity.host if identity.port: uri += ':' + identity.port if identity.path: uri += identity.path m.update(uri) (a, b, c, d, _, _, _, _) = struct.unpack('<8I', m.digest()) address_n = [0x80000000 | 13, 0x80000000 | a, 0x80000000 | b, 0x80000000 | c, 0x80000000 | d] message = hashlib.sha256(challenge_hidden).digest() + hashlib.sha256(challenge_visual).digest() try: bip32 = BIP32(self.storage.get_node()) pubkey = bip32.get_public_node(address_n).public_key (address, sig) = signing.sign_message(bip32, coin, address_n, message) if identity.proto and identity.proto == 'ssh': address = '' return proto.SignedIdentity(address=address, public_key=pubkey, signature=sig) except: return proto.Failure(code=proto_types.Failure_InvalidSignature, message="Cannot sign identity")
def _sign_message(self, coin, address_n, message): try: (address, sig) = signing.sign_message(BIP32(self.storage.get_node()), coin, address_n, message) return proto.MessageSignature(address=address, signature=sig) except: return proto.Failure(code=proto_types.Failure_InvalidSignature, message="Cannot sign message")