TinyCrypt PK write: Impl. PK writing helpers for TC-based PK context
diff --git a/library/pkwrite.c b/library/pkwrite.c
index dcbc86c..f816f0e 100644
--- a/library/pkwrite.c
+++ b/library/pkwrite.c
@@ -103,6 +103,56 @@
}
#endif /* MBEDTLS_RSA_C */
+#if defined(MBEDTLS_USE_TINYCRYPT)
+static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start,
+ mbedtls_pk_context const *key )
+{
+ size_t const len = 1 + 2 * NUM_ECC_BYTES;
+ mbedtls_uecc_keypair const * const uecc = mbedtls_pk_uecc( *key );
+
+ if( *p < start || (size_t)( *p - start ) < len )
+ return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL );
+
+ *p -= len;
+ (*p)[0] = 0x04;
+ memcpy( *p + 1, uecc->public_key, 2 * NUM_ECC_BYTES );
+
+ return( (int) len );
+}
+
+static int pk_write_ec_privkey( unsigned char **p, unsigned char *start,
+ mbedtls_pk_context const *key )
+{
+ mbedtls_uecc_keypair const * const uecc = mbedtls_pk_uecc( *key );
+ return( mbedtls_asn1_write_octet_string(
+ p, start,
+ uecc->private_key,
+ NUM_ECC_BYTES ) );
+}
+
+/*
+ * ECParameters ::= CHOICE {
+ * namedCurve OBJECT IDENTIFIER
+ * }
+ */
+static int pk_write_ec_param( unsigned char **p, unsigned char *start,
+ mbedtls_pk_context const *key )
+{
+ int ret;
+ size_t len = 0;
+ const char *oid;
+ size_t oid_len;
+ ((void) key);
+
+ if( ( ret = mbedtls_oid_get_oid_by_ec_grp( MBEDTLS_UECC_DP_SECP256R1,
+ &oid, &oid_len ) ) != 0 )
+ return( ret );
+
+ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( p, start, oid, oid_len ) );
+
+ return( (int) len );
+}
+#else /* MBEDTLS_USE_TINYCRYPT */
#if defined(MBEDTLS_ECP_C)
/*
* EC public key is an EC point
@@ -160,6 +210,7 @@
return( (int) len );
}
#endif /* MBEDTLS_ECP_C */
+#endif /* MBEDTLS_USE_TINYCRYPT */
int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start,
const mbedtls_pk_context *key )