Пример #1
0
def ecdsa_recover(message, signature):
    assert len(signature) == 65
    pub = ecdsa_raw_recover(message, _decode_sig(signature))
    assert pub, 'pubkey could not be recovered'
    pub = bitcoin.encode_pubkey(pub, 'bin_electrum')
    assert len(pub) == 64
    return pub
Пример #2
0
def ecdsa_recover(message, signature):
    assert len(signature) == 65
    pub = ecdsa_raw_recover(message, _decode_sig(signature))
    assert pub, 'pubkey could not be recovered'
    pub = bitcoin.encode_pubkey(pub, 'bin_electrum')
    assert len(pub) == 64
    return pub
Пример #3
0
 def recover_sender(self):
     if self.v:
         if self.r >= N or self.s >= P or self.v < 27 or self.v > 28 \
            or self.r == 0 or self.s == 0:
             raise InvalidSignature()
         rlpdata = rlp.encode(self, self.__class__.exclude(['v', 'r', 's']))
         rawhash = sha3(rlpdata)
         pub = ecdsa_raw_recover(rawhash, (self.v, self.r, self.s))
         if pub is False or pub == (0, 0):
             raise InvalidSignature()
         pub = encode_pubkey(pub, 'bin')
         return sha3(pub[1:])[-20:]
Пример #4
0
 def sender(self):
     if not self._sender:
         # Determine sender
         if self.v:
             if self.r >= N or self.s >= P or self.v < 27 or self.v > 28:
                 raise InvalidTransaction("Invalid signature values!")
             log.debug('recovering sender')
             rlpdata = rlp.encode(self, UnsignedTransaction)
             rawhash = utils.sha3(rlpdata)
             pub = encode_pubkey(ecdsa_raw_recover(rawhash, (self.v, self.r, self.s)), 'bin')
             self._sender = utils.sha3(pub[1:])[-20:]
             assert self.sender == self._sender
         else:
             self._sender = 0
     return self._sender
Пример #5
0
 def sender(self):
     if not self._sender:
         # Determine sender
         if self.v:
             if self.r >= N or self.s >= P or self.v < 27 or self.v > 28:
                 raise InvalidTransaction("Invalid signature values!")
             log.debug('recovering sender')
             rlpdata = rlp.encode(self, UnsignedTransaction)
             rawhash = utils.sha3(rlpdata)
             pub = encode_pubkey(
                 ecdsa_raw_recover(rawhash, (self.v, self.r, self.s)),
                 'bin')
             self._sender = utils.sha3(pub[1:])[-20:]
             assert self.sender == self._sender
         else:
             self._sender = 0
     return self._sender
Пример #6
0
 def sender(self):
     if not self._sender:
         # Determine sender
         if self.v:
             if self.r >= N or self.s >= P or self.v < 27 or self.v > 28 or self.r == 0 or self.s == 0:
                 raise InvalidTransaction("Invalid signature values!")
             log.debug('recovering sender')
             rlpdata = rlp.encode(self, UnsignedTransaction)
             rawhash = utils.sha3(rlpdata)
             pub = ecdsa_raw_recover(rawhash, (self.v, self.r, self.s))
             if pub is False:
                 raise InvalidTransaction("Invalid signature values (x^3+7 is non-residue)")
             if pub == (0, 0):
                 raise InvalidTransaction("Invalid signature (zero privkey cannot sign)")
             pub = encode_pubkey(pub, 'bin')
             self._sender = utils.sha3(pub[1:])[-20:]
             assert self.sender == self._sender
         else:
             self._sender = 0
     return self._sender