Verify the signature with the input and the local public key. Returns a boolean
(self, sig, inputb, digest_alg=OpenSSL.digest_ecdsa_sha1)
| 372 | pass |
| 373 | |
| 374 | def verify(self, sig, inputb, digest_alg=OpenSSL.digest_ecdsa_sha1): |
| 375 | """ |
| 376 | Verify the signature with the input and the local public key. |
| 377 | Returns a boolean |
| 378 | """ |
| 379 | try: |
| 380 | bsig = OpenSSL.malloc(sig, len(sig)) |
| 381 | binputb = OpenSSL.malloc(inputb, len(inputb)) |
| 382 | digest = OpenSSL.malloc(0, 64) |
| 383 | dgst_len = OpenSSL.pointer(OpenSSL.c_int(0)) |
| 384 | if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: |
| 385 | md_ctx = OpenSSL.EVP_MD_CTX_new() |
| 386 | else: |
| 387 | md_ctx = OpenSSL.EVP_MD_CTX_create() |
| 388 | key = OpenSSL.EC_KEY_new_by_curve_name(self.curve) |
| 389 | |
| 390 | if key == 0: |
| 391 | raise Exception("[OpenSSL] EC_KEY_new_by_curve_name FAIL ...") |
| 392 | |
| 393 | pub_key_x = OpenSSL.BN_bin2bn(self.pubkey_x, len(self.pubkey_x), 0) |
| 394 | pub_key_y = OpenSSL.BN_bin2bn(self.pubkey_y, len(self.pubkey_y), 0) |
| 395 | group = OpenSSL.EC_KEY_get0_group(key) |
| 396 | pub_key = OpenSSL.EC_POINT_new(group) |
| 397 | |
| 398 | if (OpenSSL.EC_POINT_set_affine_coordinates_GFp(group, pub_key, |
| 399 | pub_key_x, |
| 400 | pub_key_y, |
| 401 | 0)) == 0: |
| 402 | raise Exception( |
| 403 | "[OpenSSL] EC_POINT_set_affine_coordinates_GFp FAIL ...") |
| 404 | if (OpenSSL.EC_KEY_set_public_key(key, pub_key)) == 0: |
| 405 | raise Exception("[OpenSSL] EC_KEY_set_public_key FAIL ...") |
| 406 | if (OpenSSL.EC_KEY_check_key(key)) == 0: |
| 407 | raise Exception("[OpenSSL] EC_KEY_check_key FAIL ...") |
| 408 | if OpenSSL._hexversion > 0x10100000 and not OpenSSL._libreSSL: |
| 409 | OpenSSL.EVP_MD_CTX_new(md_ctx) |
| 410 | else: |
| 411 | OpenSSL.EVP_MD_CTX_init(md_ctx) |
| 412 | OpenSSL.EVP_DigestInit_ex(md_ctx, digest_alg(), None) |
| 413 | if (OpenSSL.EVP_DigestUpdate(md_ctx, binputb, len(inputb))) == 0: |
| 414 | raise Exception("[OpenSSL] EVP_DigestUpdate FAIL ...") |
| 415 | |
| 416 | OpenSSL.EVP_DigestFinal_ex(md_ctx, digest, dgst_len) |
| 417 | ret = OpenSSL.ECDSA_verify( |
| 418 | 0, digest, dgst_len.contents, bsig, len(sig), key) |
| 419 | |
| 420 | if ret == -1: |
| 421 | return False # Fail to Check |
| 422 | else: |
| 423 | if ret == 0: |
| 424 | return False # Bad signature ! |
| 425 | else: |
| 426 | return True # Good |
| 427 | return False |
| 428 | |
| 429 | finally: |
| 430 | OpenSSL.EC_KEY_free(key) |
| 431 | OpenSSL.BN_free(pub_key_x) |
no test coverage detected