<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<rfc category="info" docName="openid-artifact-binding-1_0.xml" ipr="full3978">
  <?rfc toc="yes" ?>

  <?rfc tocdepth="2" ?>

  <?rfc symrefs="yes" ?>

  <?rfc sortrefs="yes"?>

  <?rfc strict="yes" ?>

  <?rfc iprnotified="no" ?>

  <?rfc private="Draft" ?>

  <front>
    <title>OpenID Artifact Binding 1.0 - Draft02</title>

    <author fullname="specs@openid.net" initials="" surname="specs@openid.net">
      <organization></organization>
    </author>

    <date day="14" month="April" year="2010" />

    <abstract>
      <t>OpenID Authentication 2.0 defines the method to move Authentication
      and associated extension requests among the User, Relying Party, and the
      OpenID provider through HTTP POST or GET, i.e., it defines the POST and
      GET binding for OpenID messaging. This specification defines the
      Artifact Binding that sends the OpenID message directly from the Relying
      Party to the OpenID Provider and passes only a small reference data
      called Artifact through the browser so that large payload can be moved
      between the Relying Party and the OpenID Provider without hitting the
      browser URL and HTTP header size limitation. It also has value that it
      is more secure. In addition, by requiring HTTPS for the direct
      communication, it removed the requirement for symmetric signature on the
      assertion as well as the association that are required in OpenID
      Authentication 2.0 (POST/GET binding) making it dramatically simpler to
      implement. As higher security options, it introduces asymmetric
      signature and a variable to hold public key of the user so that it can
      also be used to send holder-of-key assertion. It also optionally
      encrypts the assertion for more security. If the relying party desires,
      it may also request other type of assertion other than Key-Value based
      one.</t>
    </abstract>
  </front>

  <middle>
    <section title="Requirements Notation and Conventions">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref target="RFC2119" />
      .</t>

      <t>Throughout this document, values are quoted to indicate that they are
      to be taken literally. When using these values in protocol messages, the
      quotes MUST NOT be used as part of the value.</t>
    </section>

    <section anchor="terminology" title="Terminology">
      <t>In addition to the terminology used in <xref
      target="OpenID.authentication-2.0" /> , following terms are used.</t>

      <t>
        <list style="hanging">
          <t hangText="Artifact:">An Artifact is a small text associated with
          the larger payload that identifies the payload.</t>
        </list>
      </t>
    </section>

    <section title="Protocol Overview">
      <t>
        <list style="numbers">
          <t>The end user <xref target="initiation">initiates
          authentication</xref> by presenting a User-Supplied Identifier to
          the Relying Party via their User-Agent.</t>

          <t>After normalizing the User-Supplied Identifier, the Relying Party
          performs discovery on it and establishes the OP Endpoint URL that
          the end user uses for authentication. It should be noted that the
          User-Supplied Identifier may be an OP Identifier, as discussed in
          Section 7.3.1 of OpenID Authentication 2.0, which allows selection
          of a Claimed Identifier at the OP or for the protocol to proceed
          without a Claimed Identifier if something else useful is being done
          via an?extension.</t>

          <t>The Relying Party Sends the OpenID Authentication Request to the
          OP via direct communication and obtains an Artifact, or creates
          request parameter file and assignes a URL for it so that it can send
          it in the next step.</t>

          <t>The Relying Party redirects the end user's User-Agent to the OP
          with an OpenID <xref
          target="artifact_authentication_request">Artifact Authentication
          request</xref> .</t>

          <t>The OP establishes whether the end user is authorized to perform
          OpenID Authentication and wishes to do so. The manner in which the
          end user authenticates to their OP and any policies surrounding such
          authentication is out of scope for this document.</t>

          <t>The OP redirects the end user's User-Agent back to the RP with
          Artifact Authentication Response.</t>

          <t>The RP GETs the assertion from the OP through direct
          communication (Direct Assertion Request and Response.)</t>

          <t>The Relying Party <xref target="verification">verifies </xref>
          the information received from the OP including checking the Return
          URL, verifying the discovered information, checking the nonce, and
          verifying the signature by using either the shared key established
          during the association or by sending a direct request to the OP.</t>
        </list>
      </t>

      <t>A Typical sequence can be depicted as follows: <figure>
          <artwork><![CDATA[User->UA: Click Login 
UA->RP: Login with identifier 
RP->RP: Normalize identifier
RP->OP: Get XRDS 
RP->RP: Find Service 
RP->OP: Direct AuthN Req 
OP->OP: Create Artifact 
OP->OP: Store Request 
OP-->RP: Artifact 
RP-->UA: Artifact Authentication Request 
UA->OP: Artifact Authentication Request 
opt If not immediate 
    OP-->UA: Credential Input Screen 
    User->UA: Input Credential 
    UA->OP: POST credential
    OP->OP: Check credential 
end 
OP->OP: Store Assertion 
OP-->UA: Artifact Authentication Response 
UA->RP: Artifact Authentication Response 
RP->OP: Direct Assertion Request 
OP-->RP: Direct Assertion Response 
RP->RP: Verify Assertion 
RP-->UA: Session ]]></artwork>
        </figure>artwork&gt;</t>
    </section>

    <section title="Data Formats">
      <t>Data Format is the same as in <xref
      target="OpenID.authentication-2.0" /> section 4.</t>
    </section>

    <section title="Communication Types">
      <t>Communication Types are the same as in <xref
      target="OpenID.authentication-2.0" /> section 5 apart from the fact that
      we call "indirect" in the above as "redirect" to avoid confusion in the
      terminology used at NIST SP800-63. In addition to those defined, the
      Artifact Binding uses Direct Communication for sending and receiving
      authentication message. All Direct Communication MUST be over SSL/TLS
      channel.</t>
    </section>

    <section anchor="generating_signatures" title="Generating Signatures">
      <t>Artifact Binding does not use symetric signature. To achieve higher
      level assurance levels, one MAY use asymetric signature which is
      described later.</t>

      <t>To generate a message signature:</t>

      <t>
        <list style="numbers">
          <t>Determine the list of keys to be signed, according to the message
          to be signed (See Section 10.1). The list of keys to be signed MUST
          be part of the message. The list is stored with the key
          "openid.signed". The value is a comma-separated list of keys, with
          the "openid." prefix stripped. This algorithm is only capable of
          signing keys that start with "openid."</t>

          <t>Iterate through the list of keys to be signed in the order they
          appear in "openid.signed" list. For each key, find the value in the
          message whose key is equal to the signed list key prefixed with
          "openid."</t>

          <t>Convert the list of key/value pairs to be signed to an octet
          string by encoding with Key-Value Form Encoding as specified in
          4.1.1 of <xref target="OpenID.authentication-2.0" /></t>

          <t>Apply the signature algorithm specified in the request to the
          octet string.</t>
        </list>
      </t>
    </section>

    <section title="Protocol">
      <section anchor="initiation" title="Initiation">
        <t>To initiate OpenID Authentication, the Relying Party SHOULD present
        the end user with a form that has a field for entering a User-Supplied
        Identifier.</t>

        <t>The form field's "name" attribute SHOULD have the value
        "openid_identifier", so that User-Agents can automatically determine
        that this is an OpenID form. Browser extensions or other software that
        support OpenID Authentication may not detect a Relying Party's support
        if this attribute is not set appropriately.</t>
      </section>

      <section anchor="normalization" title="Normalization">
        <t>
          <list style="numbers">
            <t>If the user supplied identifier string starts with "xri://",
            strip it.</t>

            <t>If the user supplied identifier string starts with "=", "@",
            "+", "$", "!", or "(", add https://xri.net/ to the string.</t>

            <t>If the user supplied identifier starts with http:// or https://
            do nothing.</t>

            <t>If there is no user supplied identifier, assume
            http://openid.net/spec/identifier_select.</t>
          </list>
        </t>
      </section>

      <section anchor="discovery" title="Discovery">
        <t>Discovery is the process where the Relying Party uses the
        Identifier to look up ("discover") the necessary information for
        initiating requests. <list style="numbers">
            <t>For the resulting URL, Yadis protocol SHALL be first attempted.
            If it succeeds, the result is an XRDS document from which one
            should discover the following elements:</t>

            <t>If the Yadis protocol fails and no valid XRDS document is
            retrieved, or no Service Elements are found in the XRDS document,
            the URL is retrieved and HTML-Based discovery SHALL be
            attempted.</t>
          </list></t>
      </section>

      <section anchor="direct_authentication_request"
               title="Direct Authencitaction Request (Optional)">
        <t>Via the Direct Authentication Request, the authentication request
        together with other extensions request such as AX and PAPE requests
        are sent to the OP Endpoint URL that was discovered previously. Direct
        Request is always over the SSL connection. No signature is required,
        but return_to is required and must match what is being advertised in
        the RP's XRDS. Also, the XRDS MUST contain CanonicalID (Subject in
        XRD), and this must be included in the request.</t>

        <t>Conceptually, here are two modes: "push" OR "pull".</t>

        <t>"Push" is an HTTP POST to the endpoint URL with all the parameter
        while "Pull" is the mode where only the URL of the "request parameter
        file" that includes all the "Push" parameters are handed to the OP in
        the "Artifact Authentication Request".</t>

        <t>"Push" Parameters sent are as follows:</t>

        <t><list style="symbols">
            <t>openid.ns <list style="empty">
                <t>Value: "http://specs.openid.net/auth/2.0"</t>
              </list></t>

            <t>openid.mode <list style="empty">
                <t>Value: "direct_checkid_immediate" or
                "direct_checkid_setup"</t>
              </list></t>

            <t>openid.claimed_id <list style="empty">
                <t>Value: (optional) The Claimed Identifier.</t>

                <t>"openid.claimed_id" and "openid.identity" SHALL be either
                both present or both absent. If neither value is present, the
                assertion is not about an identifier, and will contain other
                information in its payload, using <xref
                target="extensions">extensions</xref> .</t>
              </list></t>

            <t>openid.identity <list style="empty">
                <t>Value: (optional) The OP-Local Identifier.</t>

                <t>If a different OP-Local Identifier is not specified, the
                claimed identifier MUST be used as the value for
                openid.identity.</t>

                <t>Note: If this is set to the special value
                "http://specs.openid.net/auth/2.0/identifier_select" then the
                OP SHOULD choose an Identifier that belongs to the end user.
                This parameter MAY be omitted if the request is not about an
                identifier (for instance if an extension is in use that makes
                the request meaningful without it; see openid.claimed_id
                above).</t>
              </list></t>

            <t>openid.return_to <list style="empty">
                <t>Value: (optional) URL to which the OP SHOULD return the
                User-Agent with the response indicating the status of the
                request.</t>

                <t>Note: If this value is not sent in the request it signifies
                that the Relying Party does not wish for the end user to be
                returned.</t>

                <t>Note: The return_to URL MAY be used as a mechanism for the
                Relying Party to attach context about the authentication
                request to the authentication response. This document does not
                define a mechanism by which the RP can ensure that query
                parameters are not modified by outside parties; such a
                mechanism can be defined by the RP itself.</t>
              </list></t>

            <t>openid.enckey <list style="empty">
                <t>Value: (optional) Base64 public key certificate for
                encryption.</t>
              </list></t>

            <t>openid.sigalg <list style="empty">
                <t>Value: (optional)
                "http://www.w3.org/2000/09/xmldsig#rsa-sha1" or "none".</t>
              </list></t>

            <t>openid.proofkey <list style="empty">
                <t>Value: (optional) X.509 public key certificate of the user
                being authenticated.</t>
              </list></t>
          </list>Request Parameter File (rpf) is created by capturing all the
        above parameters into UTF-8 JSON format file, e.g.,</t>

        <t>
          <figure>
            <artwork><![CDATA[{
    "openid.ns":"http://specs.openid.net/auth/2.0",
    "openid.mode":"direct_checkid_setup",
    "openid.return_to":"https://example.com/rp/endpoint_url"
    "openid.ns.ax":"http://openid.net/srv/ax/1.0"
    "openid.ax.mode":"fetch_request"
    "openid.ax.type.fname":"http://example.com/schema/fullname"
    "openid.ax.type.gender":"http://example.com/schema/gender"
    "openid.ax.required":"fname,gender"
    "openid.ax.update_url":"http://idconsumer.com/update?transaction_id=a6b5c4"
}
]]></artwork>
          </figure>
        </t>
      </section>

      <section anchor="direct_authentication_request_response"
               title="Direct Authentication Request Response">
        <t>When Direct Authentication Request is received successfully, the OP
        performs request validation. Request validation includes Return URL
        Verification as in <xref target="OpenID.authentication-2.0" /> section
        9.2.</t>

        <t>If the request is valid, the OP returns the following fields in the
        HTTP response body.</t>

        <t>
          <list style="symbols">
            <t>openid.ns <list style="empty">
                <t>Value: "http://specs.openid.net/auth/2.0"</t>
              </list></t>

            <t>openid.mode <list style="empty">
                <t>Value: direct_checkid_accepted</t>
              </list></t>

            <t>openid.artifact <list style="empty">
                <t>Value: A unique short string less than 400 characters. The
                Artifact may be used over a redirect request, the Artifact
                Authentication Request, subsequently.</t>
              </list></t>
          </list>
        </t>
      </section>

      <section anchor="artifact_authentication_request"
               title="Artifact Authentication Request">
        <t>Upon receipt of the Artifact, RP should send the Artifact
        Authentication Request to the OP. Fields are as follows:</t>

        <t>
          <list style="symbols">
            <t>openid.ns <list style="empty">
                <t>As specified in Section 4.1.2 of <xref
                target="OpenID.authentication-2.0" /> .</t>
              </list></t>

            <t>openid.mode <list style="empty">
                <t>Value: art_req</t>
              </list></t>

            <t>openid.artifact <list style="empty">
                <t>Value: (Optional) The Artifact value returned by OP on
                <xref target="direct_authentication_request_response" /> .
                Only either the openid.artifact or openid.ppfurl should be
                present in a request.</t>
              </list></t>

            <t>openid.rpfurl <list style="empty">
                <t>Value: (Optional) URL of the request parameter file.
                Optionally, one can put the SHA256 hash of the file after "#".
                Only either the openid.artifact or openid.ppfurl should be
                present in a request.</t>
              </list></t>
          </list>
        </t>
      </section>

      <section anchor="artifact_authentication_response"
               title="Artifact Authentication Response">
        <t>Upon receipt of the Artifact Authentication Request, the OP
        determines if it should retrive the request parameter based on
        artifact or rpfurl. If it is to be based on the artifact, the OP
        retrieves it in the manner OP implemented it. If it were to be
        retrieved from rpfurl, then the OP MUST send a GET request to the
        rpfurl to retrieve the content and parse it to recreate the request
        parameters. Once this is done, the OP MUST determine that an
        authorized end user wishes to complete the authentication in the
        manner described in Section 10 of the <xref
        target="OpenID.authentication-2.0" /> . Once it is determined, the OP
        creates either positive or negative assertion and associated artifact
        and returns the response as follows:</t>

        <t>
          <list style="symbols">
            <t>openid.ns <list style="empty">
                <t>As specified in Section 4.1.2 of <xref
                target="OpenID.authentication-2.0" /> .</t>
              </list></t>

            <t>openid.mode <list style="empty">
                <t>Value: "art_res"</t>
              </list></t>

            <t>openid.artifact <list style="empty">
                <t>Value: The Artifact value corresponding to the Assertion is
                created. The Artifact value must include the string
                constructed from a cryptographically strong random or
                pseudorandom number sequence [RFC1750] generated by the
                OP.</t>

                <t>If the Request Artifact was not found at the OP, it MUST be
                a string "INVALID".</t>
              </list></t>
          </list>
        </t>

        <t>No other parameter should be returned.</t>
      </section>

      <section anchor="direct_assertion_request"
               title="Direct Assertion Request">
        <t>If valid openid.artifact was returned, the RP SHOULD request the OP
        in direct communication with the following parameters:</t>

        <t>
          <list style="symbols">
            <t>openid.ns <list style="empty">
                <t>As specified in Section 4.1.2 of <xref
                target="OpenID.authentication-2.0" /> .</t>
              </list></t>

            <t>openid.mode <list style="empty">
                <t>Value: "direct_assertion_req"</t>
              </list></t>

            <t>openid.artifact <list style="empty">
                <t>Value: The Artifact value received in the <xref
                target="artifact_authentication_response" /> Artifact
                Authentication Response.</t>
              </list></t>
          </list>
        </t>

        <t>On receipt of such request, the OP should return the assertion
        created previously as the payload of the response to this request.</t>
      </section>

      <section anchor="direct_assertion_response"
               title="Direct Assertion Response">
        <t>Upon receipt of the Direct Assertion Request, OP MUST return either
        Positive or Negative Assertion as defined in <xref
        target="OpenID.authentication-2.0" /> in the HTTP/S response body with
        the exception of openid.invalidate_handle, openid.assoc_handle,
        openid.signed, openid.sig, which are unnecessary.</t>

        <t>When asymmetric signature is used, then the assertion must be
        Base64ed without line break, and signature should be applied as in
        SAML Simple Sign. Variables returned in response are as follows:</t>

        <t>
          <list style="symbols">
            <t>openid.response <list style="empty">
                <t>Value: Base64 converted OpenID assertion.</t>
              </list></t>
          </list>

          <list style="symbols">
            <t>openid.sig <list style="empty">
                <t>Value: Base64 converted version of the value yielded by
                feeding the raw string before Base64 of the openid.response
                .</t>
              </list></t>
          </list>
        </t>
      </section>

      <section anchor="verification" title="Verifying Assertions">
        <t>Assertion verification is done as in Section 11.1 to 11.3 of <xref
        target="OpenID.authentication-2.0" /> . In addition, if signature is
        used, the following signature verification must be performed.</t>

        <section anchor="signature_verification"
                 title="Signature Verification. ">
          <t>Signature verification is performed in the following steps.</t>

          <t>
            <list style="numbers">
              <t>Base 64 decode the openid.response.</t>

              <t>Calculate the signature over it and compaire it with
              openid.sig.</t>
            </list>
          </t>

          <t />
        </section>
      </section>
    </section>

    <section anchor="extensions" title="Extensions">
      <t>Extensions are as defined in Section 12 of <xref
      target="OpenID.authentication-2.0" /> . In addition, this specification
      adds &ldquo;artifact&rdquo; in the disallowed aliases.</t>
    </section>

    <section anchor="rp_discovery" title="Discovering OpenID Relying Parties">
      <t>Relying Party Discovery is as in Section 13 of <xref
      target="OpenID.authentication-2.0" /> . Note that since signature is not
      used in some cases, RP supporting Artifact Binding MUST support this
      feature.</t>

      <t>Non-normative example:</t>

      <t>
        <figure>
          <artwork><![CDATA[<XRD>
    <CanonicalID>http://rp.example.com/#134592834fjs02</CanonicalID>
    <Service xmlns="xri://$xrd*($v*2.0)">
          <Type>http://specs.openid.net/auth/2.0/return_to</Type>
          <URI>http://consumer.example.com/return</URI>
    </Service>
</XRD>]]></artwork>
        </figure>
      </t>
    </section>

    <section anchor="security_considerations" title="Security Considerations">
      <t>Followings are the list of attack vectors and remedies that were
      considered for this specification.</t>

      <t>For details of the attack vector, see <xref target="SP800-63" />.</t>

      <section anchor="assertion_manufacture"
               title="Assertion manufacture/modification">
        <t>To be completed. </t>
      </section>

      <section anchor="assertion_disclosure" title="Assertion disclosure">
        <t>To be completed. </t>
      </section>

      <section anchor="assertion_repudiation" title="Assertion repudiation">
        <t>To be completed. </t>
      </section>

      <section anchor="assertion_redirect" title="Assertion redirect">
        <t>To be completed. </t>
      </section>

      <section anchor="assertion_reuse" title="Assertion reuse">
        <t>To be completed. </t>
      </section>

      <section anchor="artifact_manufacture"
               title="Secondary authenticator manufacture">
        <t>To be completed. </t>
      </section>

      <section anchor="artifact_capture"
               title="Secondary authenticator capture">
        <t>To be completed. </t>
      </section>

      <section anchor="assertion_substitution" title="Assertion substitution">
        <t>To be completed. </t>
      </section>

      <section anchor="auth_req_disclosure"
               title="Authentication Request Disclosure">
        <t>To be completed. </t>
      </section>

      <section anchor="authn_proc_threats"
               title="Authentication Process Threats">
        <t>In the category of Authentication Process Threats, following
        threats exists.</t>

        <t><list style="symbols">
            <t>Online guessing</t>

            <t>Phishing</t>

            <t>Pharming</t>

            <t>Eavesdropping</t>

            <t>Repley</t>

            <t>Session hijack</t>

            <t>Man-in-the-middle</t>
          </list>Authentication process per se as described in NIST
        SP800-63-rev1 is out of scope for this protocol, but care should be
        taken to achieve appropriate protection.</t>
      </section>
    </section>

    <section anchor="comformance" title="Comformance">
      <t>To be completed. </t>
    </section>

    <section anchor="acknowledgements" title="Appendix A. Acknowledgements">
      <t>As a binding of OpenID Authentication, this specification heavily
      relies on OpenID Authentication 2.0. Please refer to Appendix C of
      OpenID Authentication 2.0 for the full list of the contributors for
      OpenID Authentication 2.0.</t>

      <t>In addition, the OpenID Community would like to thank the following
      people for the work they've done in the drafting and editing of this
      specification.</t>

      <t>
        <list style="empty">
          <t>Breno de Madiros (breno@gmail.com)</t>

          <t>Hideki Nara (hideki.nara@gmail.com)</t>

          <t>John Bradley (jbradely@mac.com)</t>

          <t>Nat Sakimura (sakimura@gmail.com) &lt;author/editor&gt;</t>
        </list>
      </t>
    </section>

    <appendix title="Acknowledgements">
      <t />
    </appendix>
  </middle>

  <back>
    <references title="Normative References">
      <reference anchor="OpenID.authentication-2.0">
        <front>
          <title>OpenID Authentication 2.0</title>

          <author fullname="specs@openid.net" initials=""
                  surname="specs@openid.net">
            <organization abbrev="oidf"></organization>
          </author>

          <date year="2007" />
        </front>

        <format target="http://www.openid.net/specs/openid-authentication-2_0.txt"
                type="TXT" />

        <format target="http://www.openid.net/specs/openid-authentication-2_0.html"
                type="HTML" />
      </reference>

      <reference anchor="RFC3629">
        <front>
          <title>UTF-8, a transformation format of Unicode and ISO
          10646</title>

          <author fullname="Francois Yergeau" initials="F.Y" surname="Yergeau">
            <organization />
          </author>
        </front>

        <seriesInfo name="RFC" value="3629" />
      </reference>

      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement
          Levels</title>

          <author fullname="Scott Bradner" initials="B.S" surname="Bradner">
            <organization>Alis Technologies</organization>
          </author>
        </front>

        <seriesInfo name="RFC" value="2119" />
      </reference>

      <reference anchor="SP800-63">
        <front>
          <title>NIST SP800-63rev.1: Electronic Authentication
          Guideline</title>

          <author fullname="William E. Burr, et al.">
            <organization></organization>
          </author>

          <date day="8" month="December" year="2008" />
        </front>
      </reference>

      <reference anchor="RFC3986">
        <front>
          <title>Uniform Resource Identifiers (URI): Generic Syntax</title>

          <author fullname="T. Berners-Lee" initials="T.L"
                  surname="Berners-Lee">
            <organization />
          </author>
        </front>

        <seriesInfo name="RFC" value="3986" />
      </reference>

      <reference anchor="RFC1750">
        <front>
          <title>Randomness Recommendations for Security</title>

          <author fullname="Donald E. Eastlake, 3rd" initials="D.E"
                  surname="Eastlake">
            <organization>Digital Equipment Corporation</organization>
          </author>

          <author fullname="Stephen D. Crocker" initials="S.C"
                  surname="Crocker">
            <organization>CyberCash, Inc.</organization>
          </author>

          <author fullname="Jeffery I. Schiller" initials="J.S"
                  surname="Schiller">
            <organization>Massachusetts Institute of Technology</organization>
          </author>
        </front>

        <seriesInfo name="RFC" value="1750" />
      </reference>

      <reference anchor="RFC2631">
        <front>
          <title>Diffie-Hellman Key Agreement Method</title>

          <author fullname="Eric Rescorla" initials="E.R" surname="Rescorla">
            <organization />
          </author>
        </front>

        <seriesInfo name="RFC" value="2631" />
      </reference>

      <reference anchor="RFC3548">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>

          <author fullname="Simon Josefsson" initials="S.J"
                  surname="Josefsson">
            <organization />
          </author>
        </front>

        <seriesInfo name="RFC" value="3548" />
      </reference>

      <reference anchor="RFC2104">
        <front>
          <title>HMAC: Keyed-Hashing for Message Authentication</title>

          <author fullname="Hugo Krawczyk" initials="H.K" surname="Krawczyk">
            <organization>IBM</organization>
          </author>

          <author fullname="Mihir Bellare" initials="M.B" surname="Bellare">
            <organization>UCSD</organization>
          </author>

          <author fullname="Ran Canetti" initials="R.C" surname="Canetti">
            <organization>IBM</organization>
          </author>
        </front>

        <seriesInfo name="RFC" value="2104" />
      </reference>

      <reference anchor="FIPS180-2">
        <front>
          <title>Secure Hash Signature Standard</title>

          <author>
            <organization>U.S. Department of Commerce</organization>
          </author>

          <author>
            <organization>National Institute of Standards and
            Technology</organization>
          </author>
        </front>

        <seriesInfo name="FIPS" value="180-2" />

        <format target="http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf"
                type="PDF" />

        <annotation>Defines Secure Hash Algorithm 256 (SHA256)</annotation>
      </reference>

      <reference anchor="HTML401">
        <front>
          <title>HTML 4.01 Specification</title>

          <author>
            <organization>W3C</organization>
          </author>
        </front>

        <format target="http://www.w3.org/TR/html401" type="HTML" />
      </reference>

      <reference anchor="RFC2616">
        <front>
          <title>Hypertext Transfer Protocol -- HTTP/1.1</title>

          <author fullname="R. Fielding" initials="R.F" surname="Fielding">
            <organization>UC Irvine</organization>
          </author>

          <author fullname="J. Gettys" initials="J.G" surname="Gettys">
            <organization>Compaq/W3C</organization>
          </author>

          <author fullname="J. Mogul" initials="J.M" surname="Mogul">
            <organization>Compaq</organization>
          </author>

          <author fullname="H. Frystyk" initials="H.F" surname="Frystyk">
            <organization>W3C/MIT</organization>
          </author>

          <author fullname="L. Masinter" initials="L.M" surname="Masinter">
            <organization>Xerox</organization>
          </author>

          <author fullname="P. Leach" initials="P.L" surname="Leach">
            <organization>Microsoft</organization>
          </author>

          <author fullname="T. Berners-Lee" initials="T.L"
                  surname="Berners-Lee">
            <organization>W3C/MIT</organization>
          </author>
        </front>

        <seriesInfo name="RFC" value="2616" />
      </reference>
    </references>
  </back>
</rfc>
