mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-31 11:41:32 +01:00
New debug functions log_printcanon and log_printsexp.
* common/sexputil.c (sexp_to_string, canon_sexp_to_string): New. (log_printcanon, log_printsexp): New. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
0f0e0559f9
commit
cb6a64bb78
@ -857,6 +857,19 @@ log_printhex (const char *text, const void *buffer, size_t length)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
void
|
||||
log_printcanon () {}
|
||||
is found in sexputils.c
|
||||
*/
|
||||
|
||||
/*
|
||||
void
|
||||
log_printsexp () {}
|
||||
is found in sexputils.c
|
||||
*/
|
||||
|
||||
|
||||
void
|
||||
log_clock (const char *string)
|
||||
{
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* sexputil.c - Utility functions for S-expressions.
|
||||
* Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2013 Werner Koch
|
||||
*
|
||||
* This file is part of GnuPG.
|
||||
*
|
||||
@ -46,6 +47,91 @@
|
||||
#include "sexp-parse.h"
|
||||
|
||||
|
||||
/* Return a malloced string with the S-expression CANON in advanced
|
||||
format. Returns NULL on error. */
|
||||
static char *
|
||||
sexp_to_string (gcry_sexp_t sexp)
|
||||
{
|
||||
size_t n;
|
||||
char *result;
|
||||
|
||||
if (!sexp)
|
||||
return NULL;
|
||||
n = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_ADVANCED, NULL, 0);
|
||||
if (!n)
|
||||
return NULL;
|
||||
result = xtrymalloc (n);
|
||||
if (!result)
|
||||
return NULL;
|
||||
n = gcry_sexp_sprint (sexp, GCRYSEXP_FMT_ADVANCED, result, n);
|
||||
if (!n)
|
||||
BUG ();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* Return a malloced string with the S-expression CANON in advanced
|
||||
format. Returns NULL on error. */
|
||||
char *
|
||||
canon_sexp_to_string (const unsigned char *canon, size_t canonlen)
|
||||
{
|
||||
size_t n;
|
||||
gcry_sexp_t sexp;
|
||||
char *result;
|
||||
|
||||
n = gcry_sexp_canon_len (canon, canonlen, NULL, NULL);
|
||||
if (!n)
|
||||
return NULL;
|
||||
if (gcry_sexp_sscan (&sexp, NULL, canon, n))
|
||||
return NULL;
|
||||
result = sexp_to_string (sexp);
|
||||
gcry_sexp_release (sexp);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* Print the canonical encoded S-expression in SEXP in advanced
|
||||
format. SEXPLEN may be passed as 0 is SEXP is known to be valid.
|
||||
With TEXT of NULL print just the raw S-expression, with TEXT just
|
||||
an empty string, print a trailing linefeed, otherwise print an
|
||||
entire debug line. */
|
||||
void
|
||||
log_printcanon (const char *text, const unsigned char *sexp, size_t sexplen)
|
||||
{
|
||||
if (text && *text)
|
||||
log_debug ("%s ", text);
|
||||
if (sexp)
|
||||
{
|
||||
char *buf = canon_sexp_to_string (sexp, sexplen);
|
||||
log_printf ("%s", buf? buf : "[invalid S-expression]");
|
||||
xfree (buf);
|
||||
}
|
||||
if (text)
|
||||
log_printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
/* Print the gcryp S-expression in SEXP in advanced format. With TEXT
|
||||
of NULL print just the raw S-expression, with TEXT just an empty
|
||||
string, print a trailing linefeed, otherwise print an entire debug
|
||||
line. */
|
||||
void
|
||||
log_printsexp (const char *text, gcry_sexp_t sexp)
|
||||
{
|
||||
if (text && *text)
|
||||
log_debug ("%s ", text);
|
||||
if (sexp)
|
||||
{
|
||||
char *buf = sexp_to_string (sexp);
|
||||
log_printf ("%s", buf? buf : "[invalid S-expression]");
|
||||
xfree (buf);
|
||||
}
|
||||
if (text)
|
||||
log_printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
/* Helper function to create a canonical encoded S-expression from a
|
||||
Libgcrypt S-expression object. The function returns 0 on success
|
||||
and the malloced canonical S-expression is stored at R_BUFFER and
|
||||
|
@ -167,6 +167,11 @@ gpg_error_t b64dec_finish (struct b64state *state);
|
||||
|
||||
|
||||
/*-- sexputil.c */
|
||||
char *canon_sexp_to_string (const unsigned char *canon, size_t canonlen);
|
||||
void log_printcanon (const char *text,
|
||||
const unsigned char *sexp, size_t sexplen);
|
||||
void log_printsexp (const char *text, gcry_sexp_t sexp);
|
||||
|
||||
gpg_error_t make_canon_sexp (gcry_sexp_t sexp,
|
||||
unsigned char **r_buffer, size_t *r_buflen);
|
||||
gpg_error_t make_canon_sexp_pad (gcry_sexp_t sexp, int secure,
|
||||
|
Loading…
x
Reference in New Issue
Block a user