Hello,
I have been thinking about implementing RSASSA-PSS in Nettle.
I would like to propose the following API for performing and verifying
signatures:
diff --git a/rsa.h b/rsa.h
> index 6d2574b..b9faffe 100644
> --- a/rsa.h
> +++ b/rsa.h
> @@ -35,6 +35,7 @@
> #define NETTLE_RSA_H_INCLUDED
>
> #include "nettle-types.h"
> +#include "nettle-meta.h"
> #include "bignum.h"
>
> #include "md5.h"
> @@ -188,6 +189,27 @@ int
> rsa_private_key_prepare(struct rsa_private_key *key);
>
>
> +/* PSS style signatures */
> +int
> +rsa_pss_sign(const struct rsa_private_key *key,
> + size_t length, const uint8_t *digest_info,
> + mpz_t s, const struct nettle_hash *hash_func,
> + size_t salt_length, const uint8_t *salt);
> +
> +int
> +rsa_pss_sign_tr(const struct rsa_public_key *pub,
> + const struct rsa_private_key *key,
> + void *random_ctx, nettle_random_func *random,
> + size_t length, const uint8_t *digest_info,
> + mpz_t s, const struct nettle_hash *hash_func,
> + size_t salt_length, const uint8_t *salt);
> +
> +int
> +rsa_pss_verify(const struct rsa_public_key *key,
> + size_t length, const uint8_t *digest_info,
> + const mpz_t signature, const struct nettle_hash *hash_func,
> + size_t salt_length);
> +
> /* PKCS#1 style signatures */
> int
> rsa_pkcs1_sign(const struct rsa_private_key *key,
>
It is fairly similar to PKCS#1 API but with the addition of a hash function
and salt. If this sounds reasonable then I will have a go at writing the
implementations.
Best wishes,
Andrew Lawrence