| 257 | self.k = None |
| 258 | |
| 259 | def set_secretbytes(self, secret): |
| 260 | if(len(secret) != 32): |
| 261 | raise ValueError("Secret bytes must be exactly 32 bytes") |
| 262 | priv_key = _ssl.BN_bin2bn(secret, 32, None) |
| 263 | group = _ssl.EC_KEY_get0_group(self.k) |
| 264 | pub_key = _ssl.EC_POINT_new(group) |
| 265 | ctx = _ssl.BN_CTX_new() |
| 266 | if not _ssl.EC_POINT_mul(group, pub_key, priv_key, None, None, ctx): |
| 267 | raise ValueError("Could not derive public key from the supplied secret.") |
| 268 | _ssl.EC_KEY_set_private_key(self.k, priv_key) |
| 269 | _ssl.EC_KEY_set_public_key(self.k, pub_key) |
| 270 | _ssl.EC_POINT_free(pub_key) |
| 271 | _ssl.BN_free(priv_key) |
| 272 | _ssl.BN_CTX_free(ctx) |
| 273 | return self.k |
| 274 | |
| 275 | def set_privkey(self, key): |
| 276 | self.mb = ctypes.create_string_buffer(key) |