Le premier octet d'un en-t�te de paquet s'appelle <<�signature du paquet�>>. Il d�termine le format de l'en-t�te et informe sur le contenu du paquet. Le reste de l'en-t�te d�termine la taille du paquet.
Il faut noter que le bit le plus important est celui le plus � gauche, il est appel� bit 7. Un masque pour ce bit est 0x80 en hexad�cimal.
+-----------------+ PTag | 7 6 5 4 3 2 1 0 | +-----------------+ |
Le bit 7 vaut toujours 1, le bit 6 indique le nouveau format du paquet s'il est positionn�.
PGP 2.6.x utilise seulement les paquets dans l'ancien format. Ainsi, les logiciels qui doivent utiliser cette version de PGP ne doivent utiliser que les paquets d'ancien format. Si la compatibilit� n'est pas une question importante, l'un ou l'autre format peut �tre utilis�. Remarquez que les paquets dans l'ancien format poss�dent 4 bits de signature du contenu, et que les paquets dans le nouveau format en poss�dent 6 ; certaines possibilit�s ne peuvent pas �tre utilis�es et restent tout de m�me compatibles.
Paquets dans l'ancien format :
bits 5-2 -- signature de contenu bits 1-0 - type de longueur |
Les paquets dans le nouveau format contiennent :
Bits 5-0 -- signature du contenu |
Signification du type de longueur dans les paquets en ancien format.
Le paquet a une longueur de 1 octet. L'en-t�te fait 2 octets.
Le paquet a une longueur de 2 octets. L'en-t�te fait 3 octets.
Le paquet a une longueur de 4 octets. L'en-t�te fait 5 octets.
Le paquet est d'une taille ind�termin�e. L'en-t�te fait 1 octet, et la longueur est � d�terminer � l'impl�mentation. Si le paquet est dans un fichier, cela signifie que le paquet s'�tend jusqu'� la fin du fichier. En g�n�ral, l'impl�mentation NE DOIT PAS utiliser des paquets de tailles ind�termin�es sauf si la fin des donn�es est proche d'apr�s le contexte, et m�me dans ce cas il est mieux d'utiliser une taille pr�cise, ou un en-t�te dans le nouveau format. L'en-t�te du nouveau format d�crit ci-dessous poss�de un m�canisme pour encoder avec pr�cision des donn�es de tailles inconnues.
Les paquets du nouveau format pr�sentent 4 possibilit�s pour coder la longueur.
Un en-t�te d'un octet autorise des longueurs de paquets de 191 octets maximum.
Un en-t�te de deux octets permet d'encoder des paquets de tailles comprises entre 192 et 8383 octets.
Un en-t�te de 5 octets peut encoder des paquets qui peuvent aller jusqu'� 4,294,967,295 (0xFFFFFFFF) octets en longueur. (Ce qui revient � coder un nombre scalaire de 4 octets).
Quand la longueur d'un paquet n'est pas connue � l'avance par celui qui en a besoin, les en-t�tes qui renseignent sur des longueurs de corps partiel, codent un paquet de taille ind�termin�e, en le transformant en une cha�ne.
Un en-t�te d'un octet code une longueur de 0 � 191 octets. Ce type de longueur d'en-t�te est reconnu, car la valeur de l'octet est inf�rieure � 192. La longueur du corps vaut :
LongueurCorps = 1er_octet; |
Un en-t�te de deux octets code une longueur comprise entre 192 et 8383 octets. On le reconna�t gr�ce au premier octet qui est compris entre 192 et 223. La longueur du corps est �gale �:
LongueurCorps = ((1er_octet - 192) << 8)+ (2eme_octet) + 192 |
Un en-t�te d'une longueur de 5 octets consiste en un simple octet qui vaut 255, suivi par un scalaire de 4 octets. La longueur du corps est �gale � :
LongueurCorps = (2eme_octet << 24) | (3eme_octet << 16) | (4eme_octet << 8) | 5eme_octet |
Un en-t�te de longueur partielle est mis sur un octet et code seulement la longueur de la partie donn�e du paquet. Cette longueur est une puissance de 2, comprise entre 1 et 1 073 741 824 (2 puissance 30). Cet octet est reconnu par le fait qu'il est sup�rieur ou �gal � 224, et inf�rieur � 255. La longueur partielle est �gale � :
LongueurPartielleCorps = 1 << (1er_octet & 0x1F); |
Ces exemples montrent l'encodage de la taille des paquets suivant le nouveau format de paquet.
Un paquet avec une taille de 100 peut avoir sa longueur cod�e sur un octet : 0x64. Cet octet est suivi de 100 autres de donn�es.
Un paquet d'une longueur de 1723 peut avoir une longueur cod�e sur deux octets : 0xC5, 0xFB. Cet en-t�te par exemple est suivi par 1723 octets de donn�es.
Un paquet d'une longueur de 100000 peut avoir sa longueur cod�e sur 5 octets : 0xFF, 0x00, 0x01, 0x86,0xA0.
Il pourrait aussi �tre encod� dans le flux d'octets suivants : 0xEF, d'abord 32768 octets de donn�es; 0xE1, suivi de deux octets de donn�es; 0XE0, suivi d'un octet de donn�e; 0XF0, suivi de 65536 octets de donn�es; 0xC5, 0xDD, suivi des derniers 1693 octets de donn�es. Ceci n'est qu'un des codages possibles, et beaucoup de variations sont possibles sur la taille des corps interm�diaires d'en-t�tes, du moment qu'une en-t�te de longueur de corps normal code la derni�re portion des donn�es. Il faut aussi savoir que le dernier en-t�te de longueur de corps peut �tre un en-t�te de taille nulle.
Une impl�mentation PEUT utiliser des longueurs de corps de donn�es partielles pour les paquets de donn�es, qu'ils soient � l'�tat brut, compress�s, ou crypt�s. La premi�re longueur partielle doit �tre au moins de 512 octets. Les longueurs partielles de corps NE DOIVENT �tre utilis�es pour aucun autre type de paquets.
Remarquez que dans toutes ces explications, la longueur totale du paquet est la longueur de l'en-t�te plus celle du corps.
Pr�c�dent | Sommaire | Suivant |
Syntaxe des paquets | Niveau sup�rieur | Marqueurs de paquet |