aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/data/ec/ecdsa_tv.json13
-rw-r--r--test/ec/test_regress.py1
-rw-r--r--test/ec/test_signature.py33
3 files changed, 46 insertions, 1 deletions
diff --git a/test/data/ec/ecdsa_tv.json b/test/data/ec/ecdsa_tv.json
new file mode 100644
index 0000000..dce0790
--- /dev/null
+++ b/test/data/ec/ecdsa_tv.json
@@ -0,0 +1,13 @@
+{
+ "msg": "608079423f12421de616b7493ebe551cf4d65b92",
+ "priv": "e14f37b3d1374ff8b03f41b9b3fdd2f0ebccf275d660d7f3",
+ "pub": {
+ "x": "07008ea40b08dbe76432096e80a2494c94982d2d5bcf98e6",
+ "y": "76fab681d00b414ea636ba215de26d98c41bd7f2e4d65477"
+ },
+ "k": "cb0abc7043a10783684556fb12c4154d57bc31a289685f25",
+ "signature": {
+ "r": "6994d962bdd0d793ffddf855ec5bf2f91a9698b46258a63e",
+ "s": "02ba6465a234903744ab02bc8521405b73cf5fc00e1a9f41"
+ }
+}
diff --git a/test/ec/test_regress.py b/test/ec/test_regress.py
index 886d7cc..af67096 100644
--- a/test/ec/test_regress.py
+++ b/test/ec/test_regress.py
@@ -1,5 +1,4 @@
from typing import cast
-from unittest import TestCase
import pytest
from sympy import symbols
diff --git a/test/ec/test_signature.py b/test/ec/test_signature.py
index 433d405..c5abf74 100644
--- a/test/ec/test_signature.py
+++ b/test/ec/test_signature.py
@@ -1,6 +1,13 @@
+import json
+
import pytest
+from importlib_resources import files
+import test.data.ec
+from pyecsca.ec.coordinates import AffineCoordinateModel
from pyecsca.ec.mod import Mod
from pyecsca.ec.mult import LTRMultiplier
+from pyecsca.ec.params import get_params
+from pyecsca.ec.point import Point
from pyecsca.ec.signature import (
Signature,
SignatureResult,
@@ -108,3 +115,29 @@ def test_der():
sig = SignatureResult(0xAAAAA, 0xBBBBB)
assert sig == SignatureResult.from_DER(sig.to_DER())
assert sig != "abc"
+
+
+def test_ecdsa_nist():
+ with files(test.data.ec).joinpath("ecdsa_tv.json").open("r") as f:
+ nist_data = json.load(f)
+
+ P192 = get_params("nist", "P-192", "projective")
+ affine_model = AffineCoordinateModel(P192.curve.model)
+ add = P192.curve.coordinate_model.formulas["add-2016-rcb"]
+ dbl = P192.curve.coordinate_model.formulas["dbl-2016-rcb"]
+ mult = LTRMultiplier(add, dbl)
+ priv = Mod(int(nist_data["priv"], 16), P192.order)
+
+ pub_affine = Point(affine_model,
+ x=Mod(int(nist_data["pub"]["x"], 16), P192.curve.prime),
+ y=Mod(int(nist_data["pub"]["y"], 16), P192.curve.prime))
+ pub = pub_affine.to_model(P192.curve.coordinate_model, P192.curve)
+
+ signer = ECDSA_SHA1(mult, P192, add, pub, priv)
+
+ nonce = int(nist_data["k"], 16)
+ data = bytes.fromhex(nist_data["msg"])
+ signature = signer.sign_hash(data, nonce=nonce)
+ assert signature.r == int(nist_data["signature"]["r"], 16)
+ assert signature.s == int(nist_data["signature"]["s"], 16)
+ assert signer.verify_hash(signature, data)