dst->params_size = src->params_size;
dst->pk_algorithm = src->pk_algorithm;
-
- switch( dst->pk_algorithm) {
- case GNUTLS_PK_DSA:
- ret = _encode_dsa( &dst->key, dst->params);
- if (ret < 0) {
- gnutls_assert();
- return ret;
- }
- break;
- case GNUTLS_PK_RSA:
- ret = _encode_rsa( &dst->key, dst->params);
- if (ret < 0) {
+ dst->crippled = src->crippled;
+
+ if (!src->crippled) {
+ switch( dst->pk_algorithm) {
+ case GNUTLS_PK_DSA:
+ ret = _encode_dsa( &dst->key, dst->params);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ break;
+ case GNUTLS_PK_RSA:
+ ret = _encode_rsa( &dst->key, dst->params);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ break;
+ default:
gnutls_assert();
- return ret;
- }
- break;
- default:
- gnutls_assert();
- return GNUTLS_E_INVALID_REQUEST;
+ return GNUTLS_E_INVALID_REQUEST;
+ }
}
return 0;
return GNUTLS_E_MPI_SCAN_FAILED;
}
- ret = _encode_rsa( &key->key, key->params);
- if (ret < 0) {
- gnutls_assert();
- FREE_RSA_PRIVATE_PARAMS;
- return ret;
+ if (!key->crippled) {
+ ret = _encode_rsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ FREE_RSA_PRIVATE_PARAMS;
+ return ret;
+ }
}
key->params_size = RSA_PRIVATE_PARAMS;
return GNUTLS_E_MPI_SCAN_FAILED;
}
- ret = _encode_dsa( &key->key, key->params);
- if (ret < 0) {
- gnutls_assert();
- FREE_DSA_PRIVATE_PARAMS;
- return ret;
+ if (!key->crippled) {
+ ret = _encode_dsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ FREE_DSA_PRIVATE_PARAMS;
+ return ret;
+ }
}
key->params_size = DSA_PRIVATE_PARAMS;
gnutls_x509_crt_fmt format, void* output_data, size_t* output_data_size)
{
char * msg;
+ int ret;
if (key == NULL) {
gnutls_assert();
msg = PEM_KEY_DSA;
else msg = NULL;
+ if (key->crippled) { /* encode the parameters on the fly.
+ */
+ switch( key->pk_algorithm) {
+ case GNUTLS_PK_DSA:
+ ret = _encode_dsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ break;
+ case GNUTLS_PK_RSA:
+ ret = _encode_rsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ break;
+ default:
+ gnutls_assert();
+ return GNUTLS_E_INVALID_REQUEST;
+ }
+ }
+
return _gnutls_x509_export_int( key->key, format, msg, *output_data_size,
output_data, output_data_size);
}
return ret;
}
- ret = _encode_dsa( &key->key, key->params);
- if (ret < 0) {
- gnutls_assert();
- goto cleanup;
+ if (!key->crippled) {
+ ret = _encode_dsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
}
key->params_size = params_len;
key->pk_algorithm = GNUTLS_PK_DSA;
return ret;
}
- ret = _encode_rsa( &key->key, key->params);
- if (ret < 0) {
- gnutls_assert();
- goto cleanup;
+ if (!key->crippled) {
+ ret = _encode_rsa( &key->key, key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
}
+
key->params_size = params_len;
key->pk_algorithm = GNUTLS_PK_RSA;
GNUTLS_HASH_HANDLE hd;
gnutls_datum der = { NULL, 0 };
- if (key == NULL) {
+ if (key == NULL || key->crippled) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}