struct radius_ms_mppe_keys * Radius_msg_get_ms_keys(struct radius_msg *msg, struct radius_msg *sent_msg, u8 *secret, size_t secret_len) { u8 *key; size_t keylen; struct radius_ms_mppe_keys *keys; if (msg == NULL || sent_msg == NULL) return NULL; keys = (struct radius_ms_mppe_keys *) malloc(sizeof(*keys)); if (keys == NULL) return NULL; memset(keys, 0, sizeof(*keys)); key = Radius_msg_get_ms_attr(msg, RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY, &keylen); if (key) { keys->send = decrypt_ms_key(key, keylen, sent_msg, secret, secret_len, &keys->send_len); free(key); } DBGPRINT(RT_DEBUG_INFO," secret_len = %d, secret= %s\n",secret_len,secret); key = Radius_msg_get_ms_attr(msg, RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY, &keylen); if (key) { keys->recv = decrypt_ms_key(key, keylen, sent_msg, secret, secret_len, &keys->recv_len); free(key); } return keys; }
struct radius_ms_mppe_keys * radius_msg_get_cisco_keys(struct radius_msg *msg, struct radius_msg *sent_msg, u8 *secret, size_t secret_len) { u8 *key; size_t keylen; struct radius_ms_mppe_keys *keys; if (msg == NULL || sent_msg == NULL) return NULL; keys = wpa_zalloc(sizeof(*keys)); if (keys == NULL) return NULL; key = radius_msg_get_vendor_attr(msg, RADIUS_VENDOR_ID_CISCO, RADIUS_CISCO_AV_PAIR, &keylen); if (key && keylen == 51 && os_memcmp(key, "leap:session-key=", 17) == 0) { keys->recv = decrypt_ms_key(key + 17, keylen - 17, sent_msg->hdr->authenticator, secret, secret_len, &keys->recv_len); } os_free(key); return keys; }
struct radius_ms_mppe_keys * radius_msg_get_ms_keys(struct radius_msg *msg, struct radius_msg *sent_msg, const u8 *secret, size_t secret_len) { u8 *key; size_t keylen; struct radius_ms_mppe_keys *keys; if (msg == NULL || sent_msg == NULL) return NULL; keys = os_zalloc(sizeof(*keys)); if (keys == NULL) return NULL; key = radius_msg_get_vendor_attr(msg, RADIUS_VENDOR_ID_MICROSOFT, RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY, &keylen); if (key) { keys->send = decrypt_ms_key(key, keylen, sent_msg->hdr->authenticator, secret, secret_len, &keys->send_len); if (!keys->send) { wpa_printf(MSG_DEBUG, "RADIUS: Failed to decrypt send key"); } os_free(key); } key = radius_msg_get_vendor_attr(msg, RADIUS_VENDOR_ID_MICROSOFT, RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY, &keylen); if (key) { keys->recv = decrypt_ms_key(key, keylen, sent_msg->hdr->authenticator, secret, secret_len, &keys->recv_len); if (!keys->recv) { wpa_printf(MSG_DEBUG, "RADIUS: Failed to decrypt recv key"); } os_free(key); } return keys; }
struct radius_ms_mppe_keys * radius_msg_get_ms_keys(struct radius_msg *msg, struct radius_msg *sent_msg, u8 *secret, size_t secret_len) { u8 *key; size_t keylen; struct radius_ms_mppe_keys *keys; if (msg == NULL || sent_msg == NULL) return NULL; keys = (struct radius_ms_mppe_keys *) malloc(sizeof(*keys)); if (keys == NULL) return NULL; memset(keys, 0, sizeof(*keys)); key = radius_msg_get_vendor_attr(msg, RADIUS_VENDOR_ID_MICROSOFT, RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY, &keylen); if (key) { keys->send = decrypt_ms_key(key, keylen, sent_msg->hdr->authenticator, secret, secret_len, &keys->send_len); free(key); } key = radius_msg_get_vendor_attr(msg, RADIUS_VENDOR_ID_MICROSOFT, RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY, &keylen); if (key) { keys->recv = decrypt_ms_key(key, keylen, sent_msg->hdr->authenticator, secret, secret_len, &keys->recv_len); free(key); } return keys; }