#include "algorithms.h"
#include "errors.h"
#include "x509/common.h"
-#ifdef HAVE_LIBOQS
-#include "oqs/oqs.h"
-#endif
typedef struct {
const char *name;
*/
unsigned int subgroup_bits; /* subgroup bits */
unsigned int ecc_bits; /* bits for ECC keys */
-#ifdef HAVE_LIBOQS
unsigned int ml_dsa_bits;
-#endif
} gnutls_sec_params_entry;
static const gnutls_sec_params_entry sec_params[] = {
- { "Insecure", GNUTLS_SEC_PARAM_INSECURE, 0, 0, 0, 0, 0,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
- { "Export", GNUTLS_SEC_PARAM_EXPORT, 42, 512, 0, 84, 0,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
- { "Very weak", GNUTLS_SEC_PARAM_VERY_WEAK, 64, 767, 0, 128, 0,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
- { "Weak", GNUTLS_SEC_PARAM_WEAK, 72, 1008, 1008, 160, 160,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
+ { "Insecure", GNUTLS_SEC_PARAM_INSECURE, 0, 0, 0, 0, 0, 0 },
+ { "Export", GNUTLS_SEC_PARAM_EXPORT, 42, 512, 0, 84, 0, 0 },
+ { "Very weak", GNUTLS_SEC_PARAM_VERY_WEAK, 64, 767, 0, 128, 0, 0 },
+ { "Weak", GNUTLS_SEC_PARAM_WEAK, 72, 1008, 1008, 160, 160, 0 },
#ifdef ENABLE_FIPS140
- { "Low", GNUTLS_SEC_PARAM_LOW, 80, 1024, 1024, 160, 160,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
+ { "Low", GNUTLS_SEC_PARAM_LOW, 80, 1024, 1024, 160, 160, 0 },
{
"Legacy",
GNUTLS_SEC_PARAM_LEGACY,
1024,
192,
192,
-#ifdef HAVE_LIBOQS
0,
-#endif
- },
- { "Medium", GNUTLS_SEC_PARAM_MEDIUM, 112, 2048, 2048, 224, 224,
-#ifdef HAVE_LIBOQS
- OQS_SIG_ml_dsa_44_length_public_key
-#endif
- },
- { "High", GNUTLS_SEC_PARAM_HIGH, 128, 3072, 3072, 256, 256,
-#ifdef HAVE_LIBOQS
- 0
-#endif
},
+ { "Medium", GNUTLS_SEC_PARAM_MEDIUM, 112, 2048, 2048, 224, 224, 0 },
+ { "High", GNUTLS_SEC_PARAM_HIGH, 128, 3072, 3072, 256, 256, 0 },
#else
{ "Low", GNUTLS_SEC_PARAM_LOW, 80, 1024, 1024, 160, 160,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- }, /* ENISA-LEGACY */
- { "Legacy", GNUTLS_SEC_PARAM_LEGACY, 96, 1776, 2048, 192, 192,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
- { "Medium", GNUTLS_SEC_PARAM_MEDIUM, 112, 2048, 2048, 256, 224,
-#ifdef HAVE_LIBOQS
- OQS_SIG_ml_dsa_44_length_public_key
-#endif
- },
- { "High", GNUTLS_SEC_PARAM_HIGH, 128, 3072, 3072, 256, 256,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- },
+ 0 }, /* ENISA-LEGACY */
+ { "Legacy", GNUTLS_SEC_PARAM_LEGACY, 96, 1776, 2048, 192, 192, 0 },
+ { "Medium", GNUTLS_SEC_PARAM_MEDIUM, 112, 2048, 2048, 256, 224, 0 },
+ { "High", GNUTLS_SEC_PARAM_HIGH, 128, 3072, 3072, 256, 256, 0 },
#endif
{ "Ultra", GNUTLS_SEC_PARAM_ULTRA, 192, 8192, 8192, 384, 384,
-#ifdef HAVE_LIBOQS
- OQS_SIG_ml_dsa_65_length_public_key
-#endif
- },
+ ML_DSA_65_PUBKEY_SIZE },
{ "Future", GNUTLS_SEC_PARAM_FUTURE, 256, 15360, 15360, 512, 512,
-#ifdef HAVE_LIBOQS
- OQS_SIG_ml_dsa_87_length_public_key
-#endif
- },
- { NULL, 0, 0, 0, 0, 0, 0,
-#ifdef HAVE_LIBOQS
- 0
-#endif
- }
+ ML_DSA_87_PUBKEY_SIZE },
+ { NULL, 0, 0, 0, 0, 0, 0, 0 }
};
/**
ret = p->dsa_bits;
else if (IS_EC(algo) || IS_GOSTEC(algo))
ret = p->ecc_bits;
-#ifdef HAVE_LIBOQS
else if (IS_ML_DSA(algo))
ret = p->ml_dsa_bits;
-#endif
else
ret = p->pk_bits;
break;
break;
ret = p->sec_param;
}
-#ifdef HAVE_LIBOQS
} else if (IS_ML_DSA(algo)) {
for (p = sec_params; p->name; p++) {
if (p->ml_dsa_bits > bits)
break;
ret = p->sec_param;
}
-#endif
} else {
for (p = sec_params; p->name; p++) {
if (p->pk_bits > bits)
#include "urls.h"
#include "ecc.h"
-#ifdef HAVE_LIBOQS
-#include <dlwrap/oqs.h>
-#endif
-
static int pubkey_verify_hashed_data(const gnutls_sign_entry_st *se,
const mac_entry_st *me,
const gnutls_datum_t *hash,
static int pubkey_supports_sig(gnutls_pubkey_t pubkey,
const gnutls_sign_entry_st *se);
-#ifdef HAVE_LIBOQS
-struct pq_algorithm_pubkey_bits_st {
- gnutls_pk_algorithm_t algorithm;
- int pubkey_bits;
-};
-
-static const struct pq_algorithm_pubkey_bits_st pq_pubkey_bits[] = {
- { GNUTLS_PK_ML_DSA_44, OQS_SIG_ml_dsa_44_length_public_key },
- { GNUTLS_PK_ML_DSA_65, OQS_SIG_ml_dsa_65_length_public_key },
- { GNUTLS_PK_ML_DSA_87, OQS_SIG_ml_dsa_87_length_public_key },
-
- { GNUTLS_PK_UNKNOWN, 0 }
-};
-
-static int pq_pubkey_to_bits(const gnutls_pk_algorithm_t algo)
-{
- const struct pq_algorithm_pubkey_bits_st *pubkey_to_bits =
- pq_pubkey_bits;
- while (pubkey_to_bits->algorithm != algo &&
- pubkey_to_bits->algorithm != GNUTLS_PK_UNKNOWN)
- pubkey_to_bits++;
-
- if (pubkey_to_bits->algorithm == GNUTLS_PK_UNKNOWN)
- gnutls_assert();
-
- return pubkey_to_bits->pubkey_bits;
-}
-#endif
-
unsigned pubkey_to_bits(const gnutls_pk_params_st *params)
{
switch (params->algo) {
case GNUTLS_PK_GOST_12_256:
case GNUTLS_PK_GOST_12_512:
return gnutls_ecc_curve_get_size(params->curve) * 8;
-#ifdef HAVE_LIBOQS
case GNUTLS_PK_ML_DSA_44:
+ return ML_DSA_44_PUBKEY_SIZE;
case GNUTLS_PK_ML_DSA_65:
+ return ML_DSA_65_PUBKEY_SIZE;
case GNUTLS_PK_ML_DSA_87:
- return pq_pubkey_to_bits(params->algo);
-#endif
+ return ML_DSA_87_PUBKEY_SIZE;
default:
return 0;
}
pubkey_to_bits(&key->params));
ret = 0;
break;
-#ifdef HAVE_LIBOQS
case GNUTLS_PK_ML_DSA_44:
case GNUTLS_PK_ML_DSA_65:
case GNUTLS_PK_ML_DSA_87:
*hash = GNUTLS_DIG_SHAKE_256;
ret = 0;
break;
-#endif
default:
gnutls_assert();
ret = GNUTLS_E_INTERNAL_ERROR;
case GNUTLS_PK_EDDSA_ED25519:
case GNUTLS_PK_EDDSA_ED448:
-#ifdef HAVE_LIBOQS
case GNUTLS_PK_ML_DSA_44:
case GNUTLS_PK_ML_DSA_65:
case GNUTLS_PK_ML_DSA_87:
-#endif
if (_gnutls_pk_verify(se->pk, data, signature, params,
sign_params) != 0) {
gnutls_assert();