Factor out some common code
diff --git a/library/x509.c b/library/x509.c
index 48c11ef..3e93c3a 100644
--- a/library/x509.c
+++ b/library/x509.c
@@ -547,14 +547,39 @@
return( 0 );
}
-int x509_get_sig_alg( const x509_buf *sig_oid, md_type_t *md_alg,
- pk_type_t *pk_alg )
+/*
+ * Get signature algorithm from alg OID and optional parameters
+ */
+int x509_get_sig_alg( const x509_buf *sig_oid, const x509_buf *sig_params,
+ md_type_t *md_alg, pk_type_t *pk_alg )
{
- int ret = oid_get_sig_alg( sig_oid, md_alg, pk_alg );
+ int ret;
- if( ret != 0 )
+ if( ( ret = oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 )
return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG + ret );
+#if defined(POLARSSL_RSASSA_PSS_CERTIFICATES)
+ if( *pk_alg == POLARSSL_PK_RSASSA_PSS )
+ {
+ int salt_len, trailer_field;
+ md_type_t mgf_md;
+
+ /* Make sure params are valid */
+ ret = x509_get_rsassa_pss_params( sig_params,
+ md_alg, &mgf_md, &salt_len, &trailer_field );
+ if( ret != 0 )
+ return( ret );
+
+ }
+ else
+#endif
+ {
+ /* Make sure parameters are absent or NULL */
+ if( ( sig_params->tag != ASN1_NULL && sig_params->tag != 0 ) ||
+ sig_params->len != 0 )
+ return( POLARSSL_ERR_X509_INVALID_ALG );
+ }
+
return( 0 );
}