diff --git a/include/pcp/mgmt.h b/include/pcp/mgmt.h index 6478c0a..a469de6 100644 --- a/include/pcp/mgmt.h +++ b/include/pcp/mgmt.h @@ -213,6 +213,9 @@ Buffer *pcp_export_yaml_pub(pcp_key_t *sk); /* export public key in perl format */ Buffer *pcp_export_perl_pub(pcp_key_t *sk); +/* export public key in C format */ +Buffer *pcp_export_c_pub(pcp_key_t *sk); + /* export secret key */ Buffer *pcp_export_secret(pcp_key_t *sk, char *passphrase); diff --git a/libpcp/mgmt.c b/libpcp/mgmt.c index d83b03b..92d1812 100644 --- a/libpcp/mgmt.c +++ b/libpcp/mgmt.c @@ -450,6 +450,45 @@ Buffer *pcp_export_perl_pub(pcp_key_t *sk) { return b; } +void pcp_export_c_pub_var(Buffer *b, char *var, unsigned char *d, size_t len) { + buffer_add_str(b, "unsigned char %s[%ld] = {\n ", var, len); + size_t i; + for(i=0; itm_year+1900, c->tm_mon+1, c->tm_mday, + c->tm_hour, c->tm_min, c->tm_sec); + buffer_add_str(b, " */\n"); + + buffer_add_str(b, "char id[] = \"%s\";\n", sk->id); + buffer_add_str(b, "char owner[] = \"%s\";\n", sk->owner); + buffer_add_str(b, "char mail[] = \"%s\";\n", sk->mail); + buffer_add_str(b, "uint64_t ctime = %ld;\n", sk->ctime); + buffer_add_str(b, "uint32_t version = 0x%08x;\n", sk->version); + buffer_add_str(b, "uint32_t serial = 0x%08x;\n", sk->serial); + buffer_add_str(b, "char[] type = \"public\";\n"); + + pcp_export_c_pub_var(b, "cryptpub", sk->pub, 32); + pcp_export_c_pub_var(b, "sigpub", sk->pub, 32); + pcp_export_c_pub_var(b, "masterpub", sk->pub, 32); + + return b; +} + Buffer *pcp_export_pbp_pub(pcp_key_t *sk) { struct tm *v, *c; unsigned char *signature = NULL;