/** * gnutls_x509_privkey_sec_param: * @key: a key structure * * This function will return the security parameter appropriate with * this private key. * * Returns: On success, a valid security parameter is returned otherwise * %GNUTLS_SEC_PARAM_UNKNOWN is returned. * * Since: 2.12.0 **/ gnutls_sec_param_t gnutls_x509_privkey_sec_param(gnutls_x509_privkey_t key) { int bits; bits = pubkey_to_bits(key->pk_algorithm, &key->params); if (bits <= 0) return GNUTLS_SEC_PARAM_UNKNOWN; return gnutls_pk_bits_to_sec_param(key->pk_algorithm, bits); }
/* Reads and returns the PK algorithm of the given certificate-like * ASN.1 structure. src_name should be something like "tbsCertificate.subjectPublicKeyInfo". */ int _gnutls_x509_get_pk_algorithm (ASN1_TYPE src, const char *src_name, unsigned int *bits) { int result; int algo; char oid[64]; int len; gnutls_pk_params_st params; char name[128]; gnutls_pk_params_init(¶ms); _asnstr_append_name (name, sizeof (name), src_name, ".algorithm.algorithm"); len = sizeof (oid); result = asn1_read_value (src, name, oid, &len); if (result != ASN1_SUCCESS) { gnutls_assert (); return _gnutls_asn2err (result); } algo = _gnutls_x509_oid2pk_algorithm (oid); if (algo == GNUTLS_PK_UNKNOWN) { _gnutls_debug_log ("%s: unknown public key algorithm: %s\n", __func__, oid); } if (bits == NULL) { return algo; } /* Now read the parameters' bits */ result = _gnutls_get_asn_mpis(src, src_name, ¶ms); if (result < 0) return gnutls_assert_val(result); bits[0] = pubkey_to_bits(algo, ¶ms); gnutls_pk_params_release(¶ms); return algo; }
/** * gnutls_x509_privkey_get_pk_algorithm2: * @key: should contain a #gnutls_x509_privkey_t structure * @bits: The number of bits in the public key algorithm * * This function will return the public key algorithm of a private * key. * * Returns: a member of the #gnutls_pk_algorithm_t enumeration on * success, or a negative error code on error. **/ int gnutls_x509_privkey_get_pk_algorithm2 (gnutls_x509_privkey_t key, unsigned int *bits) { int ret; if (key == NULL) { gnutls_assert (); return GNUTLS_E_INVALID_REQUEST; } if (bits) { ret = pubkey_to_bits(key->pk_algorithm, &key->params); if (ret < 0) ret = 0; *bits = ret; } return key->pk_algorithm; }