Adds tests to check that the function sw_ecdsa_verify
using mbedtls is valid.

Signed-off-by: Philippe Reynes <[email protected]>
---
 test/lib/Makefile   |   1 +
 test/lib/sw_ecdsa.c | 445 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 446 insertions(+)
 create mode 100644 test/lib/sw_ecdsa.c

diff --git a/test/lib/Makefile b/test/lib/Makefile
index f25383a40e5..8837446968b 100644
--- a/test/lib/Makefile
+++ b/test/lib/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_$(PHASE_)UT_COMPRESSION) += compression.o
 ifeq ($(CONFIG_XPL_BUILD),)
 obj-y += abuf.o
 obj-y += alist.o
+obj-$(CONFIG_ECDSA_MBEDTLS) += sw_ecdsa.o
 obj-$(CONFIG_EFI_LOADER) += efi_device_path.o efi_memory.o
 obj-$(CONFIG_EFI_SECURE_BOOT) += efi_image_region.o
 ifdef CONFIG_RISCV
diff --git a/test/lib/sw_ecdsa.c b/test/lib/sw_ecdsa.c
new file mode 100644
index 00000000000..f037ca0812a
--- /dev/null
+++ b/test/lib/sw_ecdsa.c
@@ -0,0 +1,445 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2026 Philippe Reynes <[email protected]>
+ */
+
+#include <command.h>
+#include <image.h>
+#include <test/lib.h>
+#include <test/test.h>
+#include <test/ut.h>
+#include <crypto/ecdsa-uclass.h>
+#include <crypto/internal/sw_ecdsa.h>
+
+#include <mbedtls/ecp.h>
+
+struct ecdsa_test_vector_s {
+       char *test_name;
+       char *curve_name;
+       unsigned char *x;
+       unsigned char *y;
+       int size_bits;
+       unsigned char *hash_type;
+       unsigned char *hash_message;
+       unsigned char *k;
+       unsigned char *r;
+       unsigned char *s;
+       int expected;
+};
+
+/*
+ * Those data come from RFC6979
+ */
+
+struct ecdsa_test_vector_s ecdsa_test_vector[] = {
+       /*
+        * secp192r1
+        */
+       {
+       .test_name = "secp192r1 sha1",
+       .curve_name = "secp192r1",
+       .x = "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56",
+       .y = "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43",
+       .size_bits = 192,
+       .hash_type = "sha-1",
+       .hash_message = "sample",
+       .k = "37D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021",
+       .r = "98C6BD12B23EAF5E2A2045132086BE3EB8EBD62ABF6698FF",
+       .s = "57A22B07DEA9530F8DE9471B1DC6624472E8E2844BC25B64",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp192r1 sha256",
+       .curve_name = "secp192r1",
+       .x = "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56",
+       .y = "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43",
+       .size_bits = 192,
+       .hash_type = "sha-256",
+       .hash_message = "sample",
+       .k = "32B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496",
+       .r = "4B0B8CE98A92866A2820E20AA6B75B56382E0F9BFD5ECB55",
+       .s = "CCDB006926EA9565CBADC840829D8C384E06DE1F1E381B85",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp192r1 sha384",
+       .curve_name = "secp192r1",
+       .x = "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56",
+       .y = "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43",
+       .size_bits = 192,
+       .hash_type = "sha-384",
+       .hash_message = "sample",
+       .k = "4730005C4FCB01834C063A7B6760096DBE284B8252EF4311",
+       .r = "DA63BF0B9ABCF948FBB1E9167F136145F7A20426DCC287D5",
+       .s = "C3AA2C960972BD7A2003A57E1C4C77F0578F8AE95E31EC5E",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp192r1 sha512",
+       .curve_name = "secp192r1",
+       .x = "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56",
+       .y = "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43",
+       .size_bits = 192,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1",
+       .r = "4D60C5AB1996BD848343B31C00850205E2EA6922DAC2E4B8",
+       .s = "3F6E837448F027A1BF4B34E796E32A811CBB4050908D8F67",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp192r1 sha512 error",
+       .curve_name = "secp192r1",
+       .x = "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56",
+       .y = "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43",
+       .size_bits = 192,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1",
+       .r = "4D60C5AB1996BD848343B31C00850205E2EA6922DAC2E4B8",
+       .s = "0F6E837448F027A1BF4B34E796E32A811CBB4050908D8F67",
+       .expected = MBEDTLS_ERR_ECP_VERIFY_FAILED,
+       },
+       /*
+        * secp224r1
+        */
+       {
+       .test_name = "secp224r1 sha1",
+       .curve_name = "secp224r1",
+       .x = "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+       .y = "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+       .size_bits = 224,
+       .hash_type = "sha-1",
+       .hash_message = "sample",
+       .k = "7EEFADD91110D8DE6C2C470831387C50D3357F7F4D477054B8B426BC",
+       .r = "22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC",
+       .s = "66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp224r1 sha256",
+       .curve_name = "secp224r1",
+       .x = "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+       .y = "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+       .size_bits = 224,
+       .hash_type = "sha-256",
+       .hash_message = "sample",
+       .k = "AD3029E0278F80643DE33917CE6908C70A8FF50A411F06E41DEDFCDC",
+       .r = "61AA3DA010E8E8406C656BC477A7A7189895E7E840CDFE8FF42307BA",
+       .s = "BC814050DAB5D23770879494F9E0A680DC1AF7161991BDE692B10101",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp224r1 sha384",
+       .curve_name = "secp224r1",
+       .x = "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+       .y = "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+       .size_bits = 224,
+       .hash_type = "sha-384",
+       .hash_message = "sample",
+       .k = "52B40F5A9D3D13040F494E83D3906C6079F29981035C7BD51E5CAC40",
+       .r = "0B115E5E36F0F9EC81F1325A5952878D745E19D7BB3EABFABA77E953",
+       .s = "830F34CCDFE826CCFDC81EB4129772E20E122348A2BBD889A1B1AF1D",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp224r1 sha512",
+       .curve_name = "secp224r1",
+       .x = "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+       .y = "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+       .size_bits = 224,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "9DB103FFEDEDF9CFDBA05184F925400C1653B8501BAB89CEA0FBEC14",
+       .r = "074BD1D979D5F32BF958DDC61E4FB4872ADCAFEB2256497CDAC30397",
+       .s = "A4CECA196C3D5A1FF31027B33185DC8EE43F288B21AB342E5D8EB084",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp224r1 sha512 error",
+       .curve_name = "secp224r1",
+       .x = "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C",
+       .y = "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A",
+       .size_bits = 224,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "9DB103FFEDEDF9CFDBA05184F925400C1653B8501BAB89CEA0FBEC14",
+       .r = "074BD1D979D5F32BF958DDC61E4FB4872ADCAFEB2256497CDAC30397",
+       .s = "04CECA196C3D5A1FF31027B33185DC8EE43F288B21AB342E5D8EB084",
+       .expected = MBEDTLS_ERR_ECP_VERIFY_FAILED,
+       },
+       /*
+        * secp256r1
+        */
+       {
+       .test_name = "secp256r1 sha1",
+       .curve_name = "secp256r1",
+       .x = "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+       .y = "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+       .size_bits = 256,
+       .hash_type = "sha-1",
+       .hash_message = "sample",
+       .k = "882905F1227FD620FBF2ABF21244F0BA83D0DC3A9103DBBEE43A1FB858109DB4",
+       .r = "61340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D32",
+       .s = "6D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp256r1 sha256",
+       .curve_name = "secp256r1",
+       .x = "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+       .y = "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+       .size_bits = 256,
+       .hash_type = "sha-256",
+       .hash_message = "sample",
+       .k = "A6E3C57DD01ABE90086538398355DD4C3B17AA873382B0F24D6129493D8AAD60",
+       .r = "EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716",
+       .s = "F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp256r1 sha384",
+       .curve_name = "secp256r1",
+       .x = "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+       .y = "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+       .size_bits = 256,
+       .hash_type = "sha-384",
+       .hash_message = "sample",
+       .k = "09F634B188CEFD98E7EC88B1AA9852D734D0BC272F7D2A47DECC6EBEB375AAD4",
+       .r = "0EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF7719",
+       .s = "4861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp256r1 sha512",
+       .curve_name = "secp256r1",
+       .x = "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+       .y = "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+       .size_bits = 256,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "5FA81C63109BADB88C1F367B47DA606DA28CAD69AA22C4FE6AD7DF73A7173AA5",
+       .r = "8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F00",
+       .s = "2362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp256r1 sha512 error",
+       .curve_name = "secp256r1",
+       .x = "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6",
+       .y = "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
+       .size_bits = 256,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = "5FA81C63109BADB88C1F367B47DA606DA28CAD69AA22C4FE6AD7DF73A7173AA5",
+       .r = "8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F00",
+       .s = "0362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE",
+       .expected = MBEDTLS_ERR_ECP_VERIFY_FAILED,
+       },
+       /*
+        * secp384r1
+        */
+       {
+       .test_name = "secp384r1 sha1",
+       .curve_name = "secp384r1",
+       .x = 
"EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+       .y = 
"8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+       .size_bits = 384,
+       .hash_type = "sha-1",
+       .hash_message = "sample",
+       .k = 
"4471EF7518BB2C7C20F62EAE1C387AD0C5E8E470995DB4ACF694466E6AB096630F29E5938D25106C3C340045A2DB01A7",
+       .r = 
"EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA37B9BA002899F6FDA3A4A9386790D4EB2",
+       .s = 
"A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF26F49CA031D4857570CCB5CA4424A443",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp384r1 sha256",
+       .curve_name = "secp384r1",
+       .x = 
"EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+       .y = 
"8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+       .size_bits = 384,
+       .hash_type = "sha-256",
+       .hash_message = "sample",
+       .k = 
"180AE9F9AEC5438A44BC159A1FCB277C7BE54FA20E7CF404B490650A8ACC414E375572342863C899F9F2EDF9747A9B60",
+       .r = 
"21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD",
+       .s = 
"F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp384r1 sha384",
+       .curve_name = "secp384r1",
+       .x = 
"EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+       .y = 
"8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+       .size_bits = 384,
+       .hash_type = "sha-384",
+       .hash_message = "sample",
+       .k = 
"94ED910D1A099DAD3254E9242AE85ABDE4BA15168EAF0CA87A555FD56D10FBCA2907E3E83BA95368623B8C4686915CF9",
+       .r = 
"94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE46",
+       .s = 
"99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp384r1 sha512",
+       .curve_name = "secp384r1",
+       .x = 
"EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+       .y = 
"8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+       .size_bits = 384,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = 
"92FC3C7183A883E24216D1141F1A8976C5B0DD797DFA597E3D7B32198BD35331A4E966532593A52980D0E3AAA5E10EC3",
+       .r = 
"ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD7882433709",
+       .s = 
"512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp384r1 sha512 error",
+       .curve_name = "secp384r1",
+       .x = 
"EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13",
+       .y = 
"8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
+       .size_bits = 384,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = 
"92FC3C7183A883E24216D1141F1A8976C5B0DD797DFA597E3D7B32198BD35331A4E966532593A52980D0E3AAA5E10EC3",
+       .r = 
"ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD7882433709",
+       .s = 
"012C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5",
+       .expected = MBEDTLS_ERR_ECP_VERIFY_FAILED,
+       },
+       /*
+        * secp521r1
+        */
+       {
+       .test_name = "secp521r1 sha1",
+       .curve_name = "secp521r1",
+       .x = 
"01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+       .y = 
"00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+       .size_bits = 521,
+       .hash_type = "sha-1",
+       .hash_message = "sample",
+       .k = 
"0089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9",
+       .r = 
"00343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D75D",
+       .s = 
"00E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5D16",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp521r1 sha256",
+       .curve_name = "secp521r1",
+       .x = 
"01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+       .y = 
"00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+       .size_bits = 521,
+       .hash_type = "sha-256",
+       .hash_message = "sample",
+       .k = 
"00EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0",
+       .r = 
"01511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A7",
+       .s = 
"004A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp521r1 sha384",
+       .curve_name = "secp521r1",
+       .x = 
"01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+       .y = 
"00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+       .size_bits = 521,
+       .hash_type = "sha-384",
+       .hash_message = "sample",
+       .k = 
"01546A108BC23A15D6F21872F7DED661FA8431DDBD922D0DCDB77CC878C8553FFAD064C95A920A750AC9137E527390D2D92F153E66196966EA554D9ADFCB109C4211",
+       .r = 
"01EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C67451",
+       .s = 
"01F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65D61",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp521r1 sha512",
+       .curve_name = "secp521r1",
+       .x = 
"01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+       .y = 
"00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+       .size_bits = 521,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = 
"01DAE2EA071F8110DC26882D4D5EAE0621A3256FC8847FB9022E2B7D28E6F10198B1574FDD03A9053C08A1854A168AA5A57470EC97DD5CE090124EF52A2F7ECBFFD3",
+       .r = 
"00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA",
+       .s = 
"00617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A",
+       .expected = 0,
+       },
+       {
+       .test_name = "secp521r1 sha512 error",
+       .curve_name = "secp521r1",
+       .x = 
"01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4",
+       .y = 
"00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
+       .size_bits = 521,
+       .hash_type = "sha-512",
+       .hash_message = "sample",
+       .k = 
"01DAE2EA071F8110DC26882D4D5EAE0621A3256FC8847FB9022E2B7D28E6F10198B1574FDD03A9053C08A1854A168AA5A57470EC97DD5CE090124EF52A2F7ECBFFD3",
+       .r = 
"00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA",
+       .s = 
"00017CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A",
+       .expected = MBEDTLS_ERR_ECP_VERIFY_FAILED,
+       },
+};
+
+int ecdsa_test(struct unit_test_state *uts, struct ecdsa_test_vector_s *tv)
+{
+       struct ecdsa_public_key pubkey;
+       unsigned char x[528 / 8];
+       unsigned char y[528 / 8];
+       unsigned char hash[512 / 8];
+       unsigned int hash_len;
+       unsigned char signature[528 / 8 * 2];
+       unsigned int sig_len;
+       int ret;
+
+       if (!(tv->size_bits % 8))
+               sig_len = tv->size_bits / 8;
+       else
+               sig_len = tv->size_bits / 8 + 1;
+
+       pubkey.curve_name = tv->curve_name;
+       hex2bin(x, tv->x, strlen(tv->x) / 2);
+       pubkey.x          = x;
+       hex2bin(y, tv->y, strlen(tv->y) / 2);
+       pubkey.y          = y;
+       pubkey.size_bits  = tv->size_bits;
+
+       if (!strcmp(tv->hash_type, "sha-1")) {
+               hash_len = SHA1_SUM_LEN;
+               sha1_csum_wd(tv->hash_message, strlen(tv->hash_message),
+                            hash, hash_len);
+       } else if (!strcmp(tv->hash_type, "sha-256")) {
+               hash_len = SHA256_SUM_LEN;
+               sha256_csum_wd(tv->hash_message, strlen(tv->hash_message),
+                              hash, hash_len);
+       } else if (!strcmp(tv->hash_type, "sha-384")) {
+               hash_len = SHA384_SUM_LEN;
+               sha384_csum_wd(tv->hash_message, strlen(tv->hash_message),
+                              hash, hash_len);
+       } else if (!strcmp(tv->hash_type, "sha-512")) {
+               hash_len = SHA512_SUM_LEN;
+               sha512_csum_wd(tv->hash_message, strlen(tv->hash_message),
+                              hash, hash_len);
+       } else {
+               ut_reportf("Unknown hash type (%s)", tv->hash_type);
+               goto out;
+       }
+
+       memset(signature, 0, sizeof(signature));
+       hex2bin(signature, tv->r, sig_len);
+       hex2bin(signature + sig_len, tv->s, sig_len);
+       sig_len = sig_len * 2;
+
+       ret = sw_ecdsa_verify(&pubkey,
+                             hash, hash_len,
+                             signature, sig_len);
+       ut_asserteq(ret, tv->expected);
+
+ out:
+       return 0;
+}
+
+static int lib_sw_ecdsa(struct unit_test_state *uts)
+{
+       int i, num_test = ARRAY_SIZE(ecdsa_test_vector);
+
+       for (i = 0; i < num_test; i++)
+               ecdsa_test(uts, &ecdsa_test_vector[i]);
+
+       return 0;
+}
+
+LIB_TEST(lib_sw_ecdsa, 0);
-- 
2.43.0

Reply via email to