Example #1
0
 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")
Example #2
0
 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")