tls: do not leak RSA key
No binary (build failed)
—
(log yok)
| @@ -2168,6 +2168,7 @@ void FAST_FUNC tls_handshake(tls_state_t *tls, const char *sni) | |
| /* application data can be sent/received */ | |
| /* free handshake data */ | |
| + | psRsaKey_clear(&tls->hsd->server_rsa_pub_key); |
| // if (PARANOIA) | |
| // memset(tls->hsd, 0, tls->hsd->hsd_size); | |
| free(tls->hsd); | |
| @@ -13,6 +13,18 @@ typedef struct { | |
| //bbox psPool_t *pool; | |
| } psRsaKey_t; | |
| + | static ALWAYS_INLINE void psRsaKey_clear(psRsaKey_t *key) |
| + | { |
| + | pstm_clear(&key->N); |
| + | pstm_clear(&key->e); |
| + | pstm_clear(&key->d); |
| + | pstm_clear(&key->p); |
| + | pstm_clear(&key->q); |
| + | pstm_clear(&key->dP); |
| + | pstm_clear(&key->dQ); |
| + | pstm_clear(&key->qP); |
| + | } |
| + | |
| #define psRsaEncryptPub(pool, key, in, inlen, out, outlen, data) \ | |
| psRsaEncryptPub( key, in, inlen, out, outlen) | |
| int32 psRsaEncryptPub(psPool_t *pool, psRsaKey_t *key, | |