freeswitch/libs/libzrtp/third_party/bnlib/bnprint.c

77 lines
1.5 KiB
C

/*
* Copyright (c) 1995 Colin Plumb. All rights reserved.
* For licensing and other legal details, see the file legal.c.
*
* bnprint.c - Print a bignum, for debugging purposes.
*/
#ifndef HAVE_CONFIG_H
#define HAVE_CONFIG_H 0
#endif
#if HAVE_CONFIG_H
#include "bnconfig.h"
#endif
/*
* Some compilers complain about #if FOO if FOO isn't defined,
* so do the ANSI-mandated thing explicitly...
*/
#ifndef NO_STRING_H
#define NO_STRING_H 0
#endif
#ifndef HAVE_STRINGS_H
#define HAVE_STRINGS_H 0
#endif
#include <stdio.h>
#if !NO_STRING_H
#include <string.h>
#elif HAVE_STRINGS_H
#include <strings.h>
#endif
#include "bn.h"
#include "bnprint.h"
#include "kludge.h"
int
bnPrint(FILE *f, char const *prefix, struct BigNum const *bn,
char const *suffix)
{
unsigned char temp[32]; /* How much to print on one line */
unsigned len;
size_t i;
if (prefix && fputs(prefix, f) < 0)
return EOF;
len = (bnBits(bn) + 7)/ 8;
if (!len) {
if (putc('0', f) < 0)
return EOF;
} else {
while (len > sizeof(temp)) {
len -= sizeof(temp);
bnExtractBigBytes(bn, temp, len, sizeof(temp));
for (i = 0; i < sizeof(temp); i++)
if (fprintf(f, "%02X", temp[i]) < 0)
return EOF;
if (putc('\\', f) < 0 || putc('\n', f) < 0)
return EOF;
if (prefix) {
i = strlen(prefix);
while (i--)
if (putc(' ', f) < 0)
return EOF;
}
}
bnExtractBigBytes(bn, temp, 0, len);
for (i = 0; i < len; i++)
if (fprintf(f, "%02X", temp[i]) < 0)
return EOF;
}
return suffix ? fputs(suffix, f) : 0;
}