ECDSA : test vectors from RFC 4754
diff --git a/tests/suites/helpers.function b/tests/suites/helpers.function
index 2f1b26c..208e7e6 100644
--- a/tests/suites/helpers.function
+++ b/tests/suites/helpers.function
@@ -218,3 +218,49 @@
return( 0 );
}
+
+/**
+ * This function returns a buffer given as a hex string.
+ *
+ * The buffer is reversed so that the following are equivalent:
+ * mpi_fill_random( x, len, not_rnd, str );
+ * mpi_read_string( x, 16, str );
+ * (So, not random at all. Usefull to match test vectors.)
+ * Based on unhexify(), just reversed (changes marked by "sic")
+ */
+static int not_rnd( void *in, unsigned char *out, size_t len )
+{
+ unsigned char *obuf;
+ const char *ibuf = in;
+ unsigned char c, c2;
+ assert( len == strlen(ibuf) / 2 );
+ assert(!(strlen(ibuf) %1)); // must be even number of bytes
+
+ obuf = out + (len - 1); // sic
+ while (*ibuf != 0)
+ {
+ c = *ibuf++;
+ if( c >= '0' && c <= '9' )
+ c -= '0';
+ else if( c >= 'a' && c <= 'f' )
+ c -= 'a' - 10;
+ else if( c >= 'A' && c <= 'F' )
+ c -= 'A' - 10;
+ else
+ assert( 0 );
+
+ c2 = *ibuf++;
+ if( c2 >= '0' && c2 <= '9' )
+ c2 -= '0';
+ else if( c2 >= 'a' && c2 <= 'f' )
+ c2 -= 'a' - 10;
+ else if( c2 >= 'A' && c2 <= 'F' )
+ c2 -= 'A' - 10;
+ else
+ assert( 0 );
+
+ *obuf-- = ( c << 4 ) | c2; // sic
+ }
+
+ return( 0 );
+}