data.type = GNUTLS_KEYGEN_SEED;
data.data = seed;
data.size = seed_size;
+
ret = gnutls_x509_privkey_generate2(key, key_type, bits, GNUTLS_PRIVKEY_FLAG_PROVABLE, &data, 1);
} else {
if (provable)
if (!key)
return;
-
if (!cinfo->pkcs8) {
/* Only print private key parameters when an unencrypted
* format is used */
ret = gnutls_x509_privkey_export(key, outcert_format,
lbuffer, &size);
if (ret < 0) {
- fprintf(stderr, "privkey_export: %s",
+ fprintf(stderr, "privkey_export: %s\n",
gnutls_strerror(ret));
exit(1);
}
+
+ if (gnutls_x509_privkey_get_seed(key, NULL, NULL, 0) != GNUTLS_E_INVALID_REQUEST) {
+ gnutls_x509_privkey_set_flags(key, GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
+
+ fwrite(lbuffer, 1, size, outfile);
+
+ size = lbuffer_size;
+ ret = gnutls_x509_privkey_export(key, outcert_format,
+ lbuffer, &size);
+ if (ret < 0) {
+ fprintf(stderr, "privkey_export: %s\n",
+ gnutls_strerror(ret));
+ exit(1);
+ }
+ }
+
} else {
unsigned int flags = 0;
const char *pass;
exit(1);
}
- if (outcert_format == GNUTLS_X509_FMT_PEM)
- privkey_info_int(cinfo, key);
+ print_private_key(cinfo, key);
ret = gnutls_x509_privkey_verify_params(key);
if (ret < 0)
fprintf(outfile,
"\n** Private key parameters validation failed **\n\n");
- size = lbuffer_size;
- ret =
- gnutls_x509_privkey_export(key, outcert_format, lbuffer, &size);
- if (ret < 0) {
- fprintf(stderr, "export error: %s\n", gnutls_strerror(ret));
- exit(1);
- }
-
- fwrite(lbuffer, 1, size, outfile);
-
gnutls_x509_privkey_deinit(key);
}