p = malloc(len);
p = smalloc(len);
static char *dss_fmtkey(void *key) {    struct dss_key *dss = (struct dss_key *)key;    char *p;    int len, i, pos, nibbles;    static const char hex[] = "0123456789abcdef";    if (!dss->p)        return NULL;    len = 8 + 4 + 1;                   /* 4 x "0x", punctuation, \0 */    len += 4 * (dss->p[0] + dss->q[0] + dss->g[0] + dss->y[0]);   /* digits */    p = malloc(len);    if (!p) return NULL;    pos = 0;    pos += sprintf(p+pos, "0x");    nibbles = (3 + ssh1_bignum_bitcount(dss->p))/4; if (nibbles<1) nibbles=1;    for (i=nibbles; i-- ;)        p[pos++] = hex[(bignum_byte(dss->p, i/2) >> (4*(i%2))) & 0xF];    pos += sprintf(p+pos, ",0x");    nibbles = (3 + ssh1_bignum_bitcount(dss->q))/4; if (nibbles<1) nibbles=1;    for (i=nibbles; i-- ;)        p[pos++] = hex[(bignum_byte(dss->q, i/2) >> (4*(i%2))) & 0xF];    pos += sprintf(p+pos, ",0x");    nibbles = (3 + ssh1_bignum_bitcount(dss->g))/4; if (nibbles<1) nibbles=1;    for (i=nibbles; i-- ;)        p[pos++] = hex[(bignum_byte(dss->g, i/2) >> (4*(i%2))) & 0xF];    pos += sprintf(p+pos, ",0x");    nibbles = (3 + ssh1_bignum_bitcount(dss->y))/4; if (nibbles<1) nibbles=1;    for (i=nibbles; i-- ;)        p[pos++] = hex[(bignum_byte(dss->y, i/2) >> (4*(i%2))) & 0xF];    p[pos] = '\0';    return p;}