- Added support for RFC4055 SHA2 and SHA4 signature algorithms for
use with PKCS#1 v1.5 signing and verification.
- Added extra certificates to test-ca and test code to further test
functionality of SHA2 and SHA4 signing and verification.
- Updated other program files accordingly
diff --git a/library/x509parse.c b/library/x509parse.c
index 83e5247..dcb8ea9 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -795,7 +795,8 @@
}
if( crt->sig_oid1.p[8] < 2 ||
- crt->sig_oid1.p[8] > 5 )
+ ( crt->sig_oid1.p[8] > 5 && crt->sig_oid1.p[8] < 11 ) ||
+ crt->sig_oid1.p[8] > 14 )
{
x509_free( crt );
return( POLARSSL_ERR_X509_CERT_UNKNOWN_SIG_ALG );
@@ -1441,10 +1442,14 @@
switch( crt->sig_oid1.p[8] )
{
- case RSA_MD2 : p += snprintf( p, end - p, "MD2" ); break;
- case RSA_MD4 : p += snprintf( p, end - p, "MD4" ); break;
- case RSA_MD5 : p += snprintf( p, end - p, "MD5" ); break;
- case RSA_SHA1: p += snprintf( p, end - p, "SHA1" ); break;
+ case SIG_RSA_MD2 : p += snprintf( p, end - p, "MD2" ); break;
+ case SIG_RSA_MD4 : p += snprintf( p, end - p, "MD4" ); break;
+ case SIG_RSA_MD5 : p += snprintf( p, end - p, "MD5" ); break;
+ case SIG_RSA_SHA1 : p += snprintf( p, end - p, "SHA1" ); break;
+ case SIG_RSA_SHA224 : p += snprintf( p, end - p, "SHA224" ); break;
+ case SIG_RSA_SHA256 : p += snprintf( p, end - p, "SHA256" ); break;
+ case SIG_RSA_SHA384 : p += snprintf( p, end - p, "SHA384" ); break;
+ case SIG_RSA_SHA512 : p += snprintf( p, end - p, "SHA512" ); break;
default: p += snprintf( p, end - p, "???" ); break;
}
@@ -1486,13 +1491,21 @@
switch( alg )
{
#if defined(POLARSSL_MD2_C)
- case RSA_MD2 : md2( in, len, out ); break;
+ case SIG_RSA_MD2 : md2( in, len, out ); break;
#endif
#if defined(POLARSSL_MD4_C)
- case RSA_MD4 : md4( in, len, out ); break;
+ case SIG_RSA_MD4 : md4( in, len, out ); break;
#endif
- case RSA_MD5 : md5( in, len, out ); break;
- case RSA_SHA1 : sha1( in, len, out ); break;
+ case SIG_RSA_MD5 : md5( in, len, out ); break;
+ case SIG_RSA_SHA1 : sha1( in, len, out ); break;
+#if defined(POLARSSL_SHA2_C)
+ case SIG_RSA_SHA224 : sha2( in, len, out, 1 ); break;
+ case SIG_RSA_SHA256 : sha2( in, len, out, 0 ); break;
+#endif
+#if defined(POLARSSL_SHA2_C)
+ case SIG_RSA_SHA384 : sha4( in, len, out, 1 ); break;
+ case SIG_RSA_SHA512 : sha4( in, len, out, 0 ); break;
+#endif
default:
memset( out, '\xFF', len );
break;
@@ -1511,7 +1524,7 @@
int pathlen;
x509_cert *cur;
x509_name *name;
- unsigned char hash[20];
+ unsigned char hash[64];
*flags = x509parse_expired( crt );