+#if DEBUG
+static char *
+to_hex(char * dst, const void * src, size_t size)
+{
+ int notleading = 0;
+
+ if ((size * 2) > HEXBUF_LEN) return NULL;
+
+ uint8_t * buf = (uint8_t *)src;
+ register char *chp = dst;
+ *dst = '\0';
+ if (size != 0) do {
+ if(notleading || *buf != '\0') {
+ if(!notleading && (*buf & 0xf0) == 0) {
+ sprintf(chp, "%.1x", * (unsigned char *) src);
+ chp += 1;
+ }
+ else {
+ sprintf(chp, "%.2x", * (unsigned char *) src);
+ chp += 2;
+ }
+ notleading = 1;
+ }
+ ++src;
+ } while (--size != 0);
+ return dst;
+}
+#endif // DEBUG
+
+static char * sel_to_char(uint64_t sel)
+{
+ switch (sel) {
+ case SERVICE_STASH_SET_KEY:
+ return "set_key";
+ case SERVICE_STASH_GET_KEY:
+ return "get_key";
+ case SERVICE_STASH_BLOB:
+ return "stash_blob";
+ case SERVICE_KB_LOAD:
+ return "kb_load";
+ case SERVICE_KB_UNLOCK:
+ return "kb_unlock";
+ case SERVICE_KB_LOCK:
+ return "kb_lock";
+ case SERVICE_KB_CHANGE_SECRET:
+ return "kb_change_secret";
+ case SERVICE_KB_CREATE:
+ return "kb_create";
+ case SERVICE_KB_IS_LOCKED:
+ return "kb_is_locked";
+ case SERVICE_KB_RESET:
+ return "kb_reset";
+ default:
+ return "unknown";
+ }
+}
+
+static char * err_to_char(int err)
+{
+ switch (err) {
+ case KB_Success:
+ return "success";
+ case KB_GeneralError:
+ return "general error";
+ case KB_BagNotFound:
+ return "bag not found";
+ case KB_BagError:
+ return "bag error";
+ case KB_BagNotLoaded:
+ return "bag not loaded";
+ case KB_BagExists:
+ return "bag exists";
+ case KB_InvalidSession:
+ return "invalid session";
+ default:
+ return "";
+ }
+}
+