From 88af67385501a8bfacc2070a25255458a75a405e Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Tue, 3 Dec 2024 11:08:31 -0800 Subject: [PATCH 01/24] Update optional feature references. Update description of Anonymous Holder Binding feature and its use of Blind BBS operations. --- index.html | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/index.html b/index.html index 8809554..5455f63 100644 --- a/index.html +++ b/index.html @@ -170,13 +170,13 @@ title: "Blind BBS Signatures", authors: ["V. Kalos", "G. Bernstein"], date: "2024", - href: "https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-00.html#name-proof-generation" + href: "https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-00.html#name-proof-generationhttps://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-03.html" }, "CFRG-Pseudonym-BBS-Signature": { title: "BBS per Verifier Linkability", authors: ["V. Kalos"], - date: "2023", - href: "https://www.ietf.org/archive/id/draft-vasilis-bbs-per-verifier-linkability-00.html" + date: "2024", + href: "https://www.ietf.org/archive/id/draft-kalos-bbs-per-verifier-linkability-00.html" } }, lint: { "informative-dfn": false }, @@ -1780,33 +1780,32 @@

Anonymous Holder Binding

which should generally be at least 32 bytes long and cryptographically randomly generated. This value is never shared by the holder. Instead, the holder generates a commitment along with a zero knowledge proof of knowledge of this -value, using the "Commitment Generation" procedure of [[CFRG-Blind-BBS-Signature]]. +value, using the "Commitment Computation" operation of [[CFRG-Blind-BBS-Signature]]. This computation involves cryptographically random values and computes the |commitment_with_proof| and |secret_prover_blind| values. The |commitment_with_proof| is conveyed to the issuer while the |secret_prover_blind| is kept secret and is retained by the holder for use in generation of derived proofs. -Note that a holder can run the "Commitment Generation" procedure multiple times +Note that a holder can run the "Commitment Computation" operation multiple times to produce unlinkable |commitment_with_proof| values for use with different issuers.

-The issuer, on receipt of the |commitment_with_proof|, follows the procedures of +The issuer, on receipt of the |commitment_with_proof|, follows the procedures +of this specification and uses the "Blind Signature Generation" operation of [[CFRG-Blind-BBS-Signature]] to produce a base proof (signature) over the document -with the commitment furnished by the holder. If the issuer chooses to use the -|signer_blind| parameter when creating the signature in -[[CFRG-Blind-BBS-Signature]], this value needs to be conveyed to the holder as -part of the base proof value. +with the |commitment_with_proof| furnished by the holder.

When the holder wants to create a selectively disclosed document with derived -proof, they use their |holder_secret| (as a "commited message"), the -|secret_prover_blind|, and, if supplied in the base proof, the |signer_blind| -in the proof generation procedure of -[[CFRG-Blind-BBS-Signature]]. +proof, they use the procedures of this specification and the "Proof Generation" +operation of [[CFRG-Blind-BBS-Signature]]. They use their |holder_secret| as +the only "message" in the |commited messages| array and supply thier +|secret_prover_blind|.

-Verification of the revealed document with derived proof uses the "regular" BBS -proof verification procedures of [[CFRG-BBS-SIGNATURE]]. +Verification of the revealed document with derived proof uses the procedures +of this specification and the "Proof Verification" operation of +[[CFRG-Blind-BBS-Signature]].

From f4008aa6c7b3c4482c07f622518e39f133472bdb Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Tue, 3 Dec 2024 11:18:38 -0800 Subject: [PATCH 02/24] Rename pseudonym related optional feature sections. Clear out old text. --- index.html | 77 ++---------------------------------------------------- 1 file changed, 2 insertions(+), 75 deletions(-) diff --git a/index.html b/index.html index 5455f63..4e976ba 100644 --- a/index.html +++ b/index.html @@ -1810,83 +1810,10 @@

Anonymous Holder Binding

-

Pseudonyms with Issuer-known PID

-

-This feature is a privacy preserving enhancement that allows a verifier that has -seen a selectively revealed document with derived proof from a holder to -recognize that the same holder is presenting a new selectively revealed document -with derived proof. Note that this may just be a new unlinkable proof (derived -proof) on the same selectively revealed information. By "privacy preserving," we -mean that no uniquely identifiable information is added that would allow tracking -between different verifiers that may share information amongst themselves. This -variant does allow for the issuer to monitor usage if verifiers share -information with the issuer. -

-

-To furnish this capability, before creating the base proof for a document, an -issuer generates a value known as a |pid| (prover id) which should be -cryptographically random and at least 32 bytes long. This value is shared with -the holder but otherwise kept secret. This value is then used in creating the -base proof via the signing procedure in [[CFRG-Pseudonym-BBS-Signature]]. -

-

-The holder receives the document with base proof which includes the |pid| value -from the issuer. The holder obtains a |verifier_id| associated with the verifier -for which they intend to create a revealed document with derived proof. Using the -procedures of [[CFRG-Pseudonym-BBS-Signature]], a cryptographic |pseudonym| value -is generated. The derived proof value is generated via the proof generation -procedure of [[CFRG-Pseudonym-BBS-Signature]], and this value along with the -|pseudonym| are given to the verifier. Note that the |pid| value cannot be -recovered from the |pseudonym|. -

-

-When the verifier receives the revealed document with derived proof and -|pseudonym|, they use the proof verification procedures of -[[CFRG-Pseudonym-BBS-Signature]]. -

+

Credential Bound Pseudonyms

-

Pseudonyms with Hidden PID

-

-This feature is a privacy preserving enhancement that allows a verifier that has -seen a selectively revealed document with derived proof from a holder to -recognize that the same holder is presenting a new selectively revealed document -with derived proof. Note that this may just be a new unlinkable proof (derived -proof) on the same selectively revealed information. By "privacy preserving," we -mean that no uniquely identifiable information is added that would allow tracking -between different verifiers that may share information amongst themselves and/or -with the issuer. -

-

-To provide for this capability, a holder needs to generate a secret |pid| value -that should be at least 32 bytes long and generated in cryptographically random -manner. The holder then uses the "Commitment Generation" procedure of -[[CFRG-Blind-BBS-Signature]] to generate a |commitment_with_proof| value and -a private |secret_prover_blind| value. -This value needs to be conveyed to the issuer who will use it in the issuance -of a document with base proof, in accordance with -[[CFRG-Pseudonym-BBS-Signature]], which is sent to the holder. The |pid| -value is never shared by the holder. If the issuer chooses to use the optional -|signer_blind| parameter when creating the signature in this value needs to be -conveyed to the holder as part of the base proof value. -

-

-The holder obtains a |verifier_id| associated with the verifier for which -they intend to create a revealed document with derived proof. Using the -procedures of [[CFRG-Pseudonym-BBS-Signature]], a cryptographic |pseudonym| -value is generated from their |pid| value and the |verifier_id|. The derived -proof value is generated via the proof generation using the |pid|, -|secret_prover_blind|, |verifier_id|, and |signer_blind| using the -procedures of [[CFRG-Pseudonym-BBS-Signature]], -and this value is given to the -verifier along with the |pseudonym|. Note that the |pid| value cannot be -recovered from the |pseudonym|. -

-

-When the verifier receives the revealed document with derived proof and -|pseudonym|, they use the proof verification procedures of -[[CFRG-Pseudonym-BBS-Signature]]. -

+

Pseudonyms and Holder Binding

Optional Feature Summary

From 732f2c2ebea8a961db7d2d50b6198fe91d312acb Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Tue, 3 Dec 2024 16:24:02 -0800 Subject: [PATCH 03/24] Add updated description of credential bound pseudonyms and usage outline. --- index.html | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/index.html b/index.html index 4e976ba..704acc8 100644 --- a/index.html +++ b/index.html @@ -1811,6 +1811,112 @@

Anonymous Holder Binding

Credential Bound Pseudonyms

+

+BBS signed Verifiable Credentials as specified in this document allow for +selective disclosure and unlinkable cryptographic proof artifacts, the +cryptographic information in the derived proofs cannot be linked to other +proofs or the original signature. This implies that a verifier cannot determine +if a holder has presented the same credential before (with a different proof +instantiation) nor can they assert some type of identity. Credential bound +pseudonyms provide a privacy preserving mechanism to allow for the limited +linkability of a cryptographic pseudonym. Such a pseudonym may be determined +strictly by the holder or jointly by the holder and the verifier. +

+

+The type of cryptographic pseudonym (cryptographic identifier/name) here is +computed from two parts. The first part, the |nym_secret|, is only known to the +holder, the second part, the |nym_domain|, may be specified by either the holder +or the verifier and will be shared between the holder and verifier. +Cryptographic pseudonyms computed from the same |nym_secret| but different +|nym_domain| values are unlinkable. +

+

+The holder might choose the |nym_domain| to give themselves a pseudonym for +some type of public forum, e.g., choose |nym_domain| = "Mark Twain". The +cryptographic pseudonym is calculated by the holder from this |nym_domain| and +their |nym_secret| is essentially unique and no entity not knowing the +|nym_secret| and possessing the base verifiable credential bound to the +pseudonym could assert this pseudonymous identity. Note that the doublet of +(|nym_domain|, pseudonym) would be sent with the derived credential to assert +this pseudonymous identity. +

+

+In a different situation, a holder may be using a service from a verifier and a +verifier wants to track visits over time or monitor use of some resource by the +holder. In this case the verifier chooses the |nym_domain| that the holder is +required to use when presenting their derived credential. For example a verifier +might specify a public |nym_domain| tied to their domain, e.g., +"www.nym.example" for the holder to use. A verifier could also +demonstrate that they support data minimization of a sort by periodically +changing the |nym_domain|, e.g. tying it to a date, +"www.nym.example/2025-01-02". This specification does not dictate +values for the |nym_domain|. +

+

+Finally, to prevent a malicious holder from obtaining another holders +|nym_secret| and getting a credential bound to that value, the operations from +the [[CFRG-Pseudonym-BBS-Signature]] have the issuer add in a randomization +factor, |signer_nym_entropy| that is securely "mixed" with the holders +portion, the |prover_nym|, during signature generation. +

+

+An outline of the creation and use of credential bound pseudonyms is given in +the following steps. +

+
    +
  1. +The holder creates a secure value known as the |prover_nym| that should be at +least 32 bytes long and generated in cryptographically random manner. They then +use the "Commitment" operation from [[CFRG-Pseudonym-BBS-Signature]] with an +empty |committed_messages| array to compute +the |commitment_with_proof| and |secret_prover_blind|. The +|commitment_with_proof| is sent with their request to the issuer for a +credential while the |prover_nym| and |secret_prover_blind| are kept for later +use by the holder and are never disclosed. +
  2. +
  3. +The issuer receives the holders request for a credential with a bound pseudonym, +|featureOption| equals `"pseudonym"`, along with the |commitment_with_proof|. +The issuer uses the procedures in this specification and generates a +cryptographically random value for the |signer_nym_entropy| and uses the +"Blind Issuance" operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the +base proof. Among other information the base proof will contain the +|signer_nym_entropy| value. If the issuer ever needs reissue a credential to +this holder that is bound to the same |nym_secret| they should retain the +|signer_nym_entropy| value, otherwise this value can be discarded. +
  4. +
  5. +The holder on receipt of the credential with bound pseudonym uses the procedures +in this specification along with the "Verification and Finalization" operation +from [[CFRG-Pseudonym-BBS-Signature]] with an empty |committed_messages| array +to both verify the signature and compute +the |nym_secret| value. This operation uses the |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind| values amongst others. If third +party monitoring is being utilized then the |nym_secret| value would be securely +shared with the monitoring organization. +
  6. +
  7. +When the holder wants to generate a derived proof bound to a pseudonym they need +to determine the |nym_domain|. As previously stated this might be specified by +the verifier or set by the holder depending on the usage scenario. They then use +the procedures in this specification and the "Proof Generation with Pseudonym" +operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. +This operation takes as inputs the |nym_secret|, |nym_domain|, empty +|committed_messages| array and +|secret_prover_blind| amongst others. In addition to providing the raw +cryptographic proof value it also returns the |pseudonym| value that gets +included in the derived proof. +
  8. +
  9. +When a verifier receives a derived proof with bound pseudonym they use the +procedures in this specification along with the +"Proof Verification with Pseudonym" operation from +[[CFRG-Pseudonym-BBS-Signature]] to validate the derived proof. Note that these +procedures will also validate that the specified |nym_domain| was used in the +computation of the |pseudonym|. +
  10. +
+

Pseudonyms and Holder Binding

From 44ee8764617b3ce32b565abe724b0bdaa7b10927 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 09:31:43 -0800 Subject: [PATCH 04/24] Write new pseudonyms and binding feature section. --- index.html | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 704acc8..1cbe591 100644 --- a/index.html +++ b/index.html @@ -1857,7 +1857,9 @@

Credential Bound Pseudonyms

|nym_secret| and getting a credential bound to that value, the operations from the [[CFRG-Pseudonym-BBS-Signature]] have the issuer add in a randomization factor, |signer_nym_entropy| that is securely "mixed" with the holders -portion, the |prover_nym|, during signature generation. +portion, the |prover_nym|, during signature generation. Hence, the issuer +provides a cryptographic assurance that the resulting |nym_secret| used by the +holder is unique.

An outline of the creation and use of credential bound pseudonyms is given in @@ -1920,6 +1922,75 @@

Credential Bound Pseudonyms

Pseudonyms and Holder Binding

+

+Anonymous holder binding and credential bound pseudonyms are, in a sense, +orthogonal features, and a holder and credential ecosystem may wish to use both +at the same time. In particular, the holder may wish to bind a verifiable +credential to a |holder_secret| so that only a holder knowing this value can +generate a derived proof from the base proof, and bind a |nym_secret| to the +base proof so that pseudonyms can be bound to the derived proof. This +corresponds to |featureOption| equals `"pseudonym_holder_binding"`. +

+

+An outline of the creation and use of both anonymous holder binding and +credential bound pseudonyms is given in the following steps. +

+
    +
  1. +The holder creates two secure values known as the |holder_secret| and +|prover_nym| that should be at +least 32 bytes long and generated in cryptographically random manner. They then +use the "Commitment" operation from [[CFRG-Pseudonym-BBS-Signature]] with the +|committed_messages| array input containing the |holder_secret| as its only +element, to compute the |commitment_with_proof| and |secret_prover_blind|. The +|commitment_with_proof| is sent with their request to the issuer for a +credential while the |holder_secret|, |prover_nym| and |secret_prover_blind| are +kept for later use by the holder and are never disclosed. +
  2. +
  3. +The issuer receives the holders request for a credential with a bound pseudonym, +|featureOption| equals `"pseudonym"`, along with the |commitment_with_proof|. +The issuer uses the procedures in this specification and generates a +cryptographically random value for the |signer_nym_entropy| and uses the +"Blind Issuance" operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the +base proof. Among other information the base proof will contain the +|signer_nym_entropy| value. If the issuer ever needs reissue a credential to +this holder that is bound to the same |nym_secret| they should retain the +|signer_nym_entropy| value, otherwise this value can be discarded. +
  4. +
  5. +The holder on receipt of the credential with bound pseudonym uses the procedures +in this specification along with the "Verification and Finalization" operation +from [[CFRG-Pseudonym-BBS-Signature]] with the |committed_messages| array +containing the |holder_secret| as its only element, +to both verify the signature and compute +the |nym_secret| value. This operation uses the |holder_secret|, |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind| values amongst others. If third +party monitoring is being utilized then the |nym_secret| value would be securely +shared with the monitoring organization. +
  6. +
  7. +When the holder wants to generate a derived proof bound to a pseudonym they need +to determine the |nym_domain|. As previously stated this might be specified by +the verifier or set by the holder depending on the usage scenario. They then use +the procedures in this specification and the "Proof Generation with Pseudonym" +operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. +This operation takes as inputs the |nym_secret|, |nym_domain|, the +|committed_messages| array containing the |holder_secret| as its only element, +and |secret_prover_blind| amongst others. In addition to providing the raw +cryptographic proof value it also returns the |pseudonym| value that gets +included in the derived proof. +
  8. +
  9. +When a verifier receives a derived proof with bound pseudonym they use the +procedures in this specification along with the +"Proof Verification with Pseudonym" operation from +[[CFRG-Pseudonym-BBS-Signature]] to validate the derived proof. Note that these +procedures will also validate that the specified |nym_domain| was used in the +computation of the |pseudonym|. +
  10. +
+

Optional Feature Summary

From 23c42376ee744a788212db3973607acf12463497 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 10:24:37 -0800 Subject: [PATCH 05/24] Update feature summary tables. --- index.html | 92 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 30 deletions(-) diff --git a/index.html b/index.html index 1cbe591..f384163 100644 --- a/index.html +++ b/index.html @@ -2021,21 +2021,23 @@

Optional Feature Summary

Anonymous Holder Binding - baseline + selected index adjustment - baseline + commitment with proof to holder secret from holder + baseline + baseline + commitment with proof from holder Blind BBS - Pseudonym with Issuer Pid - baseline + Generate pid - baseline + Credential Bound Pseudonyms + baseline + generate |signer_nym_entropy| + baseline + |signer_nym_entropy|, commitment with proof + from holder Pseudonym BBS - Pseudonym with Hidden Pid - baseline - baseline + commitment with proof to secret pid from holder - Pseudonym/Blind BBS + Holder Binding and Pseudonyms + baseline + generate |signer_nym_entropy| + baseline + |signer_nym_entropy|, + commitment with proof from holder + Pseudonym BBS @@ -2058,17 +2060,17 @@

Optional Feature Summary

Anonymous Holder Binding `0xd9`, `0x5d`, and `0x04` - baseline + signerBlind + baseline - Pseudonym with Issuer Pid + Credential Bound Pseudonyms `0xd9`, `0x5d`, and `0x06` - baseline + pid + baseline + |signer_nym_entropy| - Pseudonym with Hidden Pid + Holder Binding and Pseudonyms `0xd9`, `0x5d`, and `0x08` - baseline + signerBlind + baseline + |signer_nym_entropy| @@ -2087,26 +2089,36 @@

Optional Feature Summary

Baseline BBS BBS derived proof generation from VC with base proof - baseline: (from base proof serialization) bbsSignature, bbsHeader, publicKey, hmacKey, and mandatoryPointers; selectivePointers (holders choice) + baseline: (from base proof serialization) + bbsSignature, bbsHeader, publicKey, hmacKey, and + mandatoryPointers; selectivePointers (holders choice) BBS Anonymous Holder Binding baseline - baseline + holder secret, prover blind (both known to holder), signer blind (included in base proof from issuer) + baseline + |holder_secret|, |prover_blind| (both + known to holder) Blind BBS - Pseudonym with Issuer Pid - baseline + Generate pseudonym - baseline + verifier id (from verifier), pid (included in base from issuer) + Credential Bound Pseudonyms + baseline + compute |nym_secret|, compute |pseudonym| + + baseline + |prover_nym|, + |prover_blind| (all known to holder), |signer_nym_entropy| + (included in base from issuer), |nym_domain| Pseudonym BBS - Pseudonym with Hidden Pid - baseline + Generate pseudonym - baseline + pid, prover blind (both known to holder), signer blind (included in base from issuer), verifier id (from verifier) - Pseudonym/Blind BBS + Holder Binding and Pseudonyms + baseline + compute |nym_secret|, compute |pseudonym| + + baseline + |holder_secret|, |prover_nym|, + |prover_blind| (all known to holder), |signer_nym_entropy| + (included in base from issuer), |nym_domain| + + Pseudonym BBS @@ -2124,7 +2136,9 @@

Optional Feature Summary

Baseline BBS `0xd9`, `0x5d`, and `0x03` - baseline: bbsProof, compressedLabelMap, mandatoryIndexes, selectiveIndexes, presentationHeader + baseline: bbsProof, compressedLabelMap, + mandatoryIndexes, selectiveIndexes, presentationHeader + Anonymous Holder Binding @@ -2132,15 +2146,21 @@

Optional Feature Summary

baseline - Pseudonym (issuer known and hidden) + Credential Bound Pseudonyms `0xd9`, `0x5d`, and `0x07` - baseline + pseudonym + baseline + |pseudonym|, |nym_domain| + + + Holder Binding and Pseudonyms + `0xd9`, `0x5d`, and `0x09` + baseline + |pseudonym|, |nym_domain| - + @@ -2151,7 +2171,10 @@

Optional Feature Summary

- + @@ -2160,8 +2183,17 @@

Optional Feature Summary

- - + + + + + + + From b2f08a948ba5cb3bf164e25626c90e8cec7e7282 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 10:43:58 -0800 Subject: [PATCH 06/24] Update serializeBaseProofValue. --- index.html | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index f384163..f7a8378 100644 --- a/index.html +++ b/index.html @@ -593,7 +593,7 @@

serializeBaseProofValue

The required inputs are a base signature |bbsSignature|, |bbsHeader|, |publicKey|, an HMAC key |hmacKey|, an array of |mandatoryPointers|, |featureOption|, and depending on -the |featureOption| value the |pid|, and |signer_blind| values. +the |featureOption| value possibly the |signer_nym_entropy| value. A single base proof string value is produced as output.

@@ -624,13 +624,12 @@

serializeBaseProofValue

  • Initialize |components| to an array with six elements containing the values of: -|bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|, and -|signerBlind|. +|bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, and |mandatoryPointers|.
  • -If |featureOption| equals `"pseudonym_issuer_pid"`: +If |featureOption| equals `"pseudonym"`:
    1. Initialize a byte array, |proofValue|, that starts with the BBS base proof @@ -639,12 +638,12 @@

      serializeBaseProofValue

    2. Initialize |components| to an array with six elements containing the values of: |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|, and -|pid|. +|signer_nym_entropy|.
  • -If |featureOption| equals `"pseudonym_hidden_pid"`: +If |featureOption| equals `"holder_binding_pseudonym"`:
    1. Initialize a byte array, |proofValue|, that starts with the BBS base proof @@ -653,7 +652,7 @@

      serializeBaseProofValue

    2. Initialize |components| to an array with six elements containing the values of: |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|, and -|signerBlind|. +|signer_nym_entropy|.
  • @@ -1921,7 +1920,7 @@

    Credential Bound Pseudonyms

    -

    Pseudonyms and Holder Binding

    +

    Holder Binding and Pseudonyms

    Anonymous holder binding and credential bound pseudonyms are, in a sense, orthogonal features, and a holder and credential ecosystem may wish to use both @@ -1929,7 +1928,7 @@

    Pseudonyms and Holder Binding

    credential to a |holder_secret| so that only a holder knowing this value can generate a derived proof from the base proof, and bind a |nym_secret| to the base proof so that pseudonyms can be bound to the derived proof. This -corresponds to |featureOption| equals `"pseudonym_holder_binding"`. +corresponds to |featureOption| equals `"holder_binding_pseudonym"`.

    An outline of the creation and use of both anonymous holder binding and From 2bfd47e0fc98dc058ffa6cb6e0cb70d3d348c517 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 10:51:41 -0800 Subject: [PATCH 07/24] Update parseBaseProofValue. --- index.html | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index f7a8378..82cd9ab 100644 --- a/index.html +++ b/index.html @@ -681,8 +681,7 @@

    parseBaseProofValue

    six or seven elements, using the names "bbsSignature", "bbsHeader", "publicKey", "hmacKey", "mandatoryPointers", "featureOption", and possibly optional feature -parameter "pid" or -"signer_blind", is produced as output. +parameter "signer_nym_entropy", is produced as output.

      @@ -714,11 +713,11 @@

      parseBaseProofValue

    1. If the |decodedProofValue| starts with the bytes `0xd9`, `0x5d`, and `0x06`, set -|featureOption| to `"pseudonym_issuer_pid"`. +|featureOption| to `"pseudonym"`.
    2. If the |decodedProofValue| starts with the bytes `0xd9`, `0x5d`, and `0x08`, set -|featureOption| to `"pseudonym_hidden_pid"`. +|featureOption| to `"holder_binding_pseudonym"`.
    3. If the |decodedProofValue| starts with any other three byte sequence, @@ -744,20 +743,20 @@

      parseBaseProofValue

    4. If |featureOption| equals `"anonymous_holder_binding"`, set the property names for the object based on |components| to "bbsSignature", "bbsHeader", -"publicKey", "hmacKey", "mandatoryPointers", and "signer_blind", in that order, and +"publicKey", "hmacKey", and "mandatoryPointers", in that order, and add |featureOption| as a property.
    5. -If |featureOption| equals `"pseudonym_issuer_pid"`, set the property names +If |featureOption| equals `"pseudonym"`, set the property names for the object based on |components| to "bbsSignature", "bbsHeader", -"publicKey", "hmacKey", "mandatoryPointers", and "pid", in that order, and -add |featureOption| as a property. +"publicKey", "hmacKey", "mandatoryPointers", and "signer_nym_entropy", in that +order, and add |featureOption| as a property.
    6. -If |featureOption| equals `"pseudonym_hidden_pid"`, set the property names +If |featureOption| equals `"holder_binding_pseudonym"`, set the property names for the object based on |components| to "bbsSignature", "bbsHeader", -"publicKey", "hmacKey", "mandatoryPointers", and "signer_blind", in that order, and -add |featureOption| as a property. +"publicKey", "hmacKey", "mandatoryPointers", and "signer_nym_entropy", in that +order, and add |featureOption| as a property.
    From a2f903c6df5de767b333803983d7c5329cf05f13 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 11:34:37 -0800 Subject: [PATCH 08/24] Update createDisclosureData for the optional feature cases. --- index.html | 82 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/index.html b/index.html index 82cd9ab..ba4c6c6 100644 --- a/index.html +++ b/index.html @@ -881,7 +881,7 @@

    createDisclosureData

    |signature| is the |bbsSignature|, |header| is the |bbsHeader|, |ph| is the |presentationHeader|, |messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, -`commitment_with_proof`, and `signer_blind`. The holder will also furnish its +and `commitment_with_proof`. The holder will also furnish its |holder_secret|, and |proverBlind| that was used to compute the |commitment_with_proof|. This is the Anonymous Holder Binding feature option. @@ -889,46 +889,68 @@

    createDisclosureData

    be updated when IETF API is finalized.
  • -If |featureOption| equals `"pseudonym_issuer_pid"`, compute the |pseudonym| -according to the `Calculate Pseudonym` procedure given -in [[CFRG-Pseudonym-BBS-Signature]], -and set |bsProof| to the value computed by the -`Signer Provided PID Proof Generation` procedure from -[[CFRG-Pseudonym-BBS-Signature]], where |PK| is the original issuers public key, -|signature| is the -|bbsSignature|, |header| is the |bbsHeader|, |ph| is the |presentationHeader| -|messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, and -|pseudonym| is the `pseudonym`. This is for the -Pseudonyms with Issuer-known PID +If |featureOption| equals `"pseudonym"`, +use the "Verification and Finalization" operation +from [[CFRG-Pseudonym-BBS-Signature]] with an empty |committed_messages| array +to both verify the |bbsSignature| and compute +the |nym_secret| value. This operation uses the |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind|. + +Determine the |nym_domain|. This might be specified by +the verifier or set by the holder depending on the usage scenario. Use +the "Proof Generation with Pseudonym" +operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. +This operation takes as inputs +|PK|, the original issuers public key, +|signature|, the |bbsSignature|, |header| is the |bbsHeader|, +|ph| is the |presentationHeader|, +|messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, +|nym_secret|, |nym_domain|, empty +|committed_messages| array, and |secret_prover_blind|. In addition to providing +the raw +cryptographic proof value which is assigned to |bbsProof|, +it also returns the |pseudonym|. + +This is for the +Credential Bound Pseudonyms feature option. To be updated when IETF API is finalized.
  • -If |featureOption| equals `"pseudonym_hidden_pid"`, compute the |pseudonym| -according to the `Calculate Pseudonym` procedure given -in [[CFRG-Pseudonym-BBS-Signature]], -and set |bsProof| to the value computed by the -`Hidden PID Proof Generation with Pseudonym` procedure from -[[CFRG-Pseudonym-BBS-Signature]], where |PK| is the original issuers public key, -|signature| is the -|bbsSignature|, |header| is the |bbsHeader|, |ph| is the |presentationHeader| +If |featureOption| equals `"holder_binding_pseudonym"`, + +use the "Verification and Finalization" operation +from [[CFRG-Pseudonym-BBS-Signature]] with the |committed_messages| array +containing the |holder_secret| as its only value, +to both verify the |bbsSignature| and compute +the |nym_secret| value. This operation uses the |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind|. + +Determine the |nym_domain|. This might be specified by +the verifier or set by the holder depending on the usage scenario. Use +the "Proof Generation with Pseudonym" +operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. +This operation takes as inputs +|PK|, the original issuers public key, +|signature|, the |bbsSignature|, |header| is the |bbsHeader|, +|ph| is the |presentationHeader|, |messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, -|commitment_with_proof|, |pid|, |proverBlind|, |signer_blind|, and -|pseudonym| is the `pseudonym`. This is for the -Pseudonyms with Hidden PID +|nym_secret|, |nym_domain|, the |committed_messages| array containing the +|holder_secret| as its only value, and |secret_prover_blind|. In addition to +providing the raw cryptographic proof value which is assigned to |bbsProof|, +it also returns the |pseudonym|. + +This is for the +Holder Binding and Pseudonyms feature option. To be updated when IETF API is finalized.
  • -If |featureOption| equals `"anonymous_holder_binding"` or -`"pseudonym_hidden_pid"`, set the |lengthBBSMessages| parameter -to the length of the |bbsMessages| array. -If |featureOption| equals `"pseudonym_issuer_pid"` set the |lengthBBSMessages| -parameter to the length of the |bbsMessages| array + 1. This -is due to the known-issuer PID being considered a "BBS message". - +If |featureOption| equals `"anonymous_holder_binding"`, +`"pseudonym"`, or `"holder_binding_pseudonym"` set the |lengthBBSMessages| +parameter to the length of the |bbsMessages| array.
  • From 8e7b6bfa5136d95448e81ce28f223f59426f6749 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 11:45:29 -0800 Subject: [PATCH 09/24] Update serializeDerivedProofValue for optional features. --- index.html | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index ba4c6c6..11a986e 100644 --- a/index.html +++ b/index.html @@ -1056,7 +1056,8 @@

    serializeDerivedProofValue

    array of mandatory indexes (|mandatoryIndexes|), an array of selective indexes (|selectiveIndexes|), and a BBS presentation header (|presentationHeader|), the |featureOption| indicator, and, -depending on the |featureOption| value, a |pseudonym| and/or |lengthBBSMessages| value. +depending on the |featureOption| value, a |nym_domain|, |pseudonym| and/or +|lengthBBSMessages| value. A single derived proof value, serialized as a byte string, is produced as output.

    @@ -1098,7 +1099,7 @@

    serializeDerivedProofValue

  • -If |featureOption| equals `"pseudonym_issuer_pid"` or `"pseudonym_hidden_pid"`: +If |featureOption| equals `"pseudonym"`:
    1. Initialize |proofValue| to start with the @@ -1107,7 +1108,21 @@

      serializeDerivedProofValue

    2. Initialize |components| to an array with elements containing the values of |bbsProof|, |compressedLabelMap|, |mandatoryIndexes|, |selectiveIndexes|, -|presentationHeader|, |pseudonym|, and |lengthBBSMessages|. +|presentationHeader|, |nym_domain|, |pseudonym|, and |lengthBBSMessages|. +
    3. +
    +
  • +
  • +If |featureOption| equals `"holder_binding_pseudonym"`: +
      +
    1. +Initialize |proofValue| to start with the +disclosure proof header bytes: `0xd9`, `0x5d`, and `0x09`. +
    2. +
    3. +Initialize |components| to an array with elements containing the values of +|bbsProof|, |compressedLabelMap|, |mandatoryIndexes|, |selectiveIndexes|, +|presentationHeader|, |nym_domain|, |pseudonym|, and |lengthBBSMessages|.
  • From 001776c5050620071475b3253ec88f60fdd1c4d6 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 12:03:55 -0800 Subject: [PATCH 10/24] Update parseDerivedProofValue for feature options. --- index.html | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index 11a986e..432f233 100644 --- a/index.html +++ b/index.html @@ -1148,10 +1148,10 @@

    parseDerivedProofValue

    The following algorithm parses the components of the derived proof value. The required input is a derived proof value (|proofValue|). A single derived proof value object is produced as output, which -contains a set of six or seven elements, having the names "bbsProof", +contains a set of six to nine elements, having the names "bbsProof", "labelMap", "mandatoryIndexes", "selectiveIndexes", "presentationHeader", "featureOption", and, depending on the value of the |featureOption| parameter, -"pseudonym" and/or "lengthBBSMessages". +"nym_domain", "pseudonym" and/or "lengthBBSMessages".

      @@ -1185,14 +1185,19 @@

      parseDerivedProofValue

      If the |decodedProofValue| starts with the header bytes `0xd9`, `0x5d`, and `0x07`, set |featureOption| to `"pseudonym"`. +
    1. +If the |decodedProofValue| starts with the header bytes `0xd9`, `0x5d`, and +`0x09`, set |featureOption| to `"holder_binding_pseudonym"`. +
    + +
  • Initialize `components` to an array that is the result of CBOR-decoding the bytes that follow the three-byte BBS disclosure proof header. If the result -is not an array of five, six, or seven elements — -a byte array, a map of integers to integers, -two arrays of integers, and one or two byte arrays; +is not an array of five, six, or eight elements an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
  • @@ -1203,8 +1208,8 @@

    parseDerivedProofValue

  • Return derived proof value as an object with properties set to the five, -six, or seven elements, using the names "bbsProof", "labelMap", "mandatoryIndexes", -"selectiveIndexes", "presentationHeader", and optional "pseudonym" and/or +six, or eight elements, using the names "bbsProof", "labelMap", "mandatoryIndexes", +"selectiveIndexes", "presentationHeader", and optional "nym_domain", "pseudonym" and/or "lengthBBSMessages", respectively. In addition, add |featureOption| and its value to the object.
  • From a541c11f6c713385d53889e3cfe9cc4f8c78b673 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 15:04:32 -0800 Subject: [PATCH 11/24] Update "Create Base Proof" for feature options. --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 432f233..0084ba1 100644 --- a/index.html +++ b/index.html @@ -1319,10 +1319,10 @@

    Create Base Proof (bbs-2023)

    The |featureOption| parameter is used to indicate which optional feature, if any, is being used. It can take one of the following values `"baseline"`, -`"anonymous_holder_binding"`, `"pseudonym_issuer_pid"`, or -`"pseudonym_hidden_pid"`. Note that `"baseline"` is used to denote the case of +`"anonymous_holder_binding"`, `"pseudonym"`, or +`"holder_binding_pseudonym"`. Note that `"baseline"` is used to denote the case of no optional features. If |featureOption| is set to -`"anonymous_holder_binding"` or `"pseudonym_hidden_pid"`, the +`"anonymous_holder_binding"`, `"pseudonym"`, or `"holder_binding_pseudonym"` the |commitment_with_proof| input MUST be supplied.

    From 86da1dd23c5a2e5f6e34f99c3d07a58bce88647e Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 15:07:43 -0800 Subject: [PATCH 12/24] Additional update to "Create Base Proof" to include signer_nym_entropy when appropriate. --- index.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/index.html b/index.html index 0084ba1..7c4aae2 100644 --- a/index.html +++ b/index.html @@ -1324,6 +1324,9 @@

    Create Base Proof (bbs-2023)

    no optional features. If |featureOption| is set to `"anonymous_holder_binding"`, `"pseudonym"`, or `"holder_binding_pseudonym"` the |commitment_with_proof| input MUST be supplied. +If |featureOption| is set to +`"pseudonym"`, or `"holder_binding_pseudonym"` the +|signer_nym_entropy| input MUST be supplied.

      From 675ce8f03dd2fd34a1d1ac722a810baf0c1d1a66 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 15:32:43 -0800 Subject: [PATCH 13/24] Update "Base Proof Serialization" for feature options. --- index.html | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/index.html b/index.html index 7c4aae2..28413e9 100644 --- a/index.html +++ b/index.html @@ -1543,11 +1543,16 @@

      Base Proof Serialization (bbs-2023)

      cryptographic hash data (|hashData|), |featureOption|, and, if required, |commitment_with_proof|. -If |featureOption| is set to `"anonymous_holder_binding"` or -`"pseudonym_hidden_pid"`, the +If |featureOption| is set to `"anonymous_holder_binding"`, +`"pseudonym"`, or `"holder_binding_pseudonym"` the |commitment_with_proof| input MUST be supplied; if not supplied, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR. +If |featureOption| is set to +`"pseudonym"`, or `"holder_binding_pseudonym"` the +|signer_nym_entropy| input MUST be supplied; if not supplied, +an error MUST be raised and SHOULD convey an error type of +PROOF_GENERATION_ERROR. A single digital proof value represented as series of bytes is produced as output.

      @@ -1581,32 +1586,25 @@

      Base Proof Serialization (bbs-2023)

      `bbsSignature` using the `BlindSign` procedure of [[CFRG-Blind-BBS-Signature]], with appropriate key material, |commitment_with_proof| for the `commitment_with_proof`, |bbsHeader| for the `header`, and |bbsMessages| -for the `messages`. If the signing procedure uses the optional |signer_blind| -parameter, retain this value for use when calling - (below). This provides for the +for the `messages`. This provides for the Anonymous Holder Binding feature.
    1. -If |featureOption| equals `"pseudonym_issuer_pid"`, generate a -cryptographically random 32 byte |pid| value. Compute the -`bbsSignature` using the `Signer Provided PID Signature Generation` procedure -of [[CFRG-Pseudonym-BBS-Signature]], -with appropriate key material, |bbsHeader| for the `header`, |bbsMessages| -for the `messages`, and |pid| for the `pid`. Retain the |pid| value for use when -calling below. -This provides for Pseudonym with -Issuer-known PID feature. -
    2. -
    3. -If |featureOption| equals `"pseudonym_hidden_pid"`, compute -the `bbsSignature` using the `Hidden PID Signature Generation` procedure of -[[CFRG-Pseudonym-BBS-Signature]], with appropriate key material, |bbsHeader| -for the `header`, |bbsMessages| for the `messages`, and |commitment_with_proof| -for the `commitment_with_proof`. If the signing procedure uses the optional -|signer_blind| parameter retain this value for use when calling - below. -This provides for the Pseudonym with - Hidden PID feature. +If |featureOption| equals `"pseudonym"`, or `"holder_binding_pseudonym"` +the issuer generates a +cryptographically random value for the |signer_nym_entropy| and computes the +`bbsSignature` using the +"Blind Issuance" operation from [[CFRG-Pseudonym-BBS-Signature]] +with appropriate key material, |bbsHeader| +for the `header`, |bbsMessages| for the `messages`, |commitment_with_proof| +for the `commitment_with_proof`, and +|signer_nym_entropy| value. If the issuer ever needs reissue a credential to +this holder that is bound to the same |nym_secret| they should retain the +|signer_nym_entropy| value, otherwise this value can be discarded. + +This provides for the Credential Bound + Pseudonyms or Holder Binding and + Psuedonyms features.
    @@ -1614,8 +1612,8 @@

    Base Proof Serialization (bbs-2023)

    Initialize `proofValue to the result of calling the algorithm in Section , passing |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|, |featureOption|, and depending on -the |featureOption| value and signing options the |pid|, and |signer_blind| -values as paramters. +the |featureOption| value the |signer_nym_entropy| +value as parameters. Note `publicKey` is a byte array of the public key, encoded according to [[CFRG-BBS-SIGNATURE]]. From 94a45ebbb33567941ee57664b906e2fc48977a1b Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 15:46:35 -0800 Subject: [PATCH 14/24] Update "Add Derived Proof" for feature options. --- index.html | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 28413e9..69b92bb 100644 --- a/index.html +++ b/index.html @@ -1648,17 +1648,21 @@

    Add Derived Proof (bbs-2023)

    information.

    -If |featureOption| equals `"pseudonym_issuer_pid"`, the REQUIRED -additional input is the |verifier_id| which is communicated to the holder by the -verifier. See Pseudonyms with -Issuer-known PID for background information. -

    -

    -If |featureOption| equals `"pseudonym_hidden_pid"`, the REQUIRED -additional inputs are the |pid|, |proverBlind| (both known to -holder), and |verifier_id| which is communicated to the holder by the verifier. -See Pseudonyms with -Hidden PID for background information. +If |featureOption| equals `"pseudonym"`, the REQUIRED +additional inputs are the |prover_nym|, |proverBlind| (both known to +holder), and |nym_dofmain| which is either set by the holder or communicated to +the holder by the verifier. +See Credential Bound Pseudonyms for +background information. +

    +

    +If |featureOption| equals `"holder_binding_pseudonym"`, the REQUIRED +additional inputs are the |holder_secret|, |prover_nym|, |proverBlind| (all +known to the holder), and |nym_dofmain| which is either set by the holder or +communicated to +the holder by the verifier. +See Holder Binding and Pseudonyms for +background information.

    1. From 38067995c460be1dac7fa4aa054f0e925fddc9b5 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 4 Dec 2024 15:59:47 -0800 Subject: [PATCH 15/24] Update "Verify Derived Proof" for feature options. --- index.html | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 69b92bb..d71bf7a 100644 --- a/index.html +++ b/index.html @@ -1737,7 +1737,7 @@

      Verify Derived Proof (bbs-2023)

    2. Initialize |bbsProof|, |proofHash|, |mandatoryHash|, |selectiveIndexes|, |presentationHeader|, |nonMandatory|, |featureOption|, and, possibly, -|pseudonym|, to the values associated +|lengthBBSMessages|, and |pseudonym|, to the values associated with their property names in the object returned when calling the algorithm in Section , passing the |unsecuredDocument|, |proof|, and any custom JSON-LD API options (such as a document loader). @@ -1767,11 +1767,13 @@

      Verify Derived Proof (bbs-2023)

      To be updated when IETF API is finalized.
    3. -If the |featureOption| equals `"pseudonym"`, initialize |verified| -to the result of -applying the `ProofVerifyWithPseudonym` verification algorithm of +If the |featureOption| equals `"pseudonym"` or `"holder_binding_pseudonym"`, +initialize |verified| +to the result of applying the +"Proof Verification with Pseudonym" operation from [[CFRG-Pseudonym-BBS-Signature]] using |lengthBBSMessages| for the `"L"` -parameter. To be updated when IETF +parameter and an empty |committed_messages| array. +To be updated when IETF API is finalized.
    From b1fc12bbb46cb77e8808cae1cea7daa85f2c9253 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Tue, 10 Dec 2024 10:31:16 -0800 Subject: [PATCH 16/24] Update Anonymous Holder Binding test vectors and description. --- .../addRawBaseSignatureInfo.json | 3 +- .../HolderBinding/addSignedSDBase.json | 2 +- TestVectors/HolderBinding/commitmentInfo.json | 4 +- .../HolderBinding/derivedAdjIndexes.json | 5 +- .../HolderBinding/derivedAllGroupData.json | 116 +++++++++--------- .../HolderBinding/derivedDisclosureData.json | 9 +- .../HolderBinding/derivedGroupIndexes.json | 7 +- .../derivedRecoveredBaseData.json | 3 +- .../HolderBinding/derivedRevealDocument.json | 2 +- .../verifyDerivedProofValue.json | 2 +- index.html | 20 +-- 11 files changed, 74 insertions(+), 99 deletions(-) diff --git a/TestVectors/HolderBinding/addRawBaseSignatureInfo.json b/TestVectors/HolderBinding/addRawBaseSignatureInfo.json index e22a92f..9a1926f 100644 --- a/TestVectors/HolderBinding/addRawBaseSignatureInfo.json +++ b/TestVectors/HolderBinding/addRawBaseSignatureInfo.json @@ -1,5 +1,5 @@ { - "bbsSignature": "a61f9505bce7a5c9de2313ab6677999f0fb20685ab0c7fe91ca6d967dc4f9b2c6f973c8b04bc5269d3b960be707c0aea34042ba5646ff9892e537513b4b4721029bef35d922c3f3d27ca275984f52f3e", + "bbsSignature": "90eadd70a16661f3d596f3560fc485f7c23ba969eb7c237d481b3596b2f66279bd5a62fa523777eb73b5cfa361885f1a00864b960baf1b92d2b55c0652ebe39024f88e1377911c40bf14cb5fbc808ee1", "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb", "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f", "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", @@ -7,6 +7,5 @@ "/issuer", "/expirationDate" ], - "signerBlind": "2c971d5a34c1fd8d79a65afa6a7de15827af471f9c28279007072e845cd7c7b3", "featureOption": "anonymous_holder_binding" } \ No newline at end of file diff --git a/TestVectors/HolderBinding/addSignedSDBase.json b/TestVectors/HolderBinding/addSignedSDBase.json index 71f2f2d..f7ac4a9 100644 --- a/TestVectors/HolderBinding/addSignedSDBase.json +++ b/TestVectors/HolderBinding/addSignedSDBase.json @@ -68,6 +68,6 @@ "created": "2023-08-15T23:36:38Z", "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", "proofPurpose": "assertionMethod", - "proofValue": "u2V0EhlhQph-VBbznpcneIxOrZneZnw-yBoWrDH_pHKbZZ9xPmyxvlzyLBLxSadO5YL5wfArqNAQrpWRv-YkuU3UTtLRyECm-812SLD89J8onWYT1Lz5YQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRlWCAslx1aNMH9jXmmWvpqfeFYJ69HH5woJ5AHBy6EXNfHsw" + "proofValue": "u2V0EhVhQkOrdcKFmYfPVlvNWD8SF98I7qWnrfCN9SBs1lrL2Ynm9WmL6Ujd363O1z6NhiF8aAIZLlguvG5LStVwGUuvjkCT4jhN3kRxAvxTLX7yAjuFYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRl" } } \ No newline at end of file diff --git a/TestVectors/HolderBinding/commitmentInfo.json b/TestVectors/HolderBinding/commitmentInfo.json index ff7d4b3..e5fdb0a 100644 --- a/TestVectors/HolderBinding/commitmentInfo.json +++ b/TestVectors/HolderBinding/commitmentInfo.json @@ -1,4 +1,4 @@ { - "secretProverBlind": "14c6dd50a5ae34ae83cd585dda6bb0ebbc23327ad3bcc92f321f09cc954435f0", - "commitmentWithProof": "b12a3bc39c35ca52631dfe4aee47f5f10d94107fd97f1aa39a94badb291ee66adf650770e08bb280af9340f34836b7ab353365d5769a24ded4a919c598c8831c0b66f83759f32d3b7eddcabf42bc471b475533116151674faec83c4fddc1c514af239f6370359aa03a955751a6b106911b902ae4dc6f14cfda9e0be04d85a3f1105fb7d5c83d263e0ca95217c8017e91" + "secretProverBlind": "12901a77b3906af68d9e4214dce887d127b2a51d6311bbe7d087d45737acd2db", + "commitmentWithProof": "ab77a14fddfafc7ae6ea82b0ef6048059225f96c9206903a34c6ec6beba702652e9d64fac1917e372853867d944e4a8059e0c26bc871cac14736e73685cd3006299539b93df64cdf661af2bc6300976528c5092c6dc842abaaa624f2184d3d5b75be0ede9c4822161149ef51a965ddda260e10b9246ecaea020ef952e3b3ed6e724bcb5d1a9c4004f0aea2cba030c27c" } \ No newline at end of file diff --git a/TestVectors/HolderBinding/derivedAdjIndexes.json b/TestVectors/HolderBinding/derivedAdjIndexes.json index 24c66a7..dbad924 100644 --- a/TestVectors/HolderBinding/derivedAdjIndexes.json +++ b/TestVectors/HolderBinding/derivedAdjIndexes.json @@ -1,4 +1 @@ -{ - "adjMandatoryIndexes":[0,1,2,5,6,8,9], - "adjSelectiveIndexes":[0,1,5,7,10,16] -} \ No newline at end of file +{"adjMandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16]} \ No newline at end of file diff --git a/TestVectors/HolderBinding/derivedAllGroupData.json b/TestVectors/HolderBinding/derivedAllGroupData.json index 575414a..b17127b 100644 --- a/TestVectors/HolderBinding/derivedAllGroupData.json +++ b/TestVectors/HolderBinding/derivedAllGroupData.json @@ -135,10 +135,10 @@ " .\n", " \"Utopia Department of Motor Vehicles\" .\n", " .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n" + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n" ] }, "selective": { @@ -273,14 +273,14 @@ ] }, "deskolemizedNQuads": [ - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"UA\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n" + "_:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"UA\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 _:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 _:_26722372-c130-468d-94f1-31f48b98427c_1 .\n" ] }, "combined": { @@ -418,16 +418,16 @@ " .\n", " \"Utopia Department of Motor Vehicles\" .\n", " .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"UA\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n" + "_:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"UA\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 _:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 _:_26722372-c130-468d-94f1-31f48b98427c_1 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n" ] } }, @@ -542,13 +542,13 @@ "@value": "UTA" } ], - "@id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_0" + "@id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_0" } ], "@type": [ "https://w3id.org/vdl#LicensedDriver" ], - "@id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_1" + "@id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_1" } ], "https://schema.org/description": [ @@ -602,7 +602,7 @@ "https://www.w3.org/2018/credentials#VerifiableCredential", "https://w3id.org/vdl#Iso18013DriversLicenseCredential" ], - "@id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_2" + "@id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_2" } ], "compact": { @@ -612,7 +612,7 @@ "https://w3id.org/vdl/v1", "https://w3id.org/vdl/aamva/v1" ], - "id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_2", + "id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_2", "type": [ "VerifiableCredential", "Iso18013DriversLicenseCredential" @@ -621,10 +621,10 @@ "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC", "name": "Utopia Driver's License", "credentialSubject": { - "id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_1", + "id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_1", "type": "LicensedDriver", "driversLicense": { - "id": "urn:bnid:_5ec761cf-6b8d-4150-941b-67a0a618a918_0", + "id": "urn:bnid:_26722372-c130-468d-94f1-31f48b98427c_0", "type": "Iso18013DriversLicense", "birth_date": "1998-08-28", "document_number": "542426814", @@ -678,47 +678,47 @@ " .\n", " \"Utopia Department of Motor Vehicles\" .\n", " .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"1998-08-28\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"542426814\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"2028-08-27T12:00:00-06:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"TURNER\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"SUSAN\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"2023-01-15T10:00:00-07:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"UADMV\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"UA\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"2\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"UTA\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"1ST\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"N\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 \"N\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_0 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"A license granting driving privileges in Utopia.\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"Utopia Driver's License\" .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 _:_5ec761cf-6b8d-4150-941b-67a0a618a918_1 .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 \"2023-11-15T10:00:00-07:00\"^^ .\n", - "_:_5ec761cf-6b8d-4150-941b-67a0a618a918_2 .\n" + "_:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"1998-08-28\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"542426814\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"2028-08-27T12:00:00-06:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"TURNER\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"SUSAN\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"2023-01-15T10:00:00-07:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"UADMV\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"UA\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"2\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"UTA\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"1ST\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"N\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_0 \"N\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_1 _:_26722372-c130-468d-94f1-31f48b98427c_0 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"A license granting driving privileges in Utopia.\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"Utopia Driver's License\" .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 _:_26722372-c130-468d-94f1-31f48b98427c_1 .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 \"2023-11-15T10:00:00-07:00\"^^ .\n", + "_:_26722372-c130-468d-94f1-31f48b98427c_2 .\n" ], "labelMap": { "dataType": "Map", "value": [ [ - "_5ec761cf-6b8d-4150-941b-67a0a618a918_2", + "_26722372-c130-468d-94f1-31f48b98427c_2", "b1" ], [ - "_5ec761cf-6b8d-4150-941b-67a0a618a918_1", + "_26722372-c130-468d-94f1-31f48b98427c_1", "b0" ], [ - "_5ec761cf-6b8d-4150-941b-67a0a618a918_0", + "_26722372-c130-468d-94f1-31f48b98427c_0", "b2" ] ] diff --git a/TestVectors/HolderBinding/derivedDisclosureData.json b/TestVectors/HolderBinding/derivedDisclosureData.json index ebc7185..ebc5909 100644 --- a/TestVectors/HolderBinding/derivedDisclosureData.json +++ b/TestVectors/HolderBinding/derivedDisclosureData.json @@ -1,8 +1 @@ -{ - "bbsProof":"8621d7b34d4e0a2eae538d4a24b75b353518b9b2b4fd8e1d1131c33bb7b0708de00592ea8e959f05d278dc1ae449f68f87651657392d7d92cdfc23c967f4bd7ccb5d7e51201730aacb8ea15fc3667ee9ffad64e87e840cf9af5630b8f895b9cf8298dbdabdcf83b86038a152f668c572ec0ac2a5671a60e9ff55f01a6e937d0304cc525ac0386d500c17a52997c247ad23e0c5dfa1987e33fb14c5a44edcce4d7060fb9bdefc60e18e1328ad1824572741edb84314c3dc446b22e9891c13d200f240ec32859d96a63dc4b962a45160851bc7dfb2b5ab3c8e469cbfa2370e04b022221d30bffed0a759bde1c2d56363b543b6faa59f7dfeee8eaea1db0e73c0932a77ce39bc3b1f8008af4a8c20a630e7716e9fbe5636ae1ce30f6c1373b0cec62d803532a8101f633d7260fdba6e55ba36956cf3bbd9aae52193a108b4012b12e67d7a51498e44b10430aadc3857eef73e7bfa34b0aebd511823dae91cf29b68c618a7b3b7b804e97d599a92efd895975309e19edd932474534f3a447cf9c4d3cc228559ff70c17d2ee3544c9ba5051c43feedc9a02acd185a339f0307fb80cf209955368f60a0fd18d55efb249f22a805249bc6ec8cba9be2b4237e8866460cc4d063f16e0cb2fe82ad9b229d565d3c472c5e574fec5867ad90ed41c8a87e4e59f513bb937309f6135923950f119fcf6f7e682ea2917120f6830f38ff3bad1057908555d5cb884f2a4775e22cb311ee67355fe474e93a26129995c03ec4f76b4e4d191391a5e03f49e72f72971b35d2164f30717d7ce906d822bd7c993eecdbcf4ecfd0b0edb1f0dbf73de2a1cc7d0c34a5b2cff4dee896ce12c9a1d4b4f48f7a50918685c7007854d98945dc6563515377cc50fc2e47ac23a1bda1f9fcacdd4fa5519edc27250640d93a7358a48c6b733235c6ef4683e4a78f5b3da71be9cdaf153a26290becc72578b414a2a5d3c33c01bf7026a06dd7c5cedb9aa7b661507718631f84b47ee3a78331ef9a9abccf389a06521a598ffba6aff68cd31a982a67a11f2dd3cefdf5a3447688ddb24e97686373ab5efab6438586022f0cc7844355057e2f7bdb9fee7ad1661635a8056401df5b48b9958d92874c8d44119479d69d16ebb82ec741e8ffe1175e1bf7732038fe02a2063f83e0e11a77ebd37e146a0b59b39adc653255acfe19f5a5fc21db139652cb085d7c49ebe6bee66f3e9c9a888bb0679bf570e862c3cb68867cf401", - "labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]}, - "mandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16], - "presentationHeader":{"0":17,"1":51,"2":119,"3":170}, - "featureOption":"anonymous_holder_binding", - "lengthBBSMessages":23 -} \ No newline at end of file +{"bbsProof":"a19db05cca1237d9965b0bb3197c4962a7fb49c97af131c80ea2d8f949078ff5642acdb33d27d06b97f87ff906a2a23bb0c3dd778572b892785faefdc25811318b0b46e25b8863898b0600701a71c256ee9a7347a1a577fe2e3793b1c0390e4d8f9fff9161074eebba852bcca8089eed76416ac9f178b850e7688c26cfbdee344fa75d9ba2cf22417e3c70be7891f6de040928d4a665005ddbe3b7372ecb87baad726f1535d4600a0198d3a36a17ad673160f8ef5e5fd74f2542b214cc4534ee82b0a90c0501ca9749c8327afcb97e14220f2e516dfc3cb2ed2ffdd3845a25cb64e1a2aa9987bbc122755158d787a2356e28f2affff31b83a2cdff26d5ac1aa72f4d6c40fe96ad230ce09fd4e9b8998357c2964da031e59c3b8c2241da00bc66a6216af7cd02b535577fa3b54bf9a0d230183b03aa145dbabc7fed3710d879c6b8d4273e6e377bed382de985f561ff9b2b3445f29957655600cbd1b29714f52c55ff05bc204203e65bdf6f818e976c690becfed9284b27c2dead96803efad949ffb519b7024530b08b5ed4c8e7472ed20c3866b79658e1b2d2c5b88a60da07614afa4906c73a6e5ad9113282288173e265236fa57d72c97f85c86b43349516f8e2f52f756d43cd2d9cf8c673db404d14007706ebbd4f7b5bbd19cdce9f48b2dac2db7f0f0c3fb18bd8e66e28fe46dafc3961e5945779faf5407190a33ce00efd07222cc142d40cab9b9d591589a30d056dae47d376d3ac5fab3201bbada604dd8e5e292185f38e2bcd58e81b2fec1e7b5754b7b28bd127abc929e950cb75100e94695f1ad13c09c1d394664029b66bdd49304df3ae1e2a90a6309f07c47555ccaea9cd17d80eaad6b7c29e9335a69338446ff666ac5802cfe36057c449d392bda99d2657fb8b6cf02d7ce4d9dccd8e97033accc5c10f092ec7bf0b3c0b2afc64a1a429d81cc485388f6f390dd97f648c3712ee0b93a7e96b268437e6e3537fb7918cee2a4ac3f895c7945988d7d3880238b8cf6062da171aa87545cf62072b20e698eb4ac12450c0b95a77e946fada8d46102abfa9a5a12d2a71380dedb51e2a57c97514813c17ea93e6ca19077c2a2511bf8fd158c4ed7361590b040915a3cb76f323300111303d8dd31c55474d514209bf01ed6639d4d81a1b30be54444e523e2ddef9a0a6bfe792d3037944aec29154c02bb79d09bd53856797dceb6c599f4103ff7f13dfdb8b2d18477832e5fe21","labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]},"mandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16],"presentationHeader":{"0":17,"1":51,"2":119,"3":170},"featureOption":"anonymous_holder_binding","lengthBBSMessages":23} \ No newline at end of file diff --git a/TestVectors/HolderBinding/derivedGroupIndexes.json b/TestVectors/HolderBinding/derivedGroupIndexes.json index 24e51e6..85504a2 100644 --- a/TestVectors/HolderBinding/derivedGroupIndexes.json +++ b/TestVectors/HolderBinding/derivedGroupIndexes.json @@ -1,6 +1 @@ -{ - "combinedIndexes":[0,1,2,3,4,5,6,10,11,13,14,17,23], - "mandatoryIndexes":[0,1,2,5,6,11,13], - "nonMandatoryIndexes":[3,4,7,8,9,10,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], - "selectiveIndexes":[3,4,5,6,10,14,17,23] -} \ No newline at end of file +{"combinedIndexes":[0,1,2,3,4,5,6,10,11,13,14,17,23],"mandatoryIndexes":[0,1,2,5,6,11,13],"nonMandatoryIndexes":[3,4,7,8,9,10,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"selectiveIndexes":[3,4,5,6,10,14,17,23]} \ No newline at end of file diff --git a/TestVectors/HolderBinding/derivedRecoveredBaseData.json b/TestVectors/HolderBinding/derivedRecoveredBaseData.json index e22a92f..9a1926f 100644 --- a/TestVectors/HolderBinding/derivedRecoveredBaseData.json +++ b/TestVectors/HolderBinding/derivedRecoveredBaseData.json @@ -1,5 +1,5 @@ { - "bbsSignature": "a61f9505bce7a5c9de2313ab6677999f0fb20685ab0c7fe91ca6d967dc4f9b2c6f973c8b04bc5269d3b960be707c0aea34042ba5646ff9892e537513b4b4721029bef35d922c3f3d27ca275984f52f3e", + "bbsSignature": "90eadd70a16661f3d596f3560fc485f7c23ba969eb7c237d481b3596b2f66279bd5a62fa523777eb73b5cfa361885f1a00864b960baf1b92d2b55c0652ebe39024f88e1377911c40bf14cb5fbc808ee1", "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb", "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f", "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", @@ -7,6 +7,5 @@ "/issuer", "/expirationDate" ], - "signerBlind": "2c971d5a34c1fd8d79a65afa6a7de15827af471f9c28279007072e845cd7c7b3", "featureOption": "anonymous_holder_binding" } \ No newline at end of file diff --git a/TestVectors/HolderBinding/derivedRevealDocument.json b/TestVectors/HolderBinding/derivedRevealDocument.json index b69d8d2..69f471b 100644 --- a/TestVectors/HolderBinding/derivedRevealDocument.json +++ b/TestVectors/HolderBinding/derivedRevealDocument.json @@ -51,6 +51,6 @@ "created": "2023-08-15T23:36:38Z", "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", "proofPurpose": "assertionMethod", - "proofValue": "u2V0FhlkDcIYh17NNTgourlONSiS3WzU1GLmytP2OHRExwzu3sHCN4AWS6o6VnwXSeNwa5En2j4dlFlc5LX2SzfwjyWf0vXzLXX5RIBcwqsuOoV_DZn7p_61k6H6EDPmvVjC4-JW5z4KY29q9z4O4YDihUvZoxXLsCsKlZxpg6f9V8Bpuk30DBMxSWsA4bVAMF6Upl8JHrSPgxd-hmH4z-xTFpE7czk1wYPub3vxg4Y4TKK0YJFcnQe24QxTD3ERrIumJHBPSAPJA7DKFnZamPcS5YqRRYIUbx9-ytas8jkacv6I3DgSwIiIdML_-0KdZveHC1WNjtUO2-qWfff7ujq6h2w5zwJMqd845vDsfgAivSowgpjDncW6fvlY2rhzjD2wTc7DOxi2ANTKoEB9jPXJg_bpuVbo2lWzzu9mq5SGToQi0ASsS5n16UUmORLEEMKrcOFfu9z57-jSwrr1RGCPa6Rzym2jGGKezt7gE6X1ZmpLv2JWXUwnhnt2TJHRTTzpEfPnE08wihVn_cMF9LuNUTJulBRxD_u3JoCrNGFoznwMH-4DPIJlVNo9goP0Y1V77JJ8iqAUkm8bsjLqb4rQjfohmRgzE0GPxbgyy_oKtmyKdVl08RyxeV0_sWGetkO1ByKh-Tln1E7uTcwn2E1kjlQ8Rn89vfmguopFxIPaDDzj_O60QV5CFVdXLiE8qR3XiLLMR7mc1X-R06TomEpmVwD7E92tOTRkTkaXgP0nnL3KXGzXSFk8wcX186QbYIr18mT7s289Oz9Cw7bHw2_c94qHMfQw0pbLP9N7ols4SyaHUtPSPelCRhoXHAHhU2YlF3GVjUVN3zFD8LkesI6G9ofn8rN1PpVGe3CclBkDZOnNYpIxrczI1xu9Gg-Snj1s9pxvpza8VOiYpC-zHJXi0FKKl08M8Ab9wJqBt18XO25qntmFQdxhjH4S0fuOngzHvmpq8zziaBlIaWY_7pq_2jNMamCpnoR8t08799aNEdojdsk6XaGNzq176tkOFhgIvDMeEQ1UFfi9725_uetFmFjWoBWQB31tIuZWNkodMjUQRlHnWnRbruC7HQej_4RdeG_dzIDj-AqIGP4Pg4Rp369N-FGoLWbOa3GUyVaz-GfWl_CHbE5ZSywhdfEnr5r7mbz6cmoiLsGeb9XDoYsPLaIZ89AGjAAEBAgIAhwABAgUGCAmGAAEFBwoQRBEzd6oX" + "proofValue": "u2V0FhlkDcKGdsFzKEjfZllsLsxl8SWKn-0nJevExyA6i2PlJB4_1ZCrNsz0n0GuX-H_5BqKiO7DD3XeFcriSeF-u_cJYETGLC0biW4hjiYsGAHAaccJW7ppzR6Gld_4uN5OxwDkOTY-f_5FhB07ruoUrzKgInu12QWrJ8Xi4UOdojCbPve40T6ddm6LPIkF-PHC-eJH23gQJKNSmZQBd2-O3Ny7Lh7qtcm8VNdRgCgGY06NqF61nMWD4715f108lQrIUzEU07oKwqQwFAcqXScgyevy5fhQiDy5Rbfw8su0v_dOEWiXLZOGiqpmHu8EidVFY14eiNW4o8q__8xuDos3_JtWsGqcvTWxA_patIwzgn9TpuJmDV8KWTaAx5Zw7jCJB2gC8ZqYhavfNArU1V3-jtUv5oNIwGDsDqhRdurx_7TcQ2HnGuNQnPm43e-04LemF9WH_mys0RfKZV2VWAMvRspcU9SxV_wW8IEID5lvfb4GOl2xpC-z-2ShLJ8LerZaAPvrZSf-1GbcCRTCwi17UyOdHLtIMOGa3lljhstLFuIpg2gdhSvpJBsc6blrZETKCKIFz4mUjb6V9csl_hchrQzSVFvji9S91bUPNLZz4xnPbQE0UAHcG671Pe1u9Gc3On0iy2sLbfw8MP7GL2OZuKP5G2vw5YeWUV3n69UBxkKM84A79ByIswULUDKubnVkViaMNBW2uR9N206xfqzIBu62mBN2OXikhhfOOK81Y6Bsv7B57V1S3sovRJ6vJKelQy3UQDpRpXxrRPAnB05RmQCm2a91JME3zrh4qkKYwnwfEdVXMrqnNF9gOqta3wp6TNaaTOERv9masWALP42BXxEnTkr2pnSZX-4ts8C185NnczY6XAzrMxcEPCS7Hvws8Cyr8ZKGkKdgcxIU4j285Ddl_ZIw3Eu4Lk6fpayaEN-bjU3-3kYzuKkrD-JXHlFmI19OIAji4z2Bi2hcaqHVFz2IHKyDmmOtKwSRQwLlad-lG-tqNRhAqv6mloS0qcTgN7bUeKlfJdRSBPBfqk-bKGQd8KiURv4_RWMTtc2FZCwQJFaPLdvMjMAERMD2N0xxVR01RQgm_Ae1mOdTYGhswvlRETlI-Ld75oKa_55LTA3lErsKRVMArt50JvVOFZ5fc62xZn0ED_38T39uLLRhHeDLl_iGjAAEBAgIAhwABAgUGCAmGAAEFBwoQRBEzd6oX" } } \ No newline at end of file diff --git a/TestVectors/HolderBinding/verifyDerivedProofValue.json b/TestVectors/HolderBinding/verifyDerivedProofValue.json index 4bef63d..bbf3453 100644 --- a/TestVectors/HolderBinding/verifyDerivedProofValue.json +++ b/TestVectors/HolderBinding/verifyDerivedProofValue.json @@ -1,5 +1,5 @@ { - "bbsProof": "8621d7b34d4e0a2eae538d4a24b75b353518b9b2b4fd8e1d1131c33bb7b0708de00592ea8e959f05d278dc1ae449f68f87651657392d7d92cdfc23c967f4bd7ccb5d7e51201730aacb8ea15fc3667ee9ffad64e87e840cf9af5630b8f895b9cf8298dbdabdcf83b86038a152f668c572ec0ac2a5671a60e9ff55f01a6e937d0304cc525ac0386d500c17a52997c247ad23e0c5dfa1987e33fb14c5a44edcce4d7060fb9bdefc60e18e1328ad1824572741edb84314c3dc446b22e9891c13d200f240ec32859d96a63dc4b962a45160851bc7dfb2b5ab3c8e469cbfa2370e04b022221d30bffed0a759bde1c2d56363b543b6faa59f7dfeee8eaea1db0e73c0932a77ce39bc3b1f8008af4a8c20a630e7716e9fbe5636ae1ce30f6c1373b0cec62d803532a8101f633d7260fdba6e55ba36956cf3bbd9aae52193a108b4012b12e67d7a51498e44b10430aadc3857eef73e7bfa34b0aebd511823dae91cf29b68c618a7b3b7b804e97d599a92efd895975309e19edd932474534f3a447cf9c4d3cc228559ff70c17d2ee3544c9ba5051c43feedc9a02acd185a339f0307fb80cf209955368f60a0fd18d55efb249f22a805249bc6ec8cba9be2b4237e8866460cc4d063f16e0cb2fe82ad9b229d565d3c472c5e574fec5867ad90ed41c8a87e4e59f513bb937309f6135923950f119fcf6f7e682ea2917120f6830f38ff3bad1057908555d5cb884f2a4775e22cb311ee67355fe474e93a26129995c03ec4f76b4e4d191391a5e03f49e72f72971b35d2164f30717d7ce906d822bd7c993eecdbcf4ecfd0b0edb1f0dbf73de2a1cc7d0c34a5b2cff4dee896ce12c9a1d4b4f48f7a50918685c7007854d98945dc6563515377cc50fc2e47ac23a1bda1f9fcacdd4fa5519edc27250640d93a7358a48c6b733235c6ef4683e4a78f5b3da71be9cdaf153a26290becc72578b414a2a5d3c33c01bf7026a06dd7c5cedb9aa7b661507718631f84b47ee3a78331ef9a9abccf389a06521a598ffba6aff68cd31a982a67a11f2dd3cefdf5a3447688ddb24e97686373ab5efab6438586022f0cc7844355057e2f7bdb9fee7ad1661635a8056401df5b48b9958d92874c8d44119479d69d16ebb82ec741e8ffe1175e1bf7732038fe02a2063f83e0e11a77ebd37e146a0b59b39adc653255acfe19f5a5fc21db139652cb085d7c49ebe6bee66f3e9c9a888bb0679bf570e862c3cb68867cf401", + "bbsProof": "a19db05cca1237d9965b0bb3197c4962a7fb49c97af131c80ea2d8f949078ff5642acdb33d27d06b97f87ff906a2a23bb0c3dd778572b892785faefdc25811318b0b46e25b8863898b0600701a71c256ee9a7347a1a577fe2e3793b1c0390e4d8f9fff9161074eebba852bcca8089eed76416ac9f178b850e7688c26cfbdee344fa75d9ba2cf22417e3c70be7891f6de040928d4a665005ddbe3b7372ecb87baad726f1535d4600a0198d3a36a17ad673160f8ef5e5fd74f2542b214cc4534ee82b0a90c0501ca9749c8327afcb97e14220f2e516dfc3cb2ed2ffdd3845a25cb64e1a2aa9987bbc122755158d787a2356e28f2affff31b83a2cdff26d5ac1aa72f4d6c40fe96ad230ce09fd4e9b8998357c2964da031e59c3b8c2241da00bc66a6216af7cd02b535577fa3b54bf9a0d230183b03aa145dbabc7fed3710d879c6b8d4273e6e377bed382de985f561ff9b2b3445f29957655600cbd1b29714f52c55ff05bc204203e65bdf6f818e976c690becfed9284b27c2dead96803efad949ffb519b7024530b08b5ed4c8e7472ed20c3866b79658e1b2d2c5b88a60da07614afa4906c73a6e5ad9113282288173e265236fa57d72c97f85c86b43349516f8e2f52f756d43cd2d9cf8c673db404d14007706ebbd4f7b5bbd19cdce9f48b2dac2db7f0f0c3fb18bd8e66e28fe46dafc3961e5945779faf5407190a33ce00efd07222cc142d40cab9b9d591589a30d056dae47d376d3ac5fab3201bbada604dd8e5e292185f38e2bcd58e81b2fec1e7b5754b7b28bd127abc929e950cb75100e94695f1ad13c09c1d394664029b66bdd49304df3ae1e2a90a6309f07c47555ccaea9cd17d80eaad6b7c29e9335a69338446ff666ac5802cfe36057c449d392bda99d2657fb8b6cf02d7ce4d9dccd8e97033accc5c10f092ec7bf0b3c0b2afc64a1a429d81cc485388f6f390dd97f648c3712ee0b93a7e96b268437e6e3537fb7918cee2a4ac3f895c7945988d7d3880238b8cf6062da171aa87545cf62072b20e698eb4ac12450c0b95a77e946fada8d46102abfa9a5a12d2a71380dedb51e2a57c97514813c17ea93e6ca19077c2a2511bf8fd158c4ed7361590b040915a3cb76f323300111303d8dd31c55474d514209bf01ed6639d4d81a1b30be54444e523e2ddef9a0a6bfe792d3037944aec29154c02bb79d09bd53856797dceb6c599f4103ff7f13dfdb8b2d18477832e5fe21", "labelMap": [ [ "c14n0", diff --git a/index.html b/index.html index d71bf7a..91e8066 100644 --- a/index.html +++ b/index.html @@ -3275,14 +3275,6 @@
    Holder Binding Base Proof
    data-include-format="text">

    -As part of the blind signature generation from -[[CFRG-Blind-BBS-Signature]], one can include a |signer_blind| which we show -below. -

    -
    
    -          

    In this scenario, we consider an electronic version of a drivers license.

    Holder Binding Base Proof
     
     procedure.
     Shown below are the computed |bbsSignature|, |bbsHeader|, |publicKey|,
    -|hmacKey|, |mandatoryPointers|, |signerBlind|, and |featureOption|, where byte
    +|hmacKey|, |mandatoryPointers|, and |featureOption|, where byte
     data is shown in hexadecimal.
               

    Holder Binding Derived Proof
     the final example from Section , above.
     The first step is to run the algorithm of Section
      to
    -recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|,
    -|signerBlind|, and |featureOption| as shown below.
    +recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|,
    +|mandatoryPointers|, and |featureOption| as shown below.
               

    Hidden PID Base Proof
     section  will produce the
     output shown below. This makes use of the
     signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the
    -inclusion of the |featureOption| as well as the |signerBlind| value, as these
    +inclusion of the |featureOption| value, as this
     need to be communicated to the holder.
               

    Hidden PID Derived Proof
     from
     , above. The first
     step is to run the algorithm of Section  to
    -recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|,
    -|signerBlind|, and |featureOption|, as shown below.
    +recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|,
    +|mandatoryPointers|, and |featureOption|, as shown below.
               

    Date: Tue, 10 Dec 2024 11:34:53 -0800
    Subject: [PATCH 17/24] Update for pseudonym test vectors and description.
    
    ---
     TestVectors/FeatureInputs/hiddenPid.json      |   3 -
     TestVectors/FeatureInputs/issuerPid.json      |   3 -
     TestVectors/FeatureInputs/proverNym.json      |   3 +
     TestVectors/FeatureInputs/signerBlindHB.json  |   3 -
     TestVectors/FeatureInputs/signerBlindHP.json  |   3 -
     .../FeatureInputs/signerNymEntropy.json       |   3 +
     .../addRawBaseSignatureInfo.json              |  12 -
     .../PseudoHiddenPid/commitmentInfo.json       |   4 -
     .../derivedDisclosureData.json                |   9 -
     .../derivedRecoveredBaseData.json             |  12 -
     .../derivedRevealDocument.json                |  56 --
     .../PseudoHiddenPid/pseudonymInfo.json        |   3 -
     .../verifyDerivedProofValue.json              |  34 -
     .../PseudoIssuerPid/addBaseDocCanon.json      |  32 -
     .../PseudoIssuerPid/addBaseDocHMACCanon.json  |  32 -
     .../PseudoIssuerPid/addBaseTransform.json     | 137 ----
     TestVectors/PseudoIssuerPid/addHashData.json  |   4 -
     .../PseudoIssuerPid/addProofConfig.json       |  13 -
     .../PseudoIssuerPid/addProofConfigCanon.txt   |   5 -
     .../PseudoIssuerPid/addSignedSDBase.json      |  73 --
     .../PseudoIssuerPid/derivedAdjIndexes.json    |   1 -
     .../PseudoIssuerPid/derivedAllGroupData.json  | 758 ------------------
     .../derivedDisclosureData.json                |  10 -
     .../PseudoIssuerPid/derivedGroupIndexes.json  |   1 -
     .../derivedUnsignedReveal.json                |  48 --
     .../PseudoIssuerPid/pseudonymInfo.json        |   3 -
     .../verifyDerivedProofValue.json              |  36 -
     TestVectors/PseudoIssuerPid/verifyNQuads.json |  15 -
     .../addBaseDocCanon.json                      |   0
     .../addBaseDocHMACCanon.json                  |   0
     .../addBaseTransform.json                     |   0
     .../addHashData.json                          |   0
     .../addProofConfig.json                       |   0
     .../addProofConfigCanon.txt                   |   0
     .../addRawBaseSignatureInfo.json              |   6 +-
     .../addSignedSDBase.json                      |   2 +-
     TestVectors/Pseudonym/commitmentInfo.json     |   4 +
     .../derivedAdjIndexes.json                    |   0
     .../derivedAllGroupData.json                  | 116 +--
     .../Pseudonym/derivedDisclosureData.json      |  10 +
     .../derivedGroupIndexes.json                  |   0
     .../derivedRecoveredBaseData.json             |   6 +-
     .../derivedRevealDocument.json                |   2 +-
     .../derivedUnsignedReveal.json                |   0
     TestVectors/Pseudonym/nymSecret.json          |   3 +
     .../Pseudonym/verifyDerivedProofValue.json    |  34 +
     .../verifyNQuads.json                         |   0
     index.html                                    | 212 ++---
     48 files changed, 181 insertions(+), 1530 deletions(-)
     delete mode 100644 TestVectors/FeatureInputs/hiddenPid.json
     delete mode 100644 TestVectors/FeatureInputs/issuerPid.json
     create mode 100644 TestVectors/FeatureInputs/proverNym.json
     delete mode 100644 TestVectors/FeatureInputs/signerBlindHB.json
     delete mode 100644 TestVectors/FeatureInputs/signerBlindHP.json
     create mode 100644 TestVectors/FeatureInputs/signerNymEntropy.json
     delete mode 100644 TestVectors/PseudoHiddenPid/addRawBaseSignatureInfo.json
     delete mode 100644 TestVectors/PseudoHiddenPid/commitmentInfo.json
     delete mode 100644 TestVectors/PseudoHiddenPid/derivedDisclosureData.json
     delete mode 100644 TestVectors/PseudoHiddenPid/derivedRecoveredBaseData.json
     delete mode 100644 TestVectors/PseudoHiddenPid/derivedRevealDocument.json
     delete mode 100644 TestVectors/PseudoHiddenPid/pseudonymInfo.json
     delete mode 100644 TestVectors/PseudoHiddenPid/verifyDerivedProofValue.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addBaseDocCanon.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addBaseDocHMACCanon.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addBaseTransform.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addHashData.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addProofConfig.json
     delete mode 100644 TestVectors/PseudoIssuerPid/addProofConfigCanon.txt
     delete mode 100644 TestVectors/PseudoIssuerPid/addSignedSDBase.json
     delete mode 100644 TestVectors/PseudoIssuerPid/derivedAdjIndexes.json
     delete mode 100644 TestVectors/PseudoIssuerPid/derivedAllGroupData.json
     delete mode 100644 TestVectors/PseudoIssuerPid/derivedDisclosureData.json
     delete mode 100644 TestVectors/PseudoIssuerPid/derivedGroupIndexes.json
     delete mode 100644 TestVectors/PseudoIssuerPid/derivedUnsignedReveal.json
     delete mode 100644 TestVectors/PseudoIssuerPid/pseudonymInfo.json
     delete mode 100644 TestVectors/PseudoIssuerPid/verifyDerivedProofValue.json
     delete mode 100644 TestVectors/PseudoIssuerPid/verifyNQuads.json
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addBaseDocCanon.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addBaseDocHMACCanon.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addBaseTransform.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addHashData.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addProofConfig.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addProofConfigCanon.txt (100%)
     rename TestVectors/{PseudoIssuerPid => Pseudonym}/addRawBaseSignatureInfo.json (62%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/addSignedSDBase.json (90%)
     create mode 100644 TestVectors/Pseudonym/commitmentInfo.json
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/derivedAdjIndexes.json (100%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/derivedAllGroupData.json (88%)
     create mode 100644 TestVectors/Pseudonym/derivedDisclosureData.json
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/derivedGroupIndexes.json (100%)
     rename TestVectors/{PseudoIssuerPid => Pseudonym}/derivedRecoveredBaseData.json (62%)
     rename TestVectors/{PseudoIssuerPid => Pseudonym}/derivedRevealDocument.json (56%)
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/derivedUnsignedReveal.json (100%)
     create mode 100644 TestVectors/Pseudonym/nymSecret.json
     create mode 100644 TestVectors/Pseudonym/verifyDerivedProofValue.json
     rename TestVectors/{PseudoHiddenPid => Pseudonym}/verifyNQuads.json (100%)
    
    diff --git a/TestVectors/FeatureInputs/hiddenPid.json b/TestVectors/FeatureInputs/hiddenPid.json
    deleted file mode 100644
    index 21463d5..0000000
    --- a/TestVectors/FeatureInputs/hiddenPid.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -  "pidHex": "2121e748cf836c7c46a347c6fbd62ffae184c2293128b50770a455049870b2c3"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/FeatureInputs/issuerPid.json b/TestVectors/FeatureInputs/issuerPid.json
    deleted file mode 100644
    index 2e1133b..0000000
    --- a/TestVectors/FeatureInputs/issuerPid.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -  "pidHex": "5105adaaa2b9d6a48a9ab9e46471b40d875febc15d35663016ddb5461619d6d1"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/FeatureInputs/proverNym.json b/TestVectors/FeatureInputs/proverNym.json
    new file mode 100644
    index 0000000..61c9b65
    --- /dev/null
    +++ b/TestVectors/FeatureInputs/proverNym.json
    @@ -0,0 +1,3 @@
    +{
    +    "proverNymHex": "5e2087638f71057ef108f83923189a71cea1f7c4b4ef69afb473c9a7074ddf49"
    +}
    \ No newline at end of file
    diff --git a/TestVectors/FeatureInputs/signerBlindHB.json b/TestVectors/FeatureInputs/signerBlindHB.json
    deleted file mode 100644
    index c80c071..0000000
    --- a/TestVectors/FeatureInputs/signerBlindHB.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -    "signerBlindHex": "2c971d5a34c1fd8d79a65afa6a7de15827af471f9c28279007072e845cd7c7b3"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/FeatureInputs/signerBlindHP.json b/TestVectors/FeatureInputs/signerBlindHP.json
    deleted file mode 100644
    index 65b3196..0000000
    --- a/TestVectors/FeatureInputs/signerBlindHP.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -    "signerBlindHex": "1606181020d802596dacc2b75c81e90424f30e7e77723dc7877b023cb861d92d"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/FeatureInputs/signerNymEntropy.json b/TestVectors/FeatureInputs/signerNymEntropy.json
    new file mode 100644
    index 0000000..eba453a
    --- /dev/null
    +++ b/TestVectors/FeatureInputs/signerNymEntropy.json
    @@ -0,0 +1,3 @@
    +{
    +    "signerNymEntropyHex": "25555cf635188a1c33989056f5129e6ab4be0e7c5cc588c48d308e0254eed140"
    +}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/addRawBaseSignatureInfo.json b/TestVectors/PseudoHiddenPid/addRawBaseSignatureInfo.json
    deleted file mode 100644
    index 11e1fde..0000000
    --- a/TestVectors/PseudoHiddenPid/addRawBaseSignatureInfo.json
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -{
    -  "bbsSignature": "98a32e0ba7364f391a76e440b314950ca0c37ffb27aa88457cba258ff573def29899dff271c6e79d1732c3896fa1de1351a0fb8361435194101926c6d0b56be828af019d2e8317c1c866b9dfb6478862",
    -  "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb",
    -  "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f",
    -  "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
    -  "mandatoryPointers": [
    -    "/issuer",
    -    "/expirationDate"
    -  ],
    -  "signerBlind": "1606181020d802596dacc2b75c81e90424f30e7e77723dc7877b023cb861d92d",
    -  "featureOption": "pseudonym_hidden_pid"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/commitmentInfo.json b/TestVectors/PseudoHiddenPid/commitmentInfo.json
    deleted file mode 100644
    index 284cf24..0000000
    --- a/TestVectors/PseudoHiddenPid/commitmentInfo.json
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -{
    -  "secretProverBlind": "38296aa447032739a5bd002c1a93acbd2c2e998b76b099a579f669df037119ad",
    -  "commitmentWithProof": "8cda82fbc8691463c1cd5c96d2bd259ee9510ad572669eb5edc71090abf14a5f819c34fcb356314af65b43c530dc3ef7179e8a07334088e1b612f84a170232febca7a8b54f4ae41fdf79fa1f02d581370836dec7ce0afa0f5c63c37aeb0e280711189a0ab37184d84c11117508f54cc240c632fd7178ace50fa4ec29d18910014f9004de1a819e1d4afe39006311c2d5"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedDisclosureData.json b/TestVectors/PseudoHiddenPid/derivedDisclosureData.json
    deleted file mode 100644
    index 68b287b..0000000
    --- a/TestVectors/PseudoHiddenPid/derivedDisclosureData.json
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -{
    -  "bbsProof":"86bd0f8ade091a628c57ac60613c9001c1d5a9d00cdcb6522cb9e0adc8b053b6bb55dfe52536419410e4e413034309118a9a8262fd586e0bee6a1ea75afaa262f87a07038099cfba13961e4cdd630ece4971d0e60fa9ad42b653c0e52c3934168fe9b112885d990568b24b2181faf19a6b30a8bb4fae9424dc290fa99e5dcc699231b8981a957769fb7bacb910a7a0da05f7dc652cca5e9a99d6dea4c9a7d4be8a1194fc264008af9ab6dc6e0119e08752f64400b2d54bf9f2ddf55d2332ea35df6cc517dde4df4c5b64ad8916c2e34b4f6ebe5ac5e9ec40120c411a37f33ccab226ddfc848d425458acd6fb0da69f0b6abec4450945fb1442261890afceda991cc18cbdfd7cef2b56e6f34a5c8f6f341c0ed4ea6eec371baccc7a4c4858f5a242eb800e9f1853f9b580ab40b3e6c5735209027b2134053aa9b1a97a890f6ee177e3b51c51d18a03550031865d363f14216c0036122a0b19b040f5544747d30122d57763be7f7d5878177b299ae8a185257e8f3b4f03e37fa7db492204952a26c06851ecbbec69be37108524e4270de758af4c35c679cae9a1e72abafc754db3bc0fa7e60789b161bbe6b15051f6d46a1842376291d9c024fc5ad23086880257ad9612650e9688ef960858f296d42eda41d269cf3452fe4a34d7e53e35b49004b739fb1312bc06019ce9bfb5c5d3d652438025d4b961774bc9c6218a05d48d5416eb426e8d978fc13b07598ceda1461534b00e8538ea1cf194922a6bc0a1d5a90a9ef378579a3d10468abe516c23c26122f2da1e2cb70a16dcd420dc254c55ffc0160555add13f02b4caeef6818adc952e5ddbb11646815d95e3cb462bff2cd024cc0bd098fd5584bbcce42b2e381542651a059dcfdd1103e3d7df48254ab6f9de605dbf3e5d180d5599ee0ced2950c872e00cae2c6be10d21b343e2bf023d9101a14998d8c24d612fbc1e51185108a1126edec634cd6c1a0829ed8a596030c50fbac8c4336875acdaf78687d6f2772f62fe6df4d05a8c8d51db1d79a096df0c4d7f84f2b097d2a96cc115d1ca544c34171431998d91058e3915619a85acf5f94091f997686f7b961a2e6335edb8707d5813a6d07fe4cdb9f9232b4cff64a458bca8eb44e4e5cb18906df1beb93cff8c1a7d85b8c816e40c36edcac7227bc18d53232d0390776e6c68f028fb68721058205142e4d47f4cd36be55fe7108007948c1573bcd458d5648a5dad71ca0032b3",
    -  "labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]},
    -  "mandatoryIndexes":[0,1,2,5,6,8,9],
    -  "adjSelectiveIndexes":[0,1,5,7,10,16],
    -  "presentationHeader":{"0":17,"1":51,"2":119,"3":170},
    -  "pseudonym":"ad1306b414ece48113bc00c17c1873b44497d3b8fb1c164553ddf5cdd0575e89585e71db13941aecd34f66bc459a0e97","featureOption":"pseudonym_hidden_pid",
    -  "lengthBBSMessages":23
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedRecoveredBaseData.json b/TestVectors/PseudoHiddenPid/derivedRecoveredBaseData.json
    deleted file mode 100644
    index 11e1fde..0000000
    --- a/TestVectors/PseudoHiddenPid/derivedRecoveredBaseData.json
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -{
    -  "bbsSignature": "98a32e0ba7364f391a76e440b314950ca0c37ffb27aa88457cba258ff573def29899dff271c6e79d1732c3896fa1de1351a0fb8361435194101926c6d0b56be828af019d2e8317c1c866b9dfb6478862",
    -  "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb",
    -  "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f",
    -  "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
    -  "mandatoryPointers": [
    -    "/issuer",
    -    "/expirationDate"
    -  ],
    -  "signerBlind": "1606181020d802596dacc2b75c81e90424f30e7e77723dc7877b023cb861d92d",
    -  "featureOption": "pseudonym_hidden_pid"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedRevealDocument.json b/TestVectors/PseudoHiddenPid/derivedRevealDocument.json
    deleted file mode 100644
    index 1a4a85b..0000000
    --- a/TestVectors/PseudoHiddenPid/derivedRevealDocument.json
    +++ /dev/null
    @@ -1,56 +0,0 @@
    -{
    -  "@context": [
    -    "https://www.w3.org/2018/credentials/v1",
    -    "https://w3id.org/security/data-integrity/v2",
    -    "https://w3id.org/vdl/v1",
    -    "https://w3id.org/vdl/aamva/v1"
    -  ],
    -  "type": [
    -    "VerifiableCredential",
    -    "Iso18013DriversLicenseCredential"
    -  ],
    -  "issuer": {
    -    "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    -    "name": "Utopia Department of Motor Vehicles",
    -    "url": "https://dmv.utopia.example/",
    -    "image": "https://dmv.utopia.example/logo.png"
    -  },
    -  "expirationDate": "2028-11-15T12:00:00-06:00",
    -  "credentialSubject": {
    -    "type": "LicensedDriver",
    -    "driversLicense": {
    -      "type": "Iso18013DriversLicense",
    -      "issuing_country": "UA",
    -      "driving_privileges": [
    -        {
    -          "codes": [
    -            {
    -              "code": "D"
    -            }
    -          ],
    -          "vehicle_category_code": "D",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2027-01-01"
    -        },
    -        {
    -          "codes": [
    -            {
    -              "code": "C"
    -            }
    -          ],
    -          "vehicle_category_code": "C",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2017-01-01"
    -        }
    -      ]
    -    }
    -  },
    -  "proof": {
    -    "type": "DataIntegrityProof",
    -    "cryptosuite": "bbs-2023",
    -    "created": "2023-08-15T23:36:38Z",
    -    "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ",
    -    "proofPurpose": "assertionMethod",
    -    "proofValue": "u2V0Jh1kDcIa9D4reCRpijFesYGE8kAHB1anQDNy2Uiy54K3IsFO2u1Xf5SU2QZQQ5OQTA0MJEYqagmL9WG4L7moep1r6omL4egcDgJnPuhOWHkzdYw7OSXHQ5g-prUK2U8DlLDk0Fo_psRKIXZkFaLJLIYH68ZprMKi7T66UJNwpD6meXcxpkjG4mBqVd2n7e6y5EKeg2gX33GUsyl6amdbepMmn1L6KEZT8JkAIr5q23G4BGeCHUvZEALLVS_ny3fVdIzLqNd9sxRfd5N9MW2StiRbC40tPbr5axensQBIMQRo38zzKsibd_ISNQlRYrNb7DaafC2q-xEUJRfsUQiYYkK_O2pkcwYy9_XzvK1bm80pcj280HA7U6m7sNxuszHpMSFj1okLrgA6fGFP5tYCrQLPmxXNSCQJ7ITQFOqmxqXqJD27hd-O1HFHRigNVADGGXTY_FCFsADYSKgsZsED1VEdH0wEi1Xdjvn99WHgXeyma6KGFJX6PO08D43-n20kiBJUqJsBoUey77Gm-NxCFJOQnDedYr0w1xnnK6aHnKrr8dU2zvA-n5geJsWG75rFQUfbUahhCN2KR2cAk_FrSMIaIAletlhJlDpaI75YIWPKW1C7aQdJpzzRS_ko01-U-NbSQBLc5-xMSvAYBnOm_tcXT1lJDgCXUuWF3S8nGIYoF1I1UFutCbo2Xj8E7B1mM7aFGFTSwDoU46hzxlJIqa8Ch1akKnvN4V5o9EEaKvlFsI8JhIvLaHiy3Chbc1CDcJUxV_8AWBVWt0T8CtMru9oGK3JUuXduxFkaBXZXjy0Yr_yzQJMwL0Jj9VYS7zOQrLjgVQmUaBZ3P3RED49ffSCVKtvneYF2_Pl0YDVWZ7gztKVDIcuAMrixr4Q0hs0PivwI9kQGhSZjYwk1hL7weURhRCKESbt7GNM1sGggp7YpZYDDFD7rIxDNodaza94aH1vJ3L2L-bfTQWoyNUdsdeaCW3wxNf4TysJfSqWzBFdHKVEw0FxQxmY2RBY45FWGahaz1-UCR-Zdob3uWGi5jNe24cH1YE6bQf-TNufkjK0z_ZKRYvKjrROTlyxiQbfG-uTz_jBp9hbjIFuQMNu3KxyJ7wY1TIy0DkHdubGjwKPtochBYIFFC5NR_TNNr5V_nEIAHlIwVc7zUWNVkil2tccoAMrOjAAEBAgIAhwABAgUGCAmGAAEFBwoQRBEzd6pYMK0TBrQU7OSBE7wAwXwYc7REl9O4-xwWRVPd9c3QV16JWF5x2xOUGuzTT2a8RZoOlxc"
    -  }
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/pseudonymInfo.json b/TestVectors/PseudoHiddenPid/pseudonymInfo.json
    deleted file mode 100644
    index ceea397..0000000
    --- a/TestVectors/PseudoHiddenPid/pseudonymInfo.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -  "pseudonymHex": "ad1306b414ece48113bc00c17c1873b44497d3b8fb1c164553ddf5cdd0575e89585e71db13941aecd34f66bc459a0e97"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/verifyDerivedProofValue.json b/TestVectors/PseudoHiddenPid/verifyDerivedProofValue.json
    deleted file mode 100644
    index ab3fa5f..0000000
    --- a/TestVectors/PseudoHiddenPid/verifyDerivedProofValue.json
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -{
    -  "bbsProof": "86bd0f8ade091a628c57ac60613c9001c1d5a9d00cdcb6522cb9e0adc8b053b6bb55dfe52536419410e4e413034309118a9a8262fd586e0bee6a1ea75afaa262f87a07038099cfba13961e4cdd630ece4971d0e60fa9ad42b653c0e52c3934168fe9b112885d990568b24b2181faf19a6b30a8bb4fae9424dc290fa99e5dcc699231b8981a957769fb7bacb910a7a0da05f7dc652cca5e9a99d6dea4c9a7d4be8a1194fc264008af9ab6dc6e0119e08752f64400b2d54bf9f2ddf55d2332ea35df6cc517dde4df4c5b64ad8916c2e34b4f6ebe5ac5e9ec40120c411a37f33ccab226ddfc848d425458acd6fb0da69f0b6abec4450945fb1442261890afceda991cc18cbdfd7cef2b56e6f34a5c8f6f341c0ed4ea6eec371baccc7a4c4858f5a242eb800e9f1853f9b580ab40b3e6c5735209027b2134053aa9b1a97a890f6ee177e3b51c51d18a03550031865d363f14216c0036122a0b19b040f5544747d30122d57763be7f7d5878177b299ae8a185257e8f3b4f03e37fa7db492204952a26c06851ecbbec69be37108524e4270de758af4c35c679cae9a1e72abafc754db3bc0fa7e60789b161bbe6b15051f6d46a1842376291d9c024fc5ad23086880257ad9612650e9688ef960858f296d42eda41d269cf3452fe4a34d7e53e35b49004b739fb1312bc06019ce9bfb5c5d3d652438025d4b961774bc9c6218a05d48d5416eb426e8d978fc13b07598ceda1461534b00e8538ea1cf194922a6bc0a1d5a90a9ef378579a3d10468abe516c23c26122f2da1e2cb70a16dcd420dc254c55ffc0160555add13f02b4caeef6818adc952e5ddbb11646815d95e3cb462bff2cd024cc0bd098fd5584bbcce42b2e381542651a059dcfdd1103e3d7df48254ab6f9de605dbf3e5d180d5599ee0ced2950c872e00cae2c6be10d21b343e2bf023d9101a14998d8c24d612fbc1e51185108a1126edec634cd6c1a0829ed8a596030c50fbac8c4336875acdaf78687d6f2772f62fe6df4d05a8c8d51db1d79a096df0c4d7f84f2b097d2a96cc115d1ca544c34171431998d91058e3915619a85acf5f94091f997686f7b961a2e6335edb8707d5813a6d07fe4cdb9f9232b4cff64a458bca8eb44e4e5cb18906df1beb93cff8c1a7d85b8c816e40c36edcac7227bc18d53232d0390776e6c68f028fb68721058205142e4d47f4cd36be55fe7108007948c1573bcd458d5648a5dad71ca0032b3",
    -  "labelMap": [
    -    [
    -      "c14n0",
    -      "b1"
    -    ],
    -    [
    -      "c14n1",
    -      "b2"
    -    ],
    -    [
    -      "c14n2",
    -      "b0"
    -    ]
    -  ],
    -  "mandatoryIndexes": [
    -    0,
    -    1,
    -    2,
    -    5,
    -    6,
    -    8,
    -    9
    -  ],
    -  "adjSelectedIndexes": [
    -    0,
    -    1,
    -    5,
    -    7,
    -    10,
    -    16
    -  ]
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addBaseDocCanon.json b/TestVectors/PseudoIssuerPid/addBaseDocCanon.json
    deleted file mode 100644
    index ea7ad93..0000000
    --- a/TestVectors/PseudoIssuerPid/addBaseDocCanon.json
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -[
    -  "   .\n",
    -  "  \"Utopia Department of Motor Vehicles\" .\n",
    -  "   .\n",
    -  "_:c14n0   .\n",
    -  "_:c14n0   .\n",
    -  "_:c14n0  \"A license granting driving privileges in Utopia.\" .\n",
    -  "_:c14n0   .\n",
    -  "_:c14n0  \"Utopia Driver's License\" .\n",
    -  "_:c14n0  _:c14n1 .\n",
    -  "_:c14n0  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -  "_:c14n0  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    -  "_:c14n0   .\n",
    -  "_:c14n1   .\n",
    -  "_:c14n1  _:c14n2 .\n",
    -  "_:c14n2   .\n",
    -  "_:c14n2  \"1998-08-28\"^^ .\n",
    -  "_:c14n2  \"542426814\" .\n",
    -  "_:c14n2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -  "_:c14n2  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    -  "_:c14n2  \"TURNER\" .\n",
    -  "_:c14n2  \"SUSAN\" .\n",
    -  "_:c14n2  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    -  "_:c14n2  \"UADMV\" .\n",
    -  "_:c14n2  \"UA\" .\n",
    -  "_:c14n2   .\n",
    -  "_:c14n2  \"2\"^^ .\n",
    -  "_:c14n2  \"UTA\" .\n",
    -  "_:c14n2  \"1ST\" .\n",
    -  "_:c14n2  \"N\" .\n",
    -  "_:c14n2  \"N\" .\n"
    -]
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addBaseDocHMACCanon.json b/TestVectors/PseudoIssuerPid/addBaseDocHMACCanon.json
    deleted file mode 100644
    index ac106fd..0000000
    --- a/TestVectors/PseudoIssuerPid/addBaseDocHMACCanon.json
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -[
    -  "   .\n",
    -  "  \"Utopia Department of Motor Vehicles\" .\n",
    -  "   .\n",
    -  "_:b0   .\n",
    -  "_:b0  _:b2 .\n",
    -  "_:b1   .\n",
    -  "_:b1   .\n",
    -  "_:b1  \"A license granting driving privileges in Utopia.\" .\n",
    -  "_:b1   .\n",
    -  "_:b1  \"Utopia Driver's License\" .\n",
    -  "_:b1  _:b0 .\n",
    -  "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -  "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    -  "_:b1   .\n",
    -  "_:b2   .\n",
    -  "_:b2  \"1998-08-28\"^^ .\n",
    -  "_:b2  \"542426814\" .\n",
    -  "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -  "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    -  "_:b2  \"TURNER\" .\n",
    -  "_:b2  \"SUSAN\" .\n",
    -  "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    -  "_:b2  \"UADMV\" .\n",
    -  "_:b2  \"UA\" .\n",
    -  "_:b2   .\n",
    -  "_:b2  \"2\"^^ .\n",
    -  "_:b2  \"UTA\" .\n",
    -  "_:b2  \"1ST\" .\n",
    -  "_:b2  \"N\" .\n",
    -  "_:b2  \"N\" .\n"
    -]
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addBaseTransform.json b/TestVectors/PseudoIssuerPid/addBaseTransform.json
    deleted file mode 100644
    index c42c587..0000000
    --- a/TestVectors/PseudoIssuerPid/addBaseTransform.json
    +++ /dev/null
    @@ -1,137 +0,0 @@
    -{
    -  "mandatoryPointers": [
    -    "/issuer",
    -    "/expirationDate"
    -  ],
    -  "mandatory": {
    -    "dataType": "Map",
    -    "value": [
    -      [
    -        0,
    -        "   .\n"
    -      ],
    -      [
    -        1,
    -        "  \"Utopia Department of Motor Vehicles\" .\n"
    -      ],
    -      [
    -        2,
    -        "   .\n"
    -      ],
    -      [
    -        5,
    -        "_:b1   .\n"
    -      ],
    -      [
    -        6,
    -        "_:b1   .\n"
    -      ],
    -      [
    -        11,
    -        "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n"
    -      ],
    -      [
    -        13,
    -        "_:b1   .\n"
    -      ]
    -    ]
    -  },
    -  "nonMandatory": {
    -    "dataType": "Map",
    -    "value": [
    -      [
    -        3,
    -        "_:b0   .\n"
    -      ],
    -      [
    -        4,
    -        "_:b0  _:b2 .\n"
    -      ],
    -      [
    -        7,
    -        "_:b1  \"A license granting driving privileges in Utopia.\" .\n"
    -      ],
    -      [
    -        8,
    -        "_:b1   .\n"
    -      ],
    -      [
    -        9,
    -        "_:b1  \"Utopia Driver's License\" .\n"
    -      ],
    -      [
    -        10,
    -        "_:b1  _:b0 .\n"
    -      ],
    -      [
    -        12,
    -        "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n"
    -      ],
    -      [
    -        14,
    -        "_:b2   .\n"
    -      ],
    -      [
    -        15,
    -        "_:b2  \"1998-08-28\"^^ .\n"
    -      ],
    -      [
    -        16,
    -        "_:b2  \"542426814\" .\n"
    -      ],
    -      [
    -        17,
    -        "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n"
    -      ],
    -      [
    -        18,
    -        "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n"
    -      ],
    -      [
    -        19,
    -        "_:b2  \"TURNER\" .\n"
    -      ],
    -      [
    -        20,
    -        "_:b2  \"SUSAN\" .\n"
    -      ],
    -      [
    -        21,
    -        "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n"
    -      ],
    -      [
    -        22,
    -        "_:b2  \"UADMV\" .\n"
    -      ],
    -      [
    -        23,
    -        "_:b2  \"UA\" .\n"
    -      ],
    -      [
    -        24,
    -        "_:b2   .\n"
    -      ],
    -      [
    -        25,
    -        "_:b2  \"2\"^^ .\n"
    -      ],
    -      [
    -        26,
    -        "_:b2  \"UTA\" .\n"
    -      ],
    -      [
    -        27,
    -        "_:b2  \"1ST\" .\n"
    -      ],
    -      [
    -        28,
    -        "_:b2  \"N\" .\n"
    -      ],
    -      [
    -        29,
    -        "_:b2  \"N\" .\n"
    -      ]
    -    ]
    -  },
    -  "hmacKeyString": "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addHashData.json b/TestVectors/PseudoIssuerPid/addHashData.json
    deleted file mode 100644
    index 8364551..0000000
    --- a/TestVectors/PseudoIssuerPid/addHashData.json
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -{
    -  "proofHash": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf",
    -  "mandatoryHash": "8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addProofConfig.json b/TestVectors/PseudoIssuerPid/addProofConfig.json
    deleted file mode 100644
    index b613872..0000000
    --- a/TestVectors/PseudoIssuerPid/addProofConfig.json
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -{
    -  "type": "DataIntegrityProof",
    -  "cryptosuite": "bbs-2023",
    -  "created": "2023-08-15T23:36:38Z",
    -  "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ",
    -  "proofPurpose": "assertionMethod",
    -  "@context": [
    -    "https://www.w3.org/2018/credentials/v1",
    -    "https://w3id.org/security/data-integrity/v2",
    -    "https://w3id.org/vdl/v1",
    -    "https://w3id.org/vdl/aamva/v1"
    -  ]
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/addProofConfigCanon.txt b/TestVectors/PseudoIssuerPid/addProofConfigCanon.txt
    deleted file mode 100644
    index c8e9741..0000000
    --- a/TestVectors/PseudoIssuerPid/addProofConfigCanon.txt
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -_:c14n0  "2023-08-15T23:36:38Z"^^ .
    -_:c14n0   .
    -_:c14n0  "bbs-2023"^^ .
    -_:c14n0   .
    -_:c14n0   .
    diff --git a/TestVectors/PseudoIssuerPid/addSignedSDBase.json b/TestVectors/PseudoIssuerPid/addSignedSDBase.json
    deleted file mode 100644
    index fb44bd7..0000000
    --- a/TestVectors/PseudoIssuerPid/addSignedSDBase.json
    +++ /dev/null
    @@ -1,73 +0,0 @@
    -{
    -  "@context": [
    -    "https://www.w3.org/2018/credentials/v1",
    -    "https://w3id.org/security/data-integrity/v2",
    -    "https://w3id.org/vdl/v1",
    -    "https://w3id.org/vdl/aamva/v1"
    -  ],
    -  "type": [
    -    "VerifiableCredential",
    -    "Iso18013DriversLicenseCredential"
    -  ],
    -  "issuer": {
    -    "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    -    "name": "Utopia Department of Motor Vehicles",
    -    "url": "https://dmv.utopia.example/",
    -    "image": "https://dmv.utopia.example/logo.png"
    -  },
    -  "issuanceDate": "2023-11-15T10:00:00-07:00",
    -  "expirationDate": "2028-11-15T12:00:00-06:00",
    -  "name": "Utopia Driver's License",
    -  "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC",
    -  "description": "A license granting driving privileges in Utopia.",
    -  "credentialSubject": {
    -    "type": "LicensedDriver",
    -    "driversLicense": {
    -      "type": "Iso18013DriversLicense",
    -      "document_number": "542426814",
    -      "family_name": "TURNER",
    -      "given_name": "SUSAN",
    -      "portrait": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==",
    -      "birth_date": "1998-08-28",
    -      "issue_date": "2023-01-15T10:00:00-07:00",
    -      "expiry_date": "2028-08-27T12:00:00-06:00",
    -      "issuing_country": "UA",
    -      "issuing_authority": "UADMV",
    -      "driving_privileges": [
    -        {
    -          "codes": [
    -            {
    -              "code": "D"
    -            }
    -          ],
    -          "vehicle_category_code": "D",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2027-01-01"
    -        },
    -        {
    -          "codes": [
    -            {
    -              "code": "C"
    -            }
    -          ],
    -          "vehicle_category_code": "C",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2017-01-01"
    -        }
    -      ],
    -      "un_distinguishing_sign": "UTA",
    -      "aamva_aka_suffix": "1ST",
    -      "sex": 2,
    -      "aamva_family_name_truncation": "N",
    -      "aamva_given_name_truncation": "N"
    -    }
    -  },
    -  "proof": {
    -    "type": "DataIntegrityProof",
    -    "cryptosuite": "bbs-2023",
    -    "created": "2023-08-15T23:36:38Z",
    -    "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ",
    -    "proofPurpose": "assertionMethod",
    -    "proofValue": "u2V0GhlhQr27gQbVviQzweUeIrPx8v6gWdLA7wp9VuG9D4ZmsNvz1-5WMRTv9zxuruTzDMgQZDrTPd-Ip36hbSgMQZduKUcZAiJjXf0J9zsZ8JsLeVONYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRlWCBRBa2qornWpIqaueRkcbQNh1_rwV01ZjAW3bVGFhnW0Q"
    -  }
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedAdjIndexes.json b/TestVectors/PseudoIssuerPid/derivedAdjIndexes.json
    deleted file mode 100644
    index dbad924..0000000
    --- a/TestVectors/PseudoIssuerPid/derivedAdjIndexes.json
    +++ /dev/null
    @@ -1 +0,0 @@
    -{"adjMandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16]}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedAllGroupData.json b/TestVectors/PseudoIssuerPid/derivedAllGroupData.json
    deleted file mode 100644
    index 191e604..0000000
    --- a/TestVectors/PseudoIssuerPid/derivedAllGroupData.json
    +++ /dev/null
    @@ -1,758 +0,0 @@
    -{
    -  "groups": {
    -    "mandatory": {
    -      "matching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            0,
    -            "   .\n"
    -          ],
    -          [
    -            1,
    -            "  \"Utopia Department of Motor Vehicles\" .\n"
    -          ],
    -          [
    -            2,
    -            "   .\n"
    -          ],
    -          [
    -            5,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            6,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            11,
    -            "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            13,
    -            "_:b1   .\n"
    -          ]
    -        ]
    -      },
    -      "nonMatching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            3,
    -            "_:b0   .\n"
    -          ],
    -          [
    -            4,
    -            "_:b0  _:b2 .\n"
    -          ],
    -          [
    -            7,
    -            "_:b1  \"A license granting driving privileges in Utopia.\" .\n"
    -          ],
    -          [
    -            8,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            9,
    -            "_:b1  \"Utopia Driver's License\" .\n"
    -          ],
    -          [
    -            10,
    -            "_:b1  _:b0 .\n"
    -          ],
    -          [
    -            12,
    -            "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            14,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            15,
    -            "_:b2  \"1998-08-28\"^^ .\n"
    -          ],
    -          [
    -            16,
    -            "_:b2  \"542426814\" .\n"
    -          ],
    -          [
    -            17,
    -            "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n"
    -          ],
    -          [
    -            18,
    -            "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            19,
    -            "_:b2  \"TURNER\" .\n"
    -          ],
    -          [
    -            20,
    -            "_:b2  \"SUSAN\" .\n"
    -          ],
    -          [
    -            21,
    -            "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            22,
    -            "_:b2  \"UADMV\" .\n"
    -          ],
    -          [
    -            23,
    -            "_:b2  \"UA\" .\n"
    -          ],
    -          [
    -            24,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            25,
    -            "_:b2  \"2\"^^ .\n"
    -          ],
    -          [
    -            26,
    -            "_:b2  \"UTA\" .\n"
    -          ],
    -          [
    -            27,
    -            "_:b2  \"1ST\" .\n"
    -          ],
    -          [
    -            28,
    -            "_:b2  \"N\" .\n"
    -          ],
    -          [
    -            29,
    -            "_:b2  \"N\" .\n"
    -          ]
    -        ]
    -      },
    -      "deskolemizedNQuads": [
    -        "   .\n",
    -        "  \"Utopia Department of Motor Vehicles\" .\n",
    -        "   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n"
    -      ]
    -    },
    -    "selective": {
    -      "matching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            3,
    -            "_:b0   .\n"
    -          ],
    -          [
    -            4,
    -            "_:b0  _:b2 .\n"
    -          ],
    -          [
    -            5,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            6,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            10,
    -            "_:b1  _:b0 .\n"
    -          ],
    -          [
    -            14,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            17,
    -            "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n"
    -          ],
    -          [
    -            23,
    -            "_:b2  \"UA\" .\n"
    -          ]
    -        ]
    -      },
    -      "nonMatching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            0,
    -            "   .\n"
    -          ],
    -          [
    -            1,
    -            "  \"Utopia Department of Motor Vehicles\" .\n"
    -          ],
    -          [
    -            2,
    -            "   .\n"
    -          ],
    -          [
    -            7,
    -            "_:b1  \"A license granting driving privileges in Utopia.\" .\n"
    -          ],
    -          [
    -            8,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            9,
    -            "_:b1  \"Utopia Driver's License\" .\n"
    -          ],
    -          [
    -            11,
    -            "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            12,
    -            "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            13,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            15,
    -            "_:b2  \"1998-08-28\"^^ .\n"
    -          ],
    -          [
    -            16,
    -            "_:b2  \"542426814\" .\n"
    -          ],
    -          [
    -            18,
    -            "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            19,
    -            "_:b2  \"TURNER\" .\n"
    -          ],
    -          [
    -            20,
    -            "_:b2  \"SUSAN\" .\n"
    -          ],
    -          [
    -            21,
    -            "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            22,
    -            "_:b2  \"UADMV\" .\n"
    -          ],
    -          [
    -            24,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            25,
    -            "_:b2  \"2\"^^ .\n"
    -          ],
    -          [
    -            26,
    -            "_:b2  \"UTA\" .\n"
    -          ],
    -          [
    -            27,
    -            "_:b2  \"1ST\" .\n"
    -          ],
    -          [
    -            28,
    -            "_:b2  \"N\" .\n"
    -          ],
    -          [
    -            29,
    -            "_:b2  \"N\" .\n"
    -          ]
    -        ]
    -      },
    -      "deskolemizedNQuads": [
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"UA\" .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1  _:_e18d4304-586f-479d-9b0c-163e4f575d79_0 .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  _:_e18d4304-586f-479d-9b0c-163e4f575d79_1 .\n"
    -      ]
    -    },
    -    "combined": {
    -      "matching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            0,
    -            "   .\n"
    -          ],
    -          [
    -            1,
    -            "  \"Utopia Department of Motor Vehicles\" .\n"
    -          ],
    -          [
    -            2,
    -            "   .\n"
    -          ],
    -          [
    -            3,
    -            "_:b0   .\n"
    -          ],
    -          [
    -            4,
    -            "_:b0  _:b2 .\n"
    -          ],
    -          [
    -            5,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            6,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            10,
    -            "_:b1  _:b0 .\n"
    -          ],
    -          [
    -            11,
    -            "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            13,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            14,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            17,
    -            "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n"
    -          ],
    -          [
    -            23,
    -            "_:b2  \"UA\" .\n"
    -          ]
    -        ]
    -      },
    -      "nonMatching": {
    -        "dataType": "Map",
    -        "value": [
    -          [
    -            7,
    -            "_:b1  \"A license granting driving privileges in Utopia.\" .\n"
    -          ],
    -          [
    -            8,
    -            "_:b1   .\n"
    -          ],
    -          [
    -            9,
    -            "_:b1  \"Utopia Driver's License\" .\n"
    -          ],
    -          [
    -            12,
    -            "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            15,
    -            "_:b2  \"1998-08-28\"^^ .\n"
    -          ],
    -          [
    -            16,
    -            "_:b2  \"542426814\" .\n"
    -          ],
    -          [
    -            18,
    -            "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n"
    -          ],
    -          [
    -            19,
    -            "_:b2  \"TURNER\" .\n"
    -          ],
    -          [
    -            20,
    -            "_:b2  \"SUSAN\" .\n"
    -          ],
    -          [
    -            21,
    -            "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n"
    -          ],
    -          [
    -            22,
    -            "_:b2  \"UADMV\" .\n"
    -          ],
    -          [
    -            24,
    -            "_:b2   .\n"
    -          ],
    -          [
    -            25,
    -            "_:b2  \"2\"^^ .\n"
    -          ],
    -          [
    -            26,
    -            "_:b2  \"UTA\" .\n"
    -          ],
    -          [
    -            27,
    -            "_:b2  \"1ST\" .\n"
    -          ],
    -          [
    -            28,
    -            "_:b2  \"N\" .\n"
    -          ],
    -          [
    -            29,
    -            "_:b2  \"N\" .\n"
    -          ]
    -        ]
    -      },
    -      "deskolemizedNQuads": [
    -        "   .\n",
    -        "  \"Utopia Department of Motor Vehicles\" .\n",
    -        "   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"UA\" .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1  _:_e18d4304-586f-479d-9b0c-163e4f575d79_0 .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  _:_e18d4304-586f-479d-9b0c-163e4f575d79_1 .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -        "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n"
    -      ]
    -    }
    -  },
    -  "skolemized": {
    -    "expanded": [
    -      {
    -        "https://www.w3.org/2018/credentials#credentialSubject": [
    -          {
    -            "https://w3id.org/vdl#license": [
    -              {
    -                "https://w3id.org/vdl/aamva#akaSuffix": [
    -                  {
    -                    "@value": "1ST"
    -                  }
    -                ],
    -                "https://w3id.org/vdl/aamva#familyNameTruncation": [
    -                  {
    -                    "@value": "N"
    -                  }
    -                ],
    -                "https://w3id.org/vdl/aamva#givenNameTruncation": [
    -                  {
    -                    "@value": "N"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#birthDate": [
    -                  {
    -                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    -                    "@value": "1998-08-28"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#documentNumber": [
    -                  {
    -                    "@value": "542426814"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#drivingPrivileges": [
    -                  {
    -                    "@type": "@json",
    -                    "@value": [
    -                      {
    -                        "codes": [
    -                          {
    -                            "code": "D"
    -                          }
    -                        ],
    -                        "vehicle_category_code": "D",
    -                        "issue_date": "2019-01-01",
    -                        "expiry_date": "2027-01-01"
    -                      },
    -                      {
    -                        "codes": [
    -                          {
    -                            "code": "C"
    -                          }
    -                        ],
    -                        "vehicle_category_code": "C",
    -                        "issue_date": "2019-01-01",
    -                        "expiry_date": "2017-01-01"
    -                      }
    -                    ]
    -                  }
    -                ],
    -                "https://w3id.org/vdl#expiryDate": [
    -                  {
    -                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    -                    "@value": "2028-08-27T12:00:00-06:00"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#familyName": [
    -                  {
    -                    "@value": "TURNER"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#givenName": [
    -                  {
    -                    "@value": "SUSAN"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#issueDate": [
    -                  {
    -                    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    -                    "@value": "2023-01-15T10:00:00-07:00"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#issuingAuthority": [
    -                  {
    -                    "@value": "UADMV"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#issuingCountry": [
    -                  {
    -                    "@value": "UA"
    -                  }
    -                ],
    -                "https://w3id.org/vdl#portrait": [
    -                  {
    -                    "@id": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q=="
    -                  }
    -                ],
    -                "https://w3id.org/vdl#sex": [
    -                  {
    -                    "@type": "http://www.w3.org/2001/XMLSchema#unsignedInt",
    -                    "@value": 2
    -                  }
    -                ],
    -                "@type": [
    -                  "https://w3id.org/vdl#Iso18013DriversLicense"
    -                ],
    -                "https://w3id.org/vdl#unDistinguishingSign": [
    -                  {
    -                    "@value": "UTA"
    -                  }
    -                ],
    -                "@id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_0"
    -              }
    -            ],
    -            "@type": [
    -              "https://w3id.org/vdl#LicensedDriver"
    -            ],
    -            "@id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_1"
    -          }
    -        ],
    -        "https://schema.org/description": [
    -          {
    -            "@value": "A license granting driving privileges in Utopia."
    -          }
    -        ],
    -        "https://www.w3.org/2018/credentials#expirationDate": [
    -          {
    -            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    -            "@value": "2028-11-15T12:00:00-06:00"
    -          }
    -        ],
    -        "https://schema.org/image": [
    -          {
    -            "@id": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC"
    -          }
    -        ],
    -        "https://www.w3.org/2018/credentials#issuanceDate": [
    -          {
    -            "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    -            "@value": "2023-11-15T10:00:00-07:00"
    -          }
    -        ],
    -        "https://www.w3.org/2018/credentials#issuer": [
    -          {
    -            "@id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    -            "https://schema.org/image": [
    -              {
    -                "@id": "https://dmv.utopia.example/logo.png"
    -              }
    -            ],
    -            "https://schema.org/name": [
    -              {
    -                "@value": "Utopia Department of Motor Vehicles"
    -              }
    -            ],
    -            "https://schema.org/url": [
    -              {
    -                "@id": "https://dmv.utopia.example/"
    -              }
    -            ]
    -          }
    -        ],
    -        "https://schema.org/name": [
    -          {
    -            "@value": "Utopia Driver's License"
    -          }
    -        ],
    -        "@type": [
    -          "https://www.w3.org/2018/credentials#VerifiableCredential",
    -          "https://w3id.org/vdl#Iso18013DriversLicenseCredential"
    -        ],
    -        "@id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_2"
    -      }
    -    ],
    -    "compact": {
    -      "@context": [
    -        "https://www.w3.org/2018/credentials/v1",
    -        "https://w3id.org/security/data-integrity/v2",
    -        "https://w3id.org/vdl/v1",
    -        "https://w3id.org/vdl/aamva/v1"
    -      ],
    -      "id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_2",
    -      "type": [
    -        "VerifiableCredential",
    -        "Iso18013DriversLicenseCredential"
    -      ],
    -      "description": "A license granting driving privileges in Utopia.",
    -      "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC",
    -      "name": "Utopia Driver's License",
    -      "credentialSubject": {
    -        "id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_1",
    -        "type": "LicensedDriver",
    -        "driversLicense": {
    -          "id": "urn:bnid:_e18d4304-586f-479d-9b0c-163e4f575d79_0",
    -          "type": "Iso18013DriversLicense",
    -          "birth_date": "1998-08-28",
    -          "document_number": "542426814",
    -          "driving_privileges": [
    -            {
    -              "codes": [
    -                {
    -                  "code": "D"
    -                }
    -              ],
    -              "vehicle_category_code": "D",
    -              "issue_date": "2019-01-01",
    -              "expiry_date": "2027-01-01"
    -            },
    -            {
    -              "codes": [
    -                {
    -                  "code": "C"
    -                }
    -              ],
    -              "vehicle_category_code": "C",
    -              "issue_date": "2019-01-01",
    -              "expiry_date": "2017-01-01"
    -            }
    -          ],
    -          "expiry_date": "2028-08-27T12:00:00-06:00",
    -          "family_name": "TURNER",
    -          "given_name": "SUSAN",
    -          "issue_date": "2023-01-15T10:00:00-07:00",
    -          "issuing_authority": "UADMV",
    -          "issuing_country": "UA",
    -          "portrait": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==",
    -          "sex": 2,
    -          "un_distinguishing_sign": "UTA",
    -          "aamva_aka_suffix": "1ST",
    -          "aamva_family_name_truncation": "N",
    -          "aamva_given_name_truncation": "N"
    -        }
    -      },
    -      "expirationDate": "2028-11-15T12:00:00-06:00",
    -      "issuanceDate": "2023-11-15T10:00:00-07:00",
    -      "issuer": {
    -        "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    -        "image": "https://dmv.utopia.example/logo.png",
    -        "name": "Utopia Department of Motor Vehicles",
    -        "url": "https://dmv.utopia.example/"
    -      }
    -    }
    -  },
    -  "deskolemizedNQuads": [
    -    "   .\n",
    -    "  \"Utopia Department of Motor Vehicles\" .\n",
    -    "   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"1998-08-28\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"542426814\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"TURNER\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"SUSAN\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"UADMV\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"UA\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"2\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"UTA\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"1ST\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"N\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_0  \"N\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_1  _:_e18d4304-586f-479d-9b0c-163e4f575d79_0 .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"A license granting driving privileges in Utopia.\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"Utopia Driver's License\" .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  _:_e18d4304-586f-479d-9b0c-163e4f575d79_1 .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    -    "_:_e18d4304-586f-479d-9b0c-163e4f575d79_2   .\n"
    -  ],
    -  "labelMap": {
    -    "dataType": "Map",
    -    "value": [
    -      [
    -        "_e18d4304-586f-479d-9b0c-163e4f575d79_2",
    -        "b1"
    -      ],
    -      [
    -        "_e18d4304-586f-479d-9b0c-163e4f575d79_1",
    -        "b0"
    -      ],
    -      [
    -        "_e18d4304-586f-479d-9b0c-163e4f575d79_0",
    -        "b2"
    -      ]
    -    ]
    -  },
    -  "nquads": [
    -    "   .\n",
    -    "  \"Utopia Department of Motor Vehicles\" .\n",
    -    "   .\n",
    -    "_:b0   .\n",
    -    "_:b0  _:b2 .\n",
    -    "_:b1   .\n",
    -    "_:b1   .\n",
    -    "_:b1  \"A license granting driving privileges in Utopia.\" .\n",
    -    "_:b1   .\n",
    -    "_:b1  \"Utopia Driver's License\" .\n",
    -    "_:b1  _:b0 .\n",
    -    "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -    "_:b1  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    -    "_:b1   .\n",
    -    "_:b2   .\n",
    -    "_:b2  \"1998-08-28\"^^ .\n",
    -    "_:b2  \"542426814\" .\n",
    -    "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -    "_:b2  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    -    "_:b2  \"TURNER\" .\n",
    -    "_:b2  \"SUSAN\" .\n",
    -    "_:b2  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    -    "_:b2  \"UADMV\" .\n",
    -    "_:b2  \"UA\" .\n",
    -    "_:b2   .\n",
    -    "_:b2  \"2\"^^ .\n",
    -    "_:b2  \"UTA\" .\n",
    -    "_:b2  \"1ST\" .\n",
    -    "_:b2  \"N\" .\n",
    -    "_:b2  \"N\" .\n"
    -  ]
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedDisclosureData.json b/TestVectors/PseudoIssuerPid/derivedDisclosureData.json
    deleted file mode 100644
    index 1a1b827..0000000
    --- a/TestVectors/PseudoIssuerPid/derivedDisclosureData.json
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -{
    -  "bbsProof":"b1e7e101612e445e05c355545a0eaeda60c4d5f6b2118bd5bab4addd3d5a74a3c7296b1947079033b37e5e7ffead71c3a67b4251662fd1bb4cdbb6ed3b5aa916fa3f41e5bfdb2352c8cd0c7c2a9c16ee5d7b4e9195a92240c9d3c7403dadddccad4628e3c761fe9bb0983fd754efc28d36cc379e747074fa7029dc11187583ed87a8ead2e2105e834539c3cf5d1e47402a228a0668ef2bb124d41a2d7f11a026612da4138ef61d67bf28867a593615c312932ad74068a4eb54e8d56728574708057c3f88a30b4b380b90dcdbdd1fb7c54b6d11d348b4f33d1567fe23015fab3283fbf29ad2641cf0672a53b16ea9f20a0fb3a7e07a1f8951db23a794fdc4b97f3f2fe1b053f68a5db2159b8034b2b3544925f8e4e407ecaf1a8f1f025eff50e9cbad11192038d0ba07fb44b33fd77a695f9ea089bc86856d8d93f3891c5d230f0d2d4930d79671c9e8e8de3a40487dc869d5169a5397839a49baec8f409659ee9c45b15e39b0fd482ad76beeda9d5bd3143bd3be5312828b08dc889962bf1ea45d42c8d9ba34fb40a76082e375b004990d3806e90024fe211c4dec5b104f6ba01d69916f56605e32228c7a47449e94072a4887b9460573ec8fa5e92cb6ab21bcf4a6549af5f630493f42a584d49cd8a072b53bfd030f3863f79ef66167ff6b270f396c345520872facd16d75444f9fb333ec93043f0e4dad12ef3182fedd7d6fc2e430bca67506540c61a9a9bd84d5790c1711463e78d085f91b81629c0b22f55f8241ec5c3182ecd51cfa112beee6901aef8bec9f3ae27e82e509318d989b5a6a6d794562792ac0d138a1f75faada8e40c21a4519b841b313e1b0f1c8f3e7ce8b324c95fe29c202a3678f184ee7b70a10998fd6d80698b322f12806cc74fadc9ca2d4df487975a21e392bad0dae4add605dc5c8ad816da5cbf7ba19893d0d2388248504c375e7786ef6fffca18b0428184d25662f81f11f1dc276c71d8651367570d1263559e5d81049ee3b3c2d8eb4534367752e8b197af1d1989e1ebf55f8b71a616e49a98d09a456c0267e58cc1458997a8cfe00b499ffa91fbf0d01f5122329c9b822e981e42fa30c4e6a9511c53c2bcc34ca99350132260230296cbaf7a25ad678ef8a409b707ca78b51f016b52f571438d832b85f3c5fcfb67d7957113790616c9100684f1aaefb2335bed05a",
    -  "labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]},
    -  "mandatoryIndexes":[0,1,2,5,6,8,9],
    -  "adjSelectiveIndexes":[0,1,5,7,10,16],
    -  "presentationHeader":{"0":17,"1":51,"2":119,"3":170},
    -  "pseudonym":"b2981ced4b1acc7ddcaef1df51de385b344d697727ad5c8aee2b60d76a349146b4995d348607363070dd47b31a558be1",
    -  "lengthBBSMessages":24,
    -  "featureOption":"pseudonym_issuer_pid"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedGroupIndexes.json b/TestVectors/PseudoIssuerPid/derivedGroupIndexes.json
    deleted file mode 100644
    index 85504a2..0000000
    --- a/TestVectors/PseudoIssuerPid/derivedGroupIndexes.json
    +++ /dev/null
    @@ -1 +0,0 @@
    -{"combinedIndexes":[0,1,2,3,4,5,6,10,11,13,14,17,23],"mandatoryIndexes":[0,1,2,5,6,11,13],"nonMandatoryIndexes":[3,4,7,8,9,10,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"selectiveIndexes":[3,4,5,6,10,14,17,23]}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedUnsignedReveal.json b/TestVectors/PseudoIssuerPid/derivedUnsignedReveal.json
    deleted file mode 100644
    index 5419ca8..0000000
    --- a/TestVectors/PseudoIssuerPid/derivedUnsignedReveal.json
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -{
    -  "@context": [
    -    "https://www.w3.org/2018/credentials/v1",
    -    "https://w3id.org/security/data-integrity/v2",
    -    "https://w3id.org/vdl/v1",
    -    "https://w3id.org/vdl/aamva/v1"
    -  ],
    -  "type": [
    -    "VerifiableCredential",
    -    "Iso18013DriversLicenseCredential"
    -  ],
    -  "issuer": {
    -    "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    -    "name": "Utopia Department of Motor Vehicles",
    -    "url": "https://dmv.utopia.example/",
    -    "image": "https://dmv.utopia.example/logo.png"
    -  },
    -  "expirationDate": "2028-11-15T12:00:00-06:00",
    -  "credentialSubject": {
    -    "type": "LicensedDriver",
    -    "driversLicense": {
    -      "type": "Iso18013DriversLicense",
    -      "issuing_country": "UA",
    -      "driving_privileges": [
    -        {
    -          "codes": [
    -            {
    -              "code": "D"
    -            }
    -          ],
    -          "vehicle_category_code": "D",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2027-01-01"
    -        },
    -        {
    -          "codes": [
    -            {
    -              "code": "C"
    -            }
    -          ],
    -          "vehicle_category_code": "C",
    -          "issue_date": "2019-01-01",
    -          "expiry_date": "2017-01-01"
    -        }
    -      ]
    -    }
    -  }
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/pseudonymInfo.json b/TestVectors/PseudoIssuerPid/pseudonymInfo.json
    deleted file mode 100644
    index 097df8a..0000000
    --- a/TestVectors/PseudoIssuerPid/pseudonymInfo.json
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -{
    -  "pseudonymHex": "b2981ced4b1acc7ddcaef1df51de385b344d697727ad5c8aee2b60d76a349146b4995d348607363070dd47b31a558be1"
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/verifyDerivedProofValue.json b/TestVectors/PseudoIssuerPid/verifyDerivedProofValue.json
    deleted file mode 100644
    index 2d36ac2..0000000
    --- a/TestVectors/PseudoIssuerPid/verifyDerivedProofValue.json
    +++ /dev/null
    @@ -1,36 +0,0 @@
    -{
    -  "bbsProof": "b1e7e101612e445e05c355545a0eaeda60c4d5f6b2118bd5bab4addd3d5a74a3c7296b1947079033b37e5e7ffead71c3a67b4251662fd1bb4cdbb6ed3b5aa916fa3f41e5bfdb2352c8cd0c7c2a9c16ee5d7b4e9195a92240c9d3c7403dadddccad4628e3c761fe9bb0983fd754efc28d36cc379e747074fa7029dc11187583ed87a8ead2e2105e834539c3cf5d1e47402a228a0668ef2bb124d41a2d7f11a026612da4138ef61d67bf28867a593615c312932ad74068a4eb54e8d56728574708057c3f88a30b4b380b90dcdbdd1fb7c54b6d11d348b4f33d1567fe23015fab3283fbf29ad2641cf0672a53b16ea9f20a0fb3a7e07a1f8951db23a794fdc4b97f3f2fe1b053f68a5db2159b8034b2b3544925f8e4e407ecaf1a8f1f025eff50e9cbad11192038d0ba07fb44b33fd77a695f9ea089bc86856d8d93f3891c5d230f0d2d4930d79671c9e8e8de3a40487dc869d5169a5397839a49baec8f409659ee9c45b15e39b0fd482ad76beeda9d5bd3143bd3be5312828b08dc889962bf1ea45d42c8d9ba34fb40a76082e375b004990d3806e90024fe211c4dec5b104f6ba01d69916f56605e32228c7a47449e94072a4887b9460573ec8fa5e92cb6ab21bcf4a6549af5f630493f42a584d49cd8a072b53bfd030f3863f79ef66167ff6b270f396c345520872facd16d75444f9fb333ec93043f0e4dad12ef3182fedd7d6fc2e430bca67506540c61a9a9bd84d5790c1711463e78d085f91b81629c0b22f55f8241ec5c3182ecd51cfa112beee6901aef8bec9f3ae27e82e509318d989b5a6a6d794562792ac0d138a1f75faada8e40c21a4519b841b313e1b0f1c8f3e7ce8b324c95fe29c202a3678f184ee7b70a10998fd6d80698b322f12806cc74fadc9ca2d4df487975a21e392bad0dae4add605dc5c8ad816da5cbf7ba19893d0d2388248504c375e7786ef6fffca18b0428184d25662f81f11f1dc276c71d8651367570d1263559e5d81049ee3b3c2d8eb4534367752e8b197af1d1989e1ebf55f8b71a616e49a98d09a456c0267e58cc1458997a8cfe00b499ffa91fbf0d01f5122329c9b822e981e42fa30c4e6a9511c53c2bcc34ca99350132260230296cbaf7a25ad678ef8a409b707ca78b51f016b52f571438d832b85f3c5fcfb67d7957113790616c9100684f1aaefb2335bed05a",
    -  "labelMap": [
    -    [
    -      "c14n0",
    -      "b1"
    -    ],
    -    [
    -      "c14n1",
    -      "b2"
    -    ],
    -    [
    -      "c14n2",
    -      "b0"
    -    ]
    -  ],
    -  "mandatoryIndexes": [
    -    0,
    -    1,
    -    2,
    -    5,
    -    6,
    -    8,
    -    9
    -  ],
    -  "adjSelectedIndexes": [
    -    0,
    -    1,
    -    5,
    -    7,
    -    10,
    -    16
    -  ],
    -  "pseudonym": "b2981ced4b1acc7ddcaef1df51de385b344d697727ad5c8aee2b60d76a349146b4995d348607363070dd47b31a558be1",
    -  "lengthBBSMessages": 24
    -}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/verifyNQuads.json b/TestVectors/PseudoIssuerPid/verifyNQuads.json
    deleted file mode 100644
    index 798743f..0000000
    --- a/TestVectors/PseudoIssuerPid/verifyNQuads.json
    +++ /dev/null
    @@ -1,15 +0,0 @@
    -[
    -  "   .\n",
    -  "  \"Utopia Department of Motor Vehicles\" .\n",
    -  "   .\n",
    -  "_:b0   .\n",
    -  "_:b0  _:b2 .\n",
    -  "_:b1   .\n",
    -  "_:b1   .\n",
    -  "_:b1  _:b0 .\n",
    -  "_:b1  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -  "_:b1   .\n",
    -  "_:b2   .\n",
    -  "_:b2  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -  "_:b2  \"UA\" .\n"
    -]
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/addBaseDocCanon.json b/TestVectors/Pseudonym/addBaseDocCanon.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addBaseDocCanon.json
    rename to TestVectors/Pseudonym/addBaseDocCanon.json
    diff --git a/TestVectors/PseudoHiddenPid/addBaseDocHMACCanon.json b/TestVectors/Pseudonym/addBaseDocHMACCanon.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addBaseDocHMACCanon.json
    rename to TestVectors/Pseudonym/addBaseDocHMACCanon.json
    diff --git a/TestVectors/PseudoHiddenPid/addBaseTransform.json b/TestVectors/Pseudonym/addBaseTransform.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addBaseTransform.json
    rename to TestVectors/Pseudonym/addBaseTransform.json
    diff --git a/TestVectors/PseudoHiddenPid/addHashData.json b/TestVectors/Pseudonym/addHashData.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addHashData.json
    rename to TestVectors/Pseudonym/addHashData.json
    diff --git a/TestVectors/PseudoHiddenPid/addProofConfig.json b/TestVectors/Pseudonym/addProofConfig.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addProofConfig.json
    rename to TestVectors/Pseudonym/addProofConfig.json
    diff --git a/TestVectors/PseudoHiddenPid/addProofConfigCanon.txt b/TestVectors/Pseudonym/addProofConfigCanon.txt
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/addProofConfigCanon.txt
    rename to TestVectors/Pseudonym/addProofConfigCanon.txt
    diff --git a/TestVectors/PseudoIssuerPid/addRawBaseSignatureInfo.json b/TestVectors/Pseudonym/addRawBaseSignatureInfo.json
    similarity index 62%
    rename from TestVectors/PseudoIssuerPid/addRawBaseSignatureInfo.json
    rename to TestVectors/Pseudonym/addRawBaseSignatureInfo.json
    index 3a56c3c..24c3006 100644
    --- a/TestVectors/PseudoIssuerPid/addRawBaseSignatureInfo.json
    +++ b/TestVectors/Pseudonym/addRawBaseSignatureInfo.json
    @@ -1,5 +1,5 @@
     {
    -  "bbsSignature": "af6ee041b56f890cf0794788acfc7cbfa81674b03bc29f55b86f43e199ac36fcf5fb958c453bfdcf1babb93cc33204190eb4cf77e229dfa85b4a031065db8a51c6408898d77f427dcec67c26c2de54e3",
    +  "bbsSignature": "b9389149bab1b5a6032c20781732105a5cbc209592e712e182eec5c055f2072877683dee2949af32290d350ed9e9ffa246f65b8c3f6f199c4d29009d2ce6dff374ed4f22f2f9a7e12dc3c342e8c18107",
       "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb",
       "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f",
       "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
    @@ -7,6 +7,6 @@
         "/issuer",
         "/expirationDate"
       ],
    -  "pidHex": "5105adaaa2b9d6a48a9ab9e46471b40d875febc15d35663016ddb5461619d6d1",
    -  "featureOption": "pseudonym_issuer_pid"
    +  "signerNymEntropyHex": "25555cf635188a1c33989056f5129e6ab4be0e7c5cc588c48d308e0254eed140",
    +  "featureOption": "pseudonym"
     }
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/addSignedSDBase.json b/TestVectors/Pseudonym/addSignedSDBase.json
    similarity index 90%
    rename from TestVectors/PseudoHiddenPid/addSignedSDBase.json
    rename to TestVectors/Pseudonym/addSignedSDBase.json
    index 3282c1e..49f8108 100644
    --- a/TestVectors/PseudoHiddenPid/addSignedSDBase.json
    +++ b/TestVectors/Pseudonym/addSignedSDBase.json
    @@ -68,6 +68,6 @@
         "created": "2023-08-15T23:36:38Z",
         "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ",
         "proofPurpose": "assertionMethod",
    -    "proofValue": "u2V0IhlhQmKMuC6c2TzkaduRAsxSVDKDDf_snqohFfLolj_Vz3vKYmd_yccbnnRcyw4lvod4TUaD7g2FDUZQQGSbG0LVr6CivAZ0ugxfByGa537ZHiGJYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRlwlggFgYYECDYAlltrMK3XIHpBCTzDn53cj3Hh3sCPLhh2S0"
    +    "proofValue": "u2V0IhlhQuTiRSbqxtaYDLCB4FzIQWly8IJWS5xLhgu7FwFXyByh3aD3uKUmvMikNNQ7Z6f-iRvZbjD9vGZxNKQCdLObf83TtTyLy-afhLcPDQujBgQdYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRlwlggJVVc9jUYihwzmJBW9RKearS-DnxcxYjEjTCOAlTu0UA"
       }
     }
    \ No newline at end of file
    diff --git a/TestVectors/Pseudonym/commitmentInfo.json b/TestVectors/Pseudonym/commitmentInfo.json
    new file mode 100644
    index 0000000..6b0d6d8
    --- /dev/null
    +++ b/TestVectors/Pseudonym/commitmentInfo.json
    @@ -0,0 +1,4 @@
    +{
    +  "secretProverBlind": "2df3cd3d451b21069b72269f9984df449219c41273b19b1a8487d836fbb8baa1",
    +  "commitmentWithProof": "a80f61f9470cb8ab88644fbef3616eaf5d3b147c4dc1dcad810148a5f2e73186cb3ffa27ea55728a6df470d0c3928be1408b95f5d261cee4d66992ecacf5ca2d6348c33bb7f90c2cef513cdc88be536550e9701d9a466320f49ce097551f8097317c530e2b80710748362b03f5a74280669c00eb29145eb3ec51975d8189fdf2c810d7fadefe36f93b0d2068a494175c"
    +}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedAdjIndexes.json b/TestVectors/Pseudonym/derivedAdjIndexes.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/derivedAdjIndexes.json
    rename to TestVectors/Pseudonym/derivedAdjIndexes.json
    diff --git a/TestVectors/PseudoHiddenPid/derivedAllGroupData.json b/TestVectors/Pseudonym/derivedAllGroupData.json
    similarity index 88%
    rename from TestVectors/PseudoHiddenPid/derivedAllGroupData.json
    rename to TestVectors/Pseudonym/derivedAllGroupData.json
    index b631803..0e0a931 100644
    --- a/TestVectors/PseudoHiddenPid/derivedAllGroupData.json
    +++ b/TestVectors/Pseudonym/derivedAllGroupData.json
    @@ -135,10 +135,10 @@
             "   .\n",
             "  \"Utopia Department of Motor Vehicles\" .\n",
             "   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n"
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n"
           ]
         },
         "selective": {
    @@ -273,14 +273,14 @@
             ]
           },
           "deskolemizedNQuads": [
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"UA\" .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_0 .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_1 .\n"
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"UA\" .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0 .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1 .\n"
           ]
         },
         "combined": {
    @@ -418,16 +418,16 @@
             "   .\n",
             "  \"Utopia Department of Motor Vehicles\" .\n",
             "   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"UA\" .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_0 .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_1 .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -        "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n"
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"UA\" .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0 .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1 .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    +        "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n"
           ]
         }
       },
    @@ -542,13 +542,13 @@
                         "@value": "UTA"
                       }
                     ],
    -                "@id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_0"
    +                "@id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0"
                   }
                 ],
                 "@type": [
                   "https://w3id.org/vdl#LicensedDriver"
                 ],
    -            "@id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_1"
    +            "@id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1"
               }
             ],
             "https://schema.org/description": [
    @@ -602,7 +602,7 @@
               "https://www.w3.org/2018/credentials#VerifiableCredential",
               "https://w3id.org/vdl#Iso18013DriversLicenseCredential"
             ],
    -        "@id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_2"
    +        "@id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2"
           }
         ],
         "compact": {
    @@ -612,7 +612,7 @@
             "https://w3id.org/vdl/v1",
             "https://w3id.org/vdl/aamva/v1"
           ],
    -      "id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_2",
    +      "id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2",
           "type": [
             "VerifiableCredential",
             "Iso18013DriversLicenseCredential"
    @@ -621,10 +621,10 @@
           "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC",
           "name": "Utopia Driver's License",
           "credentialSubject": {
    -        "id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_1",
    +        "id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1",
             "type": "LicensedDriver",
             "driversLicense": {
    -          "id": "urn:bnid:_1547cd58-cfa4-40b0-887b-ca74422a091b_0",
    +          "id": "urn:bnid:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0",
               "type": "Iso18013DriversLicense",
               "birth_date": "1998-08-28",
               "document_number": "542426814",
    @@ -678,47 +678,47 @@
         "   .\n",
         "  \"Utopia Department of Motor Vehicles\" .\n",
         "   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"1998-08-28\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"542426814\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"TURNER\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"SUSAN\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"UADMV\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"UA\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"2\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"UTA\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"1ST\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"N\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_0  \"N\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_1  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_0 .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"A license granting driving privileges in Utopia.\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"Utopia Driver's License\" .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  _:_1547cd58-cfa4-40b0-887b-ca74422a091b_1 .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    -    "_:_1547cd58-cfa4-40b0-887b-ca74422a091b_2   .\n"
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"1998-08-28\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"542426814\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"2028-08-27T12:00:00-06:00\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"TURNER\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"SUSAN\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"2023-01-15T10:00:00-07:00\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"UADMV\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"UA\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"2\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"UTA\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"1ST\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"N\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0  \"N\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_0 .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"A license granting driving privileges in Utopia.\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"Utopia Driver's License\" .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  _:_38175cb3-75e5-40c8-afe4-e66d8fc22378_1 .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"2028-11-15T12:00:00-06:00\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2  \"2023-11-15T10:00:00-07:00\"^^ .\n",
    +    "_:_38175cb3-75e5-40c8-afe4-e66d8fc22378_2   .\n"
       ],
       "labelMap": {
         "dataType": "Map",
         "value": [
           [
    -        "_1547cd58-cfa4-40b0-887b-ca74422a091b_2",
    +        "_38175cb3-75e5-40c8-afe4-e66d8fc22378_2",
             "b1"
           ],
           [
    -        "_1547cd58-cfa4-40b0-887b-ca74422a091b_1",
    +        "_38175cb3-75e5-40c8-afe4-e66d8fc22378_1",
             "b0"
           ],
           [
    -        "_1547cd58-cfa4-40b0-887b-ca74422a091b_0",
    +        "_38175cb3-75e5-40c8-afe4-e66d8fc22378_0",
             "b2"
           ]
         ]
    diff --git a/TestVectors/Pseudonym/derivedDisclosureData.json b/TestVectors/Pseudonym/derivedDisclosureData.json
    new file mode 100644
    index 0000000..cf3882f
    --- /dev/null
    +++ b/TestVectors/Pseudonym/derivedDisclosureData.json
    @@ -0,0 +1,10 @@
    +{
    +    "bbsProof":"b394693d54d67937aae0e4175ecf4331200c23470171188ac5513b30d27d9bd2e06173d44e1aca7c743ba30b3f59af0595965bf8256437bce6bef824fe243183af6aa14a1e8224ed7e4eeb16445594df13a46e75d8dfbae0a3e2e1e0871260e68f71de7be4309eb53523a446b8189446b8d5c60892bdd855b5067e0433b46d5b9ffc4dc54b712ff97ec9d7c44cff648929d826bf9e3a7f873c9bcd07c6a3747fc6befceaf892c4d8d38d385c19c399ab342a76c000a3ff9050fa9223e20acfdf4404f43605a24c44622ebcaaf144b161226a6cbe7c08474f9fb80a736be3a818e4e62aa738e701007871859bea36e062324ff3afd8670a5de8b69911fae58aa40e48e29a046c37b9f9cc3868c30482d2339746955c3deaf6f1d4c8cf8be8e503f3ea4715d11e385eb7ed9de6379b7de8436a4e89cf4427d53358b1882e27c6e1e3ba2e81cf10fbc792cf3461a0fdd63f35a151b8c8350505a9b6d612e9adc1dca11b2698a3d0a9f0df6e9bc0ece7aa462afab02d93a87fd5bebb0eee058770c81c5f2fe6eeefcb0a657d9f116b96e2b04b4cc7f4baad4fe784bd9563aea20272138f2dbe94a5e25d30633b5f83eac4b42af25f144bddb631738bf3d54206e8d8b5172c8d52d3c272f799b782c73d480e1289e262ddbb70ab29491cf85a8428c4672437677407524a6dacb53332565dab5d056dbc5451becb123f91d173f6a7c785b7d9f19c43864a785bd941db248322539a097e9ac06244308a3b8df88b5213724cf09715b09e06425448c400680b943ba4711f14a719920b06ec2c6aff908ecf4f5793afd233d270a5ef92131606035517a89e4118dc65dbeb9051f92797036f54f8400910fa56cdd7b87b122e39e41233ea493239fab55c4c836a0a38732a68e6a9f9e11d32b991599e19edbb386f0d364b91e10dd9bf82898f79e90045a0c4987a0cf365d37d8380539a794284841c50c83f2bc3ee9cf7432f44dbfca897ff99feabf224e51137313630c5000d39429d9ea69a2a8237fe3a1857121c14ebb00d57b90db39e2e11bfa37858187d183027c45e317a72e5334681de26788e3176bd48d5761d54c1f2af0a6c3549a0de05b21d0a066c732a540072ae7676b867027b18323e08fcbfaf38ec22aeccd3375bb7b6965d9f6ab3ac4adc2a0700a4bc82fe58afbdd035af48fb85fcd8bf14f81d5ca3f2626be8962cbea13da31ff3cc6c6ebfeeef42f25708af872a14019f83",
    +    "labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]},
    +    "mandatoryIndexes":[0,1,2,5,6,8,9],
    +    "adjSelectiveIndexes":[0,1,5,7,10,16],
    +    "presentationHeader":{"0":17,"1":51,"2":119,"3":170},
    +    "pseudonym":"838607ff2c8dcb2a0740ef13c2c87418efb57559243232a69daf1e294dd092af833ad4df1e99e0034c737b932916f378",
    +    "featureOption":"pseudonym",
    +    "lengthBBSMessages":23
    +}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedGroupIndexes.json b/TestVectors/Pseudonym/derivedGroupIndexes.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/derivedGroupIndexes.json
    rename to TestVectors/Pseudonym/derivedGroupIndexes.json
    diff --git a/TestVectors/PseudoIssuerPid/derivedRecoveredBaseData.json b/TestVectors/Pseudonym/derivedRecoveredBaseData.json
    similarity index 62%
    rename from TestVectors/PseudoIssuerPid/derivedRecoveredBaseData.json
    rename to TestVectors/Pseudonym/derivedRecoveredBaseData.json
    index 3a56c3c..7820b81 100644
    --- a/TestVectors/PseudoIssuerPid/derivedRecoveredBaseData.json
    +++ b/TestVectors/Pseudonym/derivedRecoveredBaseData.json
    @@ -1,5 +1,5 @@
     {
    -  "bbsSignature": "af6ee041b56f890cf0794788acfc7cbfa81674b03bc29f55b86f43e199ac36fcf5fb958c453bfdcf1babb93cc33204190eb4cf77e229dfa85b4a031065db8a51c6408898d77f427dcec67c26c2de54e3",
    +  "bbsSignature": "b9389149bab1b5a6032c20781732105a5cbc209592e712e182eec5c055f2072877683dee2949af32290d350ed9e9ffa246f65b8c3f6f199c4d29009d2ce6dff374ed4f22f2f9a7e12dc3c342e8c18107",
       "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb",
       "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f",
       "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff",
    @@ -7,6 +7,6 @@
         "/issuer",
         "/expirationDate"
       ],
    -  "pidHex": "5105adaaa2b9d6a48a9ab9e46471b40d875febc15d35663016ddb5461619d6d1",
    -  "featureOption": "pseudonym_issuer_pid"
    +  "signerNymEntropy": "25555cf635188a1c33989056f5129e6ab4be0e7c5cc588c48d308e0254eed140",
    +  "featureOption": "pseudonym"
     }
    \ No newline at end of file
    diff --git a/TestVectors/PseudoIssuerPid/derivedRevealDocument.json b/TestVectors/Pseudonym/derivedRevealDocument.json
    similarity index 56%
    rename from TestVectors/PseudoIssuerPid/derivedRevealDocument.json
    rename to TestVectors/Pseudonym/derivedRevealDocument.json
    index d2b3fc5..99a1ab0 100644
    --- a/TestVectors/PseudoIssuerPid/derivedRevealDocument.json
    +++ b/TestVectors/Pseudonym/derivedRevealDocument.json
    @@ -51,6 +51,6 @@
         "created": "2023-08-15T23:36:38Z",
         "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ",
         "proofPurpose": "assertionMethod",
    -    "proofValue": "u2V0Hh1kDULHn4QFhLkReBcNVVFoOrtpgxNX2shGL1bq0rd09WnSjxylrGUcHkDOzfl5__q1xw6Z7QlFmL9G7TNu27TtaqRb6P0Hlv9sjUsjNDHwqnBbuXXtOkZWpIkDJ08dAPa3dzK1GKOPHYf6bsJg_11Tvwo02zDeedHB0-nAp3BEYdYPth6jq0uIQXoNFOcPPXR5HQCoiigZo7yuxJNQaLX8RoCZhLaQTjvYdZ78ohnpZNhXDEpMq10BopOtU6NVnKFdHCAV8P4ijC0s4C5Dc290ft8VLbRHTSLTzPRVn_iMBX6syg_vymtJkHPBnKlOxbqnyCg-zp-B6H4lR2yOnlP3EuX8_L-GwU_aKXbIVm4A0srNUSSX45OQH7K8ajx8CXv9Q6cutERkgONC6B_tEsz_XemlfnqCJvIaFbY2T84kcXSMPDS1JMNeWccno6N46QEh9yGnVFppTl4OaSbrsj0CWWe6cRbFeObD9SCrXa-7anVvTFDvTvlMSgosI3IiZYr8epF1CyNm6NPtAp2CC43WwBJkNOAbpACT-IRxN7FsQT2ugHWmRb1ZgXjIijHpHRJ6UBypIh7lGBXPsj6XpLLarIbz0plSa9fYwST9CpYTUnNigcrU7_QMPOGP3nvZhZ_9rJw85bDRVIIcvrNFtdURPn7Mz7JMEPw5NrRLvMYL-3X1vwuQwvKZ1BlQMYampvYTVeQwXEUY-eNCF-RuBYpwLIvVfgkHsXDGC7NUc-hEr7uaQGu-L7J864n6C5QkxjZibWmpteUVieSrA0Tih91-q2o5AwhpFGbhBsxPhsPHI8-fOizJMlf4pwgKjZ48YTue3ChCZj9bYBpizIvEoBsx0-tycotTfSHl1oh45K60NrkrdYF3FyK2BbaXL97oZiT0NI4gkhQTDded4bvb__KGLBCgYTSVmL4HxHx3CdscdhlE2dXDRJjVZ5dgQSe47PC2OtFNDZ3Uuixl68dGYnh6_Vfi3GmFuSamNCaRWwCZ-WMwUWJl6jP4AtJn_qR-_DQH1EiMpybgi6YHkL6MMTmqVEcU8K8w0ypk1ATImAjApbLr3olrWeO-KQJtwfKeLUfAWtS9XFDjYMrhfPF_Ptn15VxE3kGFskQBoTxqu-yM1vtBaowABAQICAIcAAQIFBggJhgABBQcKEEQRM3eqWDCymBztSxrMfdyu8d9R3jhbNE1pdyetXIruK2DXajSRRrSZXTSGBzYwcN1HsxpVi-EYGA"
    +    "proofValue": "u2V0Jh1kDcLOUaT1U1nk3quDkF17PQzEgDCNHAXEYisVROzDSfZvS4GFz1E4aynx0O6MLP1mvBZWWW_glZDe85r74JP4kMYOvaqFKHoIk7X5O6xZEVZTfE6RuddjfuuCj4uHghxJg5o9x3nvkMJ61NSOkRrgYlEa41cYIkr3YVbUGfgQztG1bn_xNxUtxL_l-ydfETP9kiSnYJr-eOn-HPJvNB8ajdH_Gvvzq-JLE2NONOFwZw5mrNCp2wACj_5BQ-pIj4grP30QE9DYFokxEYi68qvFEsWEiamy-fAhHT5-4CnNr46gY5OYqpzjnAQB4cYWb6jbgYjJP86_YZwpd6LaZEfrliqQOSOKaBGw3ufnMOGjDBILSM5dGlVw96vbx1MjPi-jlA_PqRxXRHjhet-2d5jebfehDak6Jz0Qn1TNYsYguJ8bh47ougc8Q-8eSzzRhoP3WPzWhUbjINQUFqbbWEumtwdyhGyaYo9Cp8N9um8Ds56pGKvqwLZOof9W-uw7uBYdwyBxfL-bu78sKZX2fEWuW4rBLTMf0uq1P54S9lWOuogJyE48tvpSl4l0wYztfg-rEtCryXxRL3bYxc4vz1UIG6Ni1FyyNUtPCcveZt4LHPUgOEoniYt27cKspSRz4WoQoxGckN2d0B1JKbay1MzJWXatdBW28VFG-yxI_kdFz9qfHhbfZ8ZxDhkp4W9lB2ySDIlOaCX6awGJEMIo7jfiLUhNyTPCXFbCeBkJUSMQAaAuUO6RxHxSnGZILBuwsav-Qjs9PV5Ov0jPScKXvkhMWBgNVF6ieQRjcZdvrkFH5J5cDb1T4QAkQ-lbN17h7Ei455BIz6kkyOfq1XEyDago4cypo5qn54R0yuZFZnhntuzhvDTZLkeEN2b-CiY956QBFoMSYegzzZdN9g4BTmnlChIQcUMg_K8PunPdDL0Tb_KiX_5n-q_Ik5RE3MTYwxQANOUKdnqaaKoI3_joYVxIcFOuwDVe5DbOeLhG_o3hYGH0YMCfEXjF6cuUzRoHeJniOMXa9SNV2HVTB8q8KbDVJoN4Fsh0KBmxzKlQAcq52drhnAnsYMj4I_L-vOOwirszTN1u3tpZdn2qzrErcKgcApLyC_livvdA1r0j7hfzYvxT4HVyj8mJr6JYsvqE9ox_zzGxuv-7vQvJXCK-HKhQBn4OjAAEBAgIAhwABAgUGCAmGAAEFBwoQRBEzd6pYMIOGB_8sjcsqB0DvE8LIdBjvtXVZJDIypp2vHilN0JKvgzrU3x6Z4ANMc3uTKRbzeBc"
       }
     }
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/derivedUnsignedReveal.json b/TestVectors/Pseudonym/derivedUnsignedReveal.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/derivedUnsignedReveal.json
    rename to TestVectors/Pseudonym/derivedUnsignedReveal.json
    diff --git a/TestVectors/Pseudonym/nymSecret.json b/TestVectors/Pseudonym/nymSecret.json
    new file mode 100644
    index 0000000..72396b3
    --- /dev/null
    +++ b/TestVectors/Pseudonym/nymSecret.json
    @@ -0,0 +1,3 @@
    +{
    +    "nymSecretHex": "f883d069aec1252f167b0880e8960d72fa2623e11b6967541a457aa5c3cb088"
    +}
    \ No newline at end of file
    diff --git a/TestVectors/Pseudonym/verifyDerivedProofValue.json b/TestVectors/Pseudonym/verifyDerivedProofValue.json
    new file mode 100644
    index 0000000..703c6ba
    --- /dev/null
    +++ b/TestVectors/Pseudonym/verifyDerivedProofValue.json
    @@ -0,0 +1,34 @@
    +{
    +  "bbsProof": "b394693d54d67937aae0e4175ecf4331200c23470171188ac5513b30d27d9bd2e06173d44e1aca7c743ba30b3f59af0595965bf8256437bce6bef824fe243183af6aa14a1e8224ed7e4eeb16445594df13a46e75d8dfbae0a3e2e1e0871260e68f71de7be4309eb53523a446b8189446b8d5c60892bdd855b5067e0433b46d5b9ffc4dc54b712ff97ec9d7c44cff648929d826bf9e3a7f873c9bcd07c6a3747fc6befceaf892c4d8d38d385c19c399ab342a76c000a3ff9050fa9223e20acfdf4404f43605a24c44622ebcaaf144b161226a6cbe7c08474f9fb80a736be3a818e4e62aa738e701007871859bea36e062324ff3afd8670a5de8b69911fae58aa40e48e29a046c37b9f9cc3868c30482d2339746955c3deaf6f1d4c8cf8be8e503f3ea4715d11e385eb7ed9de6379b7de8436a4e89cf4427d53358b1882e27c6e1e3ba2e81cf10fbc792cf3461a0fdd63f35a151b8c8350505a9b6d612e9adc1dca11b2698a3d0a9f0df6e9bc0ece7aa462afab02d93a87fd5bebb0eee058770c81c5f2fe6eeefcb0a657d9f116b96e2b04b4cc7f4baad4fe784bd9563aea20272138f2dbe94a5e25d30633b5f83eac4b42af25f144bddb631738bf3d54206e8d8b5172c8d52d3c272f799b782c73d480e1289e262ddbb70ab29491cf85a8428c4672437677407524a6dacb53332565dab5d056dbc5451becb123f91d173f6a7c785b7d9f19c43864a785bd941db248322539a097e9ac06244308a3b8df88b5213724cf09715b09e06425448c400680b943ba4711f14a719920b06ec2c6aff908ecf4f5793afd233d270a5ef92131606035517a89e4118dc65dbeb9051f92797036f54f8400910fa56cdd7b87b122e39e41233ea493239fab55c4c836a0a38732a68e6a9f9e11d32b991599e19edbb386f0d364b91e10dd9bf82898f79e90045a0c4987a0cf365d37d8380539a794284841c50c83f2bc3ee9cf7432f44dbfca897ff99feabf224e51137313630c5000d39429d9ea69a2a8237fe3a1857121c14ebb00d57b90db39e2e11bfa37858187d183027c45e317a72e5334681de26788e3176bd48d5761d54c1f2af0a6c3549a0de05b21d0a066c732a540072ae7676b867027b18323e08fcbfaf38ec22aeccd3375bb7b6965d9f6ab3ac4adc2a0700a4bc82fe58afbdd035af48fb85fcd8bf14f81d5ca3f2626be8962cbea13da31ff3cc6c6ebfeeef42f25708af872a14019f83",
    +  "labelMap": [
    +    [
    +      "c14n0",
    +      "b1"
    +    ],
    +    [
    +      "c14n1",
    +      "b2"
    +    ],
    +    [
    +      "c14n2",
    +      "b0"
    +    ]
    +  ],
    +  "mandatoryIndexes": [
    +    0,
    +    1,
    +    2,
    +    5,
    +    6,
    +    8,
    +    9
    +  ],
    +  "adjSelectedIndexes": [
    +    0,
    +    1,
    +    5,
    +    7,
    +    10,
    +    16
    +  ]
    +}
    \ No newline at end of file
    diff --git a/TestVectors/PseudoHiddenPid/verifyNQuads.json b/TestVectors/Pseudonym/verifyNQuads.json
    similarity index 100%
    rename from TestVectors/PseudoHiddenPid/verifyNQuads.json
    rename to TestVectors/Pseudonym/verifyNQuads.json
    diff --git a/index.html b/index.html
    index 91e8066..039d76f 100644
    --- a/index.html
    +++ b/index.html
    @@ -785,8 +785,8 @@ 

    createDisclosureData

    1. Initialize |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, -|mandatoryPointers|, |pid|, and -|signer_blind| to the values of the associated properties in the object +and |mandatoryPointers|, and +to the values of the associated properties in the object returned when calling the algorithm in Section , passing the `proofValue` from `proof`.
    2. @@ -1801,9 +1801,9 @@

      Optional Features

      The cryptographic properties of BBS signatures permit variants that can support advanced functionalities. This specification is limited to supporting only the most relevant of these enhancements, which we explain in the -following sections. The variables |commitment_with_proof|, -|pid|, and |pseudonym| are associated with these features and are not otherwise -needed for BBS signatures and proofs. +following sections. The variables |commitment_with_proof|, |holder_secret| +|prover_nym|, |signer_nym_entropy|, and |pseudonym| are associated with these +features and are not otherwise needed for BBS signatures and proofs.

      The optional BBS features described in this section, and included in the @@ -3461,155 +3461,41 @@

      Holder Binding Derived Proof
      data-include-format="text">
    -
    -

    Pseudonym with Issuer-known PID Feature

    -
    -
    Issuer PID Base Proof
    -

    -To issue a credential under the pseudonym with issuer-known PID feature, -the issuer generates a cryptographically random |pid| value for a holder. This -value is shared with the holder but is otherwise kept secret. This value is -shown below. -

    -
    
    -          

    -This example will make use of the same key material as shown in -, -the same unsigned document as shown in -, and the same -mandatory pointers as shown in -. This results in the -same canonical document as in -, the same HMAC document -as in -, and the same "add -base transformation" as in -. -

    -

    -This example makes use of the same proof configuration as -. -This results in the same canonical base proof as in -. -Combining this with the above assumptions leads to the same base hashes as in -. -

    -

    -Since |featureOption| is equal to `"pseudonym_issuer_pid"`, the procedure of -section Base Proof -Serialization will produce the output shown below. This makes use of the -signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the -inclusion of the -|pid| value, as this needs to be communicated to the holder. -

    -
    
    -          

    -Finally, the values above are run through the algorithm of Section -, to produce the `proofValue` which is -used in the signed base document shown below. -

    -
    
    -          
    -
    -
    Issuer PID Derived Proof
    -

    -As explained in section , we use a -mocked random number generation procedure and demonstrate the use of a -|presentationHeader|. The same |seed| and |presentationHeader| -as given in - are used here. -

    -

    -To create a derived proof, a holder starts with a signed document -containing a base proof. The base document we will use for these test vectors is -the final example from -, above. The first -step is to run the algorithm of Section to -recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, |mandatoryPointers|, -|pid|, and |featureOption|, as shown below. -

    -
    
    -            

    -Next, the holder needs to indicate what else, if anything, they wish to reveal -to the verifiers, by specifying JSON pointers for selective disclosure. In this -case, the holder reveals the same information as given in -. This results -in the same |revealDocument| -as shown in -. -

    -

    -Running yields the same information for -"derived group indexes" as shown in - and for -"adjusted mandatory and selective indexes" as shown in -. -

    -

    -Within , we compute the |pseudonym| based on -the |verfifier_id| shown below. -

    -
    
    -            

    -The final output of is shown below. Note -the inclusion of the computed |pseudonym| and the |featureOption| value. -

    -
    
    -            

    -Finally, using the disclosure data above with the algorithm of Section -, we obtain the signed derived (reveal) -document shown below. -

    -
    
    -          
    -
    -

    Pseuonym with Hidden PID Feature

    +

    Credential Bound Pseudonym Feature

    -
    Hidden PID Commitment Generation
    +
    Prover Nym Commitment Generation

    -The first steps in using the pseudonym with hidden PID feature are for the -holder to generate its secret |pid| value and then compute a commitment with -proof for this value according to the commitment computation procedure -of [[CFRG-Blind-BBS-Signature]]. Example values and outputs of this procedure +The first steps in using the credential bound pseudonym feature are for +the holder to generate its secret |prover_nym| value and then compute a +commitment with proof for this value according to the "Commitment" operation +from [[CFRG-Pseudonym-BBS-Signature]]. Example values and outputs of this procedure are shown below.

    -
    
                 
    
                 

    -The |pid| and |secretProverBlind| are retained by the holder and kept +The |prover_nym| and |secretProverBlind| are retained by the holder and kept secret. The |commitmentWithProof| value needs to be communicated to the issuer.

    -
    Hidden PID Base Proof
    +
    Pseudonym Base Proof
    +

    +The addition of a base proof under the pseudonym feature option begins +with the issuer receiving a |commitmentWithProof| value from the holder and +generating a cryptographically random value for |signer_nym_entropy|. +

    +
    
                 

    -The addition of a base proof under the pseudonym with hidden PID option begins -with the issuer receiving a |commitmentWithProof| value from the holder and then -verifying that value with the commitment verification procedure of -[[CFRG-Blind-BBS-Signature]]. This example will make use of the same key material as shown in , the same unsigned document as shown in @@ -3632,16 +3518,16 @@

    Hidden PID Base Proof
    .

    -Since |featureOption| is equal to `"pseudonym_hidden_pid"`, the procedure of +Since |featureOption| is equal to `"pseudonym"`, the procedure of section will produce the output shown below. This makes use of the signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the -inclusion of the |featureOption| value, as this +inclusion of the |signer_nym_entropy| and |featureOption| values, as these need to be communicated to the holder.

    
               

    Finally, the values above are run through the algorithm of section @@ -3649,12 +3535,20 @@

    Hidden PID Base Proof
    used in the signed base document shown below.

    
               
    -
    Hidden PID Derived Proof
    +
    Pseudonym Derived Proof
    +

    As explained in section , we use a mocked random number generation procedure and demonstrate the use of a @@ -3665,14 +3559,24 @@

    Hidden PID Derived Proof
    To create a derived proof, a holder starts with a signed document containing a base proof. The base document we will use for these test vectors is from -, above. The first +, above. The first step is to run the algorithm of Section to recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, -|mandatoryPointers|, and |featureOption|, as shown below. +|mandatoryPointers|, |signer_nym_entropy| and |featureOption|, as shown below. +

    +
    
    +          

    +Next the holder uses the the "Verification and Finalization" operation from +[[CFRG-Pseudonym-BBS-Signature]] to both verify the signature and compute the +|nym_secret| value. This operation uses the |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind| values amongst others.

    
               

    Next, the holder needs to indicate what else, if anything, they wish to reveal @@ -3694,8 +3598,8 @@

    Hidden PID Derived Proof
    The final output of is shown below. Note the inclusion of the computed |pseudonym| and the |featureOption| value.

    -
    
               

    Finally, using the disclosure data above with the algorithm of section @@ -3703,8 +3607,8 @@

    Hidden PID Derived Proof
    document shown below.

    
               
    From 9cf6bd5768377cf4f6acb3a8f847246a7e8f2dcc Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Tue, 10 Dec 2024 12:07:22 -0800 Subject: [PATCH 18/24] Add test vectors and description for the holder binding and pseudonym feature. --- TestVectors/PseudonymHB/addBaseDocCanon.json | 32 + .../PseudonymHB/addBaseDocHMACCanon.json | 32 + TestVectors/PseudonymHB/addBaseTransform.json | 137 ++++ TestVectors/PseudonymHB/addHashData.json | 4 + TestVectors/PseudonymHB/addProofConfig.json | 13 + .../PseudonymHB/addProofConfigCanon.txt | 5 + .../PseudonymHB/addRawBaseSignatureInfo.json | 12 + TestVectors/PseudonymHB/addSignedSDBase.json | 73 ++ TestVectors/PseudonymHB/commitmentInfo.json | 4 + .../PseudonymHB/derivedAdjIndexes.json | 1 + .../PseudonymHB/derivedAllGroupData.json | 758 ++++++++++++++++++ .../PseudonymHB/derivedDisclosureData.json | 9 + .../PseudonymHB/derivedGroupIndexes.json | 1 + .../PseudonymHB/derivedRecoveredBaseData.json | 12 + .../PseudonymHB/derivedRevealDocument.json | 56 ++ .../PseudonymHB/derivedUnsignedReveal.json | 48 ++ TestVectors/PseudonymHB/nymSecret.json | 1 + .../PseudonymHB/verifyDerivedProofValue.json | 34 + TestVectors/PseudonymHB/verifyNQuads.json | 15 + index.html | 157 +++- 20 files changed, 1396 insertions(+), 8 deletions(-) create mode 100644 TestVectors/PseudonymHB/addBaseDocCanon.json create mode 100644 TestVectors/PseudonymHB/addBaseDocHMACCanon.json create mode 100644 TestVectors/PseudonymHB/addBaseTransform.json create mode 100644 TestVectors/PseudonymHB/addHashData.json create mode 100644 TestVectors/PseudonymHB/addProofConfig.json create mode 100644 TestVectors/PseudonymHB/addProofConfigCanon.txt create mode 100644 TestVectors/PseudonymHB/addRawBaseSignatureInfo.json create mode 100644 TestVectors/PseudonymHB/addSignedSDBase.json create mode 100644 TestVectors/PseudonymHB/commitmentInfo.json create mode 100644 TestVectors/PseudonymHB/derivedAdjIndexes.json create mode 100644 TestVectors/PseudonymHB/derivedAllGroupData.json create mode 100644 TestVectors/PseudonymHB/derivedDisclosureData.json create mode 100644 TestVectors/PseudonymHB/derivedGroupIndexes.json create mode 100644 TestVectors/PseudonymHB/derivedRecoveredBaseData.json create mode 100644 TestVectors/PseudonymHB/derivedRevealDocument.json create mode 100644 TestVectors/PseudonymHB/derivedUnsignedReveal.json create mode 100644 TestVectors/PseudonymHB/nymSecret.json create mode 100644 TestVectors/PseudonymHB/verifyDerivedProofValue.json create mode 100644 TestVectors/PseudonymHB/verifyNQuads.json diff --git a/TestVectors/PseudonymHB/addBaseDocCanon.json b/TestVectors/PseudonymHB/addBaseDocCanon.json new file mode 100644 index 0000000..ea7ad93 --- /dev/null +++ b/TestVectors/PseudonymHB/addBaseDocCanon.json @@ -0,0 +1,32 @@ +[ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:c14n0 .\n", + "_:c14n0 .\n", + "_:c14n0 \"A license granting driving privileges in Utopia.\" .\n", + "_:c14n0 .\n", + "_:c14n0 \"Utopia Driver's License\" .\n", + "_:c14n0 _:c14n1 .\n", + "_:c14n0 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:c14n0 \"2023-11-15T10:00:00-07:00\"^^ .\n", + "_:c14n0 .\n", + "_:c14n1 .\n", + "_:c14n1 _:c14n2 .\n", + "_:c14n2 .\n", + "_:c14n2 \"1998-08-28\"^^ .\n", + "_:c14n2 \"542426814\" .\n", + "_:c14n2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:c14n2 \"2028-08-27T12:00:00-06:00\"^^ .\n", + "_:c14n2 \"TURNER\" .\n", + "_:c14n2 \"SUSAN\" .\n", + "_:c14n2 \"2023-01-15T10:00:00-07:00\"^^ .\n", + "_:c14n2 \"UADMV\" .\n", + "_:c14n2 \"UA\" .\n", + "_:c14n2 .\n", + "_:c14n2 \"2\"^^ .\n", + "_:c14n2 \"UTA\" .\n", + "_:c14n2 \"1ST\" .\n", + "_:c14n2 \"N\" .\n", + "_:c14n2 \"N\" .\n" +] \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addBaseDocHMACCanon.json b/TestVectors/PseudonymHB/addBaseDocHMACCanon.json new file mode 100644 index 0000000..ac106fd --- /dev/null +++ b/TestVectors/PseudonymHB/addBaseDocHMACCanon.json @@ -0,0 +1,32 @@ +[ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:b0 .\n", + "_:b0 _:b2 .\n", + "_:b1 .\n", + "_:b1 .\n", + "_:b1 \"A license granting driving privileges in Utopia.\" .\n", + "_:b1 .\n", + "_:b1 \"Utopia Driver's License\" .\n", + "_:b1 _:b0 .\n", + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n", + "_:b1 .\n", + "_:b2 .\n", + "_:b2 \"1998-08-28\"^^ .\n", + "_:b2 \"542426814\" .\n", + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n", + "_:b2 \"TURNER\" .\n", + "_:b2 \"SUSAN\" .\n", + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n", + "_:b2 \"UADMV\" .\n", + "_:b2 \"UA\" .\n", + "_:b2 .\n", + "_:b2 \"2\"^^ .\n", + "_:b2 \"UTA\" .\n", + "_:b2 \"1ST\" .\n", + "_:b2 \"N\" .\n", + "_:b2 \"N\" .\n" +] \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addBaseTransform.json b/TestVectors/PseudonymHB/addBaseTransform.json new file mode 100644 index 0000000..c42c587 --- /dev/null +++ b/TestVectors/PseudonymHB/addBaseTransform.json @@ -0,0 +1,137 @@ +{ + "mandatoryPointers": [ + "/issuer", + "/expirationDate" + ], + "mandatory": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 1, + " \"Utopia Department of Motor Vehicles\" .\n" + ], + [ + 2, + " .\n" + ], + [ + 5, + "_:b1 .\n" + ], + [ + 6, + "_:b1 .\n" + ], + [ + 11, + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n" + ], + [ + 13, + "_:b1 .\n" + ] + ] + }, + "nonMandatory": { + "dataType": "Map", + "value": [ + [ + 3, + "_:b0 .\n" + ], + [ + 4, + "_:b0 _:b2 .\n" + ], + [ + 7, + "_:b1 \"A license granting driving privileges in Utopia.\" .\n" + ], + [ + 8, + "_:b1 .\n" + ], + [ + 9, + "_:b1 \"Utopia Driver's License\" .\n" + ], + [ + 10, + "_:b1 _:b0 .\n" + ], + [ + 12, + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n" + ], + [ + 14, + "_:b2 .\n" + ], + [ + 15, + "_:b2 \"1998-08-28\"^^ .\n" + ], + [ + 16, + "_:b2 \"542426814\" .\n" + ], + [ + 17, + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n" + ], + [ + 18, + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n" + ], + [ + 19, + "_:b2 \"TURNER\" .\n" + ], + [ + 20, + "_:b2 \"SUSAN\" .\n" + ], + [ + 21, + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n" + ], + [ + 22, + "_:b2 \"UADMV\" .\n" + ], + [ + 23, + "_:b2 \"UA\" .\n" + ], + [ + 24, + "_:b2 .\n" + ], + [ + 25, + "_:b2 \"2\"^^ .\n" + ], + [ + 26, + "_:b2 \"UTA\" .\n" + ], + [ + 27, + "_:b2 \"1ST\" .\n" + ], + [ + 28, + "_:b2 \"N\" .\n" + ], + [ + 29, + "_:b2 \"N\" .\n" + ] + ] + }, + "hmacKeyString": "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addHashData.json b/TestVectors/PseudonymHB/addHashData.json new file mode 100644 index 0000000..8364551 --- /dev/null +++ b/TestVectors/PseudonymHB/addHashData.json @@ -0,0 +1,4 @@ +{ + "proofHash": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf", + "mandatoryHash": "8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb" +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addProofConfig.json b/TestVectors/PseudonymHB/addProofConfig.json new file mode 100644 index 0000000..b613872 --- /dev/null +++ b/TestVectors/PseudonymHB/addProofConfig.json @@ -0,0 +1,13 @@ +{ + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/security/data-integrity/v2", + "https://w3id.org/vdl/v1", + "https://w3id.org/vdl/aamva/v1" + ] +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addProofConfigCanon.txt b/TestVectors/PseudonymHB/addProofConfigCanon.txt new file mode 100644 index 0000000..c8e9741 --- /dev/null +++ b/TestVectors/PseudonymHB/addProofConfigCanon.txt @@ -0,0 +1,5 @@ +_:c14n0 "2023-08-15T23:36:38Z"^^ . +_:c14n0 . +_:c14n0 "bbs-2023"^^ . +_:c14n0 . +_:c14n0 . diff --git a/TestVectors/PseudonymHB/addRawBaseSignatureInfo.json b/TestVectors/PseudonymHB/addRawBaseSignatureInfo.json new file mode 100644 index 0000000..27953ef --- /dev/null +++ b/TestVectors/PseudonymHB/addRawBaseSignatureInfo.json @@ -0,0 +1,12 @@ +{ + "bbsSignature": "9251f497cb002c19f959a760fa24c5e961df9cb8ff5fbaaef14f2b7f1f41649990c30bd8c1d373e878a5d120123d658a326141275eee7833352d611cc1c05175c9c0f0ddeb0fdec09ad1bfad8796e410", + "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb", + "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f", + "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "mandatoryPointers": [ + "/issuer", + "/expirationDate" + ], + "signerNymEntropyHex": "25555cf635188a1c33989056f5129e6ab4be0e7c5cc588c48d308e0254eed140", + "featureOption": "holder_binding_pseudonym" +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/addSignedSDBase.json b/TestVectors/PseudonymHB/addSignedSDBase.json new file mode 100644 index 0000000..dc5aec4 --- /dev/null +++ b/TestVectors/PseudonymHB/addSignedSDBase.json @@ -0,0 +1,73 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/security/data-integrity/v2", + "https://w3id.org/vdl/v1", + "https://w3id.org/vdl/aamva/v1" + ], + "type": [ + "VerifiableCredential", + "Iso18013DriversLicenseCredential" + ], + "issuer": { + "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5", + "name": "Utopia Department of Motor Vehicles", + "url": "https://dmv.utopia.example/", + "image": "https://dmv.utopia.example/logo.png" + }, + "issuanceDate": "2023-11-15T10:00:00-07:00", + "expirationDate": "2028-11-15T12:00:00-06:00", + "name": "Utopia Driver's License", + "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC", + "description": "A license granting driving privileges in Utopia.", + "credentialSubject": { + "type": "LicensedDriver", + "driversLicense": { + "type": "Iso18013DriversLicense", + "document_number": "542426814", + "family_name": "TURNER", + "given_name": "SUSAN", + "portrait": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==", + "birth_date": "1998-08-28", + "issue_date": "2023-01-15T10:00:00-07:00", + "expiry_date": "2028-08-27T12:00:00-06:00", + "issuing_country": "UA", + "issuing_authority": "UADMV", + "driving_privileges": [ + { + "codes": [ + { + "code": "D" + } + ], + "vehicle_category_code": "D", + "issue_date": "2019-01-01", + "expiry_date": "2027-01-01" + }, + { + "codes": [ + { + "code": "C" + } + ], + "vehicle_category_code": "C", + "issue_date": "2019-01-01", + "expiry_date": "2017-01-01" + } + ], + "un_distinguishing_sign": "UTA", + "aamva_aka_suffix": "1ST", + "sex": 2, + "aamva_family_name_truncation": "N", + "aamva_given_name_truncation": "N" + } + }, + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0IhlhQklH0l8sALBn5Wadg-iTF6WHfnLj_X7qu8U8rfx9BZJmQwwvYwdNz6Hil0SASPWWKMmFBJ17ueDM1LWEcwcBRdcnA8N3rD97AmtG_rYeW5BBYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjuoRLATYnhM4gPlnZuuuc2k_dfG7y7qkc9wGJUvexPtYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-CZy9pc3N1ZXJvL2V4cGlyYXRpb25EYXRlwlggJVVc9jUYihwzmJBW9RKearS-DnxcxYjEjTCOAlTu0UA" + } +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/commitmentInfo.json b/TestVectors/PseudonymHB/commitmentInfo.json new file mode 100644 index 0000000..e23e8b4 --- /dev/null +++ b/TestVectors/PseudonymHB/commitmentInfo.json @@ -0,0 +1,4 @@ +{ + "secretProverBlind": "0d215067232c77c94a7572eb80794592090da8aff35cca53d2d528d059e70fce", + "commitmentWithProof": "ab72f3e6d7a4185d100ede6ce7dde1c69db9a2128ad11d1b6991a018c340ca2672d7be636f153398be50f44ee434edf14322dd115f7527e770a0f0c41d8aeb2088d004f2703548db6ce15e2505368a1f686f20702aa9ff46bce301330ea0c4c16ef4d8bbf624064a60df3a563142d7b236cad6cf6bcf1f3694d0bf4c2b5ffce55bb26abc05e31f9aaf8b60674fefe02666f89c150c479694f4a89a9088b28a1e6e2cf0c2caaa01810d2e3a52853f3a2a" +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedAdjIndexes.json b/TestVectors/PseudonymHB/derivedAdjIndexes.json new file mode 100644 index 0000000..dbad924 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedAdjIndexes.json @@ -0,0 +1 @@ +{"adjMandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16]} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedAllGroupData.json b/TestVectors/PseudonymHB/derivedAllGroupData.json new file mode 100644 index 0000000..d0ff9d3 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedAllGroupData.json @@ -0,0 +1,758 @@ +{ + "groups": { + "mandatory": { + "matching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 1, + " \"Utopia Department of Motor Vehicles\" .\n" + ], + [ + 2, + " .\n" + ], + [ + 5, + "_:b1 .\n" + ], + [ + 6, + "_:b1 .\n" + ], + [ + 11, + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n" + ], + [ + 13, + "_:b1 .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 3, + "_:b0 .\n" + ], + [ + 4, + "_:b0 _:b2 .\n" + ], + [ + 7, + "_:b1 \"A license granting driving privileges in Utopia.\" .\n" + ], + [ + 8, + "_:b1 .\n" + ], + [ + 9, + "_:b1 \"Utopia Driver's License\" .\n" + ], + [ + 10, + "_:b1 _:b0 .\n" + ], + [ + 12, + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n" + ], + [ + 14, + "_:b2 .\n" + ], + [ + 15, + "_:b2 \"1998-08-28\"^^ .\n" + ], + [ + 16, + "_:b2 \"542426814\" .\n" + ], + [ + 17, + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n" + ], + [ + 18, + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n" + ], + [ + 19, + "_:b2 \"TURNER\" .\n" + ], + [ + 20, + "_:b2 \"SUSAN\" .\n" + ], + [ + 21, + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n" + ], + [ + 22, + "_:b2 \"UADMV\" .\n" + ], + [ + 23, + "_:b2 \"UA\" .\n" + ], + [ + 24, + "_:b2 .\n" + ], + [ + 25, + "_:b2 \"2\"^^ .\n" + ], + [ + 26, + "_:b2 \"UTA\" .\n" + ], + [ + 27, + "_:b2 \"1ST\" .\n" + ], + [ + 28, + "_:b2 \"N\" .\n" + ], + [ + 29, + "_:b2 \"N\" .\n" + ] + ] + }, + "deskolemizedNQuads": [ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n" + ] + }, + "selective": { + "matching": { + "dataType": "Map", + "value": [ + [ + 3, + "_:b0 .\n" + ], + [ + 4, + "_:b0 _:b2 .\n" + ], + [ + 5, + "_:b1 .\n" + ], + [ + 6, + "_:b1 .\n" + ], + [ + 10, + "_:b1 _:b0 .\n" + ], + [ + 14, + "_:b2 .\n" + ], + [ + 17, + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n" + ], + [ + 23, + "_:b2 \"UA\" .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 1, + " \"Utopia Department of Motor Vehicles\" .\n" + ], + [ + 2, + " .\n" + ], + [ + 7, + "_:b1 \"A license granting driving privileges in Utopia.\" .\n" + ], + [ + 8, + "_:b1 .\n" + ], + [ + 9, + "_:b1 \"Utopia Driver's License\" .\n" + ], + [ + 11, + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n" + ], + [ + 12, + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n" + ], + [ + 13, + "_:b1 .\n" + ], + [ + 15, + "_:b2 \"1998-08-28\"^^ .\n" + ], + [ + 16, + "_:b2 \"542426814\" .\n" + ], + [ + 18, + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n" + ], + [ + 19, + "_:b2 \"TURNER\" .\n" + ], + [ + 20, + "_:b2 \"SUSAN\" .\n" + ], + [ + 21, + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n" + ], + [ + 22, + "_:b2 \"UADMV\" .\n" + ], + [ + 24, + "_:b2 .\n" + ], + [ + 25, + "_:b2 \"2\"^^ .\n" + ], + [ + 26, + "_:b2 \"UTA\" .\n" + ], + [ + 27, + "_:b2 \"1ST\" .\n" + ], + [ + 28, + "_:b2 \"N\" .\n" + ], + [ + 29, + "_:b2 \"N\" .\n" + ] + ] + }, + "deskolemizedNQuads": [ + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"UA\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n" + ] + }, + "combined": { + "matching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 1, + " \"Utopia Department of Motor Vehicles\" .\n" + ], + [ + 2, + " .\n" + ], + [ + 3, + "_:b0 .\n" + ], + [ + 4, + "_:b0 _:b2 .\n" + ], + [ + 5, + "_:b1 .\n" + ], + [ + 6, + "_:b1 .\n" + ], + [ + 10, + "_:b1 _:b0 .\n" + ], + [ + 11, + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n" + ], + [ + 13, + "_:b1 .\n" + ], + [ + 14, + "_:b2 .\n" + ], + [ + 17, + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n" + ], + [ + 23, + "_:b2 \"UA\" .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 7, + "_:b1 \"A license granting driving privileges in Utopia.\" .\n" + ], + [ + 8, + "_:b1 .\n" + ], + [ + 9, + "_:b1 \"Utopia Driver's License\" .\n" + ], + [ + 12, + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n" + ], + [ + 15, + "_:b2 \"1998-08-28\"^^ .\n" + ], + [ + 16, + "_:b2 \"542426814\" .\n" + ], + [ + 18, + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n" + ], + [ + 19, + "_:b2 \"TURNER\" .\n" + ], + [ + 20, + "_:b2 \"SUSAN\" .\n" + ], + [ + 21, + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n" + ], + [ + 22, + "_:b2 \"UADMV\" .\n" + ], + [ + 24, + "_:b2 .\n" + ], + [ + 25, + "_:b2 \"2\"^^ .\n" + ], + [ + 26, + "_:b2 \"UTA\" .\n" + ], + [ + 27, + "_:b2 \"1ST\" .\n" + ], + [ + 28, + "_:b2 \"N\" .\n" + ], + [ + 29, + "_:b2 \"N\" .\n" + ] + ] + }, + "deskolemizedNQuads": [ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"UA\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n" + ] + } + }, + "skolemized": { + "expanded": [ + { + "https://www.w3.org/2018/credentials#credentialSubject": [ + { + "https://w3id.org/vdl#license": [ + { + "https://w3id.org/vdl/aamva#akaSuffix": [ + { + "@value": "1ST" + } + ], + "https://w3id.org/vdl/aamva#familyNameTruncation": [ + { + "@value": "N" + } + ], + "https://w3id.org/vdl/aamva#givenNameTruncation": [ + { + "@value": "N" + } + ], + "https://w3id.org/vdl#birthDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "1998-08-28" + } + ], + "https://w3id.org/vdl#documentNumber": [ + { + "@value": "542426814" + } + ], + "https://w3id.org/vdl#drivingPrivileges": [ + { + "@type": "@json", + "@value": [ + { + "codes": [ + { + "code": "D" + } + ], + "vehicle_category_code": "D", + "issue_date": "2019-01-01", + "expiry_date": "2027-01-01" + }, + { + "codes": [ + { + "code": "C" + } + ], + "vehicle_category_code": "C", + "issue_date": "2019-01-01", + "expiry_date": "2017-01-01" + } + ] + } + ], + "https://w3id.org/vdl#expiryDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2028-08-27T12:00:00-06:00" + } + ], + "https://w3id.org/vdl#familyName": [ + { + "@value": "TURNER" + } + ], + "https://w3id.org/vdl#givenName": [ + { + "@value": "SUSAN" + } + ], + "https://w3id.org/vdl#issueDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2023-01-15T10:00:00-07:00" + } + ], + "https://w3id.org/vdl#issuingAuthority": [ + { + "@value": "UADMV" + } + ], + "https://w3id.org/vdl#issuingCountry": [ + { + "@value": "UA" + } + ], + "https://w3id.org/vdl#portrait": [ + { + "@id": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==" + } + ], + "https://w3id.org/vdl#sex": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#unsignedInt", + "@value": 2 + } + ], + "@type": [ + "https://w3id.org/vdl#Iso18013DriversLicense" + ], + "https://w3id.org/vdl#unDistinguishingSign": [ + { + "@value": "UTA" + } + ], + "@id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0" + } + ], + "@type": [ + "https://w3id.org/vdl#LicensedDriver" + ], + "@id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1" + } + ], + "https://schema.org/description": [ + { + "@value": "A license granting driving privileges in Utopia." + } + ], + "https://www.w3.org/2018/credentials#expirationDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2028-11-15T12:00:00-06:00" + } + ], + "https://schema.org/image": [ + { + "@id": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC" + } + ], + "https://www.w3.org/2018/credentials#issuanceDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2023-11-15T10:00:00-07:00" + } + ], + "https://www.w3.org/2018/credentials#issuer": [ + { + "@id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5", + "https://schema.org/image": [ + { + "@id": "https://dmv.utopia.example/logo.png" + } + ], + "https://schema.org/name": [ + { + "@value": "Utopia Department of Motor Vehicles" + } + ], + "https://schema.org/url": [ + { + "@id": "https://dmv.utopia.example/" + } + ] + } + ], + "https://schema.org/name": [ + { + "@value": "Utopia Driver's License" + } + ], + "@type": [ + "https://www.w3.org/2018/credentials#VerifiableCredential", + "https://w3id.org/vdl#Iso18013DriversLicenseCredential" + ], + "@id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2" + } + ], + "compact": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/security/data-integrity/v2", + "https://w3id.org/vdl/v1", + "https://w3id.org/vdl/aamva/v1" + ], + "id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2", + "type": [ + "VerifiableCredential", + "Iso18013DriversLicenseCredential" + ], + "description": "A license granting driving privileges in Utopia.", + "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC", + "name": "Utopia Driver's License", + "credentialSubject": { + "id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1", + "type": "LicensedDriver", + "driversLicense": { + "id": "urn:bnid:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0", + "type": "Iso18013DriversLicense", + "birth_date": "1998-08-28", + "document_number": "542426814", + "driving_privileges": [ + { + "codes": [ + { + "code": "D" + } + ], + "vehicle_category_code": "D", + "issue_date": "2019-01-01", + "expiry_date": "2027-01-01" + }, + { + "codes": [ + { + "code": "C" + } + ], + "vehicle_category_code": "C", + "issue_date": "2019-01-01", + "expiry_date": "2017-01-01" + } + ], + "expiry_date": "2028-08-27T12:00:00-06:00", + "family_name": "TURNER", + "given_name": "SUSAN", + "issue_date": "2023-01-15T10:00:00-07:00", + "issuing_authority": "UADMV", + "issuing_country": "UA", + "portrait": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==", + "sex": 2, + "un_distinguishing_sign": "UTA", + "aamva_aka_suffix": "1ST", + "aamva_family_name_truncation": "N", + "aamva_given_name_truncation": "N" + } + }, + "expirationDate": "2028-11-15T12:00:00-06:00", + "issuanceDate": "2023-11-15T10:00:00-07:00", + "issuer": { + "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5", + "image": "https://dmv.utopia.example/logo.png", + "name": "Utopia Department of Motor Vehicles", + "url": "https://dmv.utopia.example/" + } + } + }, + "deskolemizedNQuads": [ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"1998-08-28\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"542426814\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"2028-08-27T12:00:00-06:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"TURNER\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"SUSAN\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"2023-01-15T10:00:00-07:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"UADMV\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"UA\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"2\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"UTA\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"1ST\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"N\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 \"N\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"A license granting driving privileges in Utopia.\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"Utopia Driver's License\" .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 _:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1 .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 \"2023-11-15T10:00:00-07:00\"^^ .\n", + "_:_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2 .\n" + ], + "labelMap": { + "dataType": "Map", + "value": [ + [ + "_62f71133-fb12-4e90-bcdd-9629c4aee4c2_2", + "b1" + ], + [ + "_62f71133-fb12-4e90-bcdd-9629c4aee4c2_1", + "b0" + ], + [ + "_62f71133-fb12-4e90-bcdd-9629c4aee4c2_0", + "b2" + ] + ] + }, + "nquads": [ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:b0 .\n", + "_:b0 _:b2 .\n", + "_:b1 .\n", + "_:b1 .\n", + "_:b1 \"A license granting driving privileges in Utopia.\" .\n", + "_:b1 .\n", + "_:b1 \"Utopia Driver's License\" .\n", + "_:b1 _:b0 .\n", + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:b1 \"2023-11-15T10:00:00-07:00\"^^ .\n", + "_:b1 .\n", + "_:b2 .\n", + "_:b2 \"1998-08-28\"^^ .\n", + "_:b2 \"542426814\" .\n", + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:b2 \"2028-08-27T12:00:00-06:00\"^^ .\n", + "_:b2 \"TURNER\" .\n", + "_:b2 \"SUSAN\" .\n", + "_:b2 \"2023-01-15T10:00:00-07:00\"^^ .\n", + "_:b2 \"UADMV\" .\n", + "_:b2 \"UA\" .\n", + "_:b2 .\n", + "_:b2 \"2\"^^ .\n", + "_:b2 \"UTA\" .\n", + "_:b2 \"1ST\" .\n", + "_:b2 \"N\" .\n", + "_:b2 \"N\" .\n" + ] +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedDisclosureData.json b/TestVectors/PseudonymHB/derivedDisclosureData.json new file mode 100644 index 0000000..16c9d31 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedDisclosureData.json @@ -0,0 +1,9 @@ +{ + "bbsProof":"94752c678297191b42617aca412377d4a5b3d7872779ffea31e0b418f50e95056d923a97e8dc156edc2a3a3a54e7b27cafa26a989fc3e8a8bc7a08b84e706a1863bd06c396b973b1af0da4f6c20ea463e124d2ad97060a25ccc3ff695c71977ba2e83a6468205d9e0bfb756089ad40dededab480eeb13cf00265f49824c5f89e23ac48d07fa3164823741df5c066bdc31a231a7d4fecb75c912adb800b1efe8da3cd26805ffa56775b1c32da34e36e9716a4da909fa6803ca0aa2df2d82f697229ccb210503274d4d61c7386a44e9fb459c020fbcd62c7f437da8ffd5ea7e56d2c4e7d9c3f593b2a964346f24f71bec30a2c3ededa0bd3707e2e06cac2dddb66762135a229dc09b67fa61d690d33be78150bc60f3655ac1063f96d6fe95a260004c7bf9e924cc7439c6426f951d0cee963985557097788d2387b72c9aeb390f9a4fa4b519bc11ca81dfca8a4fd3c77805e1a0ef5c165b16c3cdc564e7a5593f0ddd0560f3514393c1b305d3950c29fbb72cc8b58979843cec768e9a77b14f70704771f877c49fc0d0d4ffbe3f0aaf8e472a83b14e32e46207d5012e79b9bcfc6197c858eb18ad97f589dddb5dc45e9ef65f482d3c07fbcbfef92bf293643539fffc94a8bc98b3b4dd3335bb8b248aa606a751330516f148211d5f2d513e02d45ec5a51add1f878948a673a0349d7cb4417b1f9c16945e1f607bdecf6ca3b96a64fb14ee1fc5dbecf751be23041df32842367285f2b3b02c13512c28c0e7671874699b9ff169e35f91debc796fd487d3e41dcc5f12949558f2705be3e8195d4c93a6c149dcb5f63e62d3ce0bf51034021251b74ed2a1186fd77741ce3bf51f57f19a9d4a9e6315a88024062269a9fec426a73199882113168573da451ca38aeacf28f7eef3892181f0bc511562fba00d035f608c4f85579fc9614618763fa4e6c2210184e12f83e1c22078dd4ca488de41dbf2c146a2e0c47137be7f006c6810f44746a819229349b50ca59a51f7c51bb62cacc1a1cc4a6f089680514d41800da57470ef275f390eb4a08db78789e71bd32bd8929961c9f79d1ca071a2608a393f162c2f644584473f11b41cc35c838f11fbd2adf47051829d378ac9dc151e64bc70cd21b2ea6bca3f77b9c2b35abcebb0ecbf1c09365a8e372a2fce74b97088c9e9505c5c0272a4d6959bec54911a99b6c8a1654395f0cd4e7d38d695ab45875ecc535439dde3fb3d4658d9ff9427d8e36d7bd19ea53fb875c4b138f6ffc06bfd496b1a744a63283ebc0fa34ea828d98", + "labelMap":{"dataType":"Map","value":[["c14n0","b1"],["c14n1","b2"],["c14n2","b0"]]}, + "mandatoryIndexes":[0,1,2,5,6,8,9],"adjSelectiveIndexes":[0,1,5,7,10,16], + "presentationHeader":{"0":17,"1":51,"2":119,"3":170}, + "pseudonym":"838607ff2c8dcb2a0740ef13c2c87418efb57559243232a69daf1e294dd092af833ad4df1e99e0034c737b932916f378", + "featureOption":"holder_binding_pseudonym", + "lengthBBSMessages":23 +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedGroupIndexes.json b/TestVectors/PseudonymHB/derivedGroupIndexes.json new file mode 100644 index 0000000..85504a2 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedGroupIndexes.json @@ -0,0 +1 @@ +{"combinedIndexes":[0,1,2,3,4,5,6,10,11,13,14,17,23],"mandatoryIndexes":[0,1,2,5,6,11,13],"nonMandatoryIndexes":[3,4,7,8,9,10,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"selectiveIndexes":[3,4,5,6,10,14,17,23]} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedRecoveredBaseData.json b/TestVectors/PseudonymHB/derivedRecoveredBaseData.json new file mode 100644 index 0000000..2254d78 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedRecoveredBaseData.json @@ -0,0 +1,12 @@ +{ + "bbsSignature": "9251f497cb002c19f959a760fa24c5e961df9cb8ff5fbaaef14f2b7f1f41649990c30bd8c1d373e878a5d120123d658a326141275eee7833352d611cc1c05175c9c0f0ddeb0fdec09ad1bfad8796e410", + "bbsHeader": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf8eea112c04d89e133880f96766ebae73693f75f1bbcbbaa473dc06254bdec4fb", + "publicKey": "a4ef1afa3da575496f122b9b78b8c24761531a8a093206ae7c45b80759c168ba4f7a260f9c3367b6c019b4677841104b10665edbe70ba3ebe7d9cfbffbf71eb016f70abfbb163317f372697dc63efd21fc55764f63926a8f02eaea325a2a888f", + "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "mandatoryPointers": [ + "/issuer", + "/expirationDate" + ], + "signerNymEntropy": "25555cf635188a1c33989056f5129e6ab4be0e7c5cc588c48d308e0254eed140", + "featureOption": "holder_binding_pseudonym" +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedRevealDocument.json b/TestVectors/PseudonymHB/derivedRevealDocument.json new file mode 100644 index 0000000..59ab59d --- /dev/null +++ b/TestVectors/PseudonymHB/derivedRevealDocument.json @@ -0,0 +1,56 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/security/data-integrity/v2", + "https://w3id.org/vdl/v1", + "https://w3id.org/vdl/aamva/v1" + ], + "type": [ + "VerifiableCredential", + "Iso18013DriversLicenseCredential" + ], + "issuer": { + "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5", + "name": "Utopia Department of Motor Vehicles", + "url": "https://dmv.utopia.example/", + "image": "https://dmv.utopia.example/logo.png" + }, + "expirationDate": "2028-11-15T12:00:00-06:00", + "credentialSubject": { + "type": "LicensedDriver", + "driversLicense": { + "type": "Iso18013DriversLicense", + "issuing_country": "UA", + "driving_privileges": [ + { + "codes": [ + { + "code": "D" + } + ], + "vehicle_category_code": "D", + "issue_date": "2019-01-01", + "expiry_date": "2027-01-01" + }, + { + "codes": [ + { + "code": "C" + } + ], + "vehicle_category_code": "C", + "issue_date": "2019-01-01", + "expiry_date": "2017-01-01" + } + ] + } + }, + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0Jh1kDkJR1LGeClxkbQmF6ykEjd9Sls9eHJ3n_6jHgtBj1DpUFbZI6l-jcFW7cKjo6VOeyfK-iapifw-iovHoIuE5wahhjvQbDlrlzsa8NpPbCDqRj4STSrZcGCiXMw_9pXHGXe6LoOmRoIF2eC_t1YImtQN7e2rSA7rE88AJl9JgkxfieI6xI0H-jFkgjdB31wGa9wxojGn1P7LdckSrbgAse_o2jzSaAX_pWd1scMto0426XFqTakJ-mgDygqi3y2C9pcinMshBQMnTU1hxzhqROn7RZwCD7zWLH9Dfaj_1ep-VtLE59nD9ZOyqWQ0byT3G-wwosPt7aC9Nwfi4GysLd22Z2ITWiKdwJtn-mHWkNM754FQvGDzZVrBBj-W1v6VomAATHv56STMdDnGQm-VHQzuljmFVXCXeI0jh7csmus5D5pPpLUZvBHKgd_Kik_Tx3gF4aDvXBZbFsPNxWTnpVk_Dd0FYPNRQ5PBswXTlQwp-7csyLWJeYQ87HaOmnexT3BwR3H4d8SfwNDU_74_Cq-ORyqDsU4y5GIH1QEuebm8_GGXyFjrGK2X9Ynd213EXp72X0gtPAf7y_75K_KTZDU5__yUqLyYs7TdMzW7iySKpganUTMFFvFIIR1fLVE-AtRexaUa3R-HiUimc6A0nXy0QXsfnBaUXh9ge97PbKO5amT7FO4fxdvs91G-IwQd8yhCNnKF8rOwLBNRLCjA52cYdGmbn_Fp41-R3rx5b9SH0-QdzF8SlJVY8nBb4-gZXUyTpsFJ3LX2PmLTzgv1EDQCElG3TtKhGG_Xd0HOO_UfV_GanUqeYxWogCQGImmp_sQmpzGZiCETFoVz2kUco4rqzyj37vOJIYHwvFEVYvugDQNfYIxPhVefyWFGGHY_pObCIQGE4S-D4cIgeN1MpIjeQdvywUai4MRxN75_AGxoEPRHRqgZIpNJtQylmlH3xRu2LKzBocxKbwiWgFFNQYANpXRw7ydfOQ60oI23h4nnG9Mr2JKZYcn3nRygcaJgijk_FiwvZEWERz8RtBzDXIOPEfvSrfRwUYKdN4rJ3BUeZLxwzSGy6mvKP3e5wrNavOuw7L8cCTZajjcqL850uXCIyelQXFwCcqTWlZvsVJEambbIoWVDlfDNTn041pWrRYdezFNUOd3j-z1GWNn_lCfY42170Z6lP7h1xLE49v_Aa_1Jaxp0SmMoPrwPo06oKNmKMAAQECAgCHAAECBQYICYYAAQUHChBEETN3qlgwg4YH_yyNyyoHQO8Twsh0GO-1dVkkMjKmna8eKU3Qkq-DOtTfHpngA0xze5MpFvN4Fw" + } +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/derivedUnsignedReveal.json b/TestVectors/PseudonymHB/derivedUnsignedReveal.json new file mode 100644 index 0000000..5419ca8 --- /dev/null +++ b/TestVectors/PseudonymHB/derivedUnsignedReveal.json @@ -0,0 +1,48 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://w3id.org/security/data-integrity/v2", + "https://w3id.org/vdl/v1", + "https://w3id.org/vdl/aamva/v1" + ], + "type": [ + "VerifiableCredential", + "Iso18013DriversLicenseCredential" + ], + "issuer": { + "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5", + "name": "Utopia Department of Motor Vehicles", + "url": "https://dmv.utopia.example/", + "image": "https://dmv.utopia.example/logo.png" + }, + "expirationDate": "2028-11-15T12:00:00-06:00", + "credentialSubject": { + "type": "LicensedDriver", + "driversLicense": { + "type": "Iso18013DriversLicense", + "issuing_country": "UA", + "driving_privileges": [ + { + "codes": [ + { + "code": "D" + } + ], + "vehicle_category_code": "D", + "issue_date": "2019-01-01", + "expiry_date": "2027-01-01" + }, + { + "codes": [ + { + "code": "C" + } + ], + "vehicle_category_code": "C", + "issue_date": "2019-01-01", + "expiry_date": "2017-01-01" + } + ] + } + } +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/nymSecret.json b/TestVectors/PseudonymHB/nymSecret.json new file mode 100644 index 0000000..36ff75b --- /dev/null +++ b/TestVectors/PseudonymHB/nymSecret.json @@ -0,0 +1 @@ +{"nymSecretHex":"f883d069aec1252f167b0880e8960d72fa2623e11b6967541a457aa5c3cb088"} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/verifyDerivedProofValue.json b/TestVectors/PseudonymHB/verifyDerivedProofValue.json new file mode 100644 index 0000000..7c2b0d1 --- /dev/null +++ b/TestVectors/PseudonymHB/verifyDerivedProofValue.json @@ -0,0 +1,34 @@ +{ + "bbsProof": "94752c678297191b42617aca412377d4a5b3d7872779ffea31e0b418f50e95056d923a97e8dc156edc2a3a3a54e7b27cafa26a989fc3e8a8bc7a08b84e706a1863bd06c396b973b1af0da4f6c20ea463e124d2ad97060a25ccc3ff695c71977ba2e83a6468205d9e0bfb756089ad40dededab480eeb13cf00265f49824c5f89e23ac48d07fa3164823741df5c066bdc31a231a7d4fecb75c912adb800b1efe8da3cd26805ffa56775b1c32da34e36e9716a4da909fa6803ca0aa2df2d82f697229ccb210503274d4d61c7386a44e9fb459c020fbcd62c7f437da8ffd5ea7e56d2c4e7d9c3f593b2a964346f24f71bec30a2c3ededa0bd3707e2e06cac2dddb66762135a229dc09b67fa61d690d33be78150bc60f3655ac1063f96d6fe95a260004c7bf9e924cc7439c6426f951d0cee963985557097788d2387b72c9aeb390f9a4fa4b519bc11ca81dfca8a4fd3c77805e1a0ef5c165b16c3cdc564e7a5593f0ddd0560f3514393c1b305d3950c29fbb72cc8b58979843cec768e9a77b14f70704771f877c49fc0d0d4ffbe3f0aaf8e472a83b14e32e46207d5012e79b9bcfc6197c858eb18ad97f589dddb5dc45e9ef65f482d3c07fbcbfef92bf293643539fffc94a8bc98b3b4dd3335bb8b248aa606a751330516f148211d5f2d513e02d45ec5a51add1f878948a673a0349d7cb4417b1f9c16945e1f607bdecf6ca3b96a64fb14ee1fc5dbecf751be23041df32842367285f2b3b02c13512c28c0e7671874699b9ff169e35f91debc796fd487d3e41dcc5f12949558f2705be3e8195d4c93a6c149dcb5f63e62d3ce0bf51034021251b74ed2a1186fd77741ce3bf51f57f19a9d4a9e6315a88024062269a9fec426a73199882113168573da451ca38aeacf28f7eef3892181f0bc511562fba00d035f608c4f85579fc9614618763fa4e6c2210184e12f83e1c22078dd4ca488de41dbf2c146a2e0c47137be7f006c6810f44746a819229349b50ca59a51f7c51bb62cacc1a1cc4a6f089680514d41800da57470ef275f390eb4a08db78789e71bd32bd8929961c9f79d1ca071a2608a393f162c2f644584473f11b41cc35c838f11fbd2adf47051829d378ac9dc151e64bc70cd21b2ea6bca3f77b9c2b35abcebb0ecbf1c09365a8e372a2fce74b97088c9e9505c5c0272a4d6959bec54911a99b6c8a1654395f0cd4e7d38d695ab45875ecc535439dde3fb3d4658d9ff9427d8e36d7bd19ea53fb875c4b138f6ffc06bfd496b1a744a63283ebc0fa34ea828d98", + "labelMap": [ + [ + "c14n0", + "b1" + ], + [ + "c14n1", + "b2" + ], + [ + "c14n2", + "b0" + ] + ], + "mandatoryIndexes": [ + 0, + 1, + 2, + 5, + 6, + 8, + 9 + ], + "adjSelectedIndexes": [ + 0, + 1, + 5, + 7, + 10, + 16 + ] +} \ No newline at end of file diff --git a/TestVectors/PseudonymHB/verifyNQuads.json b/TestVectors/PseudonymHB/verifyNQuads.json new file mode 100644 index 0000000..798743f --- /dev/null +++ b/TestVectors/PseudonymHB/verifyNQuads.json @@ -0,0 +1,15 @@ +[ + " .\n", + " \"Utopia Department of Motor Vehicles\" .\n", + " .\n", + "_:b0 .\n", + "_:b0 _:b2 .\n", + "_:b1 .\n", + "_:b1 .\n", + "_:b1 _:b0 .\n", + "_:b1 \"2028-11-15T12:00:00-06:00\"^^ .\n", + "_:b1 .\n", + "_:b2 .\n", + "_:b2 \"[{\\\"codes\\\":[{\\\"code\\\":\\\"D\\\"}],\\\"expiry_date\\\":\\\"2027-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"D\\\"},{\\\"codes\\\":[{\\\"code\\\":\\\"C\\\"}],\\\"expiry_date\\\":\\\"2017-01-01\\\",\\\"issue_date\\\":\\\"2019-01-01\\\",\\\"vehicle_category_code\\\":\\\"C\\\"}]\"^^ .\n", + "_:b2 \"UA\" .\n" +] \ No newline at end of file diff --git a/index.html b/index.html index 039d76f..4a1e587 100644 --- a/index.html +++ b/index.html @@ -3541,14 +3541,6 @@
    Pseudonym Base Proof
    Pseudonym Derived Proof
    -

    As explained in section , we use a mocked random number generation procedure and demonstrate the use of a @@ -3612,6 +3604,155 @@

    Pseudonym Derived Proof
    data-include-format="text">
    + +
    +

    Holder Binding and Pseudonym Feature

    +
    +
    Holder Secret and Prover Nym Commitment Generation
    +

    +The first steps in using the holder binding and pseudonym feature are +for +the holder to generate its secret |holder_secret| and |prover_nym| value and +then compute a +commitment with proof for this value according to the "Commitment" operation +from [[CFRG-Pseudonym-BBS-Signature]]. Example values and outputs of this procedure +are shown below. +

    +
    
    +            
    
    +            
    
    +            

    +The |holder_secret|, |prover_nym| and |secretProverBlind| are retained by the +holder and kept +secret. The |commitmentWithProof| value needs to be communicated to the issuer. +

    +
    +
    +
    Holder Binding and Pseudonym Base Proof
    +

    +The addition of a base proof under the pseudonym feature option begins +with the issuer receiving a |commitmentWithProof| value from the holder and +generating a cryptographically random value for |signer_nym_entropy|. +

    +
    
    +            

    +This example will make use of the same key material as shown in +, +the same unsigned document as shown in +, and the same +mandatory pointers as shown in +. This results in the +same canonical document as shown in +, +the same canonical HMAC document as shown in +, and the same "add +base transformation" as shown in +. +

    +

    +This example makes use of the same proof configuration as in +. +This results in the same canonical base proof as in +. +Combining this with the above assumptions leads to the same base hashes as in +. +

    +

    +Since |featureOption| is equal to `"holder_binding_pseudonym"`, the procedure of +section will produce the +output shown below. This makes use of the +signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the +inclusion of the |signer_nym_entropy| and |featureOption| values, as these +need to be communicated to the holder. +

    +
    
    +          

    +Finally, the values above are run through the algorithm of section +, producing the `proofValue` which is +used in the signed base document shown below. +

    +
    
    +          
    +
    +
    Holder Binding and Pseudonym Derived Proof
    +

    +As explained in section , we use a +mocked random number generation procedure and demonstrate the use of a +|presentationHeader|. The same |seed| and |presentationHeader| as given in + are used here. +

    +

    +To create a derived proof, a holder starts with a signed document +containing a base proof. The base document we will use for these test vectors is +from +, above. The first +step is to run the algorithm of Section to +recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, +|mandatoryPointers|, |signer_nym_entropy| and |featureOption|, as shown below. +

    +
    
    +          

    +Next the holder uses the the "Verification and Finalization" operation from +[[CFRG-Pseudonym-BBS-Signature]] to both verify the signature and compute the +|nym_secret| value. This operation uses the |holder_secret|, |prover_nym|, +|signer_nym_entropy|, and |secret_prover_blind| values amongst others. +

    +
    
    +          

    +Next, the holder needs to indicate what else, if anything, they wish to reveal +to the verifiers, by specifying JSON pointers for selective disclosure. In this +case, the holder reveals the same information as given in +. +This results in the same |revealDocument| +as shown in . +

    +Running yields the same information for +derived group indexes as shown in + and the same +adjusted mandatory and selective indexes as shown in +. +

    +

    +Within , we compute the |pseudonym| based on +the same |verfifier_id| shown in . +The final output of is shown below. Note +the inclusion of the computed |pseudonym| and the |featureOption| value. +

    +
    
    +          

    +Finally, using the disclosure data above with the algorithm of section +, we obtain the signed derived (reveal) +document shown below. +

    +
    
    +          
    +
    From bfd170739de6ad9cf9238c3bb884a488a47c4e67 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 18 Dec 2024 11:14:42 -0800 Subject: [PATCH 19/24] Test vector changes. Relabel Baseline Enhanced Example and group subsections. Add in simple baseline test vectors. --- TestVectors/prc/addBaseDocCanon.json | 26 + TestVectors/prc/addBaseDocHMACCanon.json | 26 + TestVectors/prc/addBaseTransform.json | 112 ++++ TestVectors/prc/addHashData.json | 4 + TestVectors/prc/addProofConfig.json | 11 + TestVectors/prc/addProofConfigCanon.txt | 5 + TestVectors/prc/addRawBaseSignatureInfo.json | 6 + TestVectors/prc/addSignedSDBase.json | 48 ++ TestVectors/prc/derivedAdjIndexes.json | 1 + TestVectors/prc/derivedAllGroupData.json | 583 ++++++++++++++++++ TestVectors/prc/derivedDisclosureData.json | 1 + TestVectors/prc/derivedGroupIndexes.json | 1 + TestVectors/prc/derivedRecoveredBaseData.json | 7 + TestVectors/prc/derivedRevealDocument.json | 31 + TestVectors/prc/derivedUnsignedReveal.json | 23 + TestVectors/prc/verifyDerivedProofValue.json | 27 + TestVectors/prc/verifyNQuads.json | 12 + index.html | 33 +- 18 files changed, 942 insertions(+), 15 deletions(-) create mode 100644 TestVectors/prc/addBaseDocCanon.json create mode 100644 TestVectors/prc/addBaseDocHMACCanon.json create mode 100644 TestVectors/prc/addBaseTransform.json create mode 100644 TestVectors/prc/addHashData.json create mode 100644 TestVectors/prc/addProofConfig.json create mode 100644 TestVectors/prc/addProofConfigCanon.txt create mode 100644 TestVectors/prc/addRawBaseSignatureInfo.json create mode 100644 TestVectors/prc/addSignedSDBase.json create mode 100644 TestVectors/prc/derivedAdjIndexes.json create mode 100644 TestVectors/prc/derivedAllGroupData.json create mode 100644 TestVectors/prc/derivedDisclosureData.json create mode 100644 TestVectors/prc/derivedGroupIndexes.json create mode 100644 TestVectors/prc/derivedRecoveredBaseData.json create mode 100644 TestVectors/prc/derivedRevealDocument.json create mode 100644 TestVectors/prc/derivedUnsignedReveal.json create mode 100644 TestVectors/prc/verifyDerivedProofValue.json create mode 100644 TestVectors/prc/verifyNQuads.json diff --git a/TestVectors/prc/addBaseDocCanon.json b/TestVectors/prc/addBaseDocCanon.json new file mode 100644 index 0000000..34d6b44 --- /dev/null +++ b/TestVectors/prc/addBaseDocCanon.json @@ -0,0 +1,26 @@ +[ + " .\n", + "_:c14n0 .\n", + "_:c14n0 \"83627465\" .\n", + "_:c14n0 \"C09\" .\n", + "_:c14n0 \"999-999-999\" .\n", + "_:c14n1 .\n", + "_:c14n1 .\n", + "_:c14n1 \"1978-07-17\"^^ .\n", + "_:c14n1 \"SMITH\" .\n", + "_:c14n1 \"Female\" .\n", + "_:c14n1 \"JANE\" .\n", + "_:c14n1 .\n", + "_:c14n1 \"Arcadia\" .\n", + "_:c14n1 \"C1\" .\n", + "_:c14n1 _:c14n0 .\n", + "_:c14n1 \"2015-01-01\"^^ .\n", + "_:c14n2 .\n", + "_:c14n2 .\n", + "_:c14n2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:c14n2 \"Permanent Resident Card\" .\n", + "_:c14n2 _:c14n1 .\n", + "_:c14n2 .\n", + "_:c14n2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:c14n2 \"2025-12-16T23:59:59Z\"^^ .\n" +] \ No newline at end of file diff --git a/TestVectors/prc/addBaseDocHMACCanon.json b/TestVectors/prc/addBaseDocHMACCanon.json new file mode 100644 index 0000000..77e6d45 --- /dev/null +++ b/TestVectors/prc/addBaseDocHMACCanon.json @@ -0,0 +1,26 @@ +[ + " .\n", + "_:b0 .\n", + "_:b0 .\n", + "_:b0 \"1978-07-17\"^^ .\n", + "_:b0 \"SMITH\" .\n", + "_:b0 \"Female\" .\n", + "_:b0 \"JANE\" .\n", + "_:b0 .\n", + "_:b0 \"Arcadia\" .\n", + "_:b0 \"C1\" .\n", + "_:b0 _:b1 .\n", + "_:b0 \"2015-01-01\"^^ .\n", + "_:b1 .\n", + "_:b1 \"83627465\" .\n", + "_:b1 \"C09\" .\n", + "_:b1 \"999-999-999\" .\n", + "_:b2 .\n", + "_:b2 .\n", + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:b2 \"Permanent Resident Card\" .\n", + "_:b2 _:b0 .\n", + "_:b2 .\n", + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" +] \ No newline at end of file diff --git a/TestVectors/prc/addBaseTransform.json b/TestVectors/prc/addBaseTransform.json new file mode 100644 index 0000000..42c5871 --- /dev/null +++ b/TestVectors/prc/addBaseTransform.json @@ -0,0 +1,112 @@ +{ + "mandatoryPointers": [ + "/issuer" + ], + "mandatory": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 16, + "_:b2 .\n" + ], + [ + 17, + "_:b2 .\n" + ], + [ + 21, + "_:b2 .\n" + ] + ] + }, + "nonMandatory": { + "dataType": "Map", + "value": [ + [ + 1, + "_:b0 .\n" + ], + [ + 2, + "_:b0 .\n" + ], + [ + 3, + "_:b0 \"1978-07-17\"^^ .\n" + ], + [ + 4, + "_:b0 \"SMITH\" .\n" + ], + [ + 5, + "_:b0 \"Female\" .\n" + ], + [ + 6, + "_:b0 \"JANE\" .\n" + ], + [ + 7, + "_:b0 .\n" + ], + [ + 8, + "_:b0 \"Arcadia\" .\n" + ], + [ + 9, + "_:b0 \"C1\" .\n" + ], + [ + 10, + "_:b0 _:b1 .\n" + ], + [ + 11, + "_:b0 \"2015-01-01\"^^ .\n" + ], + [ + 12, + "_:b1 .\n" + ], + [ + 13, + "_:b1 \"83627465\" .\n" + ], + [ + 14, + "_:b1 \"C09\" .\n" + ], + [ + 15, + "_:b1 \"999-999-999\" .\n" + ], + [ + 18, + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + ], + [ + 19, + "_:b2 \"Permanent Resident Card\" .\n" + ], + [ + 20, + "_:b2 _:b0 .\n" + ], + [ + 22, + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n" + ], + [ + 23, + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + ] + }, + "hmacKeyString": "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" +} \ No newline at end of file diff --git a/TestVectors/prc/addHashData.json b/TestVectors/prc/addHashData.json new file mode 100644 index 0000000..f418485 --- /dev/null +++ b/TestVectors/prc/addHashData.json @@ -0,0 +1,4 @@ +{ + "proofHash": "3a5bbf25d34d90b18c35cd2357be6a6f42301e94fc9e52f77e93b773c5614bdf", + "mandatoryHash": "8e7cc22c318dd2094e02d0bf06c5d73a5dba717611a40f6d1bedc5ea7c300fd6" +} \ No newline at end of file diff --git a/TestVectors/prc/addProofConfig.json b/TestVectors/prc/addProofConfig.json new file mode 100644 index 0000000..48ef16e --- /dev/null +++ b/TestVectors/prc/addProofConfig.json @@ -0,0 +1,11 @@ +{ + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ] +} \ No newline at end of file diff --git a/TestVectors/prc/addProofConfigCanon.txt b/TestVectors/prc/addProofConfigCanon.txt new file mode 100644 index 0000000..c8e9741 --- /dev/null +++ b/TestVectors/prc/addProofConfigCanon.txt @@ -0,0 +1,5 @@ +_:c14n0 "2023-08-15T23:36:38Z"^^ . +_:c14n0 . +_:c14n0 "bbs-2023"^^ . +_:c14n0 . +_:c14n0 . diff --git a/TestVectors/prc/addRawBaseSignatureInfo.json b/TestVectors/prc/addRawBaseSignatureInfo.json new file mode 100644 index 0000000..68cb00e --- /dev/null +++ b/TestVectors/prc/addRawBaseSignatureInfo.json @@ -0,0 +1,6 @@ +{ + "bbsSignature": "b3c14b108412c77448f5967187343ebaf53e0788e0b9af6e72226e8189dbf54477f25ec2d24631f84298228ccc786a1033a5a7cb64294d6307414d562ae615e00f1b4e094dfb1643865e4f3ed8256fdd", + "mandatoryPointers": [ + "/issuer" + ] +} \ No newline at end of file diff --git a/TestVectors/prc/addSignedSDBase.json b/TestVectors/prc/addSignedSDBase.json new file mode 100644 index 0000000..57285f8 --- /dev/null +++ b/TestVectors/prc/addSignedSDBase.json @@ -0,0 +1,48 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ], + "type": [ + "VerifiableCredential", + "PermanentResidentCardCredential" + ], + "issuer": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + }, + "name": "Permanent Resident Card", + "description": "Government of Utopia Permanent Resident Card.", + "credentialSubject": { + "type": [ + "PermanentResident", + "Person" + ], + "givenName": "JANE", + "familyName": "SMITH", + "gender": "Female", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4v43hPwAHIgK1v4tX6wAAAABJRU5ErkJggg==", + "residentSince": "2015-01-01", + "commuterClassification": "C1", + "birthCountry": "Arcadia", + "birthDate": "1978-07-17", + "permanentResidentCard": { + "type": [ + "PermanentResidentCard" + ], + "identifier": "83627465", + "lprCategory": "C09", + "lprNumber": "999-999-999" + } + }, + "validFrom": "2024-12-16T00:00:00Z", + "validUntil": "2025-12-16T23:59:59Z", + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQs8FLEIQSx3RI9ZZxhzQ-uvU-B4jgua9uciJugYnb9UR38l7C0kYx-EKYIozMeGoQM6Wny2QpTWMHQU1WKuYV4A8bTglN-xZDhl5PPtglb91YQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjnzCLDGN0glOAtC_BsXXOl26cXYRpA9tG-3F6nwwD9ZYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-BZy9pc3N1ZXI" + } +} \ No newline at end of file diff --git a/TestVectors/prc/derivedAdjIndexes.json b/TestVectors/prc/derivedAdjIndexes.json new file mode 100644 index 0000000..98cc79a --- /dev/null +++ b/TestVectors/prc/derivedAdjIndexes.json @@ -0,0 +1 @@ +{"adjMandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19]} \ No newline at end of file diff --git a/TestVectors/prc/derivedAllGroupData.json b/TestVectors/prc/derivedAllGroupData.json new file mode 100644 index 0000000..e155630 --- /dev/null +++ b/TestVectors/prc/derivedAllGroupData.json @@ -0,0 +1,583 @@ +{ + "groups": { + "selective": { + "matching": { + "dataType": "Map", + "value": [ + [ + 1, + "_:b0 .\n" + ], + [ + 2, + "_:b0 .\n" + ], + [ + 8, + "_:b0 \"Arcadia\" .\n" + ], + [ + 16, + "_:b2 .\n" + ], + [ + 17, + "_:b2 .\n" + ], + [ + 20, + "_:b2 _:b0 .\n" + ], + [ + 22, + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n" + ], + [ + 23, + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 3, + "_:b0 \"1978-07-17\"^^ .\n" + ], + [ + 4, + "_:b0 \"SMITH\" .\n" + ], + [ + 5, + "_:b0 \"Female\" .\n" + ], + [ + 6, + "_:b0 \"JANE\" .\n" + ], + [ + 7, + "_:b0 .\n" + ], + [ + 9, + "_:b0 \"C1\" .\n" + ], + [ + 10, + "_:b0 _:b1 .\n" + ], + [ + 11, + "_:b0 \"2015-01-01\"^^ .\n" + ], + [ + 12, + "_:b1 .\n" + ], + [ + 13, + "_:b1 \"83627465\" .\n" + ], + [ + 14, + "_:b1 \"C09\" .\n" + ], + [ + 15, + "_:b1 \"999-999-999\" .\n" + ], + [ + 18, + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + ], + [ + 19, + "_:b2 \"Permanent Resident Card\" .\n" + ], + [ + 21, + "_:b2 .\n" + ] + ] + }, + "deskolemizedNQuads": [ + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + }, + "mandatory": { + "matching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 16, + "_:b2 .\n" + ], + [ + 17, + "_:b2 .\n" + ], + [ + 21, + "_:b2 .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 1, + "_:b0 .\n" + ], + [ + 2, + "_:b0 .\n" + ], + [ + 3, + "_:b0 \"1978-07-17\"^^ .\n" + ], + [ + 4, + "_:b0 \"SMITH\" .\n" + ], + [ + 5, + "_:b0 \"Female\" .\n" + ], + [ + 6, + "_:b0 \"JANE\" .\n" + ], + [ + 7, + "_:b0 .\n" + ], + [ + 8, + "_:b0 \"Arcadia\" .\n" + ], + [ + 9, + "_:b0 \"C1\" .\n" + ], + [ + 10, + "_:b0 _:b1 .\n" + ], + [ + 11, + "_:b0 \"2015-01-01\"^^ .\n" + ], + [ + 12, + "_:b1 .\n" + ], + [ + 13, + "_:b1 \"83627465\" .\n" + ], + [ + 14, + "_:b1 \"C09\" .\n" + ], + [ + 15, + "_:b1 \"999-999-999\" .\n" + ], + [ + 18, + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + ], + [ + 19, + "_:b2 \"Permanent Resident Card\" .\n" + ], + [ + 20, + "_:b2 _:b0 .\n" + ], + [ + 22, + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n" + ], + [ + 23, + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + ] + }, + "deskolemizedNQuads": [ + " .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n" + ] + }, + "combined": { + "matching": { + "dataType": "Map", + "value": [ + [ + 0, + " .\n" + ], + [ + 1, + "_:b0 .\n" + ], + [ + 2, + "_:b0 .\n" + ], + [ + 8, + "_:b0 \"Arcadia\" .\n" + ], + [ + 16, + "_:b2 .\n" + ], + [ + 17, + "_:b2 .\n" + ], + [ + 20, + "_:b2 _:b0 .\n" + ], + [ + 21, + "_:b2 .\n" + ], + [ + 22, + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n" + ], + [ + 23, + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + ] + }, + "nonMatching": { + "dataType": "Map", + "value": [ + [ + 3, + "_:b0 \"1978-07-17\"^^ .\n" + ], + [ + 4, + "_:b0 \"SMITH\" .\n" + ], + [ + 5, + "_:b0 \"Female\" .\n" + ], + [ + 6, + "_:b0 \"JANE\" .\n" + ], + [ + 7, + "_:b0 .\n" + ], + [ + 9, + "_:b0 \"C1\" .\n" + ], + [ + 10, + "_:b0 _:b1 .\n" + ], + [ + 11, + "_:b0 \"2015-01-01\"^^ .\n" + ], + [ + 12, + "_:b1 .\n" + ], + [ + 13, + "_:b1 \"83627465\" .\n" + ], + [ + 14, + "_:b1 \"C09\" .\n" + ], + [ + 15, + "_:b1 \"999-999-999\" .\n" + ], + [ + 18, + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + ], + [ + 19, + "_:b2 \"Permanent Resident Card\" .\n" + ] + ] + }, + "deskolemizedNQuads": [ + " .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] + } + }, + "skolemized": { + "expanded": [ + { + "https://www.w3.org/2018/credentials#credentialSubject": [ + { + "https://w3id.org/citizenship#birthCountry": [ + { + "@value": "Arcadia" + } + ], + "https://schema.org/birthDate": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "1978-07-17" + } + ], + "https://w3id.org/citizenship#commuterClassification": [ + { + "@value": "C1" + } + ], + "https://schema.org/familyName": [ + { + "@value": "SMITH" + } + ], + "https://schema.org/gender": [ + { + "@value": "Female" + } + ], + "https://schema.org/givenName": [ + { + "@value": "JANE" + } + ], + "https://schema.org/image": [ + { + "@id": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4v43hPwAHIgK1v4tX6wAAAABJRU5ErkJggg==" + } + ], + "https://w3id.org/citizenship#permanentResidentCard": [ + { + "https://schema.org/identifier": [ + { + "@value": "83627465" + } + ], + "https://w3id.org/citizenship#lprCategory": [ + { + "@value": "C09" + } + ], + "https://w3id.org/citizenship#lprNumber": [ + { + "@value": "999-999-999" + } + ], + "@type": [ + "https://w3id.org/citizenship#PermanentResidentCard" + ], + "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_0" + } + ], + "https://w3id.org/citizenship#residentSince": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2015-01-01" + } + ], + "@type": [ + "https://w3id.org/citizenship#PermanentResident", + "https://schema.org/Person" + ], + "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_1" + } + ], + "https://schema.org/description": [ + { + "@value": "Government of Utopia Permanent Resident Card." + } + ], + "https://www.w3.org/2018/credentials#issuer": [ + { + "@id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "https://schema.org/image": [ + { + "@id": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + } + ] + } + ], + "https://schema.org/name": [ + { + "@value": "Permanent Resident Card" + } + ], + "@type": [ + "https://www.w3.org/2018/credentials#VerifiableCredential", + "https://w3id.org/citizenship#PermanentResidentCardCredential" + ], + "https://www.w3.org/2018/credentials#validFrom": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2024-12-16T00:00:00Z" + } + ], + "https://www.w3.org/2018/credentials#validUntil": [ + { + "@type": "http://www.w3.org/2001/XMLSchema#dateTime", + "@value": "2025-12-16T23:59:59Z" + } + ], + "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_2" + } + ], + "compact": { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ], + "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_2", + "type": [ + "VerifiableCredential", + "PermanentResidentCardCredential" + ], + "description": "Government of Utopia Permanent Resident Card.", + "name": "Permanent Resident Card", + "credentialSubject": { + "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_1", + "type": [ + "PermanentResident", + "Person" + ], + "birthDate": "1978-07-17", + "familyName": "SMITH", + "gender": "Female", + "givenName": "JANE", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4v43hPwAHIgK1v4tX6wAAAABJRU5ErkJggg==", + "birthCountry": "Arcadia", + "commuterClassification": "C1", + "permanentResidentCard": { + "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_0", + "type": "PermanentResidentCard", + "identifier": "83627465", + "lprCategory": "C09", + "lprNumber": "999-999-999" + }, + "residentSince": "2015-01-01" + }, + "issuer": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + }, + "validFrom": "2024-12-16T00:00:00Z", + "validUntil": "2025-12-16T23:59:59Z" + } + }, + "deskolemizedNQuads": [ + " .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"83627465\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"C09\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"999-999-999\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"1978-07-17\"^^ .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"SMITH\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Female\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"JANE\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"C1\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 _:_5b442c70-954c-431b-8eb0-5e789d95558d_0 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"2015-01-01\"^^ .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"Permanent Resident Card\" .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + ], + "labelMap": { + "dataType": "Map", + "value": [ + [ + "_5b442c70-954c-431b-8eb0-5e789d95558d_0", + "b1" + ], + [ + "_5b442c70-954c-431b-8eb0-5e789d95558d_1", + "b0" + ], + [ + "_5b442c70-954c-431b-8eb0-5e789d95558d_2", + "b2" + ] + ] + }, + "nquads": [ + " .\n", + "_:b0 .\n", + "_:b0 .\n", + "_:b0 \"1978-07-17\"^^ .\n", + "_:b0 \"SMITH\" .\n", + "_:b0 \"Female\" .\n", + "_:b0 \"JANE\" .\n", + "_:b0 .\n", + "_:b0 \"Arcadia\" .\n", + "_:b0 \"C1\" .\n", + "_:b0 _:b1 .\n", + "_:b0 \"2015-01-01\"^^ .\n", + "_:b1 .\n", + "_:b1 \"83627465\" .\n", + "_:b1 \"C09\" .\n", + "_:b1 \"999-999-999\" .\n", + "_:b2 .\n", + "_:b2 .\n", + "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:b2 \"Permanent Resident Card\" .\n", + "_:b2 _:b0 .\n", + "_:b2 .\n", + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" + ] +} \ No newline at end of file diff --git a/TestVectors/prc/derivedDisclosureData.json b/TestVectors/prc/derivedDisclosureData.json new file mode 100644 index 0000000..ffb7c44 --- /dev/null +++ b/TestVectors/prc/derivedDisclosureData.json @@ -0,0 +1 @@ +{"bbsProof":"88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76","labelMap":{"dataType":"Map","value":[["c14n0","b0"],["c14n1","b2"]]},"mandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19],"presentationHeader":{"0":17,"1":51,"2":119,"3":170}} \ No newline at end of file diff --git a/TestVectors/prc/derivedGroupIndexes.json b/TestVectors/prc/derivedGroupIndexes.json new file mode 100644 index 0000000..65d4b05 --- /dev/null +++ b/TestVectors/prc/derivedGroupIndexes.json @@ -0,0 +1 @@ +{"combinedIndexes":[0,1,2,8,16,17,20,21,22,23],"mandatoryIndexes":[0,16,17,21],"nonMandatoryIndexes":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,22,23],"selectiveIndexes":[1,2,8,16,17,20,22,23]} \ No newline at end of file diff --git a/TestVectors/prc/derivedRecoveredBaseData.json b/TestVectors/prc/derivedRecoveredBaseData.json new file mode 100644 index 0000000..c310237 --- /dev/null +++ b/TestVectors/prc/derivedRecoveredBaseData.json @@ -0,0 +1,7 @@ +{ + "bbsSignature": "b3c14b108412c77448f5967187343ebaf53e0788e0b9af6e72226e8189dbf54477f25ec2d24631f84298228ccc786a1033a5a7cb64294d6307414d562ae615e00f1b4e094dfb1643865e4f3ed8256fdd", + "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", + "mandatoryPointers": [ + "/issuer" + ] +} \ No newline at end of file diff --git a/TestVectors/prc/derivedRevealDocument.json b/TestVectors/prc/derivedRevealDocument.json new file mode 100644 index 0000000..79e8b3d --- /dev/null +++ b/TestVectors/prc/derivedRevealDocument.json @@ -0,0 +1,31 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ], + "type": [ + "VerifiableCredential", + "PermanentResidentCardCredential" + ], + "issuer": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + }, + "validFrom": "2024-12-16T00:00:00Z", + "validUntil": "2025-12-16T23:59:59Z", + "credentialSubject": { + "type": [ + "PermanentResident", + "Person" + ], + "birthCountry": "Arcadia" + }, + "proof": { + "type": "DataIntegrityProof", + "cryptosuite": "bbs-2023", + "created": "2023-08-15T23:36:38Z", + "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0DhVkC0Ijffg2oSdpDAAaxIfdBZ43cQO7IlpZaU74Mplsfq2KJtEjgvuiEdPfPDiUrS-aUU61CwH7FzKvNkZjXkVPfxKInWqHtyRBvwFK82607ygGnHigsmwtoWHD4gDhPnpUq57MA8199hbuojdjz7TavC6OvotVNAPuVHmkvp7B4Gc0_ESBhjPzmY7_m4wPdtD1Clm5RZLm6suKvBFmhemrhsGlyQXPWs5dlC9o5gv6Wyu-bBiozlDCFGyGJPjABmevsuZQpPpEgD7yABZOgAYlJeZU7FblvQeuDspkyHNWjcvFbS-Ayhg-r1u3uQVPZCwtqQBApmxcOAzE7e4PTH5UeLACk5kqrh5NEGhtpCCIClFctc5S5PIRUuYhu9QIyFxl8sI-lPc0T3CxHn8XCj8_dbmEq9-qq70DAfn7bw94f3UkidZgUjsGzfvCmtdXop5Q0X1bv2JPezGKj3DOH8-4qRCJuxN3fR_hQ653EzeLw7ewOcbFCcWgJjZaDQ7L8QNb-fQcboe4c0fmX11ExNoXowZkMnne0loGXeS5yQTPww19PrNKqZr47LWZbPfaDqfoXDSWAdv9ddTSNB76N2FsJR1OAmGiBhBwm86u6_oAlItyRCpIN-XoytPdXDRNPD7m9RqPkBW5dJY3HrFdKSXkYUIBHo4OgTFRFJW6Bz5h8VIb5y7LjQjKJCheDsv3Wr2hfYz_asX4Vdvlg_HbjFHXZ5RIEKvkrx68VPMI0biv0pFfyY-kV9ViYE6zoTvL9g7lB6N2O6A-MUH5eK5iyjL7R3I9t_U9CxR29bQQu_xjcnIBpHSnEtXGroMGejc3nOrmjqm9wPLZmUoQWreFVHyc6lvWNgG4-87BgWS26ItowmScaBJRRYdnG6cZ4vOsg-LynCx8QdYbwKyvAnPkvAYLRM_Ao8l_iZAQYBZCvKjAhqFPyhJ3b_LQfT1KbTqBVoDxNdqIAAAEChAAEBQeGAAEHERITRBEzd6o" + } +} \ No newline at end of file diff --git a/TestVectors/prc/derivedUnsignedReveal.json b/TestVectors/prc/derivedUnsignedReveal.json new file mode 100644 index 0000000..dbbc4e8 --- /dev/null +++ b/TestVectors/prc/derivedUnsignedReveal.json @@ -0,0 +1,23 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ], + "type": [ + "VerifiableCredential", + "PermanentResidentCardCredential" + ], + "issuer": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + }, + "validFrom": "2024-12-16T00:00:00Z", + "validUntil": "2025-12-16T23:59:59Z", + "credentialSubject": { + "type": [ + "PermanentResident", + "Person" + ], + "birthCountry": "Arcadia" + } +} \ No newline at end of file diff --git a/TestVectors/prc/verifyDerivedProofValue.json b/TestVectors/prc/verifyDerivedProofValue.json new file mode 100644 index 0000000..efe8812 --- /dev/null +++ b/TestVectors/prc/verifyDerivedProofValue.json @@ -0,0 +1,27 @@ +{ + "bbsProof": "88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76", + "labelMap": [ + [ + "c14n0", + "b0" + ], + [ + "c14n1", + "b2" + ] + ], + "mandatoryIndexes": [ + 0, + 4, + 5, + 7 + ], + "adjSelectedIndexes": [ + 0, + 1, + 7, + 17, + 18, + 19 + ] +} \ No newline at end of file diff --git a/TestVectors/prc/verifyNQuads.json b/TestVectors/prc/verifyNQuads.json new file mode 100644 index 0000000..7bd9dda --- /dev/null +++ b/TestVectors/prc/verifyNQuads.json @@ -0,0 +1,12 @@ +[ + " .\n", + "_:b0 .\n", + "_:b0 .\n", + "_:b0 \"Arcadia\" .\n", + "_:b2 .\n", + "_:b2 .\n", + "_:b2 _:b0 .\n", + "_:b2 .\n", + "_:b2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:b2 \"2025-12-16T23:59:59Z\"^^ .\n" +] \ No newline at end of file diff --git a/index.html b/index.html index 4a1e587..00358a3 100644 --- a/index.html +++ b/index.html @@ -3015,7 +3015,9 @@

    External VC System Based Linkage

    Test Vectors

    -

    +

    +

    Baseline Enhanced Example

    +

    Demonstration of selective disclosure features including mandatory disclosure, selective disclosure, and overlap between those, requires an input credential document with more content than previous test @@ -3026,7 +3028,7 @@

    Test Vectors

    generated by the holder (derived proof).

    -

    Base Proof

    +
    Base Proof

    To add a selective disclosure base proof to a document, the issuer needs the following cryptographic key material: @@ -3148,7 +3150,7 @@

    Base Proof

    data-include-format="text">
    -

    Derived Proof

    +
    Derived Proof

    Random numbers are used, and an optional `presentationHeader` can be an input, for the creation of BBS proofs. To furnish a deterministic set of test @@ -3235,31 +3237,32 @@

    Derived Proof

    data-include="TestVectors/derivedRevealDocument.json" data-include-format="text">
    +
    +
    +

    Anonymous Holder Binding Feature

    -

    Anonymous Holder Binding Feature

    -
    -
    Holder Binding Commitment Generation
    -

    +

    Holder Binding Commitment Generation
    +

    The first steps in using the anonymous holder binding feature are for the holder to generate its |holderSecret| value and then compute a commitment with proof for this value according to the commitment computation procedure of [[CFRG-Blind-BBS-Signature]]. Example values and outputs of this procedure are shown below. -

    -
    +          
    
    -            
    
    -            

    +

    The |holderSecret| and |secretProverBlind| are retained by the holder and kept secret. The |commitmentWithProof| value needs to be communicated to the issuer. -

    -
    -
    -
    Holder Binding Base Proof
    +

    +
    +
    +
    Holder Binding Base Proof

    The addition of a base proof under the anonymous holder binding option begins with the issuer receiving a |commitmentWithProof| value from the holder and then From 96710a89e3621f1afed332fb6ce7884795092b36 Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Wed, 18 Dec 2024 11:34:24 -0800 Subject: [PATCH 20/24] Add descriptive text for Baseline Basic example. Add input files and pointer result file. --- TestVectors/prCredMandatory.json | 1 + TestVectors/prCredSelective.json | 1 + TestVectors/prCredUnsigned.json | 40 ++++ TestVectors/prc/addPointerValues.json | 9 + TestVectors/prc/derivedDisclosureData.json | 7 +- index.html | 211 +++++++++++++++++++++ 6 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 TestVectors/prCredMandatory.json create mode 100644 TestVectors/prCredSelective.json create mode 100644 TestVectors/prCredUnsigned.json create mode 100644 TestVectors/prc/addPointerValues.json diff --git a/TestVectors/prCredMandatory.json b/TestVectors/prCredMandatory.json new file mode 100644 index 0000000..841bfec --- /dev/null +++ b/TestVectors/prCredMandatory.json @@ -0,0 +1 @@ +["/issuer"] \ No newline at end of file diff --git a/TestVectors/prCredSelective.json b/TestVectors/prCredSelective.json new file mode 100644 index 0000000..54a805a --- /dev/null +++ b/TestVectors/prCredSelective.json @@ -0,0 +1 @@ +["/validFrom", "/validUntil", "/credentialSubject/birthCountry"] \ No newline at end of file diff --git a/TestVectors/prCredUnsigned.json b/TestVectors/prCredUnsigned.json new file mode 100644 index 0000000..b2431b4 --- /dev/null +++ b/TestVectors/prCredUnsigned.json @@ -0,0 +1,40 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/citizenship/v4rc1" + ], + "type": [ + "VerifiableCredential", + "PermanentResidentCardCredential" + ], + "issuer": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + }, + "name": "Permanent Resident Card", + "description": "Government of Utopia Permanent Resident Card.", + "credentialSubject": { + "type": [ + "PermanentResident", + "Person" + ], + "givenName": "JANE", + "familyName": "SMITH", + "gender": "Female", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4v43hPwAHIgK1v4tX6wAAAABJRU5ErkJggg==", + "residentSince": "2015-01-01", + "commuterClassification": "C1", + "birthCountry": "Arcadia", + "birthDate": "1978-07-17", + "permanentResidentCard": { + "type": [ + "PermanentResidentCard" + ], + "identifier": "83627465", + "lprCategory": "C09", + "lprNumber": "999-999-999" + } + }, + "validFrom": "2024-12-16T00:00:00Z", + "validUntil": "2025-12-16T23:59:59Z" +} \ No newline at end of file diff --git a/TestVectors/prc/addPointerValues.json b/TestVectors/prc/addPointerValues.json new file mode 100644 index 0000000..64d026a --- /dev/null +++ b/TestVectors/prc/addPointerValues.json @@ -0,0 +1,9 @@ +[ + { + "pointer": "/issuer", + "value": { + "id": "did:key:zDnaeTHxNEBZoKaEo6PdA83fq98ebiFvo3X273Ydu4YmV96rg", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" + } + } +] \ No newline at end of file diff --git a/TestVectors/prc/derivedDisclosureData.json b/TestVectors/prc/derivedDisclosureData.json index ffb7c44..e653054 100644 --- a/TestVectors/prc/derivedDisclosureData.json +++ b/TestVectors/prc/derivedDisclosureData.json @@ -1 +1,6 @@ -{"bbsProof":"88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76","labelMap":{"dataType":"Map","value":[["c14n0","b0"],["c14n1","b2"]]},"mandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19],"presentationHeader":{"0":17,"1":51,"2":119,"3":170}} \ No newline at end of file +{ + "bbsProof":"88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76", + "labelMap":{"dataType":"Map","value":[["c14n0","b0"],["c14n1","b2"]]}, + "mandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19], + "presentationHeader":{"0":17,"1":51,"2":119,"3":170} +} \ No newline at end of file diff --git a/index.html b/index.html index 00358a3..f0d7331 100644 --- a/index.html +++ b/index.html @@ -3015,6 +3015,217 @@

    External VC System Based Linkage

    Test Vectors

    +
    +

    Baseline Basic Example

    +

    +The starting document test +vector is based on a purely fictitious permanent resident card. In addition, +we break the test vectors into two groups, based on those +that would be generated by the issuer (base proof) and those that would be +generated by the holder (derived proof). +

    +
    +
    Base Proof
    +

    +To add a selective disclosure base proof to a document, the issuer needs +the following cryptographic key material: +

    +
      +
    1. +The issuer's private/public key pair, i.e., the key pair corresponding to the +verification method that will be part of the proof. +
    2. +
    3. +An HMAC key. This is used to randomize the order of the blank node IDs to avoid +potential information leakage via the blank node ID ordering. This is used only +once, and is shared between issuer and holder. The HMAC in this case is +functioning as a pseudorandom function (PRF). +
    4. +
    +

    +The key material used for generating the test vectors to test add base +proof is shown below. Hexadecimal representation is used for the BBS key +pairs and the HMAC key. +

    +
    +          
    +

    +In our scenario, a permanent resident credential is being issued. The unsigned +permanent resident document is shown below. +

    +
    
    +          

    +This mandatory information is specified via an array of JSON pointers +as shown below. +

    +
    
    +          

    +The result of applying the above JSON pointers to the document +is shown below. +

    +
    
    +          

    +Transformation of the unsigned document begins with canonicalizing the document, +as shown below. +

    +
    
    +          

    +To prevent possible information leakage from the ordering of the blank node IDs +these are processed through a PRF (i.e., the HMAC) to give the canonicalized HMAC +document shown below. This represents an ordered list of statements that will be +subject to mandatory and selective disclosure, i.e., it is from this list that +statements are grouped. +

    +
    
    +          

    +The above canonical document gets grouped into mandatory and non-mandatory +statements. The final output of the selective disclosure transformation process +is shown below. Each statement is now grouped as mandatory or non-mandatory, and +its index in the previous list of statements is remembered. +

    +
    
    +          

    +The next step is to create the base proof configuration and canonicalize it. +This is shown in the following two examples. +

    +
    
    +          
    
    +          

    +In the hashing step, we compute the SHA-256 hash of the canonicalized proof +options to produce the `proofHash`, and we compute the SHA-256 hash of the +join of all the mandatory N-Quads to produce the `mandatoryHash`. These are +shown below in hexadecimal format. +

    +
    
    +          

    +Shown below are the computed `bbsSignature` in hexadecimal, and the +`mandatoryPointers`. These are are fed to the final serialization step with the +`hmacKey`. +

    +
    
    +          

    +Finally, the values above are run through the algorithm of Section +, to produce the `proofValue` which is +used in the signed base document shown below. +

    +
    
    +        
    +
    +
    Derived Proof
    +

    +Random numbers are used, and an optional `presentationHeader` can be an input, +for the creation of BBS proofs. To furnish a deterministic set of test +vectors, we used the Mocked Random Scalars procedure from +[[CFRG-BBS-SIGNATURE]]. The `seed` and `presentationHeader` values we used for +generation of the derived proof test vectors are given in hex, below. +

    +
    
    +          

    +To create a derived proof, a holder starts with a signed document +containing a base proof. The base document we will use for these test vectors is +the final example from Section , above. The first +step is to run the algorithm of Section to +recover `bbsSignature`, `hmacKey`, and `mandatoryPointers`, as shown below. +

    +
    
    +          

    +Next, the holder needs to indicate what else, if anything, they wish to reveal +to the verifiers, by specifying JSON pointers for selective disclosure. These +are shown below. +

    +
    
    +          

    +To produce the `revealDocument` (i.e., the unsigned document that will +eventually be signed and sent to the verifier), we append the selective pointers +to the mandatory pointers, and input these combined pointers along with the +document without proof to the `selectJsonLd` algorithm of [[DI-ECDSA]], +to get the result shown below. +

    +
    
    +          

    +Now that we know what the revealed document looks like, we need to furnish +appropriately updated information to the verifier about which statements are +mandatory, and the indexes for the selected non-mandatory statements. Running +step 6 of the + yields an abundance of information about +various statement groups relative to the original document. Below we show a +portion of the indexes for those groups. +

    +
    
    +          

    +The verifier needs to be able to aggregate and hash the mandatory statements. To +enable this, we furnish them with a list of indexes of the mandatory statements +adjusted to their positions in the reveal document (i.e., relative to the +`combinedIndexes`), while the `selectiveIndexes` need to be adjusted relative to +their positions within the `nonMandatoryIndexes`. These "adjusted" indexes are +shown below. +

    +
    
    +
    +          

    +The last important piece of disclosure data is a mapping of canonical blank node +IDs to HMAC-based shuffled IDs, the `labelMap`, computed according to Section +. This is shown below along with +the rest of the disclosure data minus the reveal document. +

    +
    
    +          

    +Finally, using the disclosure data above with the algorithm of Section +, we obtain the signed derived (reveal) +document shown below. +

    +
    
    +        
    +
    +

    Baseline Enhanced Example

    From 6173c6e8d81a7352288db0a40d90db0ff778fc2a Mon Sep 17 00:00:00 2001 From: Wind4Greg Date: Thu, 19 Dec 2024 09:13:09 -0800 Subject: [PATCH 21/24] Update permanent resident card example input to improve wording of description field and regenerate derived test vectors. --- TestVectors/prc/addBaseDocCanon.json | 2 +- TestVectors/prc/addBaseDocHMACCanon.json | 2 +- TestVectors/prc/addBaseTransform.json | 2 +- TestVectors/prc/addRawBaseSignatureInfo.json | 2 +- TestVectors/prc/addSignedSDBase.json | 4 +- TestVectors/prc/derivedAllGroupData.json | 116 +++++++++--------- TestVectors/prc/derivedDisclosureData.json | 7 +- TestVectors/prc/derivedRecoveredBaseData.json | 2 +- TestVectors/prc/derivedRevealDocument.json | 2 +- TestVectors/prc/verifyDerivedProofValue.json | 2 +- 10 files changed, 68 insertions(+), 73 deletions(-) diff --git a/TestVectors/prc/addBaseDocCanon.json b/TestVectors/prc/addBaseDocCanon.json index 34d6b44..413f066 100644 --- a/TestVectors/prc/addBaseDocCanon.json +++ b/TestVectors/prc/addBaseDocCanon.json @@ -17,7 +17,7 @@ "_:c14n1 \"2015-01-01\"^^ .\n", "_:c14n2 .\n", "_:c14n2 .\n", - "_:c14n2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:c14n2 \"Permanent Resident Card from Government of Utopia.\" .\n", "_:c14n2 \"Permanent Resident Card\" .\n", "_:c14n2 _:c14n1 .\n", "_:c14n2 .\n", diff --git a/TestVectors/prc/addBaseDocHMACCanon.json b/TestVectors/prc/addBaseDocHMACCanon.json index 77e6d45..8aedc17 100644 --- a/TestVectors/prc/addBaseDocHMACCanon.json +++ b/TestVectors/prc/addBaseDocHMACCanon.json @@ -17,7 +17,7 @@ "_:b1 \"999-999-999\" .\n", "_:b2 .\n", "_:b2 .\n", - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n", "_:b2 \"Permanent Resident Card\" .\n", "_:b2 _:b0 .\n", "_:b2 .\n", diff --git a/TestVectors/prc/addBaseTransform.json b/TestVectors/prc/addBaseTransform.json index 42c5871..0420eee 100644 --- a/TestVectors/prc/addBaseTransform.json +++ b/TestVectors/prc/addBaseTransform.json @@ -88,7 +88,7 @@ ], [ 18, - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n" ], [ 19, diff --git a/TestVectors/prc/addRawBaseSignatureInfo.json b/TestVectors/prc/addRawBaseSignatureInfo.json index 68cb00e..419c06b 100644 --- a/TestVectors/prc/addRawBaseSignatureInfo.json +++ b/TestVectors/prc/addRawBaseSignatureInfo.json @@ -1,5 +1,5 @@ { - "bbsSignature": "b3c14b108412c77448f5967187343ebaf53e0788e0b9af6e72226e8189dbf54477f25ec2d24631f84298228ccc786a1033a5a7cb64294d6307414d562ae615e00f1b4e094dfb1643865e4f3ed8256fdd", + "bbsSignature": "86168dd2b5d0c7c6a56a30f4212ed116a53def05d0d6708207d483c7ff2053aefa22d24ba7659d60852694f8d85be0fa2adc3974c7dc4cc68b3db17b2423975047104162c24502b41591879ac24f1bb1", "mandatoryPointers": [ "/issuer" ] diff --git a/TestVectors/prc/addSignedSDBase.json b/TestVectors/prc/addSignedSDBase.json index 57285f8..d91b234 100644 --- a/TestVectors/prc/addSignedSDBase.json +++ b/TestVectors/prc/addSignedSDBase.json @@ -12,7 +12,7 @@ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P4z/DiPwAG0ALnwgz64QAAAABJRU5ErkJggg==" }, "name": "Permanent Resident Card", - "description": "Government of Utopia Permanent Resident Card.", + "description": "Permanent Resident Card from Government of Utopia.", "credentialSubject": { "type": [ "PermanentResident", @@ -43,6 +43,6 @@ "created": "2023-08-15T23:36:38Z", "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", "proofPurpose": "assertionMethod", - "proofValue": "u2V0ChVhQs8FLEIQSx3RI9ZZxhzQ-uvU-B4jgua9uciJugYnb9UR38l7C0kYx-EKYIozMeGoQM6Wny2QpTWMHQU1WKuYV4A8bTglN-xZDhl5PPtglb91YQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjnzCLDGN0glOAtC_BsXXOl26cXYRpA9tG-3F6nwwD9ZYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-BZy9pc3N1ZXI" + "proofValue": "u2V0ChVhQhhaN0rXQx8alajD0IS7RFqU97wXQ1nCCB9SDx_8gU676ItJLp2WdYIUmlPjYW-D6Ktw5dMfcTMaLPbF7JCOXUEcQQWLCRQK0FZGHmsJPG7FYQDpbvyXTTZCxjDXNI1e-am9CMB6U_J5S936Tt3PFYUvfjnzCLDGN0glOAtC_BsXXOl26cXYRpA9tG-3F6nwwD9ZYYKTvGvo9pXVJbxIrm3i4wkdhUxqKCTIGrnxFuAdZwWi6T3omD5wzZ7bAGbRneEEQSxBmXtvnC6Pr59nPv_v3HrAW9wq_uxYzF_NyaX3GPv0h_FV2T2OSao8C6uoyWiqIj1ggABEiM0RVZneImaq7zN3u_wARIjNEVWZ3iJmqu8zd7v-BZy9pc3N1ZXI" } } \ No newline at end of file diff --git a/TestVectors/prc/derivedAllGroupData.json b/TestVectors/prc/derivedAllGroupData.json index e155630..586188a 100644 --- a/TestVectors/prc/derivedAllGroupData.json +++ b/TestVectors/prc/derivedAllGroupData.json @@ -95,7 +95,7 @@ ], [ 18, - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n" ], [ 19, @@ -108,14 +108,14 @@ ] }, "deskolemizedNQuads": [ - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"Arcadia\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 _:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2025-12-16T23:59:59Z\"^^ .\n" ] }, "mandatory": { @@ -205,7 +205,7 @@ ], [ 18, - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n" ], [ 19, @@ -227,9 +227,9 @@ }, "deskolemizedNQuads": [ " .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n" + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n" ] }, "combined": { @@ -331,7 +331,7 @@ ], [ 18, - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n" + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n" ], [ 19, @@ -341,15 +341,15 @@ }, "deskolemizedNQuads": [ " .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"Arcadia\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 _:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2025-12-16T23:59:59Z\"^^ .\n" ] } }, @@ -414,7 +414,7 @@ "@type": [ "https://w3id.org/citizenship#PermanentResidentCard" ], - "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_0" + "@id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_0" } ], "https://w3id.org/citizenship#residentSince": [ @@ -427,12 +427,12 @@ "https://w3id.org/citizenship#PermanentResident", "https://schema.org/Person" ], - "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_1" + "@id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_1" } ], "https://schema.org/description": [ { - "@value": "Government of Utopia Permanent Resident Card." + "@value": "Permanent Resident Card from Government of Utopia." } ], "https://www.w3.org/2018/credentials#issuer": [ @@ -466,7 +466,7 @@ "@value": "2025-12-16T23:59:59Z" } ], - "@id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_2" + "@id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_2" } ], "compact": { @@ -474,15 +474,15 @@ "https://www.w3.org/ns/credentials/v2", "https://w3id.org/citizenship/v4rc1" ], - "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_2", + "id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_2", "type": [ "VerifiableCredential", "PermanentResidentCardCredential" ], - "description": "Government of Utopia Permanent Resident Card.", + "description": "Permanent Resident Card from Government of Utopia.", "name": "Permanent Resident Card", "credentialSubject": { - "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_1", + "id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_1", "type": [ "PermanentResident", "Person" @@ -495,7 +495,7 @@ "birthCountry": "Arcadia", "commuterClassification": "C1", "permanentResidentCard": { - "id": "urn:bnid:_5b442c70-954c-431b-8eb0-5e789d95558d_0", + "id": "urn:bnid:_d3b161e0-573e-4362-81df-e9512fae4442_0", "type": "PermanentResidentCard", "identifier": "83627465", "lprCategory": "C09", @@ -513,43 +513,43 @@ }, "deskolemizedNQuads": [ " .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"83627465\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"C09\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_0 \"999-999-999\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"1978-07-17\"^^ .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"SMITH\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Female\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"JANE\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"Arcadia\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"C1\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 _:_5b442c70-954c-431b-8eb0-5e789d95558d_0 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_1 \"2015-01-01\"^^ .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"Government of Utopia Permanent Resident Card.\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"Permanent Resident Card\" .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 _:_5b442c70-954c-431b-8eb0-5e789d95558d_1 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2024-12-16T00:00:00Z\"^^ .\n", - "_:_5b442c70-954c-431b-8eb0-5e789d95558d_2 \"2025-12-16T23:59:59Z\"^^ .\n" + "_:_d3b161e0-573e-4362-81df-e9512fae4442_0 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_0 \"83627465\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_0 \"C09\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_0 \"999-999-999\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"1978-07-17\"^^ .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"SMITH\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"Female\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"JANE\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"Arcadia\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"C1\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 _:_d3b161e0-573e-4362-81df-e9512fae4442_0 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_1 \"2015-01-01\"^^ .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"Permanent Resident Card from Government of Utopia.\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"Permanent Resident Card\" .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 _:_d3b161e0-573e-4362-81df-e9512fae4442_1 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2024-12-16T00:00:00Z\"^^ .\n", + "_:_d3b161e0-573e-4362-81df-e9512fae4442_2 \"2025-12-16T23:59:59Z\"^^ .\n" ], "labelMap": { "dataType": "Map", "value": [ [ - "_5b442c70-954c-431b-8eb0-5e789d95558d_0", + "_d3b161e0-573e-4362-81df-e9512fae4442_0", "b1" ], [ - "_5b442c70-954c-431b-8eb0-5e789d95558d_1", + "_d3b161e0-573e-4362-81df-e9512fae4442_1", "b0" ], [ - "_5b442c70-954c-431b-8eb0-5e789d95558d_2", + "_d3b161e0-573e-4362-81df-e9512fae4442_2", "b2" ] ] @@ -573,7 +573,7 @@ "_:b1 \"999-999-999\" .\n", "_:b2 .\n", "_:b2 .\n", - "_:b2 \"Government of Utopia Permanent Resident Card.\" .\n", + "_:b2 \"Permanent Resident Card from Government of Utopia.\" .\n", "_:b2 \"Permanent Resident Card\" .\n", "_:b2 _:b0 .\n", "_:b2 .\n", diff --git a/TestVectors/prc/derivedDisclosureData.json b/TestVectors/prc/derivedDisclosureData.json index e653054..13ba26b 100644 --- a/TestVectors/prc/derivedDisclosureData.json +++ b/TestVectors/prc/derivedDisclosureData.json @@ -1,6 +1 @@ -{ - "bbsProof":"88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76", - "labelMap":{"dataType":"Map","value":[["c14n0","b0"],["c14n1","b2"]]}, - "mandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19], - "presentationHeader":{"0":17,"1":51,"2":119,"3":170} -} \ No newline at end of file +{"bbsProof":"96ac5ff7b89bf2d8b0f3cc51c547f1a22b01e24e246579d212362cdf6bf0fabe18be0c9d1f84c904bb4c6c613fd0ecabb7ad92e615341da97a45a918721626cc859c455b473a36e39572561d5fc483c637424717a43dcffb3b130d8fe11f88a8802f3b231efe2444f8b47feded0b621e3d5cd22cb3ec23ebc4f6dca745b5c1ce2f42a710b92510a71225a7d39e00e0c26da2fae242cdf154e93de42017270b99023fe95b42c42a461a2eab19e04aa44839af39aa71f830162cb424a5aa0acc046dc7e7b8bdfc73cf3641c76aeeb7fbb56cd936776050dbd632bf7fc80d33c621dc6b837184ade619630f72bd25d8aea626ba994d15a65def1b0dc8af09c54a0cf5e5b54d1b1b28047aa2dbf63805fec9533bab46d12349ca47dfd83ff30454cedacd23da4eb9a3ebe198c80ac1992e2a203ffcf46afaa3482a63b7b00033df1a2da361d600a1cfd5139be010ca302e082af7ee34a5ff3d24cc7062f57fa36d47846edd5219e59bd438576bff709bfd7920d6bad8367b0fe8c749318ef8726beda9c1d9095bed738e4fd1c38333a27f4f2071a21a863671b43fe521f737444be865e887cbf33caa39226fb8013003721e37c6d949867befba1c8b7bf641bd647851ad92aed3da91af52f17d058a9f74eb30744304c05813840be6a528f54cd5a24b73ae2f42dec1bfc2e1354fb061a96c0df3ab96ddc9ada96cb882571cccb89774fcf0326e1c8b2b87cc4cf4eafbd75632518919cbe58a9f86ade12b0f6989c0886e358d801b99b1dd32c7e6e56a653c0e264a84b51d2d23679c75e282451af3bcaa6f19ec7bc3aa603fec87db5a57d42961e2907d899a8fd5d1ce17dde8a75cd1192494cd93b112da7774c2bb2f679f5b4b404dabe485d78a017b2be81e5ff8bacf90d5f24b2e83ab4169f8f55ca6f703141f91565abbec7445e6cf4663f5e34b9188283d57cedf36c586b18a130b83652436bf6862673ddeebd9aefdc2fbfc97dde80e36483491c4357ccd2fc131fb","labelMap":{"dataType":"Map","value":[["c14n0","b0"],["c14n1","b2"]]},"mandatoryIndexes":[0,4,5,7],"adjSelectiveIndexes":[0,1,7,17,18,19],"presentationHeader":{"0":17,"1":51,"2":119,"3":170}} \ No newline at end of file diff --git a/TestVectors/prc/derivedRecoveredBaseData.json b/TestVectors/prc/derivedRecoveredBaseData.json index c310237..479c747 100644 --- a/TestVectors/prc/derivedRecoveredBaseData.json +++ b/TestVectors/prc/derivedRecoveredBaseData.json @@ -1,5 +1,5 @@ { - "bbsSignature": "b3c14b108412c77448f5967187343ebaf53e0788e0b9af6e72226e8189dbf54477f25ec2d24631f84298228ccc786a1033a5a7cb64294d6307414d562ae615e00f1b4e094dfb1643865e4f3ed8256fdd", + "bbsSignature": "86168dd2b5d0c7c6a56a30f4212ed116a53def05d0d6708207d483c7ff2053aefa22d24ba7659d60852694f8d85be0fa2adc3974c7dc4cc68b3db17b2423975047104162c24502b41591879ac24f1bb1", "hmacKey": "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", "mandatoryPointers": [ "/issuer" diff --git a/TestVectors/prc/derivedRevealDocument.json b/TestVectors/prc/derivedRevealDocument.json index 79e8b3d..e3e3e7d 100644 --- a/TestVectors/prc/derivedRevealDocument.json +++ b/TestVectors/prc/derivedRevealDocument.json @@ -26,6 +26,6 @@ "created": "2023-08-15T23:36:38Z", "verificationMethod": "did:key:zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ#zUC7DerdEmfZ8f4pFajXgGwJoMkV1ofMTmEG5UoNvnWiPiLuGKNeqgRpLH2TV4Xe5mJ2cXV76gRN7LFQwapF1VFu6x2yrr5ci1mXqC1WNUrnHnLgvfZfMH7h6xP6qsf9EKRQrPQ", "proofPurpose": "assertionMethod", - "proofValue": "u2V0DhVkC0Ijffg2oSdpDAAaxIfdBZ43cQO7IlpZaU74Mplsfq2KJtEjgvuiEdPfPDiUrS-aUU61CwH7FzKvNkZjXkVPfxKInWqHtyRBvwFK82607ygGnHigsmwtoWHD4gDhPnpUq57MA8199hbuojdjz7TavC6OvotVNAPuVHmkvp7B4Gc0_ESBhjPzmY7_m4wPdtD1Clm5RZLm6suKvBFmhemrhsGlyQXPWs5dlC9o5gv6Wyu-bBiozlDCFGyGJPjABmevsuZQpPpEgD7yABZOgAYlJeZU7FblvQeuDspkyHNWjcvFbS-Ayhg-r1u3uQVPZCwtqQBApmxcOAzE7e4PTH5UeLACk5kqrh5NEGhtpCCIClFctc5S5PIRUuYhu9QIyFxl8sI-lPc0T3CxHn8XCj8_dbmEq9-qq70DAfn7bw94f3UkidZgUjsGzfvCmtdXop5Q0X1bv2JPezGKj3DOH8-4qRCJuxN3fR_hQ653EzeLw7ewOcbFCcWgJjZaDQ7L8QNb-fQcboe4c0fmX11ExNoXowZkMnne0loGXeS5yQTPww19PrNKqZr47LWZbPfaDqfoXDSWAdv9ddTSNB76N2FsJR1OAmGiBhBwm86u6_oAlItyRCpIN-XoytPdXDRNPD7m9RqPkBW5dJY3HrFdKSXkYUIBHo4OgTFRFJW6Bz5h8VIb5y7LjQjKJCheDsv3Wr2hfYz_asX4Vdvlg_HbjFHXZ5RIEKvkrx68VPMI0biv0pFfyY-kV9ViYE6zoTvL9g7lB6N2O6A-MUH5eK5iyjL7R3I9t_U9CxR29bQQu_xjcnIBpHSnEtXGroMGejc3nOrmjqm9wPLZmUoQWreFVHyc6lvWNgG4-87BgWS26ItowmScaBJRRYdnG6cZ4vOsg-LynCx8QdYbwKyvAnPkvAYLRM_Ao8l_iZAQYBZCvKjAhqFPyhJ3b_LQfT1KbTqBVoDxNdqIAAAEChAAEBQeGAAEHERITRBEzd6o" + "proofValue": "u2V0DhVkC0JasX_e4m_LYsPPMUcVH8aIrAeJOJGV50hI2LN9r8Pq-GL4MnR-EyQS7TGxhP9Dsq7etkuYVNB2pekWpGHIWJsyFnEVbRzo245VyVh1fxIPGN0JHF6Q9z_s7Ew2P4R-IqIAvOyMe_iRE-LR_7e0LYh49XNIss-wj68T23KdFtcHOL0KnELklEKcSJafTngDgwm2i-uJCzfFU6T3kIBcnC5kCP-lbQsQqRhouqxngSqRIOa85qnH4MBYstCSlqgrMBG3H57i9_HPPNkHHau63-7Vs2TZ3YFDb1jK_f8gNM8Yh3GuDcYSt5hljD3K9Jdiupia6mU0Vpl3vGw3IrwnFSgz15bVNGxsoBHqi2_Y4Bf7JUzurRtEjScpH39g_8wRUztrNI9pOuaPr4ZjICsGZLiogP_z0avqjSCpjt7AAM98aLaNh1gChz9UTm-AQyjAuCCr37jSl_z0kzHBi9X-jbUeEbt1SGeWb1DhXa_9wm_15INa62DZ7D-jHSTGO-HJr7anB2Qlb7XOOT9HDgzOif08gcaIahjZxtD_lIfc3REvoZeiHy_M8qjkib7gBMANyHjfG2UmGe--6HIt79kG9ZHhRrZKu09qRr1LxfQWKn3TrMHRDBMBYE4QL5qUo9UzVoktzri9C3sG_wuE1T7BhqWwN86uW3cmtqWy4glcczLiXdPzwMm4ciyuHzEz06vvXVjJRiRnL5Yqfhq3hKw9picCIbjWNgBuZsd0yx-blamU8DiZKhLUdLSNnnHXigkUa87yqbxnse8OqYD_sh9taV9QpYeKQfYmaj9XRzhfd6Kdc0RkklM2TsRLad3TCuy9nn1tLQE2r5IXXigF7K-geX_i6z5DV8ksug6tBafj1XKb3AxQfkVZau-x0RebPRmP140uRiCg9V87fNsWGsYoTC4NlJDa_aGJnPd7r2a79wvv8l93oDjZINJHENXzNL8Ex-6IAAAEChAAEBQeGAAEHERITRBEzd6o" } } \ No newline at end of file diff --git a/TestVectors/prc/verifyDerivedProofValue.json b/TestVectors/prc/verifyDerivedProofValue.json index efe8812..bc776c9 100644 --- a/TestVectors/prc/verifyDerivedProofValue.json +++ b/TestVectors/prc/verifyDerivedProofValue.json @@ -1,5 +1,5 @@ { - "bbsProof": "88df7e0da849da430006b121f741678ddc40eec896965a53be0ca65b1fab6289b448e0bee88474f7cf0e252b4be69453ad42c07ec5ccabcd9198d79153dfc4a2275aa1edc9106fc052bcdbad3bca01a71e282c9b0b685870f880384f9e952ae7b300f35f7d85bba88dd8f3ed36af0ba3afa2d54d00fb951e692fa7b07819cd3f1120618cfce663bfe6e303ddb43d42966e5164b9bab2e2af0459a17a6ae1b069724173d6b397650bda3982fe96caef9b062a339430851b21893e300199ebecb994293e91200fbc800593a001894979953b15b96f41eb83b299321cd5a372f15b4be032860fabd6edee4153d90b0b6a4010299b170e03313b7b83d31f951e2c00a4e64aab8793441a1b6908220294572d7394b93c8454b9886ef5023217197cb08fa53dcd13dc2c479fc5c28fcfdd6e612af7eaaaef40c07e7edbc3de1fdd49227598148ec1b37ef0a6b5d5e8a794345f56efd893decc62a3dc3387f3ee2a44226ec4dddf47f850eb9dc4cde2f0edec0e71b1427168098d968343b2fc40d6fe7d071ba1ee1cd1f997d751313685e8c1990c9e77b4968197792e724133f0c35f4facd2aa66be3b2d665b3df683a9fa170d258076ff5d75348d07be8dd85b09475380986881841c26f3abbafe802522dc910a920df97a32b4f7570d134f0fb9bd46a3e4056e5d258dc7ac574a497918508047a383a04c5445256e81cf987c5486f9cbb2e34232890a1783b2fdd6af685f633fdab17e1576f960fc76e31475d9e512042af92bc7af153cc2346e2bf4a457f263e915f5589813ace84ef2fd83b941e8dd8ee80f8c507e5e2b98b28cbed1dc8f6dfd4f42c51dbd6d042eff18dc9c80691d29c4b571aba0c19e8dcde73ab9a3aa6f703cb666528416ade1551f273a96f58d806e3ef3b060592dba22da3099271a04945161d9c6e9c678bceb20f8bca70b1f107586f02b2bc09cf92f0182d133f028f25fe26404180590af2a3021a853f2849ddbfcb41f4f529b4ea055a03c4d76", + "bbsProof": "96ac5ff7b89bf2d8b0f3cc51c547f1a22b01e24e246579d212362cdf6bf0fabe18be0c9d1f84c904bb4c6c613fd0ecabb7ad92e615341da97a45a918721626cc859c455b473a36e39572561d5fc483c637424717a43dcffb3b130d8fe11f88a8802f3b231efe2444f8b47feded0b621e3d5cd22cb3ec23ebc4f6dca745b5c1ce2f42a710b92510a71225a7d39e00e0c26da2fae242cdf154e93de42017270b99023fe95b42c42a461a2eab19e04aa44839af39aa71f830162cb424a5aa0acc046dc7e7b8bdfc73cf3641c76aeeb7fbb56cd936776050dbd632bf7fc80d33c621dc6b837184ade619630f72bd25d8aea626ba994d15a65def1b0dc8af09c54a0cf5e5b54d1b1b28047aa2dbf63805fec9533bab46d12349ca47dfd83ff30454cedacd23da4eb9a3ebe198c80ac1992e2a203ffcf46afaa3482a63b7b00033df1a2da361d600a1cfd5139be010ca302e082af7ee34a5ff3d24cc7062f57fa36d47846edd5219e59bd438576bff709bfd7920d6bad8367b0fe8c749318ef8726beda9c1d9095bed738e4fd1c38333a27f4f2071a21a863671b43fe521f737444be865e887cbf33caa39226fb8013003721e37c6d949867befba1c8b7bf641bd647851ad92aed3da91af52f17d058a9f74eb30744304c05813840be6a528f54cd5a24b73ae2f42dec1bfc2e1354fb061a96c0df3ab96ddc9ada96cb882571cccb89774fcf0326e1c8b2b87cc4cf4eafbd75632518919cbe58a9f86ade12b0f6989c0886e358d801b99b1dd32c7e6e56a653c0e264a84b51d2d23679c75e282451af3bcaa6f19ec7bc3aa603fec87db5a57d42961e2907d899a8fd5d1ce17dde8a75cd1192494cd93b112da7774c2bb2f679f5b4b404dabe485d78a017b2be81e5ff8bacf90d5f24b2e83ab4169f8f55ca6f703141f91565abbec7445e6cf4663f5e34b9188283d57cedf36c586b18a130b83652436bf6862673ddeebd9aefdc2fbfc97dde80e36483491c4357ccd2fc131fb", "labelMap": [ [ "c14n0", From 3ab8e29a46bfd49b4262242b44f2cf83904f3b79 Mon Sep 17 00:00:00 2001 From: Greg Bernstein Date: Thu, 19 Dec 2024 09:16:28 -0800 Subject: [PATCH 22/24] Advanced Features Procedures and Test Vector Update: wording and punctuation improvements. Co-authored-by: Ted Thibodeau Jr --- index.html | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index f0d7331..6398394 100644 --- a/index.html +++ b/index.html @@ -592,8 +592,8 @@

    serializeBaseProofValue

    BBS signature, HMAC key, and mandatory pointers. The required inputs are a base signature |bbsSignature|, |bbsHeader|, |publicKey|, an HMAC key |hmacKey|, an array of -|mandatoryPointers|, |featureOption|, and depending on -the |featureOption| value possibly the |signer_nym_entropy| value. +|mandatoryPointers|, |featureOption|, and, depending on +the |featureOption| value, possibly a |signer_nym_entropy| value. A single base proof string value is produced as output.

    @@ -785,7 +785,7 @@

    createDisclosureData

    1. Initialize |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, -and |mandatoryPointers|, and +and |mandatoryPointers| to the values of the associated properties in the object returned when calling the algorithm in Section , passing the `proofValue` from `proof`. @@ -882,7 +882,7 @@

      createDisclosureData

      |bbsSignature|, |header| is the |bbsHeader|, |ph| is the |presentationHeader|, |messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, and `commitment_with_proof`. The holder will also furnish its -|holder_secret|, and |proverBlind| that was used to compute the +|holder_secret|, and the |proverBlind| that was used to compute the |commitment_with_proof|. This is the Anonymous Holder Binding feature option. To @@ -897,16 +897,21 @@

      createDisclosureData

      |signer_nym_entropy|, and |secret_prover_blind|. Determine the |nym_domain|. This might be specified by -the verifier or set by the holder depending on the usage scenario. Use +the verifier or set by the holder, depending on the usage scenario. Use the "Proof Generation with Pseudonym" operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. This operation takes as inputs -|PK|, the original issuers public key, -|signature|, the |bbsSignature|, |header| is the |bbsHeader|, -|ph| is the |presentationHeader|, -|messages| is |bbsMessages|, |disclosed_indexes| is |selectiveIndexes|, -|nym_secret|, |nym_domain|, empty -|committed_messages| array, and |secret_prover_blind|. In addition to providing +the original issuer's public key as |PK|, +the |bbsSignature| as |signature|, +the |bbsHeader| as |header|, +the |presentationHeader| as |ph|, +the |bbsMessages| as |messages|, +the |selectiveIndexes| as |disclosed_indexes|, + a |nym_secret|, + a |nym_domain|, + an empty array for |committed_messages|, +and a |secret_prover_blind|. +In addition to providing the raw cryptographic proof value which is assigned to |bbsProof|, it also returns the |pseudonym|. From 76071feb064e9556fa57ad0d87cf4170ce7cafef Mon Sep 17 00:00:00 2001 From: Greg Bernstein Date: Mon, 6 Jan 2025 08:53:39 -0800 Subject: [PATCH 23/24] Advanced Features Procedure and Test Vector Update: punctuation, formating, and wording improvements. Co-authored-by: Ted Thibodeau Jr --- index.html | 387 +++++++++++++++++++++++++++-------------------------- 1 file changed, 194 insertions(+), 193 deletions(-) diff --git a/index.html b/index.html index 6398394..c62576b 100644 --- a/index.html +++ b/index.html @@ -895,7 +895,7 @@

      createDisclosureData

      to both verify the |bbsSignature| and compute the |nym_secret| value. This operation uses the |prover_nym|, |signer_nym_entropy|, and |secret_prover_blind|. - +

      Determine the |nym_domain|. This might be specified by the verifier or set by the holder, depending on the usage scenario. Use the "Proof Generation with Pseudonym" @@ -915,22 +915,21 @@

      createDisclosureData

      the raw cryptographic proof value which is assigned to |bbsProof|, it also returns the |pseudonym|. - +

      This is for the -Credential Bound Pseudonyms +Credential-Bound Pseudonyms feature option. To be updated when IETF API is finalized.
    2. If |featureOption| equals `"holder_binding_pseudonym"`, - use the "Verification and Finalization" operation from [[CFRG-Pseudonym-BBS-Signature]] with the |committed_messages| array containing the |holder_secret| as its only value, to both verify the |bbsSignature| and compute the |nym_secret| value. This operation uses the |prover_nym|, |signer_nym_entropy|, and |secret_prover_blind|. - +

      Determine the |nym_domain|. This might be specified by the verifier or set by the holder depending on the usage scenario. Use the "Proof Generation with Pseudonym" @@ -1059,9 +1058,9 @@

      serializeDerivedProofValue

      The following algorithm serializes a derived proof value. The required inputs are a BBS proof (|bbsProof|), a label map (|labelMap|), an array of mandatory indexes (|mandatoryIndexes|), an array of -selective indexes (|selectiveIndexes|), and a BBS presentation header +selective indexes (|selectiveIndexes|), a BBS presentation header (|presentationHeader|), the |featureOption| indicator, and, -depending on the |featureOption| value, a |nym_domain|, |pseudonym| and/or +depending on the |featureOption| value, a |nym_domain|, |pseudonym|, and/or |lengthBBSMessages| value. A single derived proof value, serialized as a byte string, is produced as output. @@ -1156,7 +1155,7 @@

      parseDerivedProofValue

      contains a set of six to nine elements, having the names "bbsProof", "labelMap", "mandatoryIndexes", "selectiveIndexes", "presentationHeader", "featureOption", and, depending on the value of the |featureOption| parameter, -"nym_domain", "pseudonym" and/or "lengthBBSMessages". +"nym_domain", "pseudonym", and/or "lengthBBSMessages".

        @@ -1202,7 +1201,7 @@

        parseDerivedProofValue

      1. Initialize `components` to an array that is the result of CBOR-decoding the bytes that follow the three-byte BBS disclosure proof header. If the result -is not an array of five, six, or eight elements +is not an array of five, six, seven, or eight elements an error MUST be raised and SHOULD convey an error type of PROOF_VERIFICATION_ERROR.
      2. @@ -1213,9 +1212,9 @@

        parseDerivedProofValue

      3. Return derived proof value as an object with properties set to the five, -six, or eight elements, using the names "bbsProof", "labelMap", "mandatoryIndexes", -"selectiveIndexes", "presentationHeader", and optional "nym_domain", "pseudonym" and/or -"lengthBBSMessages", respectively. +six, seven, or eight elements, using the names "bbsProof", "labelMap", +"mandatoryIndexes", "selectiveIndexes", "presentationHeader", and optional +"nym_domain", "pseudonym", and/or "lengthBBSMessages", respectively. In addition, add |featureOption| and its value to the object.
      @@ -1327,10 +1326,10 @@

      Create Base Proof (bbs-2023)

      `"anonymous_holder_binding"`, `"pseudonym"`, or `"holder_binding_pseudonym"`. Note that `"baseline"` is used to denote the case of no optional features. If |featureOption| is set to -`"anonymous_holder_binding"`, `"pseudonym"`, or `"holder_binding_pseudonym"` the +`"anonymous_holder_binding"`, `"pseudonym"`, or `"holder_binding_pseudonym"`, the |commitment_with_proof| input MUST be supplied. If |featureOption| is set to -`"pseudonym"`, or `"holder_binding_pseudonym"` the +`"pseudonym"` or `"holder_binding_pseudonym"`, the |signer_nym_entropy| input MUST be supplied.

      @@ -1549,12 +1548,12 @@

      Base Proof Serialization (bbs-2023)

      |featureOption|, and, if required, |commitment_with_proof|. If |featureOption| is set to `"anonymous_holder_binding"`, -`"pseudonym"`, or `"holder_binding_pseudonym"` the +`"pseudonym"`, or `"holder_binding_pseudonym"`, the |commitment_with_proof| input MUST be supplied; if not supplied, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR. If |featureOption| is set to -`"pseudonym"`, or `"holder_binding_pseudonym"` the +`"pseudonym"` or `"holder_binding_pseudonym"`, the |signer_nym_entropy| input MUST be supplied; if not supplied, an error MUST be raised and SHOULD convey an error type of PROOF_GENERATION_ERROR. @@ -1595,7 +1594,7 @@

      Base Proof Serialization (bbs-2023)

      Anonymous Holder Binding feature.
    3. -If |featureOption| equals `"pseudonym"`, or `"holder_binding_pseudonym"` +If |featureOption| equals `"pseudonym"` or `"holder_binding_pseudonym"`, the issuer generates a cryptographically random value for the |signer_nym_entropy| and computes the `bbsSignature` using the @@ -1603,23 +1602,23 @@

      Base Proof Serialization (bbs-2023)

      with appropriate key material, |bbsHeader| for the `header`, |bbsMessages| for the `messages`, |commitment_with_proof| for the `commitment_with_proof`, and -|signer_nym_entropy| value. If the issuer ever needs reissue a credential to -this holder that is bound to the same |nym_secret| they should retain the -|signer_nym_entropy| value, otherwise this value can be discarded. - -This provides for the Credential Bound - Pseudonyms or Holder Binding and - Psuedonyms features. +|signer_nym_entropy| value. If the issuer might ever need to reissue a +credential to this holder that is bound to the same |nym_secret|, they should +retain the |signer_nym_entropy| value; otherwise, this value can be discarded. +

      +This provides for the Credential-Bound +Pseudonyms or Holder Binding and +Pseudonyms features.
  • Initialize `proofValue to the result of calling the algorithm in Section , passing |bbsSignature|, |bbsHeader|, -|publicKey|, |hmacKey|, |mandatoryPointers|, |featureOption|, and depending on -the |featureOption| value the |signer_nym_entropy| -value as parameters. -Note `publicKey` is a byte array of the public key, encoded according to +|publicKey|, |hmacKey|, |mandatoryPointers|, |featureOption|, and, depending on +the |featureOption| value, |signer_nym_entropy|, as parameters. +

    +Note: `publicKey` is a byte array of the public key, encoded according to [[CFRG-BBS-SIGNATURE]].
  • @@ -1654,18 +1653,17 @@

    Add Derived Proof (bbs-2023)

    If |featureOption| equals `"pseudonym"`, the REQUIRED -additional inputs are the |prover_nym|, |proverBlind| (both known to -holder), and |nym_dofmain| which is either set by the holder or communicated to -the holder by the verifier. -See Credential Bound Pseudonyms for +additional inputs are |prover_nym| and |proverBlind|, which are both known to +the holder, and |nym_dofmain|, which is either set by the holder or communicated +to the holder by the verifier. +See Credential-Bound Pseudonyms for background information.

    If |featureOption| equals `"holder_binding_pseudonym"`, the REQUIRED -additional inputs are the |holder_secret|, |prover_nym|, |proverBlind| (all -known to the holder), and |nym_dofmain| which is either set by the holder or -communicated to -the holder by the verifier. +additional inputs are |holder_secret|, |prover_nym|, and |proverBlind|, which are +all known to the holder, and |nym_dofmain|, which is either set by the holder or +communicated to the holder by the verifier. See Holder Binding and Pseudonyms for background information.

    @@ -1742,7 +1740,7 @@

    Verify Derived Proof (bbs-2023)

  • Initialize |bbsProof|, |proofHash|, |mandatoryHash|, |selectiveIndexes|, |presentationHeader|, |nonMandatory|, |featureOption|, and, possibly, -|lengthBBSMessages|, and |pseudonym|, to the values associated +|lengthBBSMessages| and/or |pseudonym|, to the values associated with their property names in the object returned when calling the algorithm in Section , passing the |unsecuredDocument|, |proof|, and any custom JSON-LD API options (such as a document loader). @@ -1806,7 +1804,7 @@

    Optional Features

    The cryptographic properties of BBS signatures permit variants that can support advanced functionalities. This specification is limited to supporting only the most relevant of these enhancements, which we explain in the -following sections. The variables |commitment_with_proof|, |holder_secret| +following sections. The variables |commitment_with_proof|, |holder_secret|, |prover_nym|, |signer_nym_entropy|, and |pseudonym| are associated with these features and are not otherwise needed for BBS signatures and proofs.

    @@ -1831,27 +1829,27 @@

    Anonymous Holder Binding

    To provide for this functionality, a holder generates a |holder_secret| value which should generally be at least 32 bytes long and cryptographically randomly generated. This value is never shared by the holder. Instead, the holder -generates a commitment along with a zero knowledge proof of knowledge of this +generates a commitment, along with a zero knowledge proof of knowledge of this value, using the "Commitment Computation" operation of [[CFRG-Blind-BBS-Signature]]. This computation involves cryptographically random values and computes the |commitment_with_proof| and |secret_prover_blind| values. The -|commitment_with_proof| is conveyed to the issuer while the +|commitment_with_proof| is conveyed to the issuer, while the |secret_prover_blind| is kept secret and is retained by the holder for use in generation of derived proofs. -Note that a holder can run the "Commitment Computation" operation multiple times +Note that a holder can run the "Commitment Computation" operation multiple times, to produce unlinkable |commitment_with_proof| values for use with different issuers.

    The issuer, on receipt of the |commitment_with_proof|, follows the procedures -of this specification and uses the "Blind Signature Generation" operation of -[[CFRG-Blind-BBS-Signature]] to produce a base proof (signature) over the document +of this specification, and uses the "Blind Signature Generation" operation of +[[CFRG-Blind-BBS-Signature]] to produce a base proof (signature) over the document, with the |commitment_with_proof| furnished by the holder.

    When the holder wants to create a selectively disclosed document with derived proof, they use the procedures of this specification and the "Proof Generation" operation of [[CFRG-Blind-BBS-Signature]]. They use their |holder_secret| as -the only "message" in the |commited messages| array and supply thier +the only "message" in the |commited messages| array, and supply their |secret_prover_blind|.

    @@ -1862,107 +1860,107 @@

    Anonymous Holder Binding

  • -

    Credential Bound Pseudonyms

    +

    Credential-Bound Pseudonyms

    -BBS signed Verifiable Credentials as specified in this document allow for -selective disclosure and unlinkable cryptographic proof artifacts, the +BBS-signed Verifiable Credentials as specified in this document allow for +selective disclosure and unlinkable cryptographic proof artifacts. By +"unlinkable", we mean that the cryptographic information in the derived proofs cannot be linked to other -proofs or the original signature. This implies that a verifier cannot determine -if a holder has presented the same credential before (with a different proof -instantiation) nor can they assert some type of identity. Credential bound +proofs nor the original signature. This implies that a verifier cannot determine +whether a holder has presented the same credential before (with a different proof +instantiation), nor can they assert some type of identity. Credential-bound pseudonyms provide a privacy preserving mechanism to allow for the limited linkability of a cryptographic pseudonym. Such a pseudonym may be determined -strictly by the holder or jointly by the holder and the verifier. +strictly by the holder, or jointly by the holder and the verifier.

    -The type of cryptographic pseudonym (cryptographic identifier/name) here is -computed from two parts. The first part, the |nym_secret|, is only known to the -holder, the second part, the |nym_domain|, may be specified by either the holder -or the verifier and will be shared between the holder and verifier. +This type of cryptographic pseudonym (cryptographic identifier/name) is +computed from two parts. The first part, the |nym_secret|, is specified by, +and will only be known by, the +holder; the second part, the |nym_domain|, may be specified by either the holder +or the verifier, and will be shared between the holder and verifier. Cryptographic pseudonyms computed from the same |nym_secret| but different |nym_domain| values are unlinkable.

    -The holder might choose the |nym_domain| to give themselves a pseudonym for -some type of public forum, e.g., choose |nym_domain| = "Mark Twain". The -cryptographic pseudonym is calculated by the holder from this |nym_domain| and -their |nym_secret| is essentially unique and no entity not knowing the -|nym_secret| and possessing the base verifiable credential bound to the +The holder might choose a |nym_domain| to give themselves a pseudonym for some +type of public forum, e.g., choose |nym_domain| = "Mark Twain". +The cryptographic pseudonym calculated by the holder from this |nym_domain| +with their |nym_secret| is essentially unique, and no entity that does not both +know the |nym_secret| and possess the base verifiable credential bound to the pseudonym could assert this pseudonymous identity. Note that the doublet of -(|nym_domain|, pseudonym) would be sent with the derived credential to assert +(|nym_domain|, pseudonym) has to be sent with the derived credential to assert this pseudonymous identity.

    -In a different situation, a holder may be using a service from a verifier and a -verifier wants to track visits over time or monitor use of some resource by the -holder. In this case the verifier chooses the |nym_domain| that the holder is -required to use when presenting their derived credential. For example a verifier -might specify a public |nym_domain| tied to their domain, e.g., -"www.nym.example" for the holder to use. A verifier could also -demonstrate that they support data minimization of a sort by periodically -changing the |nym_domain|, e.g. tying it to a date, -"www.nym.example/2025-01-02". This specification does not dictate +In a different situation, a holder may be using a service from a verifier where +the verifier wants to track visits over time or monitor use of some resource by +the holder. In this case, the verifier chooses the |nym_domain| that the holder +needs to use when presenting their derived credential. For example, a +verifier might specify a public |nym_domain| tied to their DNS domain (e.g., +`"www.nym.example"`) for the holder to use. A verifier could also +demonstrate that they support data minimization, of a sort, by periodically +changing the |nym_domain| (e.g., tying it to a date, +`"www.nym.example/2025-01-02"`). This specification does not dictate values for the |nym_domain|.

    -Finally, to prevent a malicious holder from obtaining another holders -|nym_secret| and getting a credential bound to that value, the operations from -the [[CFRG-Pseudonym-BBS-Signature]] have the issuer add in a randomization -factor, |signer_nym_entropy| that is securely "mixed" with the holders -portion, the |prover_nym|, during signature generation. Hence, the issuer -provides a cryptographic assurance that the resulting |nym_secret| used by the -holder is unique. +Finally, to prevent a malicious holder who obtains another holder's +|nym_secret| from getting a credential bound to that value, the operations +from the [[CFRG-Pseudonym-BBS-Signature]] have the issuer add a randomization +factor, |signer_nym_entropy|, that is securely "mixed" with the holder's +portion, the |prover_nym|, during signature generation. This results in a +|nym_secret| for which the issuer can provide cryptographic assurance that +it is unique, to be used by the holder.

    -An outline of the creation and use of credential bound pseudonyms is given in -the following steps. +An outline of the creation and use of credential-bound pseudonyms is shown in +the steps below.

    1. -The holder creates a secure value known as the |prover_nym| that should be at -least 32 bytes long and generated in cryptographically random manner. They then -use the "Commitment" operation from [[CFRG-Pseudonym-BBS-Signature]] with an -empty |committed_messages| array to compute -the |commitment_with_proof| and |secret_prover_blind|. The -|commitment_with_proof| is sent with their request to the issuer for a -credential while the |prover_nym| and |secret_prover_blind| are kept for later -use by the holder and are never disclosed. -
    2. -
    3. -The issuer receives the holders request for a credential with a bound pseudonym, -|featureOption| equals `"pseudonym"`, along with the |commitment_with_proof|. -The issuer uses the procedures in this specification and generates a -cryptographically random value for the |signer_nym_entropy| and uses the -"Blind Issuance" operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the -base proof. Among other information the base proof will contain the -|signer_nym_entropy| value. If the issuer ever needs reissue a credential to -this holder that is bound to the same |nym_secret| they should retain the -|signer_nym_entropy| value, otherwise this value can be discarded. -
    4. -
    5. -The holder on receipt of the credential with bound pseudonym uses the procedures -in this specification along with the "Verification and Finalization" operation -from [[CFRG-Pseudonym-BBS-Signature]] with an empty |committed_messages| array -to both verify the signature and compute -the |nym_secret| value. This operation uses the |prover_nym|, -|signer_nym_entropy|, and |secret_prover_blind| values amongst others. If third -party monitoring is being utilized then the |nym_secret| value would be securely -shared with the monitoring organization. -
    6. -
    7. -When the holder wants to generate a derived proof bound to a pseudonym they need -to determine the |nym_domain|. As previously stated this might be specified by -the verifier or set by the holder depending on the usage scenario. They then use -the procedures in this specification and the "Proof Generation with Pseudonym" +The holder creates a secure value, known as the |prover_nym|, that should be +at least 32 bytes long and generated in cryptographically random manner. They +then use the "`Commitment`" operation from [[CFRG-Pseudonym-BBS-Signature]] +with an empty |committed_messages| array to compute +the |commitment_with_proof| and the |secret_prover_blind|. The holder sends the +|commitment_with_proof| to the issuer with a request for a credential, but never +discloses |prover_nym| and |secret_prover_blind|, keeping them for later use. +
    8. +
    9. +The issuer receives the holder's request for a credential with a bound pseudonym +(|featureOption| equals `"pseudonym"`), along with the |commitment_with_proof|. +The issuer generates a cryptographically random value for the +|signer_nym_entropy| and uses the "Blind Issuance" operation from +[[CFRG-Pseudonym-BBS-Signature]] to produce the base proof. Among other +information, the base proof will contain the |signer_nym_entropy| value. If the +issuer might ever need to reissue a credential to this holder that is bound to +the same |nym_secret|, they should retain the |signer_nym_entropy| value; +otherwise, this value can be discarded. +
    10. +
    11. +On receipt of the credential with bound pseudonym, the holder uses the procedures +in this specification, along with the "Verification and Finalization" operation +from [[CFRG-Pseudonym-BBS-Signature]] with an empty |committed_messages| array, +to both verify the signature and compute the |nym_secret| value. This operation +uses the |prover_nym|, |signer_nym_entropy|, and |secret_prover_blind| values, +amongst others. If third-party monitoring is being used, then the |nym_secret| +value will need to be securely shared with the monitoring organization. +
    12. +
    13. +When a holder wants to generate a derived proof bound to a pseudonym, they need +to determine the |nym_domain|. As previously noted, this might be specified by +the verifier or set by the holder, depending on the usage scenario. They then use +the procedures in this specification with the "Proof Generation with Pseudonym" operation from [[CFRG-Pseudonym-BBS-Signature]] to produce the derived proof. This operation takes as inputs the |nym_secret|, |nym_domain|, empty -|committed_messages| array and -|secret_prover_blind| amongst others. In addition to providing the raw -cryptographic proof value it also returns the |pseudonym| value that gets +|committed_messages| array, and +|secret_prover_blind|, amongst others. In addition to providing the raw +cryptographic proof value, it also returns the |pseudonym| value that gets included in the derived proof.
    14. -When a verifier receives a derived proof with bound pseudonym they use the +When a verifier receives a derived proof with bound pseudonym, they use the procedures in this specification along with the "Proof Verification with Pseudonym" operation from [[CFRG-Pseudonym-BBS-Signature]] to validate the derived proof. Note that these @@ -1975,13 +1973,13 @@

      Credential Bound Pseudonyms

      Holder Binding and Pseudonyms

      -Anonymous holder binding and credential bound pseudonyms are, in a sense, +Anonymous holder binding and credential-bound pseudonyms are, in a sense, orthogonal features, and a holder and credential ecosystem may wish to use both -at the same time. In particular, the holder may wish to bind a verifiable -credential to a |holder_secret| so that only a holder knowing this value can +at the same time. For instance, a holder may wish to bind a verifiable +credential to a |holder_secret|, so that only a holder knowing this value can generate a derived proof from the base proof, and bind a |nym_secret| to the base proof so that pseudonyms can be bound to the derived proof. This -corresponds to |featureOption| equals `"holder_binding_pseudonym"`. +corresponds to the |featureOption| being equal to `"holder_binding_pseudonym"`.

      An outline of the creation and use of both anonymous holder binding and @@ -2078,7 +2076,7 @@

      Optional Feature Summary

    - + @@ -2115,7 +2113,7 @@

    Optional Feature Summary

    - + @@ -2235,7 +2233,7 @@

    Optional Feature Summary

    - + @@ -3023,11 +3021,11 @@

    Test Vectors

    Baseline Basic Example

    -The starting document test -vector is based on a purely fictitious permanent resident card. In addition, -we break the test vectors into two groups, based on those -that would be generated by the issuer (base proof) and those that would be -generated by the holder (derived proof). +The document test +vectors are based on a purely fictitious permanent resident card, and broken +into two groups — those +that would be generated by the issuer ("base proof"), and those that would be +generated by the holder ("derived proof").

    Base Proof
    @@ -3066,7 +3064,7 @@
    Base Proof
    data-include="TestVectors/prCredUnsigned.json" data-include-format="text">

    -This mandatory information is specified via an array of JSON pointers +This mandatory information is specified via an array of JSON pointers, as shown below.

    Base Proof
               data-include="TestVectors/prc/addBaseDocCanon.json"
               data-include-format="text">

    -To prevent possible information leakage from the ordering of the blank node IDs -these are processed through a PRF (i.e., the HMAC) to give the canonicalized HMAC -document shown below. This represents an ordered list of statements that will be -subject to mandatory and selective disclosure, i.e., it is from this list that -statements are grouped. +To prevent possible information leakage via the ordering of the blank node IDs, +these IDs are processed through a PRF (i.e., the HMAC) to give the canonicalized +HMAC document shown below. This represents an ordered list of statements that will +be subject to "mandatory" and "selective" (or "non-mandatory") disclosure, i.e., +when these statements are grouped based on their disclosure requirements, they +will still be ordered as in this list.

    
               

    -The above canonical document gets grouped into mandatory and non-mandatory -statements. The final output of the selective disclosure transformation process -is shown below. Each statement is now grouped as mandatory or non-mandatory, and -its index in the previous list of statements is remembered. +The list from the canonical document above gets grouped into mandatory and +non-mandatory statements. The final output of the selective disclosure +transformation process is shown below. Note that the statements are now grouped +as mandatory or non-mandatory disclosure, and the index of each statement in +the previous list is remembered.

    Base Proof
               

    In the hashing step, we compute the SHA-256 hash of the canonicalized proof options to produce the `proofHash`, and we compute the SHA-256 hash of the -join of all the mandatory N-Quads to produce the `mandatoryHash`. These are +`JOIN` of all the mandatory N-Quads to produce the `mandatoryHash`. These are shown below in hexadecimal format.

    Base Proof
               

    Finally, the values above are run through the algorithm of Section , to produce the `proofValue` which is -used in the signed base document shown below. +used in the signed base document, as shown below.

    Base Proof
             
    Derived Proof

    -Random numbers are used, and an optional `presentationHeader` can be an input, -for the creation of BBS proofs. To furnish a deterministic set of test -vectors, we used the Mocked Random Scalars procedure from -[[CFRG-BBS-SIGNATURE]]. The `seed` and `presentationHeader` values we used for -generation of the derived proof test vectors are given in hex, below. +Random numbers are used, and an optional `presentationHeader` can be an +additional input, for the creation of BBS proofs. To furnish a +deterministic set of test vectors, we used the Mocked Random Scalars +procedure from [[CFRG-BBS-SIGNATURE]]. The `seed` and `presentationHeader` values +we used for generation of the derived proof test vectors are given in hex, below.

    Derived Proof
               data-include="TestVectors/prc/derivedRecoveredBaseData.json"
               data-include-format="text">

    -Next, the holder needs to indicate what else, if anything, they wish to reveal -to the verifiers, by specifying JSON pointers for selective disclosure. These -are shown below. +Next, the holder needs to indicate what non-mandatory statements, if any, they +wish to reveal to the verifiers, by specifying JSON pointers for selective +disclosure. These are shown below.

    Derived Proof
     To produce the `revealDocument` (i.e., the unsigned document that will
     eventually be signed and sent to the verifier), we append the selective pointers
     to the mandatory pointers, and input these combined pointers along with the
    -document without proof to the `selectJsonLd` algorithm of [[DI-ECDSA]],
    -to get the result shown below.
    +document without proof to the `selectJsonLd` algorithm of [[DI-ECDSA]].
    +This gets the result shown below.
               

    
               

    -Now that we know what the revealed document looks like, we need to furnish +Now that we know what the reveal document looks like, we need to furnish appropriately updated information to the verifier about which statements are -mandatory, and the indexes for the selected non-mandatory statements. Running +mandatory, and the indexes of the selected non-mandatory statements. Running step 6 of the - yields an abundance of information about -various statement groups relative to the original document. Below we show a + yields abundant information about +various statement groups relative to the original document. Below, we show a portion of the indexes for those groups.

    Derived Proof
               data-include-format="text">

    The verifier needs to be able to aggregate and hash the mandatory statements. To -enable this, we furnish them with a list of indexes of the mandatory statements +enable this, we furnish them with a list of the indexes of the mandatory statements, adjusted to their positions in the reveal document (i.e., relative to the -`combinedIndexes`), while the `selectiveIndexes` need to be adjusted relative to +`combinedIndexes`), while the `selectiveIndexes` are adjusted relative to their positions within the `nonMandatoryIndexes`. These "adjusted" indexes are shown below.

    @@ -3212,10 +3212,10 @@
    Derived Proof
    data-include-format="text">

    -The last important piece of disclosure data is a mapping of canonical blank node -IDs to HMAC-based shuffled IDs, the `labelMap`, computed according to Section -. This is shown below along with -the rest of the disclosure data minus the reveal document. +The last important piece of disclosure data is the `labelMap`, a mapping of +canonical blank node IDs to HMAC-based shuffled IDs, computed according to +Section . This is shown below, along with +the rest of the disclosure data, minus the reveal document.

    Anonymous Holder Binding Feature
               
    Holder Binding Commitment Generation

    The first steps in using the anonymous holder binding feature are for the -holder to generate its |holderSecret| value and then compute a commitment with -proof for this value according to the commitment computation procedure +holder to generate their |holderSecret| value, and then compute a commitment with +proof for this value, according to the commitment computation procedure of [[CFRG-Blind-BBS-Signature]]. Example values and outputs of this procedure are shown below.

    @@ -3473,8 +3473,8 @@
    Holder Binding Commitment Generation
    data-include="TestVectors/HolderBinding/commitmentInfo.json" data-include-format="text">

    -The |holderSecret| and |secretProverBlind| are retained by the holder and kept -secret. The |commitmentWithProof| value needs to be communicated to the issuer. +The |holderSecret| and |secretProverBlind| are to be retained and kept secret by +the holder. The |commitmentWithProof| value is to be communicated to the issuer.

    @@ -3601,7 +3601,7 @@
    Holder Binding Derived Proof
    The first step is to run the algorithm of Section to recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, -|mandatoryPointers|, and |featureOption| as shown below. +|mandatoryPointers|, and |featureOption|, as shown below.

    Credential Bound Pseudonym Feature
               
    Prover Nym Commitment Generation

    -The first steps in using the credential bound pseudonym feature are for -the holder to generate its secret |prover_nym| value and then compute a +The first steps in using the credential-bound pseudonym feature are for +the holder to generate their secret |prover_nym| value, and then compute a commitment with proof for this value according to the "Commitment" operation from [[CFRG-Pseudonym-BBS-Signature]]. Example values and outputs of this procedure are shown below. @@ -3700,8 +3700,8 @@

    Prover Nym Commitment Generation
    data-include="TestVectors/Pseudonym/commitmentInfo.json" data-include-format="text">

    -The |prover_nym| and |secretProverBlind| are retained by the holder and kept -secret. The |commitmentWithProof| value needs to be communicated to the issuer. +The |prover_nym| and |secretProverBlind| are to be retained and kept secret by +the holder. The |commitmentWithProof| value is to be communicated to the issuer.

    @@ -3741,7 +3741,7 @@
    Pseudonym Base Proof
    section will produce the output shown below. This makes use of the signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the -inclusion of the |signer_nym_entropy| and |featureOption| values, as these +inclusion of the |signer_nym_entropy| and |featureOption| values, as these need to be communicated to the holder.

    Pseudonym Base Proof
               
    Pseudonym Derived Proof

    -As explained in section , we use a -mocked random number generation procedure and demonstrate the use of a +As explained in section , we used a +mocked random number generation procedure to demonstrate the use of a |presentationHeader|. The same |seed| and |presentationHeader| as given in are used here.

    @@ -3773,26 +3773,26 @@
    Pseudonym Derived Proof
    , above. The first step is to run the algorithm of Section to recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|, -|mandatoryPointers|, |signer_nym_entropy| and |featureOption|, as shown below. +|mandatoryPointers|, |signer_nym_entropy|, and |featureOption|, as shown below.

    
               

    -Next the holder uses the the "Verification and Finalization" operation from +Next, the holder uses the the "Verification and Finalization" operation from [[CFRG-Pseudonym-BBS-Signature]] to both verify the signature and compute the |nym_secret| value. This operation uses the |prover_nym|, -|signer_nym_entropy|, and |secret_prover_blind| values amongst others. +|signer_nym_entropy|, and |secret_prover_blind| values, amongst others.

    
               

    -Next, the holder needs to indicate what else, if anything, they wish to reveal -to the verifiers, by specifying JSON pointers for selective disclosure. In this -case, the holder reveals the same information as given in +Next, the holder needs to indicate what non-mandatory statements, if any, they +wish to reveal to the verifiers, by specifying JSON pointers for selective +disclosure. In this case, the holder reveals the same information as given in . This results in the same |revealDocument| as shown in . @@ -3807,7 +3807,7 @@

    Pseudonym Derived Proof
    Within , we compute the |pseudonym| based on the same |verfifier_id| shown in . The final output of is shown below. Note -the inclusion of the computed |pseudonym| and the |featureOption| value. +the inclusion of the |featureOption| and computed |pseudonym| values.

    Holder Secret and Prover Nym Commitment Generation
                 

    The first steps in using the holder binding and pseudonym feature are for -the holder to generate its secret |holder_secret| and |prover_nym| value and +the holder to generate its |holder_secret| and |prover_nym| values, and then compute a -commitment with proof for this value according to the "Commitment" operation +commitment with proof for these values, according to the "Commitment" operation from [[CFRG-Pseudonym-BBS-Signature]]. Example values and outputs of this procedure are shown below.

    @@ -3848,9 +3848,9 @@
    Holder Secret and Prover Nym Commitment Generation
    data-include="TestVectors/PseudonymHB/commitmentInfo.json" data-include-format="text">

    -The |holder_secret|, |prover_nym| and |secretProverBlind| are retained by the -holder and kept -secret. The |commitmentWithProof| value needs to be communicated to the issuer. +The |holder_secret|, |prover_nym|, and |secretProverBlind| need to be retained +and kept secret by the holder. The |commitmentWithProof| value needs to be +communicated to the issuer.

    @@ -3866,7 +3866,7 @@
    Holder Binding and Pseudonym Base Proof

    This example will make use of the same key material as shown in , -the same unsigned document as shown in +and the same unsigned document as shown in , and the same mandatory pointers as shown in . This results in the @@ -3890,7 +3890,7 @@

    Holder Binding and Pseudonym Base Proof
    section will produce the output shown below. This makes use of the signature generation algorithm of [[CFRG-Pseudonym-BBS-Signature]]. Note the -inclusion of the |signer_nym_entropy| and |featureOption| values, as these +inclusion of the |signer_nym_entropy| and |featureOption| values, as these need to be communicated to the holder.

    Holder Binding and Pseudonym Derived Proof
     , above. The first
     step is to run the algorithm of Section  to
     recover |bbsSignature|, |bbsHeader|, |publicKey|, |hmacKey|,
    -|mandatoryPointers|, |signer_nym_entropy| and |featureOption|, as shown below.
    +|mandatoryPointers|, |signer_nym_entropy|, and |featureOption|, as shown below.
               

    
               

    -Next the holder uses the the "Verification and Finalization" operation from +Next, the holder uses the the "Verification and Finalization" operation from [[CFRG-Pseudonym-BBS-Signature]] to both verify the signature and compute the |nym_secret| value. This operation uses the |holder_secret|, |prover_nym|, -|signer_nym_entropy|, and |secret_prover_blind| values amongst others. +|signer_nym_entropy|, and |secret_prover_blind| values, amongst others.

    
               

    -Next, the holder needs to indicate what else, if anything, they wish to reveal +Next, the holder needs to indicate what non-mandatory statements, if any, +they wish to reveal to the verifiers, by specifying JSON pointers for selective disclosure. In this case, the holder reveals the same information as given in . @@ -3956,7 +3957,7 @@

    Holder Binding and Pseudonym Derived Proof
    Within , we compute the |pseudonym| based on the same |verfifier_id| shown in . The final output of is shown below. Note -the inclusion of the computed |pseudonym| and the |featureOption| value. +the inclusion of the the |featureOption| and computed |pseudonym| values.

    Date: Wed, 29 Jan 2025 08:57:45 -0800
    Subject: [PATCH 24/24] Advanced Features Procedures and Test Vector Update:
     Clarifications and wording improvements.
    
    Co-authored-by: Will Abramson 
    ---
     index.html | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/index.html b/index.html
    index c62576b..9a792c4 100644
    --- a/index.html
    +++ b/index.html
    @@ -1879,6 +1879,9 @@ 

    Credential-Bound Pseudonyms

    and will only be known by, the holder; the second part, the |nym_domain|, may be specified by either the holder or the verifier, and will be shared between the holder and verifier. +An issuer binds a credential to a |nym_secret| during the issuance process. +A holder can then compute pseudonyms from the |nym_secret| and prove to +verifiers that these pseudonyms are bound to the credential the are presenting. Cryptographic pseudonyms computed from the same |nym_secret| but different |nym_domain| values are unlinkable.

    Table 5 Verify Derived: Inputs and Algorithms. Table 5 Verify Derived: Inputs and Algorithms. +
    Name
    BBS baselinebaseline: (from derived proof serialization) bbsProof, compressedLabelMap, mandatoryIndexes, selectiveIndexes, presentationHeaderbaseline: (from derived proof serialization) + bbsProof, compressedLabelMap, mandatoryIndexes, + selectiveIndexes, presentationHeader + BBS
    Blind BBS
    Pseudonym (issuer known and hidden)baseline + verifier id (known to verifier), pseudonym (included in derived proof)Credential Bound Pseudonymsbaseline + |pseudonym| (included in derived proof), + |nym_domain| + Pseudonym BBS
    Holder Binding and Pseudonymsbaseline + |pseudonym| (included in derived proof), + |nym_domain| + Pseudonym BBS
    Blind BBS
    Credential Bound PseudonymsCredential-Bound Pseudonyms baseline + generate |signer_nym_entropy| baseline + |signer_nym_entropy|, commitment with proof from holder baseline
    Credential Bound PseudonymsCredential-Bound Pseudonyms `0xd9`, `0x5d`, and `0x06` baseline + |signer_nym_entropy|
    Blind BBS
    Credential Bound PseudonymsCredential-Bound Pseudonyms baseline + |pseudonym| (included in derived proof), |nym_domain|