+++ to secure your transactions use the Bitcoin Mixer Service +++

 

En-t�te des paquets

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
    

Longueur des paquets de l'ancien format

Signification du type de longueur dans les paquets en ancien format.

0

Le paquet a une longueur de 1 octet. L'en-t�te fait 2 octets.

1

Le paquet a une longueur de 2 octets. L'en-t�te fait 3 octets.

2

Le paquet a une longueur de 4 octets. L'en-t�te fait 5 octets.

3

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.

Longueur des paquets du nouveau format

Les paquets du nouveau format pr�sentent 4 possibilit�s pour coder la longueur.

1

Un en-t�te d'un octet autorise des longueurs de paquets de 191 octets maximum.

2

Un en-t�te de deux octets permet d'encoder des paquets de tailles comprises entre 192 et 8383 octets.

3

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).

4

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 octet de longueur

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;
	  

Deux octets de longueur

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
	    

Cinq octets de longueur

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 
	    

Longueur d'un segment de corps

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);
	    
Chaque longueur partielle est suivie par une portion de donn�es du paquet. L'en-t�te partiel pr�cise la longueur de la portion. Un autre en-t�te de longueur (du type --- un octet, deux octets, ou partiel) suit cette portion. Le dernier en-t�te partiel du paquet NE DOIT PAS �TRE un en-t�te de longueur partiel. Les en-t�tes de longueur partielle doivent seulement �tre utilis�s pour les parties non finales du paquet.

Exemple de taille de paquet

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.