One document matched: draft-josefsson-rfc4648-impl-report-01.xml
<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC989 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0989.xml'>
<!ENTITY RFC2045 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2045.xml'>
<!ENTITY RFC2938 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2938.xml'>
<!ENTITY RFC4648 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4648.xml'>
<!ENTITY RFC5155 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5155.xml'>
<!ENTITY RFC5801 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5801.xml'>
<!ENTITY RFC5657 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5657.xml'>
]>
<?rfc compact="yes"?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<rfc category="info" ipr="trust200902"
docName="draft-josefsson-rfc4648-impl-report-01">
<front>
<title abbrev="Implementation Report for RFC 4648">
Implementation Report for RFC 4648 Base Encodings
</title>
<author initials="S." surname="Josefsson" fullname="Simon Josefsson">
<organization>SJD AB</organization>
<address>
<email>simon@josefsson.org</email>
</address>
</author>
<date month="March" year="2011"/>
<abstract>
<t>This is an implementation report of RFC4648, for the purpose of
advancing the document to Draft Standard.</t>
<t>[[See <http://josefsson.org/base-encoding/> for more
information. RFC-EDITOR: remove this paragraph on
publication]].</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>This is an implementation report of <xref target="RFC4648">The
Base16, Base32, and Base64 Data Encodings</xref> document. It
follows the outline suggested by <xref target='RFC5657' />.</t>
</section>
<section title="Summary">
<t>The author believe that base encoding specification in RFC 4648
meets the requirements for Draft Standard.</t>
<t>The "base64" encoding is the base encoding variant with the
longest history of being used in Internet protocols. The earliest
use in the RFC series appears to be <xref target="RFC0989"/>.
Base64 has been widely implemented as part of MIME <xref
target="RFC2045"/>, which is already a Draft Standard.</t>
<t>The "base64url" alphabet is newer and is not as common as
"base64" although there are several interoperable
implementations.</t>
<t>The "base32" encoding is not as widely used as base64, but has
applications in case insensitive environments. The "base32"
encoding is used by <xref target='RFC5801'>GS2</xref>.</t>
<t>The "base32hex" encoding (without padding) is used by <xref
target="RFC5155"/>, and a restricted form is used by <xref
target="RFC2938"/>.</t>
<t>The "base16" encoding is usually referred to as hexadecimal, or
hex encoding, and is used in many protocols and technical documents
in an informal way.</t>
</section>
<section title="Methodology">
<t>We identified that we wanted to test at least two distinct
implementations of the following encodings: base64, base64url,
base32, base32hex, base16.</t>
<t>The primary test is of course that encoding and decoding of data
works and generate the expected results.</t>
<t>Section 3 of RFC 4648 discuss some implementation discrepancies
of base encoding. To iron out interoperability problems, we checked
these corner-cases separately and documented the result. In
particular: how line feeds are handled during encoding and decoding
[LF], whether padding is done correctly [PAD], how non-alphabetical
characters are handled [NONALPHA], whether pad bits are zero or not
[ZEROBITS].</t>
<t>A useful test vector for zero bit padding is correctly
implemented is "YR==" which is a non-canonical encoding of "a"
(ASCII 0x61), that normally would be encoded as "YQ==".
Implementations should normally reject the input.</t>
</section>
<section title="Exceptions">
<t>Basic encoding and decoding of data interoperate well.</t>
<t>Some tools accepted non-canonical encodings, but none appeared to
ever generate them. This is consistent with the requirements in
section 3.5 of RFC 4648.</t>
<t>We acknowledge that many implementations of base64 were written
for a general purpose, and thus may not follow some of the
guidelines (e.g., related to line feeds) in RFC 4648 strictly.
However we believe this should not be a reason against Draft
Standard status because the document is clear on the issues and the
variations in implementations does not lead to significant practical
problems. In fact, some of the variations are used to improve
robustness in face of common problems.</t>
</section>
<section title="Implementations Tested">
<section title="GNU Coreutils: base64">
<t>There is a "base64" command line tool, written in C, included
in GNU Coreutils <xref target="GNU-Coreutils-Base64"/>. It
supports the "base64" alphabet.</t>
<t>[LF]: On encoding, it wraps output after 76 characters (same as
MIME). On decoding, it accepts line-wrapped input.</t>
<t>[PAD]: It appears to pad data properly.</t>
<t>[NONALPHA]: It appears to return a non-zero error code if the
input contains non-alphabetical characters.</t>
<t>[ZEROBITS]: On encoding, the pad bits are zero. On decoding,
accepts non-zero pad bits.</t>
</section>
<section title="OpenSSL: base64">
<t>There is a "base64" command line tool, written in C, included
in OpenSSL <xref target="OpenSSL-Base64"/>. It supports the
"base64" alphabet.</t>
<t>[LF]: On encoding, it wraps output after 64 characters. On
decoding, it accepts line-wrapped input.</t>
<t>[PAD]: It appears to pad data properly.</t>
<t>[NONALPHA]: If there is non-alphabetic data in the input,
nothing appears to be decoded but there is no error message or
non-0 exit code.</t>
<t>[ZEROBITS]: On encoding, the pad bits are zero. On decoding,
it accepts non-zero pad bits.</t>
</section>
<section title="NSD: base32">
<t><xref target="NSD">The Name Server Daemon (NSD) version
3.2.7</xref> contains a "base32" implementation in the file
util.c.</t>
<t>[LF]: On encoding, it does not add any line feeds. On
decoding, it ignores any line feeds.</t>
<t>[PAD]: It does not pad data.</t>
<t>[NONALPHA]: It appears to return a non-zero error code if the
input contains non-alphabetical characters, except for white space
which is ignored.</t>
<t>[ZEROBITS]: On encoding, the pad bits are zero. On decoding,
it appears to accept non-zero pad bits.</t>
</section>
</section>
<section title="Acknowledgements">
<t>TBA</t>
</section>
<section title="Security Considerations">
<t>This memo introduces no new security considerations. RFC 4648
discuss security considerations for base encoding.</t>
</section>
<section title="IANA Considerations">
<t>This document has no actions for IANA.</t>
</section>
</middle>
<back>
<references title="Normative References">
&RFC4648;
</references>
<references title="Informative References">
&RFC989;
&RFC2045;
&RFC2938;
&RFC5155;
&RFC5657;
&RFC5801;
<reference anchor="GNU-Coreutils-Base64">
<front>
<title>GNU Coreutils base64 tool version 7.2</title>
<author initials="S" surname="Josefsson">
<organization></organization>
</author>
<date month="May" year="2009"/>
</front>
<seriesInfo name="WWW"
value="http://www.gnu.org/software/coreutils/"/>
</reference>
<reference anchor="OpenSSL-Base64">
<front>
<title>OpenSSL base64 tool version 0.9.8o</title>
<author initials="" surname="OpenSSL Team">
<organization></organization>
</author>
<date month="Jun" year="2010"/>
</front>
<seriesInfo name="WWW"
value="http://www.openssl.org/"/>
</reference>
<reference anchor="NSD">
<front>
<title>Name Server Daemon version 3.2.7</title>
<author initials="" surname="NLnet Labs">
<organization></organization>
</author>
<date month="Jan" year="2011"/>
</front>
<seriesInfo name="WWW"
value="http://www.nlnetlabs.nl/projects/nsd/"/>
</reference>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-21 17:42:08 |