MCPcopy Index your code
hub / github.com/Bitmessage/PyBitmessage / _generate

Method _generate

src/pyelliptic/ecc.py:139–179  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

137 return curve, privkey, i
138
139 def _generate(self):
140 try:
141 pub_key_x = OpenSSL.BN_new()
142 pub_key_y = OpenSSL.BN_new()
143
144 key = OpenSSL.EC_KEY_new_by_curve_name(self.curve)
145 if key == 0:
146 raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...")
147 if (OpenSSL.EC_KEY_generate_key(key)) == 0:
148 raise Exception("[OpenSSL] EC_KEY_generate_key FAIL ...")
149 if (OpenSSL.EC_KEY_check_key(key)) == 0:
150 raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...")
151 priv_key = OpenSSL.EC_KEY_get0_private_key(key)
152
153 group = OpenSSL.EC_KEY_get0_group(key)
154 pub_key = OpenSSL.EC_KEY_get0_public_key(key)
155
156 if (OpenSSL.EC_POINT_get_affine_coordinates_GFp(group, pub_key,
157 pub_key_x,
158 pub_key_y, 0
159 )) == 0:
160 raise Exception(
161 "[OpenSSL] EC_POINT_get_affine_coordinates_GFp FAIL ...")
162
163 privkey = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(priv_key))
164 pubkeyx = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(pub_key_x))
165 pubkeyy = OpenSSL.malloc(0, OpenSSL.BN_num_bytes(pub_key_y))
166 OpenSSL.BN_bn2bin(priv_key, privkey)
167 privkey = privkey.raw
168 OpenSSL.BN_bn2bin(pub_key_x, pubkeyx)
169 pubkeyx = pubkeyx.raw
170 OpenSSL.BN_bn2bin(pub_key_y, pubkeyy)
171 pubkeyy = pubkeyy.raw
172 self.raw_check_key(privkey, pubkeyx, pubkeyy)
173
174 return privkey, pubkeyx, pubkeyy
175
176 finally:
177 OpenSSL.EC_KEY_free(key)
178 OpenSSL.BN_free(pub_key_x)
179 OpenSSL.BN_free(pub_key_y)
180
181 def get_ecdh_key(self, pubkey):
182 """

Callers 1

__init__Method · 0.95

Calls 3

raw_check_keyMethod · 0.95
mallocMethod · 0.80
BN_num_bytesMethod · 0.80

Tested by

no test coverage detected