Résumé

  • La « quasi-copie d’octets » de la RFC 2159 comprenait aussi la traduction des paramètres, l’inversion de l’ordre des bits, le bourrage des pages et l’insertion d’une frontière de six EOL.
  • Le retour sans perte dépendait des limites de page, des EOL terminaux et des bits DCS non nommés ; un hachage identique du corps ne suffisait pas à prouver la restauration du même objet fax.
  • Une structure réversible ne garantissait ni la prise en charge des options, ni le nombre exact de pixels par ligne, ni une image lisible et fidèle chez le destinataire.

Le mot « presque » décrivait la transformation

Publiée en janvier 1998, la RFC 2159 définissait le transport MIME de données déjà encodées en télécopie Groupe 3 et leur correspondance avec X.400. Elle refusait d’en faire un format d’image généraliste. Son objectif était plus étroit : déplacer une représentation existante sans perdre ce qui permettrait de la reconstruire.

Cette représentation réunissait trois états différents : les indicateurs du schéma de codage, la structure qui découpait le flux en pages et les bits T.4 de chaque page. Les indicateurs devenaient des paramètres MIME. La séquence de BIT STRING X.400 devenait une suite continue séparée par un motif. Les bits d’image changeaient de convention d’ordre à l’intérieur de l’octet.

La RFC 1494 avait défini une véritable Byte Copy comme l’absence de conversion. G3Fax portait déjà la mention nearly. Il n’était pas nécessaire de décoder puis de recomprimer l’image, mais il fallait reconstruire l’objet qui l’encadrait.

Un silence de paramètre avait une valeur

Les paramètres MIME couvraient la longueur et la largeur de page, l’encodage unidimensionnel, bidimensionnel ou non compressé, la résolution fine ou grossière, le nombre de pages et une Device Control String en Base64. En l’absence de paramètres, les valeurs devenaient A4, A4, unidimensionnel et résolution grossière. L’omission n’était donc pas neutre.

Les numéros de bits des options nommées différaient entre T.30 et X.400, car les deux systèmes comptaient depuis des extrémités opposées de l’octet. La passerelle devait traduire le sens, pas recopier un numéro. Cette opération restait distincte de l’inversion ultérieure des bits de chaque octet de données.

Lorsque la chaîne de contrôle contenait un bit sans équivalent parmi les options nommées, la RFC demandait de fournir le paramètre DCS. Elle avertissait en même temps que l’interfonctionnement n’était pas garanti pour ces NonBasicParameters. Conserver le bit préservait le dossier ; cela ne créait pas la capacité chez le récepteur.

La frontière de page était une donnée fabriquée

X.400 représentait chaque page par un BIT STRING dans une séquence ASN.1. MIME avait besoin d’un corps continu. La RFC 2159 a donc choisi six EOL consécutifs comme frontière, chaque EOL étant composé de onze zéros puis d’un un. La série devait commencer sur une limite d’octet ; des zéros étaient ajoutés si nécessaire.

Le motif complet était 00 10 01 00 10 01 00 10 01. Le texte affirmait qu’il ne pouvait pas apparaître dans l’image. La recherche de pages devenait possible sans rendu, mais la position de la frontière, l’alignement et la longueur du bourrage devenaient des éléments de preuve. Un même flux aplati ne prouvait plus le même ensemble de pages.

Vers MIME, la passerelle supprimait les EOL terminaux de chaque page, adoptait la convention Internet où le bit de poids fort du premier octet arrive en premier, complétait l’octet, ajoutait six EOL et concaténait les pages. Vers X.400, elle séparait aux six EOL, conservait les EOL terminaux, inversait les bits de chaque octet et reconstruisait les BIT STRING.

La conservation des EOL au retour était explicitement présentée comme un changement par rapport à RFC 1494, qui demandait de retirer EOL et bourrage. La même étiquette générale pouvait donc couvrir deux règles de frontière différentes.

Un hachage ne connaît pas la sémantique des bits

Si le corps MIME garde le même hachage pendant un saut, ses octets ont probablement traversé ce saut intacts. Cela ne prouve pas que la passerelle précédente avait choisi le bon ordre des bits. Comparer directement les octets ASN.1 aux octets MIME peut même produire une différence lorsque la conversion est correcte, puisque l’inversion est voulue.

Il faut comparer une même couche : longueur significative de chaque page, nombre de bits inutilisés ASN.1, règle d’ordre appliquée, nombre de zéros ajoutés, décalage de chaque frontière. Au retour, le nombre de pages, les bits significatifs, les paramètres et le DCS doivent retrouver leur état initial.

La RFC 2157 donne le critère : une équivalence est composée de deux mappings qui, ensemble, assurent une conversion sans perte. Produire un corps valide dans un sens ne démontre qu’une flèche.

La restitution n’était pas encore l’usage

Les conseils de la RFC séparaient eux-mêmes la réversibilité de l’utilité. Sans fineResolution, les pixels sont deux fois plus hauts que larges. Certaines longueurs et la résolution fine étaient annoncées comme plus faciles à supporter que les largeurs B4 ou A3. Des télécopieurs pouvaient échouer si une ligne ne contenait pas exactement le nombre de pixels déclaré, notamment lorsque le blanc de droite avait été omis.

Une passerelle peut donc restituer pages et options, tandis que le décodeur ignore le mode. Le décodeur peut accepter le flux et déformer la géométrie. Une page plausible peut rester tronquée. Syntaxe, reconstruction, pixels, rendu et lecture humaine constituent des observations successives.

Le registre actuel de l’IANA contient toujours image/g3fax, et ses tables historiques MIME/X.400 l’associent à g3-facsimile. Ces entrées prouvent l’existence d’un nom et d’une référence commune, pas l’implémentation d’un produit ni les capacités d’un destinataire.

Un test solide joint les paramètres X.400, les octets DCS, le nombre de pages, les longueurs significatives et leurs empreintes au numéro de version de la passerelle. Il capture ensuite les paramètres MIME, le bourrage et les décalages des séparateurs. Le retour compare la séquence, les longueurs, les paramètres et le DCS. Le rendu vient seulement après, avec les modes, les dimensions et une image de référence.

Les essais de Lu Heng sur la primauté du code exécuté, la spécification commune minimale et les couches de réalité servent ici de grille déclarée : règle, exécution, rendu et résultat humain ne peuvent emprunter le reçu les uns des autres.

La formule de RFC 2159 était donc une liste compacte de ce qui n’était pas copié. Sans paramètres, frontières, ordre, bourrage ou capacité de réception, des octets intacts peuvent rester incapables de restituer le fax d’origine.

Sources