(self)
| 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 | """ |
no test coverage detected