.fi\r
\r
.ce 2\r
-IFFY Encoding For Transmission of INTERCAL Code In IPV6 Addresses\r
+IFFY Encoding For Transmission of INTERCAL Code In IPv6 Addresses\r
.fi\r
.in 3\r
\r
.ti 0\r
Abstract\r
\r
-A method for embedding INTERCAL code snippets in IPV6 hexadectets is presented. The utility of this technique should be obvious.\r
+A method for embedding INTERCAL code snippets in IPv6 hexadectets is presented. The utility of this technique should be obvious.\r
\r
.\" \# TD4 -- Set TOC depth by altering this value (TD5 = depth 5)\r
.\" \# TOC -- Beginning of auto updated Table of Contents\r
\r
Since 1972 INTERCAL has presented an extreme example of exceptional qualities in programming-language design. For historical reasons, the language employs a syntax that makes extensive use of characters that are not merely special but downright bizarre. Consult [REVISED] and [REVAMPED] for a reference on INTERCAL and its character set.\r
\r
-Building on the specifications of [RFC1294], we present a means of encoding lines of INTERCAL code in the 128 bits of an IPV6 address using a base-85 encoding which, for no particular reason, we call IFFY. We are aware that this name violates longstanding tradition by not being a TLA [RFC5513], but INTERCAL has previously violated so many other traditions (as well as any notion of sanity) that this can hardly be considered a significant defect.\r
+Building on the specifications of [RFC1294], we present a means of encoding lines of INTERCAL code in the 128 bits of an IPv6 address using a base-85 encoding which, for no particular reason, we call IFFY. We are aware that this name violates longstanding tradition by not being a TLA [RFC5513], but INTERCAL has previously violated so many other traditions (as well as any notion of sanity) that this can hardly be considered a significant defect.\r
\r
.ti 0\r
1.1 Terminology\r
.ti 0\r
2.1 Prerequisites\r
\r
-Conformant implementations MUST implement [RFC1924] encoding in order to decode an IPV6 address into the correct representation of an INTERCAL statement. For purposes of this specification, we will implicate the author of that RFC by referring to the preceding transcoding as a 'forward Elz transform'. \r
+Conformant implementations MUST implement [RFC1924] encoding in order to decode an IPv6 address into the correct representation of an INTERCAL statement. For purposes of this specification, we will implicate the author of that RFC by referring to the preceding transcoding as a 'forward Elz transform'. \r
\r
-Conformant implementations MUST implement the inverse of [RFC1924] encoding in order to encode an INTERCAL statement into an IPV6 address. For purposes of this specification, we to the preceding transcoding as a 'reverse Elz transform'. In either case, Elz to pay.\r
+Conformant implementations MUST implement the inverse of [RFC1924] encoding in order to encode an INTERCAL statement into an IPv6 address. For purposes of this specification, we to the preceding transcoding as a 'reverse Elz transform'. In either case, Elz to pay.\r
\r
Conformant implementation SHALL begin by expressing the INTERCAL source code in the 7-bit ASCII "Atari" syntax. Support for the 8-bit EBCDIC Princeton syntax and 8-bit Latin-1 Princeton syntax are beyond the scope of this specification, and support for the 5-bit\r
Baudot Princeton syntax with shift codes is right out.\r
\r
2. Application of a reverse Elz transform to the transcoded version.\r
\r
-To perform an IFFY decode of an IPV6 address, simply reverse this: apply a forward \r
+To perform an IFFY decode of an IPv6 address, simply reverse this: apply a forward \r
Elz transform to the address, then reverse-transcode the resulting string. \r
\r
Certain characters used in the Atari INTERCAL syntax are omitted from the range of the forward Elz transform and must therefore be transcoded before the reverse can be applied. These characters are as follows:\r
\r
Comma, aka ASCII codepoint 46 decimal, aka INTERCAL "tail". We encode this as circumflex. aka ASCII codepoint 94, aka INTERCAL "backspark"\r
\r
-Because the reverse Elz transform imposes a limit of 20 characters on the length of string that can be encoded in an IPV6 address, and INTERCAL statements can be longer than this, the IFFY encoding requires an additional special character: equal sign, aka ASCII code point 61 decimal, aka INTERCAL "half-mesh". This indicates that the encoding is continued at next address.\r
+Because the reverse Elz transform imposes a limit of 20 characters on the length of string that can be encoded in an IPv6 address, and INTERCAL statements can be longer than this, the IFFY encoding requires an additional special character: equal sign, aka ASCII code point 61 decimal, aka INTERCAL "half-mesh". This indicates that the encoding is continued at next address.\r
\r
.bp\r
.ti 0\r
3 Security Considerations\r
\r
-INTERCAL is well known to promote (job) security, if at the expense of an occasional dose of a strong antipsychotic. IFFY encoding adds an additional steganographic layer; lacking prior knowledge that addresses are being used to encode INTERCAL, attackers will be unable to derange themselves by contemplating its actual semantics. Additionally, IFFY opens up some novel possibilities for hiding the implementation of sensitive algorithms, e.g. in routing tables.\r
+INTERCAL is well known to promote (job) security, if at the expense of an occasional dose of a strong antipsychotic. IFFY encoding adds an additional steganographic layer; lacking prior knowledge that addresses are being used to encode INTERCAL, attackers will be unable to derange themselves by contemplating its actual semantics. Additionally, IFFY opens up some novel possibilities for hiding the implementation of sensitive algorithms, e.g. in IPv6 routing tables.\r
\r
\r
.ti 0\r
.sp\r
.nf\r
Eric S. Raymond\r
-Eric Conpiracy Secret Labs\r
+Eric Conspiracy Secret Labs\r
Malvern, Pennsylvania 19355\r
\r
EMail: esr@thyrsus.com\r