From 71a26669720e2cc6b1e828c98c0710411707fd7a Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Thu, 1 Jan 2015 23:11:11 +0000 Subject: [PATCH] Add key generation support --- bitcoin/core/key.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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))