diff --git a/bitcoin/core/key.py b/bitcoin/core/key.py index 6083fa6d..f1bc174b 100644 --- a/bitcoin/core/key.py +++ b/bitcoin/core/key.py @@ -64,6 +64,26 @@ def set_secretbytes(self, secret): _ssl.BN_CTX_free(ctx) return self.k + def get_secretbytes(self): + secret = _ssl.EC_KEY_get0_private_key(self.k) + mb = ctypes.create_string_buffer(32) + size = _ssl.BN_bn2bin(secret, mb) + if size == 32: + return mb.raw + else: + # Move the data into a zero-padded buffer of 32 bytes + padding = 32 - size + new_buffer = ctypes.create_string_buffer(32) + for idx in range(0, padding): + new_buffer[idx] = "\x00" + for idx in range(padding, 32): + new_buffer[idx] = mb[idx - padding] + return new_buffer.raw + + def generate(self): + _ssl.EC_KEY_generate_key(self.k) + return self.k + def set_privkey(self, key): self.mb = ctypes.create_string_buffer(key) return _ssl.d2i_ECPrivateKey(ctypes.byref(self.k), ctypes.byref(ctypes.pointer(self.mb)), len(key))