Add eckey to ecdsa conversion in the PK layer
diff --git a/library/pk.c b/library/pk.c
index 3755fbc..c5583c3 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -132,6 +132,42 @@
return( 0 );
}
+#if defined(POLARSSL_ECDSA_C)
+/*
+ * Convert generic EC context to ECDSA
+ */
+int pk_ec_to_ecdsa( pk_context *ctx )
+{
+ ecp_keypair *eckey;
+ ecdsa_context *ecdsa;
+
+ if( ctx->type == POLARSSL_PK_ECDSA )
+ return( 0 );
+
+ if( ctx->type != POLARSSL_PK_ECKEY )
+ return( POLARSSL_ERR_PK_TYPE_MISMATCH );
+
+ eckey = (ecp_keypair *) ctx->data;
+
+ if( ( ecdsa = polarssl_malloc( sizeof( ecdsa_context ) ) ) == NULL )
+ return( POLARSSL_ERR_PK_MALLOC_FAILED );
+
+ ecdsa_init( ecdsa );
+
+ /* struct ecdsa_context begins the same as struct ecp_keypair */
+ memcpy( ecdsa, eckey, sizeof( ecp_keypair ) );
+
+ if( ! ctx->dont_free )
+ polarssl_free( eckey );
+
+ ctx->dont_free = 0;
+ ctx->type = POLARSSL_PK_ECDSA;
+ ctx->data = ecdsa;
+
+ return( 0 );
+}
+#endif /* POLARSSL_ECDSA_C */
+
#if defined(POLARSSL_RSA_C)
/*
* Wrap an RSA context in a PK context