Bonjour,

Je suis en train d'essayer de faire un programme en C pour calculer le "Message-Authenticator Attribute" d'une requête RADIUS :
https://www.cisco.com/c/en/us/suppor...-00.html#anc10
=> l'article indique qu'il faut passer en paramètre de la fonction de hashage d'openSSH, les paramètre suivants :
- le secret partagé
- le message (la requête RADIUS en pre-remplissant le "Message-Authenticator Attribute" avec la valeur 0x00)
- le type de hashage : MD5.

J'ai a ma disposition une library pour calculer le MD5 et les fonctions disponibles sont :
- md5Init(MD5_CONTEXT * context)
- md5Update(MD5_CONTEXT * context, uint8_t * data, size_t len)
- md5Final(MD5_CONTEXT * context, uint8_t * result)

Pour calculer le hash d'un fichier, j'ai testé ce code et ça fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
MD5_CONTEXT context;
uint8_t result[16];
md5Init(&context);
md5Update(&context, file_data, file_len);
md5Final(&context, result);
Le problème est que maintenant, je n'arrive pas à calculer le bon "Message-Authenticator Attribute". J'ai testé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
memset(&radius_data[MESSAGE_AUTHENTICATOR_OFFSET], 0x00, 16);
 
MD5_CONTEXT context;
uint8_t result[16];
md5Init(&context);
md5Update(&context, shared_secret, shared_secret_len);
md5Update(&context, radius_data, radius_len);
md5Final(&context, result);
 
memcpy(&radius_data[MESSAGE_AUTHENTICATOR_OFFSET], result, 16);
=> j'ai vérifié que le paquet Ethernet généré était correctement structuré mais lorsque je l'envoie à un serveur RADIUS, je vois dans les logs de celui-ci que la valeur de Message-Authenticator est fausse)

Donc j'essaie de comprendre ce que fait exactement la fonction hmac d'openSSL car dans ma library MD5, il n'y a pas le paramètre demandant explicitement de rentrer le secret partagé.

Description du champs Message-Authenticator dans la RFC RADIUS : https://datatracker.ietf.org/doc/htm...9#section-5.14

Donc comment dois-je utiliser ma library pour calculer la bonne valeur ?
Merci d'avance