Skip to content

Instantly share code, notes, and snippets.

@lkdocs
Last active February 28, 2022 22:23
Show Gist options
  • Star 47 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save lkdocs/6519372 to your computer and use it in GitHub Desktop.
Save lkdocs/6519372 to your computer and use it in GitHub Desktop.
def verify_sign(public_key_loc, signature, data):
'''
Verifies with a public key from whom the data came that it was indeed
signed by their private key
param: public_key_loc Path to public key
param: signature String signature to be verified
return: Boolean. True if the signature is valid; False otherwise.
'''
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from base64 import b64decode
pub_key = open(public_key_loc, "r").read()
rsakey = RSA.importKey(pub_key)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA256.new()
# Assumes the data is base64 encoded to begin with
digest.update(b64decode(data))
if signer.verify(digest, b64decode(signature)):
return True
return False
@cnicodeme
Copy link

@peter-wolfenden-zocdoc You probably did not decoded your string (from base64). Try a rsakey = RSA.importKey(pub_key.decode('base64'))

@vaibhav1721
Copy link

can anyone show me an example, please? I am not that much frequent in python but want to implement signature validation in an application

@cryptid11
Copy link

@melvyn2
Copy link

melvyn2 commented Mar 23, 2018

Would return signer.verify(digest, b64decode(signature)) work better than the current method?

@Okirshen
Copy link

Okirshen commented Jul 4, 2019

I get the error
binascii.Error: Incorrect padding
please help!!!!!!

@JustinMarinelli
Copy link

If verification fails, is there a way to get the originally hashed message from the digital signature?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment