diff options
Diffstat (limited to 'lib/x509/output.c')
-rw-r--r-- | lib/x509/output.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/x509/output.c b/lib/x509/output.c index b9e183d37f..4fc37d6253 100644 --- a/lib/x509/output.c +++ b/lib/x509/output.c @@ -1404,6 +1404,60 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, } break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + gnutls_datum_t x, y; + gnutls_ecc_curve_t curve; + gnutls_digest_algorithm_t digest; + gnutls_gost_paramset_t param; + + err = + gnutls_pubkey_export_gost_raw2(pubkey, &curve, + &digest, + ¶m, + &x, &y, 0); + if (err < 0) + addf(str, "error: get_pk_gost_raw: %s\n", + gnutls_strerror(err)); + else { + addf(str, _("\t\tCurve:\t%s\n"), + gnutls_ecc_curve_get_name(curve)); + addf(str, _("\t\tDigest:\t%s\n"), + gnutls_digest_get_name(digest)); + addf(str, _("\t\tParamSet: %s\n"), + gnutls_gost_paramset_get_name(param)); + if (format == + GNUTLS_CRT_PRINT_FULL_NUMBERS) { + adds(str, _("\t\tX: ")); + _gnutls_buffer_hexprint(str, + x.data, + x.size); + adds(str, "\n"); + adds(str, _("\t\tY: ")); + _gnutls_buffer_hexprint(str, + y.data, + y.size); + adds(str, "\n"); + } else { + adds(str, _("\t\tX:\n")); + _gnutls_buffer_hexdump(str, x.data, + x.size, + "\t\t\t"); + adds(str, _("\t\tY:\n")); + _gnutls_buffer_hexdump(str, y.data, + y.size, + "\t\t\t"); + } + + gnutls_free(x.data); + gnutls_free(y.data); + + } + } + break; + default: break; } @@ -1770,6 +1824,15 @@ static void print_keyid(gnutls_buffer_st * str, gnutls_x509_crt_t cert) name = gnutls_ecc_curve_get_name(curve); bits = 0; + } else if (IS_GOSTEC(err)) { + gnutls_ecc_curve_t curve; + + err = gnutls_x509_crt_get_pk_gost_raw(cert, &curve, NULL, NULL, NULL, NULL); + if (err < 0) + return; + + name = gnutls_ecc_curve_get_name(curve); + bits = 0; } else { name = gnutls_pk_get_name(err); } |