Skip to content
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

[BUG] Resolver adds more keys than it should #184

Closed
ismapolis opened this issue Apr 20, 2023 · 6 comments · Fixed by #194
Closed

[BUG] Resolver adds more keys than it should #184

ismapolis opened this issue Apr 20, 2023 · 6 comments · Fixed by #194
Labels
bug Something isn't working pinned an issue that may take a while to fix and should not be closed automatically. released

Comments

@ismapolis
Copy link

Current Behavior

When i send a setAttribute transaction with key equals "did/pub/Secp256k1/enc/" then on the did document it adds an entry on assertionMethod and KeyAgreement. When i select veriKey instead of enc it works fine.

Expected Behavior

The resolver should just adds an entry on KeyAgreement.

Failure Information

Please help provide information about the failure.

Steps to Reproduce

I am using a react app for testing with some select elements for key purpose and encoding. For the blockchain I am using Ganache and Metamask as Web3 provider.
Here is a fragment of the code I use for emitting the transaction. "keyuse" and "encode" are the values from the select elements.

let key = "did/pub/Secp256k1/" + keyuse + "/" + encode;
console.log(key);
await contract.methods
      .setAttribute(
        accounts[0],
        stringToBytes32(key),
        "0x" + publicKey,
        31536000
      )
      .send({ from: accounts[0] });

Environment Details

I attach the react component code on zip.

index.zip

Failure Logs/Screenshots

DID initial doc
imagen

After I emit a transaction with enc value

imagen

And then when I try to revoke that verificationMethod

imagen

@ismapolis ismapolis added the bug Something isn't working label Apr 20, 2023
@ismapolis ismapolis changed the title [BUG] Resolver add more keys than it should [BUG] Resolver adds more keys than it should Apr 20, 2023
@mirceanis
Copy link
Member

Sounds like a bug.. it should not be added to assertionMethod; just to keyAgreement.

@ismapolis
Copy link
Author

Sounds like a bug.. it should not be added to assertionMethod; just to keyAgreement.

Hello I have been reviewing the code and it is not a bug, it is coded like that but I dont know why, maybe an older version of did:ethr specification?
Here it filters "sigAuth" and "enc" and adds the key to the corresponding section, but not for assertion.
image

Later all the verification methods are added to assertionMethod don't know why.
image

I even checked the tests and in the case of adding an "enc" key the test checks that it is added to KeyAgreement and assertionMethod.
image

I could fix it and make a PR If you approve it.

@mirceanis
Copy link
Member

Sounds like a bug.. it should not be added to assertionMethod; just to keyAgreement.

Hello I have been reviewing the code and it is not a bug, it is coded like that but I dont know why, maybe an older version of did:ethr specification? Here it filters "sigAuth" and "enc" and adds the key to the corresponding section, but not for assertion. image

Later all the verification methods are added to assertionMethod don't know why. image

I even checked the tests and in the case of adding an "enc" key the test checks that it is added to KeyAgreement and assertionMethod. image

I could fix it and make a PR If you approve it.

It's still a bug, even if it looks intentional.
The origin of the bug is from the early days of the DID spec, when keys didn't need to have a clear verification relationship. It's also common for authentication keys to also be usable as assertion keys, but it's debatable whether that should be the case with keyAgreement.

Generally, this DID method leans toward fewer transactions where possible, which is why all keys are automatically dumped in the assertion method relationship.

Fixing this would be a breaking change, however, and should also include an update to the spec.

@ismapolis
Copy link
Author

Hello I would like to confirm this with you. The current spec states in key purposes that every key is added to its corresponding section not in more than one. The change I proposed wouldn't breaking. It would just update the code to the referenced spec.

@stale
Copy link

stale bot commented Jul 14, 2023

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the stale label Jul 14, 2023
@stale stale bot closed this as completed Jul 29, 2023
@mirceanis mirceanis reopened this Nov 8, 2023
@mirceanis mirceanis added the pinned an issue that may take a while to fix and should not be closed automatically. label Nov 8, 2023
@stale stale bot removed the stale label Nov 8, 2023
mirceanis added a commit that referenced this issue Nov 8, 2023
mirceanis added a commit that referenced this issue Nov 8, 2023
* fix: remove references to Buffer

* fix: track additions to assertionMethod

fixes #184

BREAKING CHANGE: the keys in the `verificationMethod` array are no longer all referenced in the `assertionMethod` array. Only authentication (`sigAuth`) or signing keys (`veriKey`) are added.
uport-automation-bot pushed a commit that referenced this issue Nov 8, 2023
# [10.0.0](9.1.1...10.0.0) (2023-11-08)

### Features

* track signing keys independently ([#194](#194)) ([cc44100](cc44100)), closes [#184](#184)

### BREAKING CHANGES

* the keys in the `verificationMethod` array are no longer all referenced in the `assertionMethod` array. Only authentication (`sigAuth`) or signing keys (`veriKey`) are added.
@uport-automation-bot
Copy link
Collaborator

🎉 This issue has been resolved in version 10.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Mozartted pushed a commit to coincord/ezrah-did-resolver that referenced this issue Nov 14, 2024
# 1.0.0 (2024-11-14)

### Bug Fixes

* add esm wrapper instead of double transpile ([d2bbeaf](d2bbeaf))
* broaden window for event logs processing (fix Aurora) ([decentralized-identity#149](https://github.com/coincord/ezrah-did-resolver/issues/149)) ([5ee6bed](5ee6bed))
* **build:** add named exports to esm wrapper ([decentralized-identity#176](https://github.com/coincord/ezrah-did-resolver/issues/176)) ([725ed25](725ed25)), closes [decentralized-identity#175](https://github.com/coincord/ezrah-did-resolver/issues/175)
* **build:** build commonjs and also expose esm wrapper ([522c199](522c199))
* **build:** include default export to work around some bundler issues ([decentralized-identity#205](https://github.com/coincord/ezrah-did-resolver/issues/205)) ([1e9e4ef](1e9e4ef)), closes [decentralized-identity#186](https://github.com/coincord/ezrah-did-resolver/issues/186)
* **build:** transpile for commonjs, use wrapper for esm ([decentralized-identity#170](https://github.com/coincord/ezrah-did-resolver/issues/170)) ([5eba679](5eba679))
* **build:** use commonjs module in tsconfig ([e66d054](e66d054))
* change 'owner' to 'controller' to follow W3C Spec ([decentralized-identity#75](https://github.com/coincord/ezrah-did-resolver/issues/75)) ([decentralized-identity#81](https://github.com/coincord/ezrah-did-resolver/issues/81)) ([af37b3f](af37b3f))
* **ci:** groom the build scripts and dependencies ([decentralized-identity#156](https://github.com/coincord/ezrah-did-resolver/issues/156)) ([9a53958](9a53958))
* **ci:** run tests on a matrix of node versions ([3825ac0](3825ac0))
* consistent Encoding of `attrValue` on `createRevokeAttributeHash` ([decentralized-identity#200](https://github.com/coincord/ezrah-did-resolver/issues/200)) ([81363d0](81363d0))
* create alpha release ([1d5d5f2](1d5d5f2))
* **deps:** bump dependencies and adapt code ([decentralized-identity#193](https://github.com/coincord/ezrah-did-resolver/issues/193)) ([0a8da00](0a8da00))
* **deps:** bump did-resolver to 3.1.3+ ([0ddde4b](0ddde4b))
* **deps:** bump ethers to ^5.5.0 ([c39788a](c39788a))
* **deps:** remove querystring in favor of UrlSearchParams ([cd5e596](cd5e596))
* **deps:** update all non-major dependencies ([5d1be47](5d1be47))
* **deps:** update dependency buffer to v6 ([decentralized-identity#93](https://github.com/coincord/ezrah-did-resolver/issues/93)) ([e1dc861](e1dc861))
* **deps:** update dependency did-resolver to v1.1.0 ([ab47058](ab47058))
* **deps:** update dependency did-resolver to v2 ([decentralized-identity#68](https://github.com/coincord/ezrah-did-resolver/issues/68)) ([831ec17](831ec17))
* **deps:** update dependency did-resolver to v2.1.0 ([b26d387](b26d387))
* **deps:** update dependency did-resolver to v2.1.1 ([1a4cbca](1a4cbca))
* **deps:** update dependency did-resolver to v2.1.2 ([8c2294e](8c2294e))
* **deps:** Update dependency did-resolver to v4.1.0 ([ea501e1](ea501e1))
* **deps:** update dependency ethers to v6.10.0 ([435ae92](435ae92))
* **deps:** update dependency ethers to v6.11.0 ([35620c9](35620c9))
* **deps:** update dependency ethers to v6.11.1 ([d22fd46](d22fd46))
* **deps:** update dependency ethers to v6.13.0 ([9c9d978](9c9d978))
* **deps:** update dependency ethers to v6.13.1 ([e6885b9](e6885b9))
* **deps:** update dependency ethers to v6.13.2 ([c9d253f](c9d253f))
* **deps:** update dependency ethers to v6.13.3 ([840f6d4](840f6d4))
* **deps:** update dependency ethers to v6.13.4 ([f940b8e](f940b8e))
* **deps:** update dependency ethers to v6.9.0 ([0ca70ec](0ca70ec))
* **deps:** update dependency ethers to v6.9.1 ([01e0006](01e0006))
* **deps:** update dependency ethers to v6.9.2 ([0e69c5b](0e69c5b))
* **deps:** update dependency ethjs-contract to ^0.2.0 ([b667ce6](b667ce6))
* **deps:** update did-resolver to 4.0.1 ([decentralized-identity#172](https://github.com/coincord/ezrah-did-resolver/issues/172)) ([ce38d01](ce38d01))
* **deps:** update ethers to v6 ([decentralized-identity#188](https://github.com/coincord/ezrah-did-resolver/issues/188)) ([2785e61](2785e61))
* **deps:** use Resolvable type from did-resolver ([d213ae6](d213ae6))
* **doc:** update LD [@context](https://github.com/context) ([decentralized-identity#154](https://github.com/coincord/ezrah-did-resolver/issues/154)) ([29c196a](29c196a)), closes [decentralized-identity#151](https://github.com/coincord/ezrah-did-resolver/issues/151)
* **doc:** update spec to use new CAIP10 format ([77a4f67](77a4f67))
* e2e tests with deprecated ethr test networks ([0fd9915](0fd9915))
* export MetaSignature type ([62f250a](62f250a))
* hex values getting wrongly encoded to utf8 for setAttributeSigned ([c5c8989](c5c8989))
* ignore query string when interpreting identifiers ([decentralized-identity#123](https://github.com/coincord/ezrah-did-resolver/issues/123)) ([5508f8a](5508f8a)), closes [decentralized-identity#122](https://github.com/coincord/ezrah-did-resolver/issues/122)
* maintenance of dependencies, bots and build scripts ([decentralized-identity#136](https://github.com/coincord/ezrah-did-resolver/issues/136)) ([0d3fcf7](0d3fcf7))
* reference /enc/ keys in `keyAgreement` section of DID doc ([decentralized-identity#146](https://github.com/coincord/ezrah-did-resolver/issues/146)) ([5d507ef](5d507ef)), closes [decentralized-identity#145](https://github.com/coincord/ezrah-did-resolver/issues/145)
* remove 0x prefix from publicKeyHex ([decentralized-identity#147](https://github.com/coincord/ezrah-did-resolver/issues/147)) ([063ee67](063ee67)), closes [decentralized-identity#140](https://github.com/coincord/ezrah-did-resolver/issues/140)
* remove ejs module distribution ([780ec08](780ec08)), closes [decentralized-identity#39](https://github.com/coincord/ezrah-did-resolver/issues/39)
* require a configuration to be used when initializing the resolver ([3adc029](3adc029))
* reverse events to have consistent order ([decentralized-identity#87](https://github.com/coincord/ezrah-did-resolver/issues/87)) ([08b9692](08b9692)), closes [/github.com/decentralized-identity/issues/86#issuecomment-699961595](https://github.com//github.com/decentralized-identity/ethr-did-resolver/issues/86/issues/issuecomment-699961595)
* revert aurora tweaks and use known deployments in config ([decentralized-identity#161](https://github.com/coincord/ezrah-did-resolver/issues/161)) ([e238a9f](e238a9f))
* **spec:** remove ambiguity around deletion ([decentralized-identity#178](https://github.com/coincord/ezrah-did-resolver/issues/178)) ([da8e22e](da8e22e)), closes [decentralized-identity#177](https://github.com/coincord/ezrah-did-resolver/issues/177)
* strip milliseconds from dateTime strings ([decentralized-identity#129](https://github.com/coincord/ezrah-did-resolver/issues/129)) ([3e958af](3e958af)), closes [decentralized-identity#126](https://github.com/coincord/ezrah-did-resolver/issues/126)
* **test:** remove the connection test for goerli network ([decentralized-identity#201](https://github.com/coincord/ezrah-did-resolver/issues/201)) ([c861026](c861026))
* track legacy deployments, fix nonce calculation, export contract ([decentralized-identity#167](https://github.com/coincord/ezrah-did-resolver/issues/167)) ([c0d0366](c0d0366)), closes [decentralized-identity#165](https://github.com/coincord/ezrah-did-resolver/issues/165) [decentralized-identity#166](https://github.com/coincord/ezrah-did-resolver/issues/166)
* **types:** simplify type exports ([decentralized-identity#101](https://github.com/coincord/ezrah-did-resolver/issues/101)) ([90ca9b5](90ca9b5))
* update blockchainAccountId to the new CAIP10 format ([decentralized-identity#153](https://github.com/coincord/ezrah-did-resolver/issues/153)) ([9c3f401](9c3f401)), closes [decentralized-identity#152](https://github.com/coincord/ezrah-did-resolver/issues/152)
* **updates:** package.json changes for base versioning ([b5bfa4a](b5bfa4a))
* use rpcUrl in controller config ([decentralized-identity#128](https://github.com/coincord/ezrah-did-resolver/issues/128)) ([5302536](5302536)), closes [decentralized-identity#127](https://github.com/coincord/ezrah-did-resolver/issues/127)

### Features

* add `assertionMethod` by default to didDocument ([decentralized-identity#124](https://github.com/coincord/ezrah-did-resolver/issues/124)) ([11b2096](11b2096)), closes [decentralized-identity#117](https://github.com/coincord/ezrah-did-resolver/issues/117) [decentralized-identity#115](https://github.com/coincord/ezrah-did-resolver/issues/115)
* add ability to use a compressed publicKey as identifier ([decentralized-identity#73](https://github.com/coincord/ezrah-did-resolver/issues/73)) ([e257eb3](e257eb3)), closes [decentralized-identity#56](https://github.com/coincord/ezrah-did-resolver/issues/56)
* add controller support for meta/signed transactions ([decentralized-identity#164](https://github.com/coincord/ezrah-did-resolver/issues/164)) ([ce93e70](ce93e70))
* add encryption key support for ethr-did-documents ([dff7b0f](dff7b0f)), closes [decentralized-identity#52](https://github.com/coincord/ezrah-did-resolver/issues/52)
* add encryption key support for ethr-did-documents ([2f5825c](2f5825c)), closes [decentralized-identity#52](https://github.com/coincord/ezrah-did-resolver/issues/52)
* add experimental support for ServiceEndpoint objects ([decentralized-identity#163](https://github.com/coincord/ezrah-did-resolver/issues/163)) ([3919a25](3919a25))
* add JSON-LD contexts that define all the terms being used ([decentralized-identity#192](https://github.com/coincord/ezrah-did-resolver/issues/192)) ([cd49ab8](cd49ab8))
* add linea:goerli deployment ([b7a36b3](b7a36b3))
* add Sepolia deployment ([decentralized-identity#195](https://github.com/coincord/ezrah-did-resolver/issues/195)) ([94015bf](94015bf))
* Add types declaration stubb ([05944b1](05944b1))
* **deployment:** add gnosischain and holesky deployments ([decentralized-identity#206](https://github.com/coincord/ezrah-did-resolver/issues/206)) ([4992094](4992094))
* export `EthrDidController` helper class ([decentralized-identity#120](https://github.com/coincord/ezrah-did-resolver/issues/120)) ([745100d](745100d))
* import instead of require networks.json ([50c0832](50c0832))
* track signing keys independently ([decentralized-identity#194](https://github.com/coincord/ezrah-did-resolver/issues/194)) ([cc44100](cc44100)), closes [decentralized-identity#184](https://github.com/coincord/ezrah-did-resolver/issues/184)
* upgrade to latest did core spec ([decentralized-identity#99](https://github.com/coincord/ezrah-did-resolver/issues/99)) ([decentralized-identity#109](https://github.com/coincord/ezrah-did-resolver/issues/109)) ([d46eea3](d46eea3)), closes [decentralized-identity#105](https://github.com/coincord/ezrah-did-resolver/issues/105) [decentralized-identity#95](https://github.com/coincord/ezrah-did-resolver/issues/95) [decentralized-identity#106](https://github.com/coincord/ezrah-did-resolver/issues/106) [decentralized-identity#83](https://github.com/coincord/ezrah-did-resolver/issues/83) [decentralized-identity#85](https://github.com/coincord/ezrah-did-resolver/issues/85) [decentralized-identity#83](https://github.com/coincord/ezrah-did-resolver/issues/83) [decentralized-identity#85](https://github.com/coincord/ezrah-did-resolver/issues/85) [decentralized-identity#95](https://github.com/coincord/ezrah-did-resolver/issues/95) [decentralized-identity#105](https://github.com/coincord/ezrah-did-resolver/issues/105) [decentralized-identity#106](https://github.com/coincord/ezrah-did-resolver/issues/106)
* upgrade to latest did core spec ([decentralized-identity#99](https://github.com/coincord/ezrah-did-resolver/issues/99)) ([decentralized-identity#109](https://github.com/coincord/ezrah-did-resolver/issues/109)) ([decentralized-identity#111](https://github.com/coincord/ezrah-did-resolver/issues/111)) ([2a023b1](2a023b1)), closes [decentralized-identity#105](https://github.com/coincord/ezrah-did-resolver/issues/105) [decentralized-identity#95](https://github.com/coincord/ezrah-did-resolver/issues/95) [decentralized-identity#106](https://github.com/coincord/ezrah-did-resolver/issues/106) [decentralized-identity#83](https://github.com/coincord/ezrah-did-resolver/issues/83) [decentralized-identity#85](https://github.com/coincord/ezrah-did-resolver/issues/85) [decentralized-identity#83](https://github.com/coincord/ezrah-did-resolver/issues/83) [decentralized-identity#85](https://github.com/coincord/ezrah-did-resolver/issues/85) [decentralized-identity#95](https://github.com/coincord/ezrah-did-resolver/issues/95) [decentralized-identity#105](https://github.com/coincord/ezrah-did-resolver/issues/105) [decentralized-identity#106](https://github.com/coincord/ezrah-did-resolver/issues/106)
* use only named exports ([decentralized-identity#31](https://github.com/coincord/ezrah-did-resolver/issues/31)) ([a558e14](a558e14))
* versioning ([decentralized-identity#121](https://github.com/coincord/ezrah-did-resolver/issues/121)) ([b794d69](b794d69)), closes [decentralized-identity#119](https://github.com/coincord/ezrah-did-resolver/issues/119) [decentralized-identity#118](https://github.com/coincord/ezrah-did-resolver/issues/118) [decentralized-identity#119](https://github.com/coincord/ezrah-did-resolver/issues/119) [decentralized-identity#118](https://github.com/coincord/ezrah-did-resolver/issues/118)

### BREAKING CHANGES

* the keys in the `verificationMethod` array are no longer all referenced in the `assertionMethod` array. Only authentication (`sigAuth`) or signing keys (`veriKey`) are added.
* **deps:** this update uses ethers v6 which has a sufficiently different API from v5 that will likely need attention. While the API of this library hasn't changed, it is likely that an update will need attention so this is marked as a breaking change and a new major version is released.
* **spec:** This is a breaking change of the spec as "soft deletion" of non-updated DIDs is no longer considered valid.
* **build:** previous versions (<7.0.0) would be transpiled twice by microbundle, but this seems to be [anti-pattern](https://redfin.engineering/node-modules-at-war-why-commonjs-and-es-modules-cant-get-along-9617135eeca1)

Please raise an issue on https://github.com/decentralized-identity/ethr-did-resolver if this change is incompatible with your tech stack and there are no workarounds.
* ESM is only supported through a wrapper
* **doc:** Since the context definitions most often have to be embedded in apps, this requires apps to download the new definition.
* Apps have to update their processing of `blockchainAccountId` to use the [new CAIP10 format](https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-10.md)
* `publicKeyHex` values in the DID document no longer contain a `0x` prefix
* The return type is `DIDResolutionResult` which wraps a `DIDDocument`.
* No errors are thrown during DID resolution. Please check `result.didResolutionMetadata.error` instead.
* This DID core spec requirement will break for users expecting `publicKey`, `ethereumAddress`, `Secp256k1VerificationKey2018` entries in the DID document. They are replaced with `verificationMethod`, `blockchainAccountId` and `EcdsaSecp256k1VerificationKey2019` and `EcdsaSecp256k1RecoveryMethod2020` depending on the content.
* JWTs that refer to the `did:ethr:...#owner` key in their header may be considered invalid after this upgrade, as the key id is now `did:ethr:...#controller`
* this removes the fallback hardcoded RPC URLs and will fail early when a wrong configuration (or none) is provided to `getResolver()`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working pinned an issue that may take a while to fix and should not be closed automatically. released
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants