static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) { unsigned char *m=NULL; int ret=0; size_t buf_len=0; const char *ktype = NULL; const BIGNUM *priv_key, *pub_key; if (ptype == 2) priv_key = x->priv_key; else priv_key = NULL; if (ptype > 0) pub_key = x->pub_key; else pub_key = NULL; if (ptype == 2) ktype = "Private-Key"; else if (ptype == 1) ktype = "Public-Key"; else ktype = "DSA-Parameters"; update_buflen(x->p, &buf_len); update_buflen(x->q, &buf_len); update_buflen(x->g, &buf_len); update_buflen(priv_key, &buf_len); update_buflen(pub_key, &buf_len); m=(unsigned char *)OPENSSL_malloc(buf_len+10); if (m == NULL) { DSAerr(DSA_F_DO_DSA_PRINT,ERR_R_MALLOC_FAILURE); goto err; } if (priv_key) { if(!BIO_indent(bp,off,128)) goto err; if (BIO_printf(bp,"%s: (%d bit)\n",ktype, BN_num_bits(x->p)) <= 0) goto err; } if (!ASN1_bn_print(bp,"priv:",priv_key,m,off)) goto err; if (!ASN1_bn_print(bp,"pub: ",pub_key,m,off)) goto err; if (!ASN1_bn_print(bp,"P: ",x->p,m,off)) goto err; if (!ASN1_bn_print(bp,"Q: ",x->q,m,off)) goto err; if (!ASN1_bn_print(bp,"G: ",x->g,m,off)) goto err; ret=1; err: if (m != NULL) OPENSSL_free(m); return(ret); }
static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) { uint8_t *m = NULL; int ret = 0; size_t buf_len = 0; const char *ktype = NULL; const BIGNUM *priv_key, *pub_key; priv_key = NULL; if (ptype == 2) { priv_key = x->priv_key; } pub_key = NULL; if (ptype > 0) { pub_key = x->pub_key; } ktype = "DSA-Parameters"; if (ptype == 2) { ktype = "Private-Key"; } else if (ptype == 1) { ktype = "Public-Key"; } update_buflen(x->p, &buf_len); update_buflen(x->q, &buf_len); update_buflen(x->g, &buf_len); update_buflen(priv_key, &buf_len); update_buflen(pub_key, &buf_len); m = (uint8_t *)OPENSSL_malloc(buf_len + 10); if (m == NULL) { OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE); goto err; } if (priv_key) { if (!BIO_indent(bp, off, 128) || BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0) { goto err; } } if (!ASN1_bn_print(bp, "priv:", priv_key, m, off) || !ASN1_bn_print(bp, "pub: ", pub_key, m, off) || !ASN1_bn_print(bp, "P: ", x->p, m, off) || !ASN1_bn_print(bp, "Q: ", x->q, m, off) || !ASN1_bn_print(bp, "G: ", x->g, m, off)) { goto err; } ret = 1; err: OPENSSL_free(m); return ret; }
static int dsa_sig_print(BIO *bp, const X509_ALGOR *sigalg, const ASN1_STRING *sig, int indent, ASN1_PCTX *pctx) { DSA_SIG *dsa_sig; const unsigned char *p; if (!sig) { if (BIO_puts(bp, "\n") <= 0) return 0; else return 1; } p = sig->data; dsa_sig = d2i_DSA_SIG(NULL, &p, sig->length); if (dsa_sig) { int rv = 0; size_t buf_len = 0; unsigned char *m=NULL; update_buflen(dsa_sig->r, &buf_len); update_buflen(dsa_sig->s, &buf_len); m = OPENSSL_malloc(buf_len+10); if (m == NULL) { DSAerr(DSA_F_DSA_SIG_PRINT,ERR_R_MALLOC_FAILURE); goto err; } if (BIO_write(bp, "\n", 1) != 1) goto err; if (!ASN1_bn_print(bp,"r: ",dsa_sig->r,m,indent)) goto err; if (!ASN1_bn_print(bp,"s: ",dsa_sig->s,m,indent)) goto err; rv = 1; err: if (m) OPENSSL_free(m); DSA_SIG_free(dsa_sig); return rv; } return X509_signature_dump(bp, sig, indent); }
static int dsa_sig_print(BIO *bp, const X509_ALGOR *sigalg, const ASN1_STRING *sig, int indent, ASN1_PCTX *pctx) { DSA_SIG *dsa_sig; const uint8_t *p; if (!sig) { return BIO_puts(bp, "\n") > 0; } p = sig->data; dsa_sig = d2i_DSA_SIG(NULL, &p, sig->length); if (dsa_sig == NULL) { return X509_signature_dump(bp, sig, indent); } int rv = 0; size_t buf_len = 0; uint8_t *m = NULL; update_buflen(dsa_sig->r, &buf_len); update_buflen(dsa_sig->s, &buf_len); m = OPENSSL_malloc(buf_len + 10); if (m == NULL) { OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE); goto err; } if (BIO_write(bp, "\n", 1) != 1 || !ASN1_bn_print(bp, "r: ", dsa_sig->r, m, indent) || !ASN1_bn_print(bp, "s: ", dsa_sig->s, m, indent)) { goto err; } rv = 1; err: OPENSSL_free(m); DSA_SIG_free(dsa_sig); return rv; }
static int do_dh_print(BIO *bp, const DH *x, int indent, ASN1_PCTX *ctx, int ptype) { unsigned char *m = NULL; int reason = ERR_R_BUF_LIB, ret = 0; size_t buf_len = 0; const char *ktype = NULL; BIGNUM *priv_key, *pub_key; if (ptype == 2) priv_key = x->priv_key; else priv_key = NULL; if (ptype > 0) pub_key = x->pub_key; else pub_key = NULL; update_buflen(x->p, &buf_len); if (buf_len == 0) { reason = ERR_R_PASSED_NULL_PARAMETER; goto err; } update_buflen(x->g, &buf_len); update_buflen(x->q, &buf_len); update_buflen(x->j, &buf_len); update_buflen(x->counter, &buf_len); update_buflen(pub_key, &buf_len); update_buflen(priv_key, &buf_len); if (ptype == 2) ktype = "DH Private-Key"; else if (ptype == 1) ktype = "DH Public-Key"; else ktype = "DH Parameters"; m = OPENSSL_malloc(buf_len + 10); if (m == NULL) { reason = ERR_R_MALLOC_FAILURE; goto err; } BIO_indent(bp, indent, 128); if (BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0) goto err; indent += 4; if (!ASN1_bn_print(bp, "private-key:", priv_key, m, indent)) goto err; if (!ASN1_bn_print(bp, "public-key:", pub_key, m, indent)) goto err; if (!ASN1_bn_print(bp, "prime:", x->p, m, indent)) goto err; if (!ASN1_bn_print(bp, "generator:", x->g, m, indent)) goto err; if (x->q && !ASN1_bn_print(bp, "subgroup order:", x->q, m, indent)) goto err; if (x->j && !ASN1_bn_print(bp, "subgroup factor:", x->j, m, indent)) goto err; if (x->seed) { int i; BIO_indent(bp, indent, 128); BIO_puts(bp, "seed:"); for (i = 0; i < x->seedlen; i++) { if ((i % 15) == 0) { if (BIO_puts(bp, "\n") <= 0 || !BIO_indent(bp, indent + 4, 128)) goto err; } if (BIO_printf(bp, "%02x%s", x->seed[i], ((i + 1) == x->seedlen) ? "" : ":") <= 0) goto err; } if (BIO_write(bp, "\n", 1) <= 0) return (0); } if (x->counter && !ASN1_bn_print(bp, "counter:", x->counter, m, indent)) goto err; if (x->length != 0) { BIO_indent(bp, indent, 128); if (BIO_printf(bp, "recommended-private-length: %d bits\n", (int)x->length) <= 0) goto err; } ret = 1; if (0) { err: DHerr(DH_F_DO_DH_PRINT, reason); } if (m != NULL) OPENSSL_free(m); return (ret); }
static int do_rsa_print(BIO *bp, const RSA *x, int off, int priv) { char *str; const char *s; unsigned char *m = NULL; int ret = 0, mod_len = 0; size_t buf_len = 0; update_buflen(x->n, &buf_len); update_buflen(x->e, &buf_len); if (priv) { update_buflen(x->d, &buf_len); update_buflen(x->p, &buf_len); update_buflen(x->q, &buf_len); update_buflen(x->dmp1, &buf_len); update_buflen(x->dmq1, &buf_len); update_buflen(x->iqmp, &buf_len); } m = (unsigned char *)OPENSSL_malloc(buf_len + 10); if (m == NULL) { RSAerr(RSA_F_DO_RSA_PRINT, ERR_R_MALLOC_FAILURE); goto err; } if (x->n != NULL) mod_len = BN_num_bits(x->n); if (!BIO_indent(bp, off, 128)) goto err; if (priv && x->d) { if (BIO_printf(bp, "Private-Key: (%d bit)\n", mod_len) <= 0) goto err; str = "modulus:"; s = "publicExponent:"; } else { if (BIO_printf(bp, "Public-Key: (%d bit)\n", mod_len) <= 0) goto err; str = "Modulus:"; s = "Exponent:"; } if (!ASN1_bn_print(bp, str, x->n, m, off)) goto err; if (!ASN1_bn_print(bp, s, x->e, m, off)) goto err; if (priv) { if (!ASN1_bn_print(bp, "privateExponent:", x->d, m, off)) goto err; if (!ASN1_bn_print(bp, "prime1:", x->p, m, off)) goto err; if (!ASN1_bn_print(bp, "prime2:", x->q, m, off)) goto err; if (!ASN1_bn_print(bp, "exponent1:", x->dmp1, m, off)) goto err; if (!ASN1_bn_print(bp, "exponent2:", x->dmq1, m, off)) goto err; if (!ASN1_bn_print(bp, "coefficient:", x->iqmp, m, off)) goto err; } ret = 1; err: if (m != NULL) OPENSSL_free(m); return (ret); }
static int do_dh_print(BIO *bp, const DH *x, int indent, ASN1_PCTX *ctx, int ptype) { unsigned char *m=NULL; int reason=ERR_R_BUF_LIB,ret=0; size_t buf_len=0; const char *ktype = NULL; BIGNUM *priv_key, *pub_key; if (ptype == 2) priv_key = x->priv_key; else priv_key = NULL; if (ptype > 0) pub_key = x->pub_key; else pub_key = NULL; update_buflen(x->p, &buf_len); if (buf_len == 0) { reason = ERR_R_PASSED_NULL_PARAMETER; goto err; } update_buflen(x->g, &buf_len); update_buflen(pub_key, &buf_len); update_buflen(priv_key, &buf_len); if (ptype == 2) ktype = "PKCS#3 DH Private-Key"; else if (ptype == 1) ktype = "PKCS#3 DH Public-Key"; else ktype = "PKCS#3 DH Parameters"; m= OPENSSL_malloc(buf_len+10); if (m == NULL) { reason=ERR_R_MALLOC_FAILURE; goto err; } BIO_indent(bp, indent, 128); if (BIO_printf(bp,"%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0) goto err; indent += 4; if (!ASN1_bn_print(bp,"private-key:",priv_key,m,indent)) goto err; if (!ASN1_bn_print(bp,"public-key:",pub_key,m,indent)) goto err; if (!ASN1_bn_print(bp,"prime:",x->p,m,indent)) goto err; if (!ASN1_bn_print(bp,"generator:",x->g,m,indent)) goto err; if (x->length != 0) { BIO_indent(bp, indent, 128); if (BIO_printf(bp,"recommended-private-length: %d bits\n", (int)x->length) <= 0) goto err; } ret=1; if (0) { err: DHerr(DH_F_DO_DH_PRINT,reason); } if (m != NULL) OPENSSL_free(m); return(ret); }
static int do_rsa_print(BIO *out, const RSA *rsa, int off, int include_private) { char *str; const char *s; uint8_t *m = NULL; int ret = 0, mod_len = 0; size_t buf_len = 0; update_buflen(rsa->n, &buf_len); update_buflen(rsa->e, &buf_len); if (include_private) { update_buflen(rsa->d, &buf_len); update_buflen(rsa->p, &buf_len); update_buflen(rsa->q, &buf_len); update_buflen(rsa->dmp1, &buf_len); update_buflen(rsa->dmq1, &buf_len); update_buflen(rsa->iqmp, &buf_len); if (rsa->additional_primes != NULL) { size_t i; for (i = 0; i < sk_RSA_additional_prime_num(rsa->additional_primes); i++) { const RSA_additional_prime *ap = sk_RSA_additional_prime_value(rsa->additional_primes, i); update_buflen(ap->prime, &buf_len); update_buflen(ap->exp, &buf_len); update_buflen(ap->coeff, &buf_len); } } } m = (uint8_t *)OPENSSL_malloc(buf_len + 10); if (m == NULL) { OPENSSL_PUT_ERROR(EVP, do_rsa_print, ERR_R_MALLOC_FAILURE); goto err; } if (rsa->n != NULL) { mod_len = BN_num_bits(rsa->n); } if (!BIO_indent(out, off, 128)) { goto err; } if (include_private && rsa->d) { if (BIO_printf(out, "Private-Key: (%d bit)\nversion: %ld\n", mod_len, rsa->version) <= 0) { goto err; } str = "modulus:"; s = "publicExponent:"; } else { if (BIO_printf(out, "Public-Key: (%d bit)\n", mod_len) <= 0) { goto err; } str = "Modulus:"; s = "Exponent:"; } if (!ASN1_bn_print(out, str, rsa->n, m, off) || !ASN1_bn_print(out, s, rsa->e, m, off)) { goto err; } if (include_private) { if (!ASN1_bn_print(out, "privateExponent:", rsa->d, m, off) || !ASN1_bn_print(out, "prime1:", rsa->p, m, off) || !ASN1_bn_print(out, "prime2:", rsa->q, m, off) || !ASN1_bn_print(out, "exponent1:", rsa->dmp1, m, off) || !ASN1_bn_print(out, "exponent2:", rsa->dmq1, m, off) || !ASN1_bn_print(out, "coefficient:", rsa->iqmp, m, off)) { goto err; } if (rsa->additional_primes != NULL && sk_RSA_additional_prime_num(rsa->additional_primes) > 0) { size_t i; if (BIO_printf(out, "otherPrimeInfos:\n") <= 0) { goto err; } for (i = 0; i < sk_RSA_additional_prime_num(rsa->additional_primes); i++) { const RSA_additional_prime *ap = sk_RSA_additional_prime_value(rsa->additional_primes, i); if (BIO_printf(out, "otherPrimeInfo (prime %u):\n", (unsigned)(i + 3)) <= 0 || !ASN1_bn_print(out, "prime:", ap->prime, m, off) || !ASN1_bn_print(out, "exponent:", ap->exp, m, off) || !ASN1_bn_print(out, "coeff:", ap->coeff, m, off)) { goto err; } } } } ret = 1; err: OPENSSL_free(m); return ret; }