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 );
 }
 
diff --git a/library/x509_crl.c b/library/x509_crl.c
index 6c9ec59..f2bd0c1 100644
--- a/library/x509_crl.c
+++ b/library/x509_crl.c
@@ -397,35 +397,16 @@
         return( POLARSSL_ERR_X509_UNKNOWN_VERSION );
     }
 
-    if( ( ret = x509_get_sig_alg( &crl->sig_oid1, &crl->sig_md,
-                                  &crl->sig_pk ) ) != 0 )
+    if( ( ret = x509_get_sig_alg( &crl->sig_oid1, &sig_params,
+                                  &crl->sig_md, &crl->sig_pk ) ) != 0 )
     {
         x509_crl_free( crl );
         return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG );
     }
 
 #if defined(POLARSSL_RSASSA_PSS_CERTIFICATES)
-    if( crl->sig_pk == 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,
-                &crl->sig_md, &mgf_md, &salt_len, &trailer_field );
-        if( ret != 0 )
-            return( ret );
-
-        memcpy( &crl->sig_params, &sig_params, sizeof( x509_buf ) );
-    }
-    else
+    memcpy( &crl->sig_params, &sig_params, sizeof( x509_buf ) );
 #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 );
-    }
 
     /*
      * issuer               Name
diff --git a/library/x509_crt.c b/library/x509_crt.c
index 6b92688..3fda864 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -615,35 +615,16 @@
         return( POLARSSL_ERR_X509_UNKNOWN_VERSION );
     }
 
-    if( ( ret = x509_get_sig_alg( &crt->sig_oid1, &crt->sig_md,
-                                  &crt->sig_pk ) ) != 0 )
+    if( ( ret = x509_get_sig_alg( &crt->sig_oid1, &sig_params,
+                                  &crt->sig_md, &crt->sig_pk ) ) != 0 )
     {
         x509_crt_free( crt );
         return( ret );
     }
 
 #if defined(POLARSSL_RSASSA_PSS_CERTIFICATES)
-    if( crt->sig_pk == 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,
-                &crt->sig_md, &mgf_md, &salt_len, &trailer_field );
-        if( ret != 0 )
-            return( ret );
-
-        memcpy( &crt->sig_params, &sig_params, sizeof( x509_buf ) );
-    }
-    else
+    memcpy( &crt->sig_params, &sig_params, sizeof( x509_buf ) );
 #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 );
-    }
 
     /*
      * issuer               Name
diff --git a/library/x509_csr.c b/library/x509_csr.c
index 3118c0a..a0d4c36 100644
--- a/library/x509_csr.c
+++ b/library/x509_csr.c
@@ -254,35 +254,16 @@
         return( ret );
     }
 
-    if( ( ret = x509_get_sig_alg( &csr->sig_oid, &csr->sig_md,
-                                  &csr->sig_pk ) ) != 0 )
+    if( ( ret = x509_get_sig_alg( &csr->sig_oid, &sig_params,
+                                  &csr->sig_md, &csr->sig_pk ) ) != 0 )
     {
         x509_csr_free( csr );
         return( POLARSSL_ERR_X509_UNKNOWN_SIG_ALG );
     }
 
 #if defined(POLARSSL_RSASSA_PSS_CERTIFICATES)
-    if( csr->sig_pk == 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,
-                &csr->sig_md, &mgf_md, &salt_len, &trailer_field );
-        if( ret != 0 )
-            return( ret );
-
-        memcpy( &csr->sig_params, &sig_params, sizeof( x509_buf ) );
-    }
-    else
+    memcpy( &csr->sig_params, &sig_params, sizeof( x509_buf ) );
 #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 );
-    }
 
     if( ( ret = x509_get_sig( &p, end, &csr->sig ) ) != 0 )
     {
