From 3618432107694490da7a5dcd0f6cbdcbfc940ecd Mon Sep 17 00:00:00 2001 From: Sylvain Rochet Date: Sat, 18 Apr 2015 00:02:49 +0200 Subject: [PATCH] PPP, MPPE, reworked mppe_rekey() Moved sha1_context from struct ppp_mppe_state to stack, we don't need it past mppe_rekey(). Moved shared MEMCPY() outside initial_key if block. --- src/netif/ppp/mppe.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/netif/ppp/mppe.c b/src/netif/ppp/mppe.c index 04f9cba7..22efe01e 100644 --- a/src/netif/ppp/mppe.c +++ b/src/netif/ppp/mppe.c @@ -55,7 +55,6 @@ */ struct ppp_mppe_state { arc4_context arc4; - u8_t sha1_digest[SHA1_SIGNATURE_SIZE]; unsigned char master_key[MPPE_MAX_KEY_LEN]; unsigned char session_key[MPPE_MAX_KEY_LEN]; unsigned keylen; /* key length in bytes */ @@ -107,6 +106,7 @@ static const u8_t sha1_pad2[SHA1_PAD_SIZE] = { static void mppe_rekey(struct ppp_mppe_state * state, int initial_key) { sha1_context sha1; + u8_t sha1_digest[SHA1_SIGNATURE_SIZE]; /* * Key Derivation, from RFC 3078, RFC 3079. @@ -117,14 +117,12 @@ static void mppe_rekey(struct ppp_mppe_state * state, int initial_key) sha1_update(&sha1, (unsigned char *)sha1_pad1, SHA1_PAD_SIZE); sha1_update(&sha1, state->session_key, state->keylen); sha1_update(&sha1, (unsigned char *)sha1_pad2, SHA1_PAD_SIZE); - sha1_finish(&sha1, state->sha1_digest); + sha1_finish(&sha1, sha1_digest); + MEMCPY(state->session_key, sha1_digest, state->keylen); if (!initial_key) { - arc4_setup(&state->arc4, state->sha1_digest, state->keylen); - MEMCPY(state->session_key, state->sha1_digest, state->keylen); + arc4_setup(&state->arc4, sha1_digest, state->keylen); arc4_crypt(&state->arc4, state->session_key, state->keylen); - } else { - memcpy(state->session_key, state->sha1_digest, state->keylen); } if (state->keylen == 8) { /* See RFC 3078 */