Commits

hideki nara committed 5c8bb54

udpate some specifications

Comments (0)

Files changed (28)

docs/source/jose.rst

+================
+jose library
+================
+
+jose
+=============
+
+.. automodule:: jose
+    :members:
+
+
+jose.jwt
+=============
+
+.. automodule:: jose.jwt
+    :members:
+
+jose.jwt.tokens
+=====================
+.. automodule:: jose.jwt.tokens
+    :members:

docs/source/jwa.rst

+==========================================
+JSON Web Algorithms (JWA)
+==========================================
+
+Based on draft-ietf-jose-json-web-algorithms-00
+
+- http://self-issued.info/docs/draft-ietf-jose-json-web-algorithms-00.html
+- January 16, 2012
+
+.. _jwa.abstract:
+
+.. include:: jwa/abstract.rst
+
+.. contents:: Table of Contents
+
+.. _jwa.1:
+
+.. include:: jwa/1.rst
+
+.. _jwa.2:
+
+.. include:: jwa/2.rst
+
+.. _jwa.3:
+
+.. include:: jwa/3.rst
+
+.. _jwa.3.1:
+
+.. include:: jwa/3.1.rst
+
+.. _jwa.3.2:
+
+.. include:: jwa/3.2.rst
+
+.. _jwa.3.3:
+
+.. include:: jwa/3.3.rst
+
+.. _jwa.3.4:
+
+.. include:: jwa/3.4.rst
+
+
+.. _jwa.4:
+
+.. include:: jwa/4.rst
+
+.. _jwa.4.1:
+
+.. include:: jwa/4.1.rst
+
+.. _jwa.4.2:
+
+.. include:: jwa/4.2.rst
+
+.. _jwa.5:
+
+.. include:: jwa/5.rst
+
+.. _jwa.6:
+
+.. include:: jwa/6.rst
+
+.. _jwa.7:
+
+.. include:: jwa/7.rst
+
+.. _jwa.8:
+
+.. include:: jwa/8.rst
+
+.. _jwa.8.1:
+
+.. include:: jwa/8.1.rst
+
+.. _jwa.8.2:
+
+.. include:: jwa/8.2.rst
+
+.. _jwa.appendix.a:
+
+.. include:: jwa/appendix.a.rst
+
+.. _jwa.appendix.b:
+
+.. include:: jwa/appendix.b.rst

docs/source/jwa/1.rst

+1.  Introduction
+===================
+
+The JSON Web Algorithms (JWA) specification 
+enumerates cryptographic algorithms and identifiers 
+to be used with the JSON Web Signature (JWS) [:term:`JWS`] and JSON Web Encryption (JWE) [:term:`JWE`] specifications. 
+
+Enumerating the algorithms and identifiers for them in this specification, 
+rather than in the JWS and JWE specifications, 
+is intended to allow them to remain unchanged in the face of changes in the set of required, 
+recommended, optional, and deprecated algorithms over time. 
+
+This specification also describes the semantics and operations that are specific to these algorithms and algorithm families.
+
+(00)

docs/source/jwa/2.rst

+2.  Terminology
+=====================
+
+This specification uses the terminology defined by the JSON Web Signature (JWS) [JWS] and JSON Web Encryption (JWE) [JWE] specifications.
+
+
+(00)

docs/source/jwa/3.1.rst

+3.1.  Creating a JWS with HMAC SHA-256, HMAC SHA-384, or HMAC SHA-512
+--------------------------------------------------------------------------------
+
+.. note::
+    HMAC section
+
+Hash based Message Authentication Codes (HMACs) enable 
+one to use a **secret** plus a :term:`cryptographic hash function` 
+to generate a Message Authentication Code (MAC). 
+This can be used to demonstrate that 
+the :term:`MAC` matches the hashed content, 
+in this case the :term:`JWS Secured Input`, 
+which therefore demonstrates that whoever generated the MAC was in possession of the secret. 
+The means of exchanging the :term:`shared key` [#]_ is outside the scope of this specification.
+
+.. [#] Shared secret ? 
+
+The algorithm for implementing and validating HMACs is provided in RFC 2104 [:term:`RFC2104`]. 
+This section defines the use of the 
+HMAC SHA-256, 
+HMAC SHA-384, and 
+HMAC SHA-512 
+cryptographic hash functions as defined in FIPS 180-3 [:term:`FIPS.180‑3`]. 
+The :term:`alg` (algorithm) header parameter values :term:`HS256`, :term:`HS384`, and :term:`HS512` 
+are used in the :term:`JWS Header` 
+to indicate that the :term:`Encoded JWS Signature` 
+contains a :term:`base64url` encoded :term:`HMAC` value 
+using the respective hash function.
+
+The HMAC SHA-256 MAC is generated as follows:
+
+    1.  Apply the :term:`HMAC SHA-256` algorithm to the UTF-8 representation of the :term:`JWS Secured Input` 
+        using the :term:`shared key` to produce an :term:`HMAC` value.
+    2.  :term:`Base64url` encode the resulting HMAC value.
+    3.  The output is the :term:`Encoded JWS Signature` for that :term:`JWS`.
+
+The HMAC SHA-256 MAC for a JWS is validated as follows:
+
+    1.  Apply the :term:`HMAC SHA-256` algorithm to the UTF-8 representation of the :term:`JWS Secured Input` 
+        of the JWS using the :term:`shared key`.
+    2.  :term:`Base64url` encode the resulting :term:`HMAC` value.
+    3.  If the :term:`JWS Signature` and the base64url encoded HMAC value exactly match, 
+        then one has confirmation that the :term:`shared key` was used to generate the HMAC 
+        on the JWS and that the contents of the JWS have not be tampered with.
+    4.  If the validation fails, the JWS MUST be rejected.
+
+Securing content with the :term:`HMAC SHA-384` and :term:`HMAC SHA-512` algorithms is performed identically 
+to the procedure for :term:`HMAC SHA-256` - just with correspondingly longer key and result values.
+
+
+(00)

docs/source/jwa/3.2.rst

+3.2.  Creating a JWS with RSA SHA-256, RSA SHA-384, or RSA SHA-512
+------------------------------------------------------------------------------------
+
+.. note::
+    RSA
+
+This section defines the use of the :term:`RSASSA-PKCS1-v1_5` digital signature algorithm 
+as defined in RFC 3447 [:term:`RFC3447`], Section 8.2 (commonly known as :term:`PKCS#1`), 
+using SHA-256, SHA-384, or SHA-512 as the hash function. 
+The :term:`RSASSA-PKCS1-v1_5` algorithm is described in FIPS 186-3 [:term:`FIPS.186‑3`], Section 5.5, 
+and the :term:`SHA-256`, :term:`SHA-384`, and :term:`SHA-512` cryptographic hash functions are defined 
+in FIPS 180-3 [:term:`FIPS.180‑3`]. 
+The :term:`alg` (algorithm) header parameter values RS256, RS384, and RS512 are used in the :term:`JWS Header` 
+to indicate that the :term:`Encoded JWS Signature` contains a :term:`base64url` encoded RSA digital signature 
+using the respective hash function.
+
+A **2048-bit** or longer key length MUST be used with this algorithm.
+
+The RSA SHA-256 digital signature is generated as follows:
+
+    1.  Generate a digital signature of the UTF-8 representation of the :term:`JWS Secured Input` 
+        using RSASSA-PKCS1-V1_5-SIGN and the SHA-256 hash function with the desired private key. 
+        The output will be a byte array.
+    2.  Base64url encode the resulting byte array.
+    3.  The output is the :term:`Encoded JWS Signature` for that JWS.
+
+The RSA SHA-256 digital signature for a JWS is validated as follows:
+
+    1.  Take the :term:`Encoded JWS Signature` and base64url decode it into a byte array. 
+        If decoding fails, the JWS MUST be rejected.
+    2.  Submit the UTF-8 representation of the :term:`JWS Secured Input` and the public key 
+        corresponding to the private key used by the signer to the RSASSA-PKCS1-V1_5-VERIFY algorithm 
+        using SHA-256 as the hash function.
+    3.  If the validation fails, the JWS MUST be rejected.
+
+Signing with the RSA SHA-384 and RSA SHA-512 algorithms is performed identically to the procedure for RSA SHA-256 - just with correspondingly longer key and result values.
+(00)

docs/source/jwa/3.3.rst

+3.3.  Creating a JWS with ECDSA P-256 SHA-256, ECDSA P-384 SHA-384, or ECDSA P-521 SHA-512
+------------------------------------------------------------------------------------------------------------
+
+The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined by FIPS 186-3 [FIPS.186‑3]. ECDSA provides for the use of Elliptic Curve cryptography, which is able to provide equivalent security to RSA cryptography but using shorter key lengths and with greater processing speed. This means that ECDSA digital signatures will be substantially smaller in terms of length than equivalently strong RSA digital signatures.
+
+This specification defines the use of ECDSA with the P-256 curve and the SHA-256 cryptographic hash function, ECDSA with the P-384 curve and the SHA-384 hash function, and ECDSA with the P-521 curve and the SHA-512 hash function. The P-256, P-384, and P-521 curves are also defined in FIPS 186-3. The alg (algorithm) header parameter values ES256, ES384, and ES512 are used in the JWS Header to indicate that the Encoded JWS Signature contains a base64url encoded ECDSA P-256 SHA-256, ECDSA P-384 SHA-384, or ECDSA P-521 SHA-512 digital signature, respectively.
+
+The ECDSA P-256 SHA-256 digital signature is generated as follows:
+
+    1.  Generate a digital signature of the UTF-8 representation of 
+        the JWS Secured Input using ECDSA P-256 SHA-256 with the desired private key. 
+        The output will be the EC point (R, S), where R and S are unsigned integers.
+    2.  Turn R and S into byte arrays in big endian order. 
+        Each array will be 32 bytes long.
+    3.  Concatenate the two byte arrays in the order R and then S.
+    4.  Base64url encode the resulting 64 byte array.
+
+The output is the :term:`Encoded JWS Signature` for the JWS.
+
+The ECDSA P-256 SHA-256 digital signature for a JWS is validated as follows:
+
+    1.  Take the Encoded JWS Signature and base64url decode it into a byte array. If decoding fails, the JWS MUST be rejected.
+    2.  The output of the base64url decoding MUST be a 64 byte array.
+    3.  Split the 64 byte array into two 32 byte arrays. 
+        The first array will be R and the second S. Remember that the byte arrays are in big endian byte order; 
+        please check the ECDSA validator in use to see what byte order it requires.
+    4.  Submit the UTF-8 representation of the :term:`JWS Secured Input`, R, S 
+        and the public key (x, y) to the ECDSA P-256 SHA-256 validator.
+    5.  If the validation fails, the JWS MUST be rejected.
+
+The ECDSA validator will then determine if the digital signature is valid, given the inputs. Note that ECDSA digital signature contains a value referred to as K, which is a random number generated for each digital signature instance. This means that two ECDSA digital signatures using exactly the same input parameters will output different signature values because their K values will be different. The consequence of this is that one must validate an ECDSA digital signature by submitting the previously specified inputs to an ECDSA validator.
+
+Signing with the ECDSA P-384 SHA-384 and ECDSA P-521 SHA-512 algorithms is performed identically to the procedure for ECDSA P-256 SHA-256 - just with correspondingly longer key and result values.
+
+
+(00)

docs/source/jwa/3.4.rst

+3.4.  Additional Digital Signature/HMAC Algorithms
+------------------------------------------------------------------------
+
+Additional algorithms MAY be used 
+to protect JWSs with corresponding :term:`alg` (algorithm) header parameter values 
+being defined to refer to them. 
+New :term:`alg` header parameter values SHOULD either be defined in the :term:`IANA JSON Web Signature Algorithms` registry 
+or be a URI that contains a collision resistant namespace. 
+In particular, 
+it is permissible to use the algorithm identifiers defined in XML DSIG [:term:`RFC3275`] and related specifications as alg values.
+
+(00)

docs/source/jwa/3.rst

+3.  Cryptographic Algorithms for JWS
+============================================================
+
+JWS uses cryptographic algorithms to sign the contents of the JWS Header and the JWS Payload. 
+The use of the following algorithms for producing JWSs is defined in this section.
+
+The table below Table 1 is the set of alg (algorithm) header parameter values defined by this specification for use with JWS, each of which is explained in more detail in the following sections:
+
+
+.. list-table:: Table 1: JWS Defined "alg" Parameter Values 
+
+    *   - Alg Parameter Value 
+        - Algorithm
+
+    *   - HS256   
+        - HMAC using SHA-256 hash algorithm
+
+    *   - HS384   
+        - HMAC using SHA-384 hash algorithm
+
+    *   - HS512   
+        - HMAC using SHA-512 hash algorithm
+
+    *   - RS256   
+        - RSA using SHA-256 hash algorithm
+
+    *   - RS384   
+        - RSA using SHA-384 hash algorithm
+
+    *   - RS512   
+        - RSA using SHA-512 hash algorithm
+
+    *   - ES256   
+        - ECDSA using P-256 curve and SHA-256 hash algorithm
+
+    *   - ES384   
+        - ECDSA using P-384 curve and SHA-384 hash algorithm
+
+    *   - ES512   
+        - ECDSA using P-521 curve and SHA-512 hash algorithm
+
+See :ref:`Appendix A <jaw.appendix.a>` for a table cross-referencing 
+the digital signature and :term:`HMAC` :term:`alg` (algorithm) values 
+used in this specification with the equivalent identifiers used by other standards and software packages.
+
+Of these algorithms, 
+only :term:`HMAC` :term:`SHA-256` MUST be implemented by conforming JWS implementations. 
+
+It is RECOMMENDED that 
+implementations also support the :term:`RSA` :term:`SHA-256` and :term:`ECDSA` :term:`P-256` :term:`SHA-256` algorithms. 
+Support for other algorithms and key sizes is OPTIONAL.
+
+(00)

docs/source/jwa/4.1.rst

+4.1.  Encrypting a JWE with TBD
+------------------------------------
+
+TBD: Descriptions of the particulars of using each specified encryption algorithm go here.
+
+(00)
+
+

docs/source/jwa/4.2.rst

+4.2.  Additional Encryption Algorithms
+------------------------------------------------
+
+Additional algorithms MAY be used to protect JWEs with corresponding :term:`alg` (algorithm) 
+and :term:`enc` (encryption method) header parameter values 
+being defined to refer to them. 
+New alg and enc header parameter values SHOULD either be defined in the :term:`IANA JSON Web Encryption Algorithms` registry 
+or be a URI that contains a collision resistant namespace. 
+In particular, 
+it is permissible to use the algorithm identifiers defined in XML Encryption [:term:`W3C.REC‑xmlenc‑core‑20021210`], 
+XML Encryption 1.1 [:term:`W3C.CR‑xmlenc‑core1‑20110303`], 
+and related specifications as alg and enc values.
+
+(00)

docs/source/jwa/4.rst

+4.  Cryptographic Algorithms for JWE
+=============================================
+
+JWE uses cryptographic algorithms to encrypt the :term:`Content Encryption Key` (:term:`CEK`) and the :term:`Plaintext`. 
+This section specifies a set of specific algorithms for these purposes.
+
+The table below Table 2 is the set of alg (algorithm) header parameter values that are defined by this specification for use with JWE. These algorithms are used to encrypt the CEK, which produces the JWE Encrypted Key.
+
+.. list-table::  Table 2: JWE Defined "alg" Parameter Values 
+    :header-rows: 1
+
+    *   - alg Parameter Value 
+        - Encryption Algorithm
+
+    *   - RSA1_5  
+        - RSA using RSA-PKCS1-1.5 padding, as defined in RFC 3447 [RFC3447]
+
+    *   - RSA-OAEP    
+        - RSA using Optimal Asymmetric Encryption Padding (OAEP), as defined in RFC 3447 [RFC3447]
+
+    *   - ECDH-ES 
+        - Elliptic Curve Diffie-Hellman Ephemeral Static, as defined in RFC 6090 [RFC6090], 
+          and using the Concat KDF, as defined in [NIST‑800‑56A], 
+          where the Digest Method is SHA-256
+
+    *   - A128KW  
+        - Advanced Encryption Standard (AES) Key Wrap Algorithm using 128 bit keys, as defined in RFC 3394 [RFC3394]
+
+    *   - A256KW  
+        - Advanced Encryption Standard (AES) Key Wrap Algorithm using 256 bit keys, as defined in RFC 3394 [RFC3394]
+
+    *   - A128GCM 
+        - Advanced Encryption Standard (AES) using 128 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
+
+    *   - A256GCM 
+        - Advanced Encryption Standard (AES) using 256 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
+
+The table below Table 3 is the set of enc (encryption method) header parameter values that are defined by this specification for use with JWE. These algorithms are used to encrypt the Plaintext, which produces the Ciphertext.
+
+
+.. list-table::  Table 3: JWE Defined "enc" Parameter Values 
+
+    *   - enc Parameter Value 
+        - Symmetric Encryption Algorithm
+
+    *   - A128CBC 
+        - Advanced Encryption Standard (AES) using 128 bit keys in Cipher Block Chaining mode, as defined in [FIPS‑197] and [NIST‑800‑38A]
+
+    *   - A256CBC 
+        - Advanced Encryption Standard (AES) using 256 bit keys in Cipher Block Chaining mode, as defined in [FIPS‑197] and [NIST‑800‑38A]
+
+    *   - A128GCM 
+        - Advanced Encryption Standard (AES) using 128 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
+   
+    *   - A256GCM 
+        - Advanced Encryption Standard (AES) using 256 bit keys in Galois/Counter Mode, as defined in [FIPS‑197] and [NIST‑800‑38D]
+
+See Appendix B for a table cross-referencing the encryption alg (algorithm) and 
+alg (encryption method) values used in this specification with the equivalent identifiers used by other standards and software packages.
+
+Of these algorithms, only :term:`RSA-PKCS1-1.5` with 2048 bit keys, AES-128-CBC, and AES-256-CBC MUST be implemented by conforming JWE implementations. 
+It is RECOMMENDED that implementations also support ECDH-ES with 256 bit keys, AES-128-GCM, and AES-256-GCM. Support for other algorithms and key sizes is OPTIONAL.
+
+(00)

docs/source/jwa/5.rst

+5.  IANA Considerations
+==========================================
+
+This specification calls for:
+
+A new IANA registry entitled "JSON Web Signature Algorithms" for values of the JWS alg (algorithm) header parameter is defined in Section 3.4. Inclusion in the registry is RFC Required in the RFC 5226 [RFC5226] sense. The registry will just record the alg value and a pointer to the RFC that defines it. This specification defines inclusion of the algorithm values defined in Table 1.
+A new IANA registry entitled "JSON Web Encryption Algorithms" for values used with the JWE alg (algorithm) and enc (encryption method) header parameters is defined in Section 4.2. Inclusion in the registry is RFC Required in the RFC 5226 [RFC5226] sense. The registry will record the alg or enc value and a pointer to the RFC that defines it. This specification defines inclusion of the algorithm values defined in Table 2 and Table 3.
+
+(00)
+

docs/source/jwa/8.1.rst

+8.1. Normative References
+------------------------------------
+
+.. glossary::
+
+
+    FIPS-197
+          National Institute of Standards and Technology (NIST), “Advanced Encryption Standard (AES),” FIPS PUB 197, November 2001.
+
+    FIPS.180-3
+            National Institute of Standards and Technology, “Secure Hash Standard (SHS),” FIPS PUB 180-3, October 2008.
+
+    FIPS.186-3
+            National Institute of Standards and Technology, “Digital Signature Standard (DSS),” FIPS PUB 186-3, June 2009.
+
+    JWE
+           Jones, M., Rescorla, E., and J. Hildebrand, “JSON Web Encryption (JWE),” January 2012.
+
+    JWS
+           Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS),” January 2012.
+
+    NIST-800-38A
+          National Institute of Standards and Technology (NIST), “Recommendation for Block Cipher Modes of Operation,” NIST PUB 800-38A, December 2001.
+
+    NIST-800-38D
+          National Institute of Standards and Technology (NIST), “Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC,” NIST PUB 800-38D, December 2001.
+
+    NIST-800-56A
+          National Institute of Standards and Technology (NIST), “Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography (Revised),” NIST PUB 800-56A, March 2007.
+
+    RFC2104
+           Krawczyk, H., Bellare, M., and R. Canetti, “HMAC: Keyed-Hashing for Message Authentication,” RFC 2104, February 1997 (TXT).
+
+    RFC2119
+           Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML).
+
+    RFC3394
+           Schaad, J. and R. Housley, “Advanced Encryption Standard (AES) Key Wrap Algorithm,” RFC 3394, September 2002 (TXT).
+
+    RFC3447
+           Jonsson, J. and B. Kaliski, “Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1,” RFC 3447, February 2003 (TXT).
+
+    RFC5226
+           Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs,” BCP 26, RFC 5226, May 2008 (TXT).
+
+    RFC6090
+           McGrew, D., Igoe, K., and M. Salter, “Fundamental Elliptic Curve Cryptography Algorithms,” RFC 6090, February 2011 (TXT).
+
+(00)

docs/source/jwa/8.2.rst

+8.2. Informative References
+------------------------------------
+
+.. glossary::
+
+    CanvasApp
+         Facebook, “Canvas Applications,” 2010.
+
+    I-D.rescorla-jsms
+         Rescorla, E. and J. Hildebrand, “JavaScript Message Security Format,” draft-rescorla-jsms-00 (work in progress), March 2011 (TXT).
+
+    JCA
+           Oracle, “Java Cryptography Architecture,” 2011.
+
+    JSE
+           Bradley, J. and N. Sakimura (editor), “JSON Simple Encryption,” September 2010.
+
+    JSS
+           Bradley, J. and N. Sakimura (editor), “JSON Simple Sign,” September 2010.
+
+    MagicSignatures
+           Panzer (editor), J., Laurie, B., and D. Balfanz, “Magic Signatures,” August 2010.
+
+    RFC3275
+           Eastlake, D., Reagle, J., and D. Solo, “(Extensible Markup Language) XML-Signature Syntax and Processing,” RFC 3275, March 2002 (TXT).
+
+    W3C.CR-xmlenc-core1-20110303
+          Hirsch, F., Roessler, T., Reagle, J., and D. Eastlake, “XML Encryption Syntax and Processing Version 1.1,” World Wide Web Consortium CR CR-xmlenc-core1-20110303, March 2011 (HTML).
+
+    W3C.REC-xmlenc-core-20021210
+          Eastlake, D. and J. Reagle, “XML Encryption Syntax and Processing,” World Wide Web Consortium Recommendation REC-xmlenc-core-20021210, December 2002 (HTML).
+
+(00)

docs/source/jwa/8.rst

+8.  References
+=========================

docs/source/jwa/abstract.rst

+Abstract
+====================
+
+The JSON Web Algorithms (JWA) specification enumerates cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS) and JSON Web Encryption (JWE) specifications.

docs/source/jwa/appendix.a.rst

+Appendix A.  Digital Signature/HMAC Algorithm Identifier Cross-Reference
+================================================================================================================
+
+This appendix contains a table cross-referencing the digital signature and HMAC alg (algorithm) values used in this specification with the equivalent identifiers used by other standards and software packages. See XML DSIG [RFC3275] and Java Cryptography Architecture [JCA] for more information about the names defined by those documents.
+
+.. list-table::  Table 4: Digital Signature/HMAC Algorithm Identifier Cross-Reference 
+    :header-rows: 1
+
+    *   - Algorithm   
+        - JWS 
+        - XML DSIG    
+        - JCA 
+        - OID
+
+    *   - HMAC using SHA-256 hash algorithm   
+        - HS256   
+        - http://www.w3.org/2001/04/xmldsig-more#hmac-sha256  
+        - HmacSHA256  
+        - 1.2.840.113549.2.9
+
+    *   - HMAC using SHA-384 hash algorithm   
+        - HS384   
+        - http://www.w3.org/2001/04/xmldsig-more#hmac-sha384  
+        - HmacSHA384  
+        - 1.2.840.113549.2.10
+
+    *   - HMAC using SHA-512 hash algorithm   
+        - HS512   
+        - http://www.w3.org/2001/04/xmldsig-more#hmac-sha512  
+        - HmacSHA512  
+        - 1.2.840.113549.2.11
+
+    *   - RSA using SHA-256 hash algorithm    
+        - RS256   
+        - http://www.w3.org/2001/04/xmldsig-more#rsa-sha256   
+        - SHA256withRSA   
+        - 1.2.840.113549.1.1.11
+
+    *   - RSA using SHA-384 hash algorithm    
+        - RS384   
+        - http://www.w3.org/2001/04/xmldsig-more#rsa-sha384   
+        - SHA384withRSA   
+        - 1.2.840.113549.1.1.12
+
+    *   - RSA using SHA-512 hash algorithm    
+        - RS512   
+        - http://www.w3.org/2001/04/xmldsig-more#rsa-sha512   
+        - SHA512withRSA   
+        - 1.2.840.113549.1.1.13
+
+    *   - ECDSA using P-256 curve and SHA-256 hash algorithm  
+        - ES256   
+        - http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256 
+        - SHA256withECDSA 
+        - 1.2.840.10045.4.3.2
+
+    *   - ECDSA using P-384 curve and SHA-384 hash algorithm  
+        - ES384   
+        - http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384 
+        - SHA384withECDSA 
+        - 1.2.840.10045.4.3.3
+
+    *   - ECDSA using P-521 curve and SHA-512 hash algorithm  
+        - ES512   
+        - http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512 
+        - SHA512withECDSA 
+        - 1.2.840.10045.4.3.4

docs/source/jwa/appendix.b.rst

+Appendix B.  Encryption Algorithm Identifier Cross-Reference
+=================================================================================
+
+This appendix contains a table cross-referencing the alg (algorithm) and enc (encryption method) values used in this specification with the equivalent identifiers used by other standards and software packages. See XML Encryption [W3C.REC‑xmlenc‑core‑20021210], XML Encryption 1.1 [W3C.CR‑xmlenc‑core1‑20110303], and Java Cryptography Architecture [JCA] for more information about the names defined by those documents.
+
+
+.. list-table::  Table 5: Encryption Algorithm Identifier Cross-Reference 
+
+    *   - Algorithm   
+        - JWE 
+        - XML ENC 
+        - JCA
+
+
+    *   - RSA using RSA-PKCS1-1.5 padding 
+        - RSA1_5  
+        - http://www.w3.org/2001/04/xmlenc#rsa-1_5    
+        - RSA/ECB/PKCS1Padding
+
+    *   - RSA using Optimal Asymmetric Encryption Padding (OAEP)  
+        - RSA-OAEP    
+        - http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p 
+        - RSA/ECB/OAEPWithSHA-1AndMGF1Padding
+
+    *   - Elliptic Curve Diffie-Hellman Ephemeral Static  
+        - ECDH-ES 
+        - http://www.w3.org/2009/xmlenc11#ECDH-ES 
+        - TBD
+
+    *   - Advanced Encryption Standard (AES) Key Wrap Algorithm RFC 3394 [RFC3394] using 128 bit keys 
+        - A128KW  
+        - http://www.w3.org/2001/04/xmlenc#kw-aes128  
+        - TBD
+
+    *   - Advanced Encryption Standard (AES) Key Wrap Algorithm RFC 3394 [RFC3394] using 256 bit keys 
+        - A256KW  
+        - http://www.w3.org/2001/04/xmlenc#kw-aes256  
+        - TBD
+
+    *   - Advanced Encryption Standard (AES) using 128 bit keys in Cipher Block Chaining mode 
+        - A128CBC 
+        - http://www.w3.org/2001/04/xmlenc#aes128-cbc 
+        - AES/CBC/PKCS5Padding
+
+    *   - Advanced Encryption Standard (AES) using 256 bit keys in Cipher Block Chaining mode 
+        - A256CBC 
+        - http://www.w3.org/2001/04/xmlenc#aes256-cbc 
+        - AES/CBC/PKCS5Padding
+
+    *   - Advanced Encryption Standard (AES) using 128 bit keys in Galois/Counter Mode    
+        - A128GCM 
+        - http://www.w3.org/2009/xmlenc11#aes128-gcm  
+        - AES/GCM/NoPadding
+
+    *   - Advanced Encryption Standard (AES) using 256 bit keys in Galois/Counter Mode    
+        - A256GCM 
+        - http://www.w3.org/2009/xmlenc11#aes256-gcm  
+        - AES/GCM/NoPadding
+
+(00)

docs/source/jwk.rst

 =====================
 JSON Web Key (JWK)
 =====================
+Based on draft-ietf-jose-json-web-key-00
+
+- http://self-issued.info/docs/draft-ietf-jose-json-web-key-00.html
+- January 16, 2012
+
+.. note::
+    Moved to JOSE 
 
-Based on Mike Jones' `draft-jones-json-web-key-03  <http://self-issued.info/docs/draft-jones-json-web-key.html>`_ .
 (December 13, 2011)
 
 .. _jwk.abstract:

docs/source/jwk/1.rst

 JSON Web Keys are referenced in JSON Web Signature (JWS) [:term:`JWS`] 
 using the :term:`jku` (JSON Key URL) header parameter 
 and in JSON Web Encryption (JWE) [:term:`JWE`] 
-using the :term:`jku` (JSON Key URL) and :term:`epk` (Ephemeral Public Key) header parameters. 
+using the :term:`jku` (JSON Key URL) and :term:`epk` (:term:`Ephemeral` Public Key) header parameters. 
+
+(00 http://self-issued.info/docs/draft-ietf-jose-json-web-key-00.html#anchor1 )
+
+.. list-table::
+
+    *   - Spec
+        - Claim Name
+
+    *   - JWS
+        - jwu
+
+    *   - JWE
+        - jku / epk
 
-(draft 03 : http://self-issued.info/docs/draft-jones-json-web-key.html#anchor1 )

docs/source/jwk/2.rst

         with the (non URL-safe) '=' padding characters omitted, 
         as permitted by Section 3.2. (See Appendix C of [:term:`JWS`] for notes on implementing base64url encoding without padding.) 
 
-(draft 03)
+(00)

docs/source/jwk/4.2.1.rst

 4.2.1.  JWK Key Object Members for Elliptic Curve Keys
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-JWKs can represent Elliptic Curve [:term:`FIPS.186‑3`] keys. 
+JWKs can represent Elliptic Curve [ :term:`FIPS.186‑3` ] keys. 
 In this case, the alg member value MUST be EC. Furthermore, these additional members MUST be present:
 
 .. table::  Members for Elliptic Curve Keys 

docs/source/jwk/5.rst

 5.  Base64url encoding as used by JWKs
 ================================================
 
-JWKs make use of the base64url encoding as defined in RFC 4648 [:term:`RFC4648`]. 
+.. note::
+    base64url encodiing WIHTOUT padding.
+
+JWKs make use of the :term:`base64url encoding` as defined in RFC 4648 [:term:`RFC4648`]. 
 As allowed by Section 3.2 of the RFC, 
-this specification mandates that base64url encoding when used with JWKs MUST NOT use padding. 
-Notes on implementing base64url encoding can be found in the JWS [JWS] specification. 
+this specification mandates that :term:`base64url encoding` when used with JWKs MUST NOT use padding. 
+Notes on implementing :term:`base64url encoding` can be found in the JWS [:term:`JWS`] specification. 
 
 (draft 03)

docs/source/jwk/9.1.rst

 
 .. glossary::
 
+
     FIPS.186-3
            National Institute of Standards and Technology, “Digital Signature Standard (DSS),” FIPS PUB 186-3, June 2009.
 

src/jose/jwa/__init__.py

Empty file added.

src/jose/jwk/__init__.py

Empty file added.

src/jose/jwt/tokens.py

 from jose.jwt import loads_base64url, dumps_base64url,base64url_decode,base64url_encode
 
 def from_string(token_string):
-    ''' 
-        :param  token:   JWT string  
+    '''  form_string - 
+
+        :param  token:   :term:`JWT` string  
     '''
     parts = token_string.split('.')
     if len(parts)<2: