(secret)
| 66 | |
| 67 | # Does an EC point multiplication; turns a private key into a public key. |
| 68 | def pointMult(secret): |
| 69 | while True: |
| 70 | try: |
| 71 | """ |
| 72 | Evidently, this type of error can occur very rarely: |
| 73 | |
| 74 | File "highlevelcrypto.py", line 54, in pointMult |
| 75 | group = OpenSSL.EC_KEY_get0_group(k) |
| 76 | WindowsError: exception: access violation reading 0x0000000000000008 |
| 77 | """ |
| 78 | k = OpenSSL.EC_KEY_new_by_curve_name(OpenSSL.get_curve('secp256k1')) |
| 79 | priv_key = OpenSSL.BN_bin2bn(secret, 32, None) |
| 80 | group = OpenSSL.EC_KEY_get0_group(k) |
| 81 | pub_key = OpenSSL.EC_POINT_new(group) |
| 82 | |
| 83 | OpenSSL.EC_POINT_mul(group, pub_key, priv_key, None, None, None) |
| 84 | OpenSSL.EC_KEY_set_private_key(k, priv_key) |
| 85 | OpenSSL.EC_KEY_set_public_key(k, pub_key) |
| 86 | |
| 87 | size = OpenSSL.i2o_ECPublicKey(k, None) |
| 88 | mb = OpenSSL.create_string_buffer(size) |
| 89 | OpenSSL.i2o_ECPublicKey(k, OpenSSL.byref(OpenSSL.pointer(mb))) |
| 90 | |
| 91 | OpenSSL.EC_POINT_free(pub_key) |
| 92 | OpenSSL.BN_free(priv_key) |
| 93 | OpenSSL.EC_KEY_free(k) |
| 94 | return mb.raw |
| 95 | |
| 96 | except Exception as e: |
| 97 | import traceback |
| 98 | import time |
| 99 | traceback.print_exc() |
| 100 | time.sleep(0.2) |
| 101 |
no test coverage detected