Ejemplo n.º 1
0
def multiply_privkeys(p1, p2, n):
    f1, f2 = get_privkey_format(p1), get_privkey_format(p2)
    p = decode_privkey(p1, f1)
    while n > 0:
        p = (p + decode_privkey(p2, f2)) % N
        n -= 1
    return encode_privkey(p, f1)
Ejemplo n.º 2
0
    def create_wallet(self, method, input, aes_pw):
        privkey = ''
        if method == 'wif':
            fmt = bc.get_privkey_format(input)
            if fmt == 'wif':
                privkey = bc.encode_privkey(input, 'hex')
            elif fmt == 'wif_compressed':
                privkey = bc.encode_privkey(input, 'hex_compressed')
            else:
                raise Exception('Unrecoginized format for private key.')
                
        elif method == 'random':
            privkey = bc.random_key()
        else:
            raise Exception('Unsupported method: {0}.'.format(method))
        
        wal_addr = bc.privtoaddr(privkey, self.magic_byte)
        encr_privkey = wallet.encrypt_privkey(privkey, aes_pw)
        wallet.create_wallet_file(self.wallet_filename, encr_privkey, wal_addr)
        
        # Read back from wallet to ensure consistency
        encr_privkey2, wal_addr2 = wallet.read_from_wallet_file(self.wallet_filename)
        privkey2 = wallet.decrypt_privkey(encr_privkey2, aes_pw)
        
        if encr_privkey2 != encr_privkey or wal_addr2 != wal_addr:
            raise Exception('Inconsistency in reading from/writing to wallet!')

        if privkey2 != privkey:
            raise Exception('Inconsistency in encrypting/decrypting private key!')
        
        return
Ejemplo n.º 3
0
 def is_wif_privkey_valid(self, privkey):
     try:
         frm = bc.get_privkey_format(privkey)
     except:
         return False
     
     if frm == 'wif' or frm == 'wif_compressed':
         return True
     else:
         return False
Ejemplo n.º 4
0
    def __init__(self, private_key=None, compressed=False):
        """ Takes in a private key/secret exponent.
        """
        self._compressed = compressed
        if not private_key:
            secret_exponent = random_secret_exponent(self._curve.order)
        else:
            secret_exponent = encode_privkey(private_key, 'decimal')
            if get_privkey_format(private_key).endswith('compressed'):
                self._compressed = True

        # make sure that: 1 <= secret_exponent < curve_order
        if not is_secret_exponent(secret_exponent, self._curve.order):
            raise IndexError(_errors["EXPONENT_OUTSIDE_CURVE_ORDER"])

        self._ecdsa_private_key = ecdsa.keys.SigningKey.from_secret_exponent(
            secret_exponent, self._curve, self._hash_function
        )
Ejemplo n.º 5
0
    def get_wif_privkey(self, pw):
        if not self.is_wallet_loaded:
            raise Exception('Tried getting private key when wallet not loaded.')
            
        prv = ''
        try:
            prv = wallet.decrypt_privkey(self.encr_privkey, pw)
        except:
            raise PasswordError("Wrong password!")

        frm = bc.get_privkey_format(prv)
        if frm == 'hex':
            wif_privkey = bc.encode_privkey(prv, 'wif', self.magic_byte)
        elif frm == 'hex_compressed':
            wif_privkey = bc.encode_privkey(prv, 'wif_compressed', self.magic_byte)
        else:
            raise Exception('Unrecognized private key format: ' + frm)
            
        return wif_privkey