Key app updated to support pk_context / ECP keypairs
diff --git a/programs/pkey/key_app.c b/programs/pkey/key_app.c
index bea996a..de5f513 100644
--- a/programs/pkey/key_app.c
+++ b/programs/pkey/key_app.c
@@ -37,6 +37,19 @@
#include "polarssl/rsa.h"
#include "polarssl/x509.h"
+#if !defined(POLARSSL_BIGNUM_C) || \
+ !defined(POLARSSL_PK_PARSE_C) || !defined(POLARSSL_FS_IO)
+int main( int argc, char *argv[] )
+{
+ ((void) argc);
+ ((void) argv);
+
+ printf("POLARSSL_BIGNUM_C and/or "
+ "POLARSSL_PK_PARSE_C and/or POLARSSL_FS_IO not defined.\n");
+ return( 0 );
+}
+#else
+
#define MODE_NONE 0
#define MODE_PRIVATE 1
#define MODE_PUBLIC 2
@@ -67,22 +80,10 @@
" password_file=%%s default: \"\"\n" \
"\n"
-#if !defined(POLARSSL_BIGNUM_C) || !defined(POLARSSL_RSA_C) || \
- !defined(POLARSSL_X509_PARSE_C) || !defined(POLARSSL_FS_IO)
-int main( int argc, char *argv[] )
-{
- ((void) argc);
- ((void) argv);
-
- printf("POLARSSL_BIGNUM_C and/or POLARSSL_RSA_C and/or "
- "POLARSSL_X509_PARSE_C and/or POLARSSL_FS_IO not defined.\n");
- return( 0 );
-}
-#else
int main( int argc, char *argv[] )
{
int ret = 0;
- rsa_context rsa;
+ pk_context pk;
char buf[1024];
int i;
char *p, *q;
@@ -90,7 +91,7 @@
/*
* Set to sane values
*/
- memset( &rsa, 0, sizeof( rsa_context ) );
+ pk_init( &pk );
memset( buf, 0, 1024 );
if( argc == 0 )
@@ -164,15 +165,12 @@
printf( "\n . Loading the private key ..." );
fflush( stdout );
- ret = x509parse_keyfile_rsa( &rsa, opt.filename, opt.password );
+ ret = pk_parse_keyfile( &pk, opt.filename, opt.password );
if( ret != 0 )
{
-#ifdef POLARSSL_ERROR_C
polarssl_strerror( ret, buf, 1024 );
-#endif
- printf( " failed\n ! x509parse_key_rsa returned %d - %s\n\n", ret, buf );
- rsa_free( &rsa );
+ printf( " failed\n ! pk_parse_keyfile returned %d - %s\n\n", ret, buf );
goto exit;
}
@@ -181,15 +179,38 @@
/*
* 1.2 Print the key
*/
- printf( " . Key information ...\n" );
- mpi_write_file( "N: ", &rsa.N, 16, NULL );
- mpi_write_file( "E: ", &rsa.E, 16, NULL );
- mpi_write_file( "D: ", &rsa.D, 16, NULL );
- mpi_write_file( "P: ", &rsa.P, 16, NULL );
- mpi_write_file( "Q: ", &rsa.Q, 16, NULL );
- mpi_write_file( "DP: ", &rsa.DP, 16, NULL );
- mpi_write_file( "DQ: ", &rsa.DQ, 16, NULL );
- mpi_write_file( "QP: ", &rsa.QP, 16, NULL );
+#if defined(POLARSSL_RSA_C)
+ if( pk_can_do( &pk, POLARSSL_PK_RSA ) )
+ {
+ rsa_context *rsa = pk_rsa( pk );
+ printf( " . Key information ...\n" );
+ mpi_write_file( "N: ", &rsa->N, 16, NULL );
+ mpi_write_file( "E: ", &rsa->E, 16, NULL );
+ mpi_write_file( "D: ", &rsa->D, 16, NULL );
+ mpi_write_file( "P: ", &rsa->P, 16, NULL );
+ mpi_write_file( "Q: ", &rsa->Q, 16, NULL );
+ mpi_write_file( "DP: ", &rsa->DP, 16, NULL );
+ mpi_write_file( "DQ: ", &rsa->DQ, 16, NULL );
+ mpi_write_file( "QP: ", &rsa->QP, 16, NULL );
+ }
+ else
+#endif
+#if defined(POLARSSL_ECP_C)
+ if( pk_can_do( &pk, POLARSSL_PK_ECKEY ) )
+ {
+ ecp_keypair *ecp = pk_ec( pk );
+ printf( " . Key information ...\n" );
+ mpi_write_file( "Q(X): ", &ecp->Q.X, 16, NULL );
+ mpi_write_file( "Q(Y): ", &ecp->Q.Y, 16, NULL );
+ mpi_write_file( "Q(Z): ", &ecp->Q.Z, 16, NULL );
+ mpi_write_file( "D : ", &ecp->d , 16, NULL );
+ }
+ else
+#endif
+ {
+ printf("Do not know how to print key information for this type\n" );
+ goto exit;
+ }
}
else if( opt.mode == MODE_PUBLIC )
{
@@ -199,33 +220,49 @@
printf( "\n . Loading the public key ..." );
fflush( stdout );
- ret = x509parse_public_keyfile_rsa( &rsa, opt.filename );
+ ret = pk_parse_public_keyfile( &pk, opt.filename );
if( ret != 0 )
{
-#ifdef POLARSSL_ERROR_C
polarssl_strerror( ret, buf, 1024 );
-#endif
- printf( " failed\n ! x509parse_public_key_rsa returned %d - %s\n\n", ret, buf );
- rsa_free( &rsa );
+ printf( " failed\n ! pk_parse_public_keyfile returned %d - %s\n\n", ret, buf );
goto exit;
}
printf( " ok\n" );
- /*
- * 1.2 Print the key
- */
- printf( " . Key information ...\n" );
- mpi_write_file( "N: ", &rsa.N, 16, NULL );
- mpi_write_file( "E: ", &rsa.E, 16, NULL );
+#if defined(POLARSSL_RSA_C)
+ if( pk_can_do( &pk, POLARSSL_PK_RSA ) )
+ {
+ rsa_context *rsa = pk_rsa( pk );
+ printf( " . Key information ...\n" );
+ mpi_write_file( "N: ", &rsa->N, 16, NULL );
+ mpi_write_file( "E: ", &rsa->E, 16, NULL );
+ }
+ else
+#endif
+#if defined(POLARSSL_ECP_C)
+ if( pk_can_do( &pk, POLARSSL_PK_ECKEY ) )
+ {
+ ecp_keypair *ecp = pk_ec( pk );
+ printf( " . Key information ...\n" );
+ mpi_write_file( "Q(X): ", &ecp->Q.X, 16, NULL );
+ mpi_write_file( "Q(Y): ", &ecp->Q.Y, 16, NULL );
+ mpi_write_file( "Q(Z): ", &ecp->Q.Z, 16, NULL );
+ }
+ else
+#endif
+ {
+ printf("Do not know how to print key information for this type\n" );
+ goto exit;
+ }
}
else
goto usage;
exit:
- rsa_free( &rsa );
+ pk_free( &pk );
#if defined(_WIN32)
printf( " + Press Enter to exit this program.\n" );
@@ -234,5 +271,4 @@
return( ret );
}
-#endif /* POLARSSL_BIGNUM_C && POLARSSL_RSA_C &&
- POLARSSL_X509_PARSE_C && POLARSSL_FS_IO */
+#endif /* POLARSSL_BIGNUM_C && POLARSSL_PK_PARSE_C && POLARSSL_FS_IO */