const gnutls_datum_t * data,
gnutls_datum_t * signature,
gnutls_x509_spki_st *params);
-int privkey_sign_hash(gnutls_privkey_t signer,
- const gnutls_datum_t * hash_data,
- gnutls_datum_t * signature,
- gnutls_x509_spki_st * params);
unsigned pubkey_to_bits(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params);
int _gnutls_pubkey_compatible_with_sig(gnutls_session_t,
#include "urls.h"
#include <abstract_int.h>
+static int
+privkey_sign_hash(gnutls_privkey_t signer,
+ const gnutls_datum_t * hash_data,
+ gnutls_datum_t * signature,
+ gnutls_x509_spki_st * params);
+
static int
_gnutls_privkey_sign_raw_data(gnutls_privkey_t key,
const gnutls_datum_t * data,
return _gnutls_privkey_sign_raw_data(signer,
hash_data, signature,
¶ms);
+ if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS) {
+ const mac_entry_st *me = hash_to_entry(hash_algo);
+ unsigned pk;
+ unsigned bits;
+
+ pk = gnutls_privkey_get_pk_algorithm(signer, &bits);
+
+ if (me == NULL || !GNUTLS_PK_IS_RSA(pk))
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
+ params.pk = GNUTLS_PK_RSA_PSS;
+ params.salt_size =
+ _gnutls_find_rsa_pss_salt_size(bits, me, 0);
+ }
return privkey_sign_hash(signer, hash_data, signature, ¶ms);
}
-int
+static int
privkey_sign_hash(gnutls_privkey_t signer,
const gnutls_datum_t * hash_data,
gnutls_datum_t * signature,