MCPcopy Create free account
hub / github.com/Bitmessage/PyBitmessage / pointMult

Function pointMult

src/highlevelcrypto.py:68–100  ·  view source on GitHub ↗
(secret)

Source from the content-addressed store, hash-verified

66
67# Does an EC point multiplication; turns a private key into a public key.
68def 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

Callers 2

makeCryptorFunction · 0.85
privToPubFunction · 0.85

Calls 1

get_curveMethod · 0.45

Tested by

no test coverage detected