return GNUTLS_PK_UNKNOWN;
}
+gnutls_gost_paramset_t _gnutls_gost_paramset_default(gnutls_pk_algorithm_t pk)
+{
+ if (pk == GNUTLS_PK_GOST_01)
+ return GNUTLS_GOST_PARAMSET_CP_A;
+ else if (pk == GNUTLS_PK_GOST_12_256 ||
+ pk == GNUTLS_PK_GOST_12_512)
+ return GNUTLS_GOST_PARAMSET_TC26_Z;
+ else
+ return gnutls_assert_val(GNUTLS_GOST_PARAMSET_UNKNOWN);
+}
+
/* some generic pk functions */
int _gnutls_pk_params_copy(gnutls_pk_params_st * dst,
gnutls_digest_algorithm_t _gnutls_gost_digest(gnutls_pk_algorithm_t pk);
gnutls_pk_algorithm_t _gnutls_digest_gost(gnutls_digest_algorithm_t digest);
+gnutls_gost_paramset_t _gnutls_gost_paramset_default(gnutls_pk_algorithm_t pk);
int
encode_ber_digest_info(const mac_entry_st * e,
if (pk_algo == GNUTLS_PK_UNKNOWN)
return GNUTLS_E_ILLEGAL_PARAMETER;
- if (paramset < 0) {
- if (pk_algo == GNUTLS_PK_GOST_01)
- paramset = GNUTLS_GOST_PARAMSET_CP_A;
- else
- paramset = GNUTLS_GOST_PARAMSET_TC26_Z;
- }
+ if (paramset == GNUTLS_GOST_PARAMSET_UNKNOWN)
+ paramset = _gnutls_gost_paramset_default(pk_algo);
gnutls_pk_params_release(&key->params);
gnutls_pk_params_init(&key->params);
if (ret != ASN1_ELEMENT_NOT_FOUND)
param = gnutls_oid_to_gost_paramset(oid);
- if (param < 0) {
+ if (param == GNUTLS_GOST_PARAMSET_UNKNOWN) {
gnutls_assert();
ret = param;
goto cleanup;
return GNUTLS_E_INVALID_REQUEST;
}
- if (paramset < 0) {
- if (digest == GNUTLS_DIG_GOSTR_94)
- paramset = GNUTLS_GOST_PARAMSET_CP_A;
- else
- paramset = GNUTLS_GOST_PARAMSET_TC26_Z;
- }
-
key->params.curve = curve;
- key->params.gost_params = paramset;
key->params.algo = _gnutls_digest_gost(digest);
+ if (paramset == GNUTLS_GOST_PARAMSET_UNKNOWN)
+ paramset = _gnutls_gost_paramset_default(key->params.algo);
+
+ key->params.gost_params = paramset;
+
if (_gnutls_mpi_init_scan_nz
(&key->params.params[GOST_X], x->data, x->size)) {
gnutls_assert();