67 lines
1.9 KiB
Python
Executable File
67 lines
1.9 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
# Run without arguments for help message
|
|
|
|
def help():
|
|
print("Run the tests")
|
|
print(" test.py OMEMO.db")
|
|
|
|
import sys
|
|
|
|
# Gajim plugins have garbage debug output, remove it
|
|
prev_output = sys.stderr
|
|
sys.stderr = open("/dev/null", 'w')
|
|
|
|
# omemo module is copied from gajim-plugins, assuming axolotl is already installed on system
|
|
from omemo.backend.liteaxolotlstore import LiteAxolotlStore, _convert_identity_key as convert
|
|
from axolotl.ecc.curve import Curve
|
|
|
|
# Reestablish STDERR output so we don't eat errors
|
|
sys.stderr = prev_output
|
|
|
|
# Feed me a private key
|
|
def sign(key, message):
|
|
return Curve.calculateSignature(key, bytes(message, "utf-8")).hex()
|
|
|
|
# Feed me a public key
|
|
def verify(key, message, sig):
|
|
return Curve.verifySignature(key, bytes(message, "utf-8"), bytes.fromhex(sig))
|
|
|
|
args = len(sys.argv)
|
|
if args == 1:
|
|
help()
|
|
exit(0)
|
|
|
|
try:
|
|
db = LiteAxolotlStore(sys.argv[1], None)
|
|
except:
|
|
print("Failed to load database from " + sys.argv[1])
|
|
exit(1)
|
|
keypair = db.getIdentityKeyPair()
|
|
|
|
# Now let's begin the tests
|
|
|
|
mymessage = "test message"
|
|
sig = sign(keypair.getPrivateKey(), mymessage)
|
|
|
|
if verify(keypair.getPublicKey().getPublicKey(), mymessage, sig):
|
|
print("OK: Good signature is verified.")
|
|
else:
|
|
print("FAIL: Good signature failed to verify!")
|
|
|
|
# Let's modify the signature
|
|
fake_sig = sig.replace('a', 'b').replace('b', 'c')
|
|
|
|
# Now it should not verify anymore
|
|
if verify(keypair.getPublicKey().getPublicKey(), mymessage, fake_sig):
|
|
print("FAIL: Wrong signature is verified!")
|
|
else:
|
|
print("OK: Wrong signature is not verified.")
|
|
|
|
# Let's modify original message
|
|
fake_msg = "foobar"
|
|
# It should not verify with this fake message and the original signature
|
|
if verify(keypair.getPublicKey().getPublicKey(), fake_msg, sig):
|
|
print("FAIL: Wrong message is verified!")
|
|
else:
|
|
print("OK: Wrong message is not verified.")
|