/*
- * Copyright (C) 2003-2012 Free Software Foundation, Inc.
- * Copyright (C) 2012-2015 Nikos Mavrogiannopoulos
+ * Copyright (C) 2003-2016 Free Software Foundation, Inc.
+ * Copyright (C) 2012-2016 Nikos Mavrogiannopoulos
+ * Copyright (C) 2015-2016 Red Hat, Inc.
*
* Author: Nikos Mavrogiannopoulos
*
}
pkey->params.params_nr++;
- result =
- _gnutls_pk_fixup(GNUTLS_PK_RSA, GNUTLS_IMPORT, &pkey->params);
- if (result < 0) {
- gnutls_assert();
- goto error;
- }
-
pkey->params.params_nr = RSA_PRIVATE_PARAMS;
tmp_size = sizeof(tmp);
if (key->key == NULL) {
gnutls_assert();
result = GNUTLS_E_ASN1_DER_ERROR;
- } else {
- result = 0;
+ goto cleanup;
}
+ result =
+ _gnutls_pk_fixup(key->pk_algorithm, GNUTLS_IMPORT, &key->params);
+ if (result < 0) {
+ gnutls_assert();
+ }
+
+ cleanup:
if (need_free)
_gnutls_free_datum(&_data);
const char *password, unsigned int flags)
{
int ret = 0;
+ int saved_ret = GNUTLS_E_PARSING_ERROR;
char pin[GNUTLS_PKCS11_MAX_PIN_LEN];
unsigned head_enc = 1;
if (ret < 0) {
gnutls_assert();
+ saved_ret = ret;
/* fall through to PKCS #8 decoding */
}
}
password, flags);
}
+ if (saved_ret == GNUTLS_E_PARSING_ERROR)
+ saved_ret = ret;
+
if (ret < 0) {
if (ret == GNUTLS_E_DECRYPTION_FAILED)
goto cleanup;
ret = 0;
cleanup:
+ if (ret == GNUTLS_E_PARSING_ERROR)
+ ret = saved_ret;
+
return ret;
}
goto cleanup;
}
+ ret =
+ _gnutls_pk_fixup(GNUTLS_PK_DSA, GNUTLS_IMPORT, &key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
+
ret =
_gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &key->key,
&key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
}
key->params.params_nr++;
+ ret =
+ _gnutls_pk_fixup(GNUTLS_PK_EC, GNUTLS_IMPORT, &key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
+
key->pk_algorithm = GNUTLS_PK_EC;
key->params.algo = key->pk_algorithm;
#include <algorithms.h>
#include <num.h>
#include <random.h>
+#include <pk.h>
#include <nettle/pbkdf2.h>
static int _decode_pkcs8_ecc_key(ASN1_TYPE pkcs8_asn,
goto cleanup;
}
+ result =
+ _gnutls_pk_fixup(key->pk_algorithm, GNUTLS_IMPORT, &key->params);
+ if (result < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
+
if (need_free)
_gnutls_free_datum(&_data);
/* The key has now been decoded.
*/
-
return 0;
cleanup: