PK: use NULL for unimplemented operations
diff --git a/include/polarssl/pk.h b/include/polarssl/pk.h
index 5104bc0..fb0e92e 100644
--- a/include/polarssl/pk.h
+++ b/include/polarssl/pk.h
@@ -45,7 +45,7 @@
 #endif
 
 #define POLARSSL_ERR_PK_MALLOC_FAILED       -0x2F80  /**< Memory alloation failed. */
-#define POLARSSL_ERR_PK_TYPE_MISMATCH       -0x2F00  /**< Type mismatch, eg attempt to use a RSA key as EC, or to modify key type. */
+#define POLARSSL_ERR_PK_TYPE_MISMATCH       -0x2F00  /**< Type mismatch, eg attempt to encrypt with an ECDSA key */
 #define POLARSSL_ERR_PK_BAD_INPUT_DATA      -0x2E80  /**< Bad input parameters to function. */
 
 #if defined(POLARSSL_RSA_C)
diff --git a/library/pk.c b/library/pk.c
index 62302b0..3711794 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -127,6 +127,9 @@
     if( ctx == NULL || ctx->pk_info == NULL )
         return( POLARSSL_ERR_PK_BAD_INPUT_DATA );
 
+    if( ctx->pk_info->verify_func == NULL )
+        return( POLARSSL_ERR_PK_TYPE_MISMATCH );
+
     return( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg,
                                        hash, hash_len,
                                        sig, sig_len ) );
diff --git a/library/pk_wrap.c b/library/pk_wrap.c
index beaa3fd..c2a4c7f 100644
--- a/library/pk_wrap.c
+++ b/library/pk_wrap.c
@@ -131,22 +131,11 @@
 static int ecdsa_verify_wrap( void *ctx, md_type_t md_alg,
                        const unsigned char *hash, size_t hash_len,
                        const unsigned char *sig, size_t sig_len );
-#endif
 
 static int eckey_verify_wrap( void *ctx, md_type_t md_alg,
                        const unsigned char *hash, size_t hash_len,
                        const unsigned char *sig, size_t sig_len )
 {
-#if !defined(POLARSSL_ECDSA_C)
-    ((void) ctx);
-    ((void) md_alg);
-    ((void) hash);
-    ((void) hash_len);
-    ((void) sig);
-    ((void) sig_len);
-
-    return( POLARSSL_ERR_PK_TYPE_MISMATCH );
-#else
     int ret;
     ecdsa_context ecdsa;
 
@@ -158,8 +147,8 @@
     ecdsa_free( &ecdsa );
 
     return( ret );
-#endif /* POLARSSL_ECDSA_C */
 }
+#endif /* POLARSSL_ECDSA_C */
 
 static void *eckey_alloc_wrap( void )
 {
@@ -189,7 +178,11 @@
     "EC",
     eckey_get_size,
     eckey_can_do,
+#if defined(POLARSSL_ECDSA_C)
     eckey_verify_wrap,
+#else
+    NULL,
+#endif
     eckey_alloc_wrap,
     eckey_free_wrap,
     eckey_debug,
@@ -204,26 +197,12 @@
             type == POLARSSL_PK_ECKEY_DH );
 }
 
-static int eckeydh_verify_wrap( void *ctx, md_type_t md_alg,
-                       const unsigned char *hash, size_t hash_len,
-                       const unsigned char *sig, size_t sig_len )
-{
-    ((void) ctx);
-    ((void) md_alg);
-    ((void) hash);
-    ((void) hash_len);
-    ((void) sig);
-    ((void) sig_len);
-
-    return( POLARSSL_ERR_PK_TYPE_MISMATCH );
-}
-
 const pk_info_t eckeydh_info = {
     POLARSSL_PK_ECKEY_DH,
     "EC_DH",
     eckey_get_size,         /* Same underlying key structure */
     eckeydh_can_do,
-    eckeydh_verify_wrap,
+    NULL,
     eckey_alloc_wrap,       /* Same underlying key structure */
     eckey_free_wrap,        /* Same underlying key structure */
     eckey_debug,            /* Same underlying key structure */