def testZeroSignature(self): privateKey = PrivateKey() publicKey = privateKey.publicKey() message2 = "This is the wrong message" self.assertFalse(Ecdsa.verify(message2, Signature(0, 0), publicKey))
def testVerifyRightMessage(self): privateKey = PrivateKey() publicKey = privateKey.publicKey() message = "This is the right message" signature = Ecdsa.sign(message, privateKey) self.assertTrue(Ecdsa.verify(message, signature, publicKey))
def testVerifyWrongMessage(self): privateKey = PrivateKey() publicKey = privateKey.publicKey() message1 = "This is the right message" message2 = "This is the wrong message" signature = Ecdsa.sign(message1, privateKey) self.assertFalse(Ecdsa.verify(message2, signature, publicKey))
def check_private_key(pem): try: assert PrivateKey.fromPem(pem).curve.name == "secp256k1" except: raise Exception( "Private-key must be valid secp256k1 ECDSA string in pem format") return pem
def testDerConversion(self): privateKey = PrivateKey() message = "This is a text message" signature1 = Ecdsa.sign(message, privateKey) der = signature1.toDer() signature2 = Signature.fromDer(der) self.assertEqual(signature1.r, signature2.r) self.assertEqual(signature1.s, signature2.s)
def testDerConversion(self): privateKey = PrivateKey() message = "This is a text message" signature1 = Ecdsa.sign(message, privateKey) der = signature1.toDer(withRecoveryId=True) signature2 = Signature.fromDer(der, recoveryByte=True) self.assertEqual(signature1.r, signature2.r) self.assertEqual(signature1.s, signature2.s) self.assertEqual(signature1.recoveryId, signature2.recoveryId)
def testMany(self): for _ in range(1000): privateKey1 = PrivateKey() publicKey1 = privateKey1.publicKey() privateKeyPem = privateKey1.toPem() publicKeyPem = publicKey1.toPem() privateKey2 = PrivateKey.fromPem(privateKeyPem) publicKey2 = PublicKey.fromPem(publicKeyPem) message = "test" signatureBase64 = Ecdsa.sign(message=message, privateKey=privateKey2).toBase64() signature = Signature.fromBase64(signatureBase64) self.assertTrue( Ecdsa.verify(message=message, signature=signature, publicKey=publicKey2))
def testBase64Conversion(self): privateKey = PrivateKey() message = "This is a text message" signature1 = Ecdsa.sign(message, privateKey) base64 = signature1.toBase64() signature2 = Signature.fromBase64(base64) self.assertEqual(signature1.r, signature2.r) self.assertEqual(signature1.s, signature2.s)
def TestOneInput(input_bytes): fdp = atheris.FuzzedDataProvider(input_bytes) privateKey1 = PrivateKey() publicKey1 = privateKey1.publicKey() privateKeyPem = privateKey1.toPem() publicKeyPem = publicKey1.toPem() privateKey2 = PrivateKey.fromPem(privateKeyPem) publicKey2 = PublicKey.fromPem(publicKeyPem) message = fdp.ConsumeUnicode(sys.maxsize) signatureBase64 = Ecdsa.sign(message=message, privateKey=privateKey2).toBase64() signature = Signature.fromBase64(signatureBase64) assert (Ecdsa.verify(message=message, signature=signature, publicKey=publicKey2))
def testBase64Conversion(self): privateKey = PrivateKey() message = "This is a text message" signature1 = Ecdsa.sign(message, privateKey) base64 = signature1.toBase64(withRecoveryId=True) signature2 = Signature.fromBase64(base64, recoveryByte=True) self.assertEqual(signature1.r, signature2.r) self.assertEqual(signature1.s, signature2.s) self.assertEqual(signature1.recoveryId, signature2.recoveryId)
def create(path=None): """# Generate a new key pair Generates a secp256k1 ECDSA private/public key pair to be used in the API authentications ## Parameters (optional): path [string]: path to save the keys .pem files. No files will be saved if this parameter isn't provided ## Return: private and public key pems """ private = PrivateKey() public = private.publicKey() private_pem = private.toPem() public_pem = public.toPem() if path is not None: if not os_path.exists(path): makedirs(path) with open(os_path.join(path, "private-key.pem"), "w") as file: file.write(private_pem) with open(os_path.join(path, "public-key.pem"), "w") as file: file.write(public_pem) return private_pem, public_pem
def testAssign(self): # Generated by: openssl ecparam -name secp256k1 -genkey -out privateKey.pem privateKeyPem = File.read("privateKey.pem") privateKey = PrivateKey.fromPem(privateKeyPem) message = File.read("message.txt") signature = Ecdsa.sign(message=message, privateKey=privateKey) publicKey = privateKey.publicKey() self.assertTrue( Ecdsa.verify(message=message, signature=signature, publicKey=publicKey))
def private_key(self): return PrivateKey.fromPem(self.pem)