demo with did-jwt

This commit is contained in:
Ryosuke Abe
2022-04-06 11:20:08 +09:00
parent b216dee17d
commit 9c00dace71
10 changed files with 647 additions and 114 deletions

4
.gitignore vendored
View File

@@ -1,3 +1,4 @@
keys/*.json
### https://raw.github.com/github/gitignore/218a941be92679ce67d0484547e3e142b2f5f6f0/Node.gitignore ### https://raw.github.com/github/gitignore/218a941be92679ce67d0484547e3e142b2f5f6f0/Node.gitignore
# Logs # Logs
@@ -126,7 +127,8 @@ dist
.LSOverride .LSOverride
# Icon must end with two \r # Icon must end with two \r
Icon Icon
# Thumbnails # Thumbnails
._* ._*

31
README.md Normal file
View File

@@ -0,0 +1,31 @@
# did:web on github pages
## Usage
### Generate and Publish your DID Document
1. Fork and Clone this repository
2. Setup your config file (`./src/config.json`)
```
{
"DOMAIN": <YOUR-GITHUB-PAGES-DOMAIN>,
"GH_PROJECT": "did-web-on-gh-pages"
}
```
3. Generate DID Document
```
npm install
npm run generate
```
4. Publish your github pages with DID Document
- commit and push the generated DID Document.
```
git add ./docs/did.json
git commit -m "generate did document"
git push
```
- Setup github pages on GitHub so that publishes `docs` directory of main branch in this repository.
- https://docs.github.com/ja/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site
- Check Your Github Pages are deployed.
5. Resolve generated DID:web in Universal Resolver
- https://dev.uniresolver.io/
### DEMO: generate jwt and verify with `did-jwt`

View File

@@ -4,9 +4,14 @@
"verificationMethod": [ "verificationMethod": [
{ {
"id": "did:web:chike.xyz:did-web-on-gh-pages#key1", "id": "did:web:chike.xyz:did-web-on-gh-pages#key1",
"type": "Ed25519VerificationKey2018", "type": "EcdsaSecp256k1VerificationKey2019",
"controller": "did:web:chike.xyz:did-web-on-gh-pages", "controller": "did:web:chike.xyz:did-web-on-gh-pages",
"publicKeyBase58": "2BXDYEWZrfwpDTVh78GFYFmLxp1b6yQ316eDxMDh1aq4p" "publicKeyJwk": {
"kty": "EC",
"x": "HzeyP9LSQubPdZeXIAtQA3KNmKiUVwazHwl-pywU5YA",
"y": "M-ph3R3BIyAmx1RgSJVRdWGZkJLqqhfTvEAAoIOpQ_U",
"crv": "secp256k1"
}
} }
], ],
"authentication": [ "authentication": [

0
keys/.gitkeep Normal file
View File

556
package-lock.json generated
View File

@@ -9,14 +9,163 @@
"version": "1.0.0", "version": "1.0.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"bs58": "^5.0.0", "did-jwt": "^6.0.0",
"secp256k1": "^4.0.3" "jose": "^4.6.0",
"web-did-resolver": "^2.0.14"
} }
}, },
"node_modules/base-x": { "node_modules/@stablelib/aead": {
"version": "4.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz",
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg=="
},
"node_modules/@stablelib/binary": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
"integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
"dependencies": {
"@stablelib/int": "^1.0.1"
}
},
"node_modules/@stablelib/bytes": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz",
"integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ=="
},
"node_modules/@stablelib/chacha": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz",
"integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==",
"dependencies": {
"@stablelib/binary": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/chacha20poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz",
"integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==",
"dependencies": {
"@stablelib/aead": "^1.0.1",
"@stablelib/binary": "^1.0.1",
"@stablelib/chacha": "^1.0.1",
"@stablelib/constant-time": "^1.0.1",
"@stablelib/poly1305": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz",
"integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg=="
},
"node_modules/@stablelib/ed25519": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz",
"integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==",
"dependencies": {
"@stablelib/random": "^1.0.1",
"@stablelib/sha512": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/hash": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz",
"integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg=="
},
"node_modules/@stablelib/int": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
"integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
},
"node_modules/@stablelib/keyagreement": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz",
"integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==",
"dependencies": {
"@stablelib/bytes": "^1.0.1"
}
},
"node_modules/@stablelib/poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz",
"integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==",
"dependencies": {
"@stablelib/constant-time": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/random": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz",
"integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==",
"dependencies": {
"@stablelib/binary": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/sha256": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz",
"integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==",
"dependencies": {
"@stablelib/binary": "^1.0.1",
"@stablelib/hash": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/sha512": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz",
"integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==",
"dependencies": {
"@stablelib/binary": "^1.0.1",
"@stablelib/hash": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/wipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
"integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
},
"node_modules/@stablelib/x25519": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.2.tgz",
"integrity": "sha512-wTR0t0Bp1HABLFRbYaE3vFLuco2QbAg6QvxBnzi5j9qjhYezWHW7OiCZyaWbt25UkSaoolUUT4Il0nS/2vcbSw==",
"dependencies": {
"@stablelib/keyagreement": "^1.0.1",
"@stablelib/random": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/xchacha20": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz",
"integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==",
"dependencies": {
"@stablelib/binary": "^1.0.1",
"@stablelib/chacha": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"node_modules/@stablelib/xchacha20poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz",
"integrity": "sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==",
"dependencies": {
"@stablelib/aead": "^1.0.1",
"@stablelib/chacha20poly1305": "^1.0.1",
"@stablelib/constant-time": "^1.0.1",
"@stablelib/wipe": "^1.0.1",
"@stablelib/xchacha20": "^1.0.1"
}
},
"node_modules/bech32": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz",
"integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="
}, },
"node_modules/bn.js": { "node_modules/bn.js": {
"version": "4.12.0", "version": "4.12.0",
@@ -28,14 +177,43 @@
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
}, },
"node_modules/bs58": { "node_modules/canonicalize": {
"version": "5.0.0", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz",
"integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A=="
},
"node_modules/cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
"integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
"dependencies": { "dependencies": {
"base-x": "^4.0.0" "node-fetch": "2.6.7"
} }
}, },
"node_modules/did-jwt": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-6.0.0.tgz",
"integrity": "sha512-ZtpKcE/vD2CkVRiRbr/43qTYItCkV1QEIG5inMwEnuMzmf+otUhX/xkLMOsQPLmRN8nqTJo58bGXRCsKf5L2rw==",
"dependencies": {
"@stablelib/ed25519": "^1.0.2",
"@stablelib/random": "^1.0.1",
"@stablelib/sha256": "^1.0.1",
"@stablelib/x25519": "^1.0.2",
"@stablelib/xchacha20poly1305": "^1.0.1",
"bech32": "^2.0.0",
"canonicalize": "^1.0.8",
"did-resolver": "^3.1.5",
"elliptic": "^6.5.4",
"js-sha3": "^0.8.0",
"multiformats": "^9.6.4",
"uint8arrays": "^3.0.0"
}
},
"node_modules/did-resolver": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz",
"integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw=="
},
"node_modules/elliptic": { "node_modules/elliptic": {
"version": "6.5.4", "version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
@@ -74,6 +252,19 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}, },
"node_modules/jose": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/jose/-/jose-4.6.0.tgz",
"integrity": "sha512-0hNAkhMBNi4soKSAX4zYOFV+aqJlEz/4j4fregvasJzEVtjDChvWqRjPvHwLqr5hx28Ayr6bsOs1Kuj87V0O8w==",
"funding": {
"url": "https://github.com/sponsors/panva"
}
},
"node_modules/js-sha3": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
"node_modules/minimalistic-assert": { "node_modules/minimalistic-assert": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -84,41 +275,220 @@
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
}, },
"node_modules/node-addon-api": { "node_modules/multiformats": {
"version": "2.0.2", "version": "9.6.4",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz",
"integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg=="
}, },
"node_modules/node-gyp-build": { "node_modules/node-fetch": {
"version": "4.4.0", "version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
"node-gyp-build-test": "build-test.js"
}
},
"node_modules/secp256k1": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
"integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
"hasInstallScript": true,
"dependencies": { "dependencies": {
"elliptic": "^6.5.4", "whatwg-url": "^5.0.0"
"node-addon-api": "^2.0.0",
"node-gyp-build": "^4.2.0"
}, },
"engines": { "engines": {
"node": ">=10.0.0" "node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"node_modules/uint8arrays": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz",
"integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==",
"dependencies": {
"multiformats": "^9.4.2"
}
},
"node_modules/web-did-resolver": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.14.tgz",
"integrity": "sha512-jKF708NEebihZ2Nhj/MLS4+9LoYUhv0/65F/9GSgoNTSYQaNTRNjbZdEGsbahT8YVKCcLEP1luzG2mj5UP6uDA==",
"dependencies": {
"cross-fetch": "^3.1.2",
"did-resolver": "^3.1.5"
}
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
} }
} }
}, },
"dependencies": { "dependencies": {
"base-x": { "@stablelib/aead": {
"version": "4.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz",
"integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg=="
},
"@stablelib/binary": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
"integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
"requires": {
"@stablelib/int": "^1.0.1"
}
},
"@stablelib/bytes": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz",
"integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ=="
},
"@stablelib/chacha": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz",
"integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==",
"requires": {
"@stablelib/binary": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/chacha20poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz",
"integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==",
"requires": {
"@stablelib/aead": "^1.0.1",
"@stablelib/binary": "^1.0.1",
"@stablelib/chacha": "^1.0.1",
"@stablelib/constant-time": "^1.0.1",
"@stablelib/poly1305": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz",
"integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg=="
},
"@stablelib/ed25519": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz",
"integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==",
"requires": {
"@stablelib/random": "^1.0.1",
"@stablelib/sha512": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/hash": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz",
"integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg=="
},
"@stablelib/int": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
"integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
},
"@stablelib/keyagreement": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz",
"integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==",
"requires": {
"@stablelib/bytes": "^1.0.1"
}
},
"@stablelib/poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz",
"integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==",
"requires": {
"@stablelib/constant-time": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/random": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz",
"integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==",
"requires": {
"@stablelib/binary": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/sha256": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz",
"integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==",
"requires": {
"@stablelib/binary": "^1.0.1",
"@stablelib/hash": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/sha512": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz",
"integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==",
"requires": {
"@stablelib/binary": "^1.0.1",
"@stablelib/hash": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/wipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
"integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
},
"@stablelib/x25519": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.2.tgz",
"integrity": "sha512-wTR0t0Bp1HABLFRbYaE3vFLuco2QbAg6QvxBnzi5j9qjhYezWHW7OiCZyaWbt25UkSaoolUUT4Il0nS/2vcbSw==",
"requires": {
"@stablelib/keyagreement": "^1.0.1",
"@stablelib/random": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/xchacha20": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz",
"integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==",
"requires": {
"@stablelib/binary": "^1.0.1",
"@stablelib/chacha": "^1.0.1",
"@stablelib/wipe": "^1.0.1"
}
},
"@stablelib/xchacha20poly1305": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz",
"integrity": "sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==",
"requires": {
"@stablelib/aead": "^1.0.1",
"@stablelib/chacha20poly1305": "^1.0.1",
"@stablelib/constant-time": "^1.0.1",
"@stablelib/wipe": "^1.0.1",
"@stablelib/xchacha20": "^1.0.1"
}
},
"bech32": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz",
"integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg=="
}, },
"bn.js": { "bn.js": {
"version": "4.12.0", "version": "4.12.0",
@@ -130,14 +500,43 @@
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
}, },
"bs58": { "canonicalize": {
"version": "5.0.0", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz",
"integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A=="
},
"cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
"integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
"requires": { "requires": {
"base-x": "^4.0.0" "node-fetch": "2.6.7"
} }
}, },
"did-jwt": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-6.0.0.tgz",
"integrity": "sha512-ZtpKcE/vD2CkVRiRbr/43qTYItCkV1QEIG5inMwEnuMzmf+otUhX/xkLMOsQPLmRN8nqTJo58bGXRCsKf5L2rw==",
"requires": {
"@stablelib/ed25519": "^1.0.2",
"@stablelib/random": "^1.0.1",
"@stablelib/sha256": "^1.0.1",
"@stablelib/x25519": "^1.0.2",
"@stablelib/xchacha20poly1305": "^1.0.1",
"bech32": "^2.0.0",
"canonicalize": "^1.0.8",
"did-resolver": "^3.1.5",
"elliptic": "^6.5.4",
"js-sha3": "^0.8.0",
"multiformats": "^9.6.4",
"uint8arrays": "^3.0.0"
}
},
"did-resolver": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-3.2.0.tgz",
"integrity": "sha512-8YiTRitfGt9hJYDIzjc254gXgJptO4zq6Q2BMZMNqkbCf9EFkV6BD4QIh5BUF4YjBglBgJY+duQRzO3UZAlZsw=="
},
"elliptic": { "elliptic": {
"version": "6.5.4", "version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
@@ -176,6 +575,16 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
}, },
"jose": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/jose/-/jose-4.6.0.tgz",
"integrity": "sha512-0hNAkhMBNi4soKSAX4zYOFV+aqJlEz/4j4fregvasJzEVtjDChvWqRjPvHwLqr5hx28Ayr6bsOs1Kuj87V0O8w=="
},
"js-sha3": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
"minimalistic-assert": { "minimalistic-assert": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -186,24 +595,53 @@
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
}, },
"node-addon-api": { "multiformats": {
"version": "2.0.2", "version": "9.6.4",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz",
"integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg=="
}, },
"node-gyp-build": { "node-fetch": {
"version": "4.4.0", "version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
},
"secp256k1": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
"integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
"requires": { "requires": {
"elliptic": "^6.5.4", "whatwg-url": "^5.0.0"
"node-addon-api": "^2.0.0", }
"node-gyp-build": "^4.2.0" },
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"uint8arrays": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz",
"integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==",
"requires": {
"multiformats": "^9.4.2"
}
},
"web-did-resolver": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.14.tgz",
"integrity": "sha512-jKF708NEebihZ2Nhj/MLS4+9LoYUhv0/65F/9GSgoNTSYQaNTRNjbZdEGsbahT8YVKCcLEP1luzG2mj5UP6uDA==",
"requires": {
"cross-fetch": "^3.1.2",
"did-resolver": "^3.1.5"
}
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
} }
} }
} }

View File

@@ -4,7 +4,8 @@
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"generate": "node src/index.js", "generate": "node src/generate.js",
"demo": "node src/demo.js",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"repository": { "repository": {
@@ -18,7 +19,8 @@
}, },
"homepage": "https://github.com/chike0905/did-web-on-gh-pages#readme", "homepage": "https://github.com/chike0905/did-web-on-gh-pages#readme",
"dependencies": { "dependencies": {
"bs58": "^5.0.0", "did-jwt": "^6.0.0",
"secp256k1": "^4.0.3" "jose": "^4.6.0",
"web-did-resolver": "^2.0.14"
} }
} }

4
src/config.json Normal file
View File

@@ -0,0 +1,4 @@
{
"DOMAIN": "chike.xyz",
"GH_PROJECT": "did-web-on-gh-pages"
}

41
src/demo.js Normal file
View File

@@ -0,0 +1,41 @@
const jose = require('jose');
const crypto = require('crypto');
const CONFIG = require('./config.json');
const DID = `did:web:${CONFIG.DOMAIN}:${CONFIG.GH_PROJECT}`;
const JWK = require('../keys/jwk.json');
const didJWT = require('did-jwt');
const Resolver = require('did-resolver');
const getResolver = require('web-did-resolver').getResolver;
const main = async () => {
console.log('=== Import JWK ===');
const privateKey = await jose.importJWK(JWK, 'ES256K');
console.log('=== Sign with JWK ===');
const jwt = new jose.SignJWT({ 'claim': 'this is Example Claim' })
.setProtectedHeader({ alg: 'ES256K' })
.setIssuedAt()
.setIssuer(DID)
.setAudience('urn:example:audience')
const signed = await jwt.sign(privateKey);
console.log(`Signed JWT: ${signed}`);
console.log('=== Verify JWK with did-jwt ===');
const webResolver = getResolver();
const didResolver = new Resolver.Resolver({
...webResolver
});
let verificationResponse = await didJWT.verifyJWT(signed, {
resolver: didResolver,
audience: 'urn:example:audience'
}).catch((e) => {
console.error(e);
})
console.log(verificationResponse)
}
main();

58
src/generate.js Normal file
View File

@@ -0,0 +1,58 @@
const jose = require('jose');
const fs = require('fs');
// Setting
const CONFIG = require('./config.json');
// Templates
const DID = `did:web:${CONFIG.DOMAIN}:${CONFIG.GH_PROJECT}`;
const DID_DOCUMENT_FRAME = {
"@context": "https://www.w3.org/ns/did/v1",
"id": '',
"verificationMethod": [],
"authentication": [],
"assertionMethod": [],
}
const main = async () => {
// generate KeyPair
const { publicKey, privateKey } = await jose.generateKeyPair('ES256K', { crv: 'secp256k1' });
const publicKeyJWK = await jose.exportJWK(publicKey);
const privateKeyJWK = await jose.exportJWK(privateKey);
const key = {
"id": `${DID}#key1`,
"type": "EcdsaSecp256k1VerificationKey2019",
"controller": `${DID}`,
"publicKeyJwk": publicKeyJWK
}
const didDocument = DID_DOCUMENT_FRAME;
didDocument.id = key.controller;
didDocument.verificationMethod = [key];
didDocument.authentication = [key.id];
didDocument.assertionMethod = [key.id];
console.log('=== GENERATED DID DOCUMENT (./docs/did.json) ===');
console.log(JSON.stringify(didDocument, null, 2));
fs.writeFileSync('./docs/did.json', JSON.stringify(didDocument, null, 2));
console.log('=== GENERATED PRIVATEKEY JWK (./keys/jwk.json) ===');
console.log(JSON.stringify(privateKeyJWK, null, 2));
fs.writeFileSync('./keys/jwk.json', JSON.stringify(privateKeyJWK, null, 2));
console.log('NOTE: DO NOT SHARE THE JWK\n');
console.log(`=== NEXT STEP ===
1. commit and push the generated DID Document.
git add ./docs/did.json
git commit -m "generate did document"
git push
2. Setup github pages on GitHub so that publishes 'docs' directory of main branch in this repository.
https://docs.github.com/ja/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site
3. Check Your Github Pages are deployed.
4. Resolve generated DID:web in Universal Resolver
Generated DID: ${DID}
`)
};
main();

View File

@@ -1,48 +0,0 @@
const { randomBytes } = require('crypto');
const secp256k1 = require('secp256k1');
const bs58 = require('bs58');
const fs = require('fs');
// Setting
const DOMAIN = 'chike.xyz';
const GH_PROJECT = 'did-web-on-gh-pages';
// Templates
const DID = `did:web:${DOMAIN}:${GH_PROJECT}`;
const DID_DOCUMENT_FRAME = {
"@context": "https://www.w3.org/ns/did/v1",
"id": '',
"verificationMethod": [],
"authentication": [],
"assertionMethod": [],
}
const main = async () => {
// generate privKey
let privKey
do {
privKey = randomBytes(32)
} while (!secp256k1.privateKeyVerify(privKey));
// get the public key in a compressed format
const pubKey = secp256k1.publicKeyCreate(privKey);
const key = {
"id": `${DID}#key1`,
"type": "Ed25519VerificationKey2018",
"controller": `${DID}`,
"publicKeyBase58": bs58.encode(pubKey)
}
const didDocument = DID_DOCUMENT_FRAME;
didDocument.id = key.controller;
didDocument.verificationMethod = [key];
didDocument.authentication = [key.id];
didDocument.assertionMethod = [key.id];
console.log('===GENERATED DID DOCUMENT===');
console.log(JSON.stringify(didDocument, null, 2));
fs.writeFileSync('./docs/did.json', JSON.stringify(didDocument, null, 2));
};
main();