Aproximativ 10 rânduri deasupra părții pe care ai citat-o, există
struct {
opac rsa_modulus<1..2^16-1>;
opac rsa_exponent<1..2^16-1>;
} ServerRSAParams;
deci cazul=rsa
(care este de fapt numai pentru rsa_export) of ServerKeyExchange
este într-adevăr:
ServerRSAParams:
rsa_modulus -- opac (întreg cu adevărat bigendian fără semn)
rsa_exponent -- idem
Semnătura - idem
dar această structurare nu afectează codificarea, care conține doar cele trei valori „frunze”, și orice decodificare la care te uiți (Wireshark?) nu se deranjează să distingă cele două niveluri aici.
Notă struct cu semnătură digitală... Semnătură
nu înseamnă că cele două hash-uri (md5 și sha1) sunt conținute în mesaj; mai degrabă, acestea sunt introduse în algoritmul de generare a semnăturii aplicabil, în acest caz RSA „bloc tip 1” definit în PKCS1v1 (acum retronimizat RSASSA-PKCS1-v1_5 în PKCS1v2) și ieșire al algoritmului de semnătură, pentru RSA un singur întreg codificat ca lungime fixă nesemnată bigendian (vezi „I2OSP” în orice versiune de PKCS1), este ceea ce este plasat în mesaj, cu un prefix de lungime de 2 octeți, ca și cum ar fi fost declarat opac<?..2^16-1>
deși nu văd acest lucru menționat în RFC6101; TLS1.0 RFC2246 et succ o menționează în 4.7.
(Ați putea dori să vă uitați la mai multe/toate RFC2246; cu excepția PRF și derivarea cheilor, a unor coduri de alertă și a suitelor de criptare, adăugarea de extensii (din care RFC5746 Secure Renegotiation a devenit destul de obligatorie) și, desigur, numărul versiunii, pentru cele mai bune din amintirile mele TLS1.0 este la fel din punct de vedere tehnic cu SSL3, dar documentul este mai amănunțit, probabil datorită trecerii prin IETF gauntlet^Wprocess.)