Skip to content

Commit 0076ade

Browse files
authored
Merge branch 'main' into 159-remove-requirement-on-matching-iss-values
2 parents 52c5294 + 4bf0c65 commit 0076ade

File tree

3 files changed

+89
-42
lines changed

3 files changed

+89
-42
lines changed

draft-ietf-oauth-status-list.md

Lines changed: 83 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,9 @@ The following is the CBOR Annotated Hex output of the example above:
324324

325325
By including a "status" claim in a Referenced Token, the Issuer is referencing a mechanism to retrieve status information about this Referenced Token. The claim contains members used to reference to a status list as defined in this specification. Other members of the "status" object may be defined by other specifications. This is analogous to "cnf" claim in Section 3.1 of {{RFC7800}} in which different authenticity confirmation methods can be included.
326326

327-
## Referenced Token in JWT Format {#referenced-token-jwt}
327+
## Referenced Token in JOSE Format {#referenced-token-jwt}
328328

329-
The Referenced Token MUST be encoded as a "JSON Web Token (JWT)" according to {{RFC7519}}.
329+
The Referenced Token MAY be encoded as a "JSON Web Token (JWT)" according to {{RFC7519}} or other formats based on JOSE.
330330

331331
The following content applies to the JWT Claims Set:
332332

@@ -356,6 +356,53 @@ The following is a non-normative example for a decoded header and payload of a R
356356
}
357357
~~~
358358

359+
SD-JWT-based Verifiable Credentials {{SD-JWT.VC}} introduce the usage of Status List in Section 3.2.2.2. The "status" object uses the same encoding as a JWT as defined in {{referenced-token-jwt}}.
360+
361+
The following is a non-normative example for a Referenced Token in SD-JWT-VC serialized form as received from an Issuer:
362+
363+
~~~ ascii-art
364+
365+
eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb
366+
Ikh2cktYNmZQVjB2OUtfeUNWRkJpTEZIc01heGNEXzExNEVtNlZUOHgxbGciXSwgImlz
367+
cyI6ICJodHRwczovL2V4YW1wbGUuY29tL2lzc3VlciIsICJpYXQiOiAxNjgzMDAwMDAw
368+
LCAiZXhwIjogMTg4MzAwMDAwMCwgInN1YiI6ICI2YzVjMGE0OS1iNTg5LTQzMWQtYmFl
369+
Ny0yMTkxMjJhOWVjMmMiLCAic3RhdHVzIjogeyJzdGF0dXNfbGlzdCI6IHsiaWR4Ijog
370+
MCwgInVyaSI6ICJodHRwczovL2V4YW1wbGUuY29tL3N0YXR1c2xpc3RzLzEifX0sICJf
371+
c2RfYWxnIjogInNoYS0yNTYifQ.-kgS-R-Z4DEDlqb8kb6381_gHHNatsoF1fcVKZk3M
372+
06CrnV8F8k9d2w2V_YAOvgcb0f11FqDFezXBXH30d4vcw~WyIyR0xDNDJzS1F2ZUNmR2
373+
ZyeU5STjl3IiwgInN0cmVldF9hZGRyZXNzIiwgIlNjaHVsc3RyLiAxMiJd~WyJlbHVWN
374+
U9nM2dTTklJOEVZbnN4QV9BIiwgImxvY2FsaXR5IiwgIlNjaHVscGZvcnRhIl0~WyI2S
375+
Wo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgInJlZ2lvbiIsICJTYWNoc2VuLUFuaGFsdCJd~
376+
WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImNvdW50cnkiLCAiREUiXQ~WyJRZ19PN
377+
jR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7Il9zZCI6IFsiNnZoOWJxLXpTN
378+
EdLTV83R3BnZ1ZiWXp6dTZvT0dYcm1OVkdQSFA3NVVkMCIsICI5Z2pWdVh0ZEZST0NnU
379+
nJ0TmNHVVhtRjY1cmRlemlfNkVyX2o3NmttWXlNIiwgIktVUkRQaDRaQzE5LTN0aXotR
380+
GYzOVY4ZWlkeTFvVjNhM0gxRGEyTjBnODgiLCAiV045cjlkQ0JKOEhUQ3NTMmpLQVN4V
381+
GpFeVc1bTV4NjVfWl8ycm8yamZYTSJdfV0~
382+
~~~
383+
384+
Resulting payload of the example above:
385+
386+
~~~ ascii-art
387+
388+
{
389+
"_sd": [
390+
"HvrKX6fPV0v9K_yCVFBiLFHsMaxcD_114Em6VT8x1lg"
391+
],
392+
"iss": "https://example.com/issuer",
393+
"iat": 1683000000,
394+
"exp": 1883000000,
395+
"sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
396+
"status": {
397+
"status_list": {
398+
"idx": 0,
399+
"uri": "https://example.com/statuslists/1"
400+
}
401+
},
402+
"_sd_alg": "sha-256"
403+
}
404+
~~~
405+
359406
## Referenced Token in CWT Format {#referenced-token-cwt}
360407

361408
The Referenced Token MUST be encoded as a "COSE Web Token (CWT)" object according to {{RFC8392}}.
@@ -599,6 +646,7 @@ A malicious Issuer could bypass the privacy benefits of the herd privacy by gene
599646
Once the Relying Party receives the Referenced Token, this enables him to request the Status List to validate its status through the provided `uri` parameter and look up the corresponding `index`. However, the Relying Party may persistently store the `uri` and `index` of the Referenced Token to request the Status List again at a later time. By doing so regularly, the Relying Party may create a profile of the Referenced Token's validity status. This behaviour may be intended as a feature, e.g. for a KYC process that requires regular validity checks, but might also be abused in cases where this is not intended and unknown to the Holder, e.g. profiling the suspension of a driving license or checking the employment status of an employee credential.
600647

601648
This behaviour could be mitigated by:
649+
602650
- adding authorization rules to the Status List, see [](#security-authorization).
603651
- regular re-issuance of the Referenced Token, see [](#implementation-lifecycle).
604652

@@ -642,14 +690,14 @@ IANA "JSON Web Token Claims" registry {{IANA.JWT}} established by {{RFC7519}}.
642690
* Claim Name: `status`
643691
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the JWT.
644692
* Change Controller: IETF
645-
* Specification Document(s): [](#status-claim) of this specification
693+
* Specification Document(s): [](#status-claim) of this specification
646694

647695
<br/>
648696

649697
* Claim Name: `status_list`
650-
* Claim Description: A status list containing up-to-date status information on multiple other JWTs encoded as a bitarray.
698+
* Claim Description: A status list containing up-to-date status information on multiple tokens.
651699
* Change Controller: IETF
652-
* Specification Document(s): [](#status-list-token-jwt) of this specification
700+
* Specification Document(s): [](#status-list-token-jwt) of this specification
653701

654702
<br/>
655703

@@ -684,9 +732,9 @@ Specification Document(s):
684732
### Initial Registry Contents
685733

686734
* Status Method Value: `status_list`
687-
* Status Method Description: A status list containing up-to-date status information on multiple other JWTs encoded as a bitarray.
735+
* Status Method Description: A status list containing up-to-date status information on multiple tokens.
688736
* Change Controller: IETF
689-
* Specification Document(s): [](#referenced-token-jwt) of this specification
737+
* Specification Document(s): [](#referenced-token-jwt) of this specification
690738

691739
## CBOR Web Token Claims Registration
692740

@@ -701,15 +749,15 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
701749
* Claim Key: TBD (requested assignment 65535)
702750
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the CWT.
703751
* Change Controller: IETF
704-
* Specification Document(s): [](#status-claim) of this specification
752+
* Specification Document(s): [](#status-claim) of this specification
705753

706754
<br/>
707755

708756
* Claim Name: `status_list`
709757
* Claim Key: TBD (requested assignment 65533)
710-
* Claim Description: A status list containing up-to-date status information on multiple other CWTs encoded as a bitarray.
758+
* Claim Description: A status list containing up-to-date status information on multiple tokens.
711759
* Change Controller: IETF
712-
* Specification Document(s): [](#status-list-token-cwt) of this specification
760+
* Specification Document(s): [](#status-list-token-cwt) of this specification
713761

714762
<br/>
715763

@@ -744,9 +792,9 @@ Specification Document(s):
744792
### Initial Registry Contents
745793

746794
* Status Method Value: `status_list`
747-
* Status Method Description: A status list containing up-to-date status information on multiple other CWTs encoded as a bitarray.
795+
* Status Method Description: A status list containing up-to-date status information on multiple tokens.
748796
* Change Controller: IETF
749-
* Specification Document(s): [](#referenced-token-cwt) of this specification
797+
* Specification Document(s): [](#referenced-token-cwt) of this specification
750798

751799
## Media Type Registration
752800

@@ -760,15 +808,13 @@ To indicate that the content is an JSON-based Status List:
760808
* Subtype name: statuslist+json
761809
* Required parameters: n/a
762810
* Optional parameters: n/a
763-
* Encoding considerations: binary; A JSON-based Status List is a JSON Object.
764-
* Security considerations: See (#Security) of \[ this specification \]
811+
* Encoding considerations: See [](#status-list-json) of this specification
812+
* Security considerations: See [](#Security) of this specification
765813
* Interoperability considerations: n/a
766-
* Published specification: \[ this specification \]
767-
* Applications that use this media type: Applications using \[ this specification \] for updated status information of tokens
814+
* Published specification: this specification
815+
* Applications that use this media type: Applications using this specification for updated status information of tokens
768816
* Fragment identifier considerations: n/a
769-
* Additional information:
770-
* File extension(s): n/a
771-
* Macintosh file type code(s): n/a
817+
* Additional information: n/a
772818
* Person &amp; email address to contact for further information: Paul Bastian, paul.bastian@posteo.de
773819
* Intended usage: COMMON
774820
* Restrictions on usage: none
@@ -782,15 +828,13 @@ To indicate that the content is an JWT-based Status List:
782828
* Subtype name: statuslist+jwt
783829
* Required parameters: n/a
784830
* Optional parameters: n/a
785-
* Encoding considerations: binary; A JWT-based Status List is a JWT; JWT values are encoded as a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') characters.
786-
* Security considerations: See (#Security) of \[ this specification \]
831+
* Encoding considerations: See [](#status-list-token-jwt) of this specification
832+
* Security considerations: See [](#Security) of this specification
787833
* Interoperability considerations: n/a
788-
* Published specification: \[ this specification \]
789-
* Applications that use this media type: Applications using \[ this specification \] for updated status information of tokens
834+
* Published specification: this specification
835+
* Applications that use this media type: Applications using this specification for updated status information of tokens
790836
* Fragment identifier considerations: n/a
791-
* Additional information:
792-
* File extension(s): n/a
793-
* Macintosh file type code(s): n/a
837+
* Additional information: n/a
794838
* Person &amp; email address to contact for further information: Paul Bastian, paul.bastian@posteo.de
795839
* Intended usage: COMMON
796840
* Restrictions on usage: none
@@ -804,15 +848,13 @@ To indicate that the content is an CBOR-based Status List:
804848
* Subtype name: statuslist+cbor
805849
* Required parameters: n/a
806850
* Optional parameters: n/a
807-
* Encoding considerations: binary; A CBOR-based Status List is a CBOR Object.
808-
* Security considerations: See (#Security) of \[ this specification \]
851+
* Encoding considerations: See [](#status-list-cbor) of this specification
852+
* Security considerations: See [](#Security) of this specification
809853
* Interoperability considerations: n/a
810-
* Published specification: \[ this specification \]
811-
* Applications that use this media type: Applications using \[ this specification \] for updated status information of tokens
854+
* Published specification: this specification
855+
* Applications that use this media type: Applications using this specification for updated status information of tokens
812856
* Fragment identifier considerations: n/a
813-
* Additional information:
814-
* File extension(s): n/a
815-
* Macintosh file type code(s): n/a
857+
* Additional information: n/a
816858
* Person &amp; email address to contact for further information: Paul Bastian, paul.bastian@posteo.de
817859
* Intended usage: COMMON
818860
* Restrictions on usage: none
@@ -826,15 +868,13 @@ To indicate that the content is an CWT-based Status List:
826868
* Subtype name: statuslist+cwt
827869
* Required parameters: n/a
828870
* Optional parameters: n/a
829-
* Encoding considerations: binary;
830-
* Security considerations: See (#Security) of \[ this specification \]
871+
* Encoding considerations: See [](#status-list-token-cwt) of this specification
872+
* Security considerations: See [](#Security) of this specification
831873
* Interoperability considerations: n/a
832-
* Published specification: \[ this specification \]
833-
* Applications that use this media type: Applications using \[ this specification \] for updated status information of tokens
874+
* Published specification: this specification
875+
* Applications that use this media type: Applications using this specification for updated status information of tokens
834876
* Fragment identifier considerations: n/a
835-
* Additional information:
836-
* File extension(s): n/a
837-
* Macintosh file type code(s): n/a
877+
* Additional information: n/a
838878
* Person &amp; email address to contact for further information: Paul Bastian, paul.bastian@posteo.de
839879
* Intended usage: COMMON
840880
* Restrictions on usage: none
@@ -870,6 +910,9 @@ for their valuable contributions, discussions and feedback to this specification
870910
-04
871911

872912
* remove requirement for matching iss claim in Referenced Token and Status List Token
913+
* add sd-jwt-vc example
914+
* fix CWT status_list map encoding
915+
* editorial fixes
873916
* add CORS considerations to the http endpoint
874917
* fix reference of Status List in CBOR format
875918
* added status_list CWT claim key assigned

src/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def statusListEncoding1Bit():
6161

6262
def statusListEncoding1BitCBOR():
6363
status_list = exampleStatusList1Bit()
64-
encoded = status_list.encodeAsCBOR()
64+
encoded = status_list.encodeAsCBORRaw()
6565
hex_encoded = encoded.hex()
6666
text = "byte_array = [{}, {}] \nencoded:\n{}".format(
6767
hex(status_list.list[0]), hex(status_list.list[1]), util.printText(hex_encoded)
@@ -85,7 +85,7 @@ def statusListEncoding2Bit():
8585

8686
def statusListEncoding2BitCBOR():
8787
status_list = exampleStatusList2Bit()
88-
encoded = status_list.encodeAsCBOR()
88+
encoded = status_list.encodeAsCBORRaw()
8989
hex_encoded = encoded.hex()
9090
text = "byte_array = [{}, {}, {}] \nencoded:\n{}".format(
9191
hex(status_list.list[0]),

src/status_list.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ def encodeAsCBOR(self) -> Dict:
4343
"bits": self.bits,
4444
"lst": encoded_list,
4545
}
46+
return object
47+
48+
def encodeAsCBORRaw(self) -> Dict:
49+
object = self.encodeAsCBOR()
4650
return dumps(object)
4751

4852
def decode(self, input: str):

0 commit comments

Comments
 (0)