PK: use wrappers and function pointers for verify
diff --git a/include/polarssl/pk.h b/include/polarssl/pk.h
index 2f70085..f06ec68 100644
--- a/include/polarssl/pk.h
+++ b/include/polarssl/pk.h
@@ -24,6 +24,7 @@
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
+
 #ifndef POLARSSL_PK_H
 #define POLARSSL_PK_H
 
@@ -33,6 +34,10 @@
 #include "rsa.h"
 #endif
 
+#if defined(POLARSSL_ECP_C)
+#include "ecp.h"
+#endif
+
 #if defined(POLARSSL_ECDSA_C)
 #include "ecdsa.h"
 #endif
@@ -77,13 +82,28 @@
 } pk_type_t;
 
 /**
+ * \brief           Public key info
+ */
+typedef struct
+{
+    /** Public key type */
+    pk_type_t type;
+
+    /** Verify signature */
+    int (*verify_func)( void *ctx,
+                        const unsigned char *hash, const md_info_t *md_info,
+                        const unsigned char *sig, size_t sig_len );
+} pk_info_t;
+
+/**
  * \brief           Public key container
  */
 typedef struct
 {
-    pk_type_t   type;       /**< Public key type */
-    void *      data;       /**< Public key data */
-    int         dont_free;  /**< True if data must not be freed */
+    const pk_info_t *   info;       /**< Public key informations */
+    pk_type_t           type;       /**< Public key type (temporary) */
+    void *              data;       /**< Public key data */
+    int                 dont_free;  /**< True if data must not be freed */
 } pk_context;
 
 /**
@@ -157,4 +177,4 @@
 }
 #endif
 
-#endif /* pk.h */
+#endif /* POLARSSL_PK_H */
diff --git a/include/polarssl/pk_wrap.h b/include/polarssl/pk_wrap.h
new file mode 100644
index 0000000..7d2c3dd
--- /dev/null
+++ b/include/polarssl/pk_wrap.h
@@ -0,0 +1,47 @@
+/**
+ * \file pk.h
+ *
+ * \brief Public Key abstraction layer: wrapper functions
+ *
+ *  Copyright (C) 2006-2013, Brainspark B.V.
+ *
+ *  This file is part of PolarSSL (http://www.polarssl.org)
+ *  Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
+ *
+ *  All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef POLARSSL_PK_WRAP_H
+#define POLARSSL_PK_WRAP_H
+
+#include "config.h"
+
+#include "pk.h"
+
+#if defined(POLARSSL_RSA_C)
+extern const pk_info_t rsa_info;
+#endif
+
+#if defined(POLARSSL_ECP_C)
+extern const pk_info_t eckey_info;
+#endif
+
+#if defined(POLARSSL_ECDSA_C)
+extern const pk_info_t ecdsa_info;
+#endif
+
+#endif /* POLARSSL_PK_WRAP_H */