Skip to content

Commit

Permalink
account for rsa_pss_rsae vs rsa_pss_pss type
Browse files Browse the repository at this point in the history
  • Loading branch information
JacobBarthelmeh committed Dec 7, 2024
1 parent f764dbe commit f9b1c0f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
37 changes: 32 additions & 5 deletions src/tls13.c
Original file line number Diff line number Diff line change
Expand Up @@ -7932,6 +7932,27 @@ static void EncodeDualSigAlg(byte sigAlg, byte altSigAlg, byte* output)
}
#endif /* WOLFSSL_DUAL_ALG_CERTS */

static enum wc_MACAlgorithm GetNewSAHashAlgo(int typeIn)
{
switch (typeIn) {
case RSA_PSS_RSAE_SHA256_MINOR:
case RSA_PSS_PSS_SHA256_MINOR:
return sha256_mac;

case RSA_PSS_RSAE_SHA384_MINOR:
case RSA_PSS_PSS_SHA384_MINOR:
return sha384_mac;

case RSA_PSS_RSAE_SHA512_MINOR:
case RSA_PSS_PSS_SHA512_MINOR:
case ED25519_SA_MINOR:
case ED448_SA_MINOR:
return sha512_mac;
default:
return no_mac;
}
}

/* Decode the signature algorithm.
*
* input The encoded signature algorithm.
Expand All @@ -7956,25 +7977,31 @@ static WC_INLINE int DecodeTls13SigAlg(byte* input, byte* hashAlgo,
break;
#endif
case NEW_SA_MAJOR:
/* PSS signatures: 0x080[4-6] */
if (input[1] >= sha256_mac && input[1] <= sha512_mac) {
*hashAlgo = GetNewSAHashAlgo(input[1]);

/* PSS encryption: 0x080[4-6] */
if (input[1] >= RSA_PSS_RSAE_SHA256_MINOR &&
input[1] <= RSA_PSS_RSAE_SHA512_MINOR) {
*hsType = input[0];
}

/* PSS signature: 0x080[9-B] */
if (input[1] >= RSA_PSS_PSS_SHA256_MINOR &&
input[1] <= RSA_PSS_PSS_SHA512_MINOR) {
*hsType = input[0];
*hashAlgo = input[1];
}
#ifdef HAVE_ED25519
/* ED25519: 0x0807 */
else if (input[1] == ED25519_SA_MINOR) {
*hsType = ed25519_sa_algo;
/* Hash performed as part of sign/verify operation. */
*hashAlgo = sha512_mac;
}
#endif
#ifdef HAVE_ED448
/* ED448: 0x0808 */
else if (input[1] == ED448_SA_MINOR) {
*hsType = ed448_sa_algo;
/* Hash performed as part of sign/verify operation. */
*hashAlgo = sha512_mac;
}
#endif
else
Expand Down
7 changes: 7 additions & 0 deletions wolfssl/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -1813,6 +1813,13 @@ enum Misc {
MAX_CURVE_NAME_SZ = 18, /* Maximum size of curve name string */

NEW_SA_MAJOR = 8, /* Most significant byte used with new sig algos */
RSA_PSS_RSAE_SHA256_MINOR = 0x04,
RSA_PSS_RSAE_SHA384_MINOR = 0x05,
RSA_PSS_RSAE_SHA512_MINOR = 0x06,
RSA_PSS_PSS_SHA256_MINOR = 0x09,
RSA_PSS_PSS_SHA384_MINOR = 0x0A,
RSA_PSS_PSS_SHA512_MINOR = 0x0B,

ED25519_SA_MAJOR = 8, /* Most significant byte for ED25519 */
ED25519_SA_MINOR = 7, /* Least significant byte for ED25519 */
ED448_SA_MAJOR = 8, /* Most significant byte for ED448 */
Expand Down

0 comments on commit f9b1c0f

Please sign in to comment.