-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support BBS+ and JWP #1285
Support BBS+ and JWP #1285
Conversation
…wp implementation
…tPresentationValidationOptions
…ntial is supported during presentation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very readable and well structured implementation. Thank you very much for the contribution!
Could you go through the remaining TODO comments and either remove outdated ones or clarify remaining ones? That will help us to judge the outstanding work better.
|
||
jwp_builder.set_undisclosed("nbf").ok(); // | ||
|
||
jwp_builder.set_undisclosed("issuanceDate").ok(); // Depending on the revocation method used it will be necessary or not |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we expect issuanceDate
and expirationDatewill be superseded by
validFromand
validUntil` in the VC Data Model 2.0. Can we already anticipate that somehow?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@eike-hass I think we could already set the two fields, validFrom
and validUntil
, as undisclosed. Currently, if they are not present, they will simply be ignored. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very valuable contribution to the library, generally fits in the code base very well. I added minor comments.
One thing we have to change is having json-proof-token
as a workspace dependency, we probably have to feature gate all ZK implementation and make that dependency optional. This might require some tweaks here and there to make it work.
Also, to make CI happy, you can run these commands locally and potentially fix warnings
format all files:
cargo +nightly fmt --all
fix clippy warnings:
cargo clippy --fix --allow-dirty --allow-staged --all-targets --all-features -- -D warnings
dprint format: (dprint should be installed)
npx dprint fmt
And add the license header to all added Rust files (I think the license header also applies to external contributions, not 100% sure, maybe @eike-hass knows).
examples/1_advanced/9_zkp.rs
Outdated
@@ -0,0 +1,246 @@ | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// Copyright 2020-2024 IOTA Stiftung | |
// SPDX-License-Identifier: Apache-2.0 | |
A license header is needed on all files added.
/// Compute proof | ||
ProofGeneration, | ||
/// Verify proof | ||
ProofVerification |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These variants are added to an public exhaustive enum, which is a breaking change. Although the identity_jose
crate is only used internally but we have to investigate this, maybe add then only under a specific feature.
@@ -16,6 +16,9 @@ pub enum JwkUse { | |||
/// Encryption. | |||
#[serde(rename = "enc")] | |||
Encryption, | |||
/// Proof | |||
#[serde(rename = "proof")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same here
@abdulmth @eike-hass Hello, I've just updated the pull request with the latest changes about the revocation. I look forward to your feedback. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good! 👍
thread::sleep(SleepDuration::from_secs(61)); | ||
|
||
let timeframe_result = JptPresentationValidatorUtils::check_timeframes_with_validity_timeframe_2024( | ||
&decoded_presented_credential.credential, | ||
None, | ||
StatusCheck::Strict, | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thread::sleep(SleepDuration::from_secs(61)); | |
let timeframe_result = JptPresentationValidatorUtils::check_timeframes_with_validity_timeframe_2024( | |
&decoded_presented_credential.credential, | |
None, | |
StatusCheck::Strict, | |
); | |
let advanced_time = Timestamp::now_utc().checked_add(Duration::seconds(61)).unwrap(); | |
let timeframe_result = JptPresentationValidatorUtils::check_timeframes_with_validity_timeframe_2024( | |
&decoded_presented_credential.credential, | |
Some(advanced_time), | |
StatusCheck::Strict, | |
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Duration
is identity_iota::common::Duration
.
|
||
let timeframe_result = JptCredentialValidatorUtils::check_timeframes_with_validity_timeframe_2024( | ||
&validation_result.credential, | ||
None, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
None, | |
Some(advanced_time), |
|
||
/// Information used to determine the current status of a [`Credential`][crate::credential::Credential] | ||
#[derive(Clone, Debug, PartialEq, Eq)] | ||
pub struct RevocationTimeframeStatus(Status); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of simply wrapping Status
, parse (instead of validating) whatever you need out of it. Derive Serialize
and Deserialize
and use them to parse Status
.
In the implementation for TryFrom<Status>
you can use serde_json::from_value(serde_json::to_value(status)?)?
.
@AlbertoSvg We are almost there 💪 Any chance you can re-sign your previous commits? |
Thank you for your contribution 🙏 We will merge this in the feature branch and take it from there 💪 |
* Support BBS+ and JWP (#1285) * merge main * Wasm bindings for Jpt credentials * JPT presentation bindings * docs * jsonprooftoken payloads * Refactor `RevocationTimeframeStatus` to align with other setups (#1340) * refactor `RevocationTimeframeStatus` to other setups * fix smaller typos * binding coverage for jsonprooftoken * Use latest releases of zkryptium/json-proof-token and add new BLS key representation (#1339) * update zkryptium/json-proof-token deps and new BLS key representation * minor fix * Use zkryptium for cryptographic operations inside Memstore (#1351) * update zkryptium/json-proof-token deps and new BLS key representation * minor fix * use zkryptium for crypto operations and JPT for serialization * fix format * Feat/jpt bbs+ sd stronghold impl (#1354) * Implement JwkStorageExt for StrongholdStorage * reorganize code * persist changes to stronghold when creating bbs+ keypair, clippy, fmt * feature gate * zkp wasm example * zkp_revocation wasm example * wasm bindings * fix docs * rename JwkStorageExt to JwkStorageBbsPlusExt * JwkStorageBbsPlusExt impl refactor for Stronghold, MemStore, WasmStore * Squashed commit of the following: commit 30c9bf2 Author: Foorack / Max Faxälv <max@foorack.com> Date: Tue Apr 2 10:32:48 2024 +0200 inherit `repository` in identity_verification (#1348) commit 1e9c9a3 Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed Mar 27 15:35:29 2024 +0100 Release wasm-v1.2.0 (#1345) commit 84a630d Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed Mar 27 15:32:19 2024 +0100 Release v1.2.0 (#1347) commit 1aba4b5 Author: Eike Haß <eike-hass@web.de> Date: Wed Mar 27 13:13:27 2024 +0100 removed dev_dep version commit 0352b84 Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Wed Mar 27 10:44:43 2024 +0100 Support %-encoded characters in DID method id (#1303) commit e68538f Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Tue Mar 26 11:58:35 2024 +0100 gRPC bindings (#1264) commit e53561e Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Tue Mar 26 11:18:14 2024 +0100 allow large result err variants (#1342) commit 4a144a3 Author: Eike Haß <eike-hass@web.de> Date: Tue Mar 19 09:51:52 2024 +0100 fix readme links (#1336) commit 0af29fc Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Mon Mar 18 17:16:57 2024 +0100 Feat/custom verification method (#1334) * Add support for arbitrary (custom) verification method data * wasm bindings * custom method type + wasm * workaround serde's issue * Update bindings/wasm/src/verification/wasm_method_data.rs Co-authored-by: Abdulrahim Al Methiab <31316147+abdulmth@users.noreply.github.com> * review comments * fmt * review comment --------- Co-authored-by: Abdulrahim Al Methiab <31316147+abdulmth@users.noreply.github.com> commit edb9150 Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Tue Mar 12 14:45:04 2024 +0100 use latest release of sd-jwt-payload (#1333) * use latest release of sd-jwt-payload * make clippy happy commit 0794379 Author: Abdulrahim Al Methiab <31316147+abdulmth@users.noreply.github.com> Date: Wed Mar 6 14:16:00 2024 +0100 Wasm bindings for `BlockChainAccountId` verification method. (#1326) commit 59d38f7 Author: Abdulrahim Al Methiab <31316147+abdulmth@users.noreply.github.com> Date: Wed Mar 6 10:56:23 2024 +0100 Add constructor for VerificationMethod in TS (#1321) * clippy * fmt * add stronghold bbs+ tests * review comments * add license header * fix wasm bindings * Persist Stronghold's changes only when its handle is dropped * Fix StrongholdStorage::get_public_key * rename stronghold_jwk_storage_ext * Add inx-faucet profile in CI * change stronghold crate's structure, revert persist changes on drop * review comments * Update identity_credential/src/presentation/jwp_presentation_builder.rs Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * fix wasm bindings * expose stronghold's key types * revert last commit * Add "Fondazione Links" to license header * Squashed commit of the following: commit 9abdb38 Author: Sven <sven.feuchtmueller@gmx.de> Date: Tue May 14 09:16:09 2024 +0200 Add EcDSA verifier (#1353) * add ecdsa verifier * add identity_ecdsa_verifier to workspace, add license headers * Update identity_ecdsa_verifier/Cargo.toml Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * Update identity_ecdsa_verifier/src/secp256k1.rs Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * Update identity_ecdsa_verifier/Cargo.toml Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * Update identity_ecdsa_verifier/src/secp256k1.rs Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * Update identity_ecdsa_verifier/src/secp256r1.rs Co-authored-by: wulfraem <wulfraem@users.noreply.github.com> * add feedback * add OpenSSL installation to windows runner in CI * update license headers and authors for ecdsa verifier * update license template to allow multiple contributors --------- Co-authored-by: Sebastian Wolfram <wulfraem@users.noreply.github.com> commit 149bfac Author: wulfraem <wulfraem@users.noreply.github.com> Date: Mon May 13 10:44:09 2024 +0200 Fix findings after clippy update (#1365) * fix clippy findings * fix formatting * refactor .clone_into calls into .to_string * fix previous edit * disable empty_docs for wasm binding for now * fix missing newline * disable self update from rust setup in ci for now * update self update skip to skip only for windows build commit 51aedd5 Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Tue Apr 30 16:16:36 2024 +0200 Use STRONGHOLD_PWD_FILE env variable to pass stronghold's password (#1363) commit edec26c Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Tue Apr 30 15:40:55 2024 +0200 Arbitrary data signing service (#1350) commit f59e75a Author: Eike Haß <eike-hass@web.de> Date: Tue Apr 30 15:34:40 2024 +0200 Fix dockerhub workflow (#1343) commit 993cfec Author: Enrico Marconi <31142849+UMR1352@users.noreply.github.com> Date: Fri Apr 26 13:39:29 2024 +0200 add inx-faucet profile (#1356) * update stronghold and sdk --------- Co-authored-by: Alberto Solavagione <albertosolavagione30@gmail.com> Co-authored-by: wulfraem <wulfraem@users.noreply.github.com>
Description of change
Integration of BBS+ Signature Scheme and JSON Web Proof representation to enable Zero-Knowledge functionalities.
Using https://github.com/Cybersecurity-LINKS/json-proof-token and https://github.com/Cybersecurity-LINKS/zkryptium.
Type of change
Add an
x
to the boxes that are relevant to your changes.How the change has been tested
Added a new example called
9_zkp
for testing Zero-Knowledge Proof funtionalitiesChange checklist
Add an
x
to the boxes that are relevant to your changes.