aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-01-29 18:06:34 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-01-29 18:06:34 +0000
commit87c90bd928e494ebd5d7f9db3386f6fc46211c43 (patch)
tree263a1b9c6c6c4debd7a12cff05588e3570fa6261 /src/libutil
parent40c399d03f86dd3282afa038e608e358097651ae (diff)
downloadrspamd-87c90bd928e494ebd5d7f9db3386f6fc46211c43.tar.gz
rspamd-87c90bd928e494ebd5d7f9db3386f6fc46211c43.zip
Add routine to print keys.
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/http.c50
-rw-r--r--src/libutil/http.h19
2 files changed, 69 insertions, 0 deletions
diff --git a/src/libutil/http.c b/src/libutil/http.c
index c00d2c40c..9a4738932 100644
--- a/src/libutil/http.c
+++ b/src/libutil/http.c
@@ -1697,6 +1697,56 @@ rspamd_http_connection_gen_key (void)
return (gpointer)kp;
}
+static void
+rspamd_http_print_key_component (guchar *data, gsize datalen,
+ GString *res, guint how, const gchar *description)
+{
+ gchar *b32;
+
+ if (how & RSPAMD_KEYPAIR_HUMAN) {
+ g_string_append_printf (res, "%s: ", description);
+ }
+
+ if (how & RSPAMD_KEYPAIR_BASE32) {
+ b32 = rspamd_encode_base32 (data, datalen);
+ g_string_append_printf (res, "%s", b32);
+ g_free (b32);
+ }
+ else {
+ g_string_append_len (res, data, datalen);
+ }
+
+ if (how & RSPAMD_KEYPAIR_HUMAN) {
+ g_string_append_c (res, '\n');
+ }
+}
+
+GString *
+rspamd_http_connection_print_key (gpointer key, guint how)
+{
+ struct rspamd_http_keypair *kp = (struct rspamd_http_keypair *)key;
+ GString *res;
+
+ g_assert (key != NULL);
+
+ res = g_string_new (NULL);
+
+ if ((how & RSPAMD_KEYPAIR_PUBKEY)) {
+ rspamd_http_print_key_component (kp->pk, sizeof (kp->pk), res, how,
+ "Public key");
+ }
+ if ((how & RSPAMD_KEYPAIR_PRIVKEY)) {
+ rspamd_http_print_key_component (kp->sk, sizeof (kp->sk), res, how,
+ "Private key");
+ }
+ if ((how & RSPAMD_KEYPAIR_ID)) {
+ rspamd_http_print_key_component (kp->sk, sizeof (kp->sk), res, how,
+ "Key ID");
+ }
+
+ return res;
+}
+
void
rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
gpointer key)
diff --git a/src/libutil/http.h b/src/libutil/http.h
index 589b38245..5183d4374 100644
--- a/src/libutil/http.h
+++ b/src/libutil/http.h
@@ -169,6 +169,25 @@ gpointer rspamd_http_connection_gen_key (void);
*/
void rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
gpointer key);
+
+/** Print pubkey */
+#define RSPAMD_KEYPAIR_PUBKEY 0x1
+/** Print secret key */
+#define RSPAMD_KEYPAIR_PRIVKEY 0x2
+/** Print key id */
+#define RSPAMD_KEYPAIR_ID 0x4
+/** Encode output with base 32 */
+#define RSPAMD_KEYPAIR_BASE32 0x8
+/** Human readable output */
+#define RSPAMD_KEYPAIR_HUMAN 0x16
+/**
+ * Print keypair encoding it if needed
+ * @param key key to print
+ * @param how flags that specifies printing behaviour
+ * @return newly allocated string with keypair
+ */
+GString *rspamd_http_connection_print_key (gpointer key, guint how);
+
/**
* Release key pointed by an opaque pointer
* @param key opaque key structure