{"_id":"@c4dt/dynacred","_rev":"190-a423ba466c1f9341965732f33116688d","name":"@c4dt/dynacred","dist-tags":{"latest":"2.0.8","dev":"2.0.10-p20230914072535.0","devn":"0.0.6-p20190808085341.0"},"versions":{"0.0.1":{"name":"@c4dt/dynacred","version":"0.0.1","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"types":"index.d.ts","scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@babel/polyfill":"^7.2.5","@c4dt/cothority":"^3.1.14","@dedis/kyber":"^3.0.7","@stablelib/blake2xs":"^0.10.4","@types/crypto-js":"^3.1.43","@types/node":"^10.12.18","@types/sprintf-js":"^1.1.1","buffer":"^5.2.1","co":"^4.6.0","dexie":"^2.0.4","file":"^0.2.2","isomorphic-ws":"^4.0.1","keccak":"^2.0.0","lodash":"^4.17.11","long":"^4.0.0","moment":"^2.24.0","os":"^0.1.1","protobufjs":"^6.8.8","pure-uuid":"^1.5.5","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^2.3.5","tweetnacl-ts":"^1.0.3","util":"^0.11.1","ws":"^6.1.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.3.1","@types/bn.js":"^4.11.4","@types/dockerode":"^2.5.11","@types/elliptic":"^6.4.2","@types/jasmine":"^3.3.5","@types/lodash":"^4.14.120","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.5","coveralls":"^3.0.2","dockerode":"^2.5.8","jasmine":"^3.3.1","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.3.3","ts-node":"^8.0.1","tslint":"^5.12.1","typedoc":"^0.14.2","typescript":"^3.1.6","webpack":"^4.29.1","webpack-cli":"^3.2.3"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.1","_nodeVersion":"11.11.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YGxmLOoh5SmN4AqhXPXZj9Z7p6JnBaOMoKnMGycBBvfKqaHRV74SqICNIV+zdFnhc9H/SyRiOGU6BpTl9owffA==","shasum":"3f742097fa773f45285102478f6dabf0d3015866","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.1.tgz","fileCount":174,"unpackedSize":3762305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdE5QrCRA9TVsSAnZWagAAZFQP/jU8I/zVeYBbYUCKf4bQ\nolwBOOzspHL29Nnz4HFp9esUGBINzXBBE9jWFSTvBtnKr33bWg2WHki7CKpi\nToYVIuz0Kl/ZB26A3XLWEU8vyql2uTeDZL7K4A+wZajyvzL9ZWFrkC/iM5QN\nYl32zV+pop/uA6HV7Z2ipLXzNq5jmxwrPluMupmPmm3F0KSDyWAO87/IlRZC\nC25LpLMJ61cCa49qRRx8FUXDFH4ig+RQTk+y4T4j9BazG2DGF4n8dblgC+4F\nVO/8EdB2RSE/GSIRtRnMB9WirSiyAL0630pGOULbafsagXzLSNqkhmDMrIHK\n2BncFvTXVE4FXNfYrvQSJACKPdhzv+K2oWh9a8NrmrwOYVtxOUih2QP2o+n1\nw+hu76kVxk+GNsOxZjp692g43cWkIMkz8yrd9yvow7C52WVwuerH4NqHbXkP\nfppscHHGBZYz5DHe+q1hYPmSEnAPFDXuJXA3ZI+3utO+5fgioxdIrjyVAkQo\nbCRtqN1Yw2mG9vs34jp0woXVBvpu0bDar9MXmKUiqZ83Zo8YtJ8z1FDyzQbp\nVgf2PPibs8wCfz6hgZLdlVzoHc8x1FVU3OH947QKKnANxQncgRrV/Ttvid95\nXo6vJox6pqw4ja9ZkSmPce0BfOcUVxBZlVNwV/spJXnk0xcfvrQH+BNzKLf6\ns47o\r\n=1KlH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUSQTPongzDiqQaZxFO2SCtZzx0ncf/dkRMLE/it02GAIhAOhoMQgPXy+pRga7yl42bu/UzBnmXefAZcTcggo8WSnA"}]},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.1_1561564202771_0.3276540041469418"},"_hasShrinkwrap":false},"0.0.2":{"name":"@c4dt/dynacred","version":"0.0.2","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"types":"index.d.ts","scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@babel/polyfill":"^7.2.5","@c4dt/cothority":"^3.1.14","@dedis/kyber":"^3.0.7","@stablelib/blake2xs":"^0.10.4","@types/crypto-js":"^3.1.43","@types/node":"^10.12.18","@types/sprintf-js":"^1.1.1","buffer":"^5.2.1","co":"^4.6.0","dexie":"^2.0.4","file":"^0.2.2","isomorphic-ws":"^4.0.1","keccak":"^2.0.0","lodash":"^4.17.11","long":"^4.0.0","moment":"^2.24.0","os":"^0.1.1","protobufjs":"^6.8.8","pure-uuid":"^1.5.5","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^2.3.5","tweetnacl-ts":"^1.0.3","util":"^0.11.1","ws":"^6.1.2"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.19","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.0","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-qY9CFPxAku/ToZV2xlBme3KRHj7P7tlftsvkbFPnf4iOrG34OMoCfTwdpJ/2XqU5PAKRm+Fwo+eOjSxQQvAf4A==","shasum":"638558e2cce01e50307ef9618eab01b729a492a3","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.2.tgz","fileCount":29,"unpackedSize":168546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFKIwCRA9TVsSAnZWagAAMNUQAJeTE9VlTmhfIiGOsg2n\nE2PGaud53IwtEZTMD5KLUXj3L7Ua5UB4fDHfSWZDPzocV46D1kxt1Kgp4qqW\n2RJUP2j0Clw2dg+MCEHj8K753nttM3i++10qyfGb+8+XvDgwW5q7BZjrXvzo\nDW5yPZiPcLnk+AJQRpXnCCcUEyCF69xkE8evmHiP+BxVuHOqDTBya8sEQiUN\nzRjI3KRdmpxXRKckVmQ6XrblarTjIUUagRR/2BB4acOtBdEjBU/lcE1Cj33Y\nV6whUCNB95EsJ8XOEHMlQmlkJbzPtkdDhgyINO2BnaTrcyJoC/E8IZK3nCj1\nIAoA/UM3EEbz9bQIauZSS/DJoJL8CI3My6Jgmp/BxXXDLXBjDxHDbm1lhkNU\nZKpB6Adbcyx7bpJ2U+E0PwQ7RAsDtzP3a1zoceEegiUAdQa6d66VBN/WdyIh\n0tqHhQR8BPvv7H6rdWdIDPJQfykpl0Ks1XJxT0xFPd0/gUGy8BENfq19NMV6\nURxXRr6myqJ7ARr8PxRSkSVmg6vpaydii/dDSCJVcsRl6+XGsIkR2e+AUjUh\nm5mmCAMzCnGD5RnZGcT41IdbMAJJiFon0L1wlA0RvqgZEU8O766oUQMKug4j\nSr/wVnnUuFFC5jhWezyC1fFgvdG/Or9TrBmFfXMi31EcHfpN5e99pm93DbGt\nNbAJ\r\n=/0rP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7DxoaUjlD/nbHz8e9DTkIj4SZXjbiINn9UkOq9TsL6AiA4yJe6VMcXhgFfqcSxOAIAU6+0Y/cnaiF7N28gwhnwiw=="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.2_1561633327421_0.6591383521752956"},"_hasShrinkwrap":false},"0.0.3":{"name":"@c4dt/dynacred","version":"0.0.3","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"types":"index.d.ts","scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@babel/polyfill":"^7.2.5","@dedis/cothority":"^3.1.2","@dedis/kyber":"^3.0.7","@stablelib/blake2xs":"^0.10.4","@types/crypto-js":"^3.1.43","@types/node":"^10.12.18","@types/sprintf-js":"^1.1.1","buffer":"^5.2.1","co":"^4.6.0","dexie":"^2.0.4","file":"^0.2.2","isomorphic-ws":"^4.0.1","keccak":"^2.0.0","lodash":"^4.17.11","long":"^4.0.0","moment":"^2.24.0","os":"^0.1.1","protobufjs":"^6.8.8","pure-uuid":"^1.5.5","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^2.3.5","tweetnacl-ts":"^1.0.3","util":"^0.11.1","ws":"^6.1.2"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.19","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.0","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-83Muuj0KSLw7ByrmCXbWhX8ufFQnLvYYtjMA+IC8s/ppIw1/aQIACZDvvh20FbszWR3S8MZU/o3tSEgHXKwFgw==","shasum":"be9816dbf1f176c2f721a54908b3590f99d70920","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.3.tgz","fileCount":82,"unpackedSize":3396720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFLyVCRA9TVsSAnZWagAA4YAP/Ru00Ps1ewgc1RG1ccJ7\n27zL7yZKr0Vby6tgcfnb9ZpAJL9Y/c1joE/1a8W1gYcLPJ3soS43I3WUT/x+\ncpw0Om/3dlYh5AsiFMQmilruWFMbIcobQEwj0/SEdpdvbhB80jCZMaKl+thg\n6CKWC3H7cV5q4Y4y+0rjcOGQExVxcUnHArU0HrklAk636Ph6+Mgj9YwDFhdj\nmYelmY8rcGsQ/IvYKRaZKEO/jmRuDAhdQSdxiYD3yqzRB5JSJh3DrGUerVGM\nl8If2JoXgiphtDP2IclV0uxhFebPGlA22vQYhX40ndKhzhhYILTXRK/e8cfA\nI09YJTVwKLnF7B9xc6AtD61W0Uy8Su53Wu5D57i5tHJD43IM/oW0higIlMSm\n3Hn3xMEyYPjmr4mExVtDC9qgHlY1Db8EAcd/FSD3cw6zWo4F8UA3Lv/smJLy\nIZvkmEiQapHB+AF8ClubszIZvObfS0WXmZqcX/TFwU1rZ5O2iwMrzfM7do8m\nLVWWDzsy+2TJNMro8GVBVR/nAEU7eyCCf6irqNCbU5OP3ujlqTidRsCVxs2T\nAqj7nEMb+Cr4eUh0r6+c6BEfgSnrn8hW+Bn9CW1GKTGx/kyFRcCzsYU1dUKI\n8Dcoki76MrOjswGidCvJVz3OGZLERMV115n+eB2GndabbolbzU/ISMgxQhIj\n9W84\r\n=QU7N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7lqkKULE9cg02K90Q27Y7GApmpNxJXPGRQbNz20/fAAiB7QsgDAsRjhiB/ZDfPR1xywmupoVtzVWZEscEcZ3nxrA=="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.3_1561640084641_0.36904321638718773"},"_hasShrinkwrap":false},"0.0.4":{"name":"@c4dt/dynacred","version":"0.0.4","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"types":"index.d.ts","scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.4","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-6+LyHj6B0o+iB88xzGswZddtZSPGqzjmqYEFaOrwJMdq6sVKa3Oj1JSntiiu2+rSHUvl0oTBP3uOAdZoN6+h9A==","shasum":"9f6d6f0d5034ba523c8f538c0cfa85a41dc3d34c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.4.tgz","fileCount":86,"unpackedSize":3407112,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGyTDCRA9TVsSAnZWagAAdOoP/3x6ExtgeWgwNrNnKuqT\nribYWfi+/l1B05VMxFp1FJb+Kb3AjagwEeBvkGhdx0a0+dRCu6NsGM8Qhrt+\n9nwVAQYoQl4wf3fgxllJd3RqjDjR8Egzov7e3O2tQIJxH13QHoyYIN5ebq0D\nPDgNL5Gd1ORZvKn2c0NK0ftoQYlK27qZGNT3ATb6qkhTwXh6SZSqGQ8CHnXG\nqsVlQezi19ZMuQ9lsGhrVVIQ3oy0+hovFmcwxM62ZInkxQZQSOlXzH/BkrZF\nWDMk0egPeIHPVRx4tKssxH129z2jrPMAdh436DUdnOqNp8jn2sEcIQ1mP6fq\nBYlltQ9LwEpdAD+Mpr5NbmlH6olMDYL3JRh6sEBSdtbsubueGX2b/G1qP/Jy\nEE0mpFasr2yLu4bY32epsqQQxDMZQsQqZ1TtqvzRf4bSSpYxd1NvNt8IC3i3\nfk11uom5aptRg8xkwa+grrNiZiLFf1+Dc7i3MqcQYmMYI9BoG+ozJPfaUht0\nlGHujlj9glRbXPGAxk86uptt4LAUPJVYUtk6FAwlaXPEuup3BBTDA6tUB8C9\nNJ9VRO68Hi9QC3AXu2OiOvLtpuSG10HMq2Nvp+JPzrqL1EtmRbqL/FoTFYr2\nZNJhlCeZTxKKcS3Admmlty+xqmYZAsqUMH2H+aEKlAHIMwN/rquJzPrwfqJt\no/OV\r\n=RCYL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2eAfJbh55MoItBANyxQ6E2XRAktTdNOLQTZgZozN6HQIhAMHIYygztp8/DDASrVirTyW+UR7SoJRyl1axsdQjQKSR"}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.4_1562059970133_0.11914185619235207"},"_hasShrinkwrap":false},"0.0.5":{"name":"@c4dt/dynacred","version":"0.0.5","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"types":"index.d.ts","scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.5","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-W+xJeT3LuPhCjMPVGclVhK+Z7fzDEqEyE+jksMvJAgVJXQ4wGYwSEHDKficOBgL/RDyr7zBGUst+/66jK+xBDw==","shasum":"246f743e7b0dd271cf11a8cd6533a2f3adceb9a2","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.5.tgz","fileCount":86,"unpackedSize":3354962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHHWOCRA9TVsSAnZWagAAg9sP/jZqaIlKTS6+hud8LHOk\nZUofqqWiBnEYRvFDy/8bfDvxbEf1VqFnV8GPR/VlsM+nAF+nq5sbvsSETDy6\nsh11WGjI0Nw3fiF0INqa7u4WgyRW/WxYpQxLv8H+WHpaZe/eAUCGuSQ7412t\nX5vKq1vB1WPbz6AZtcbHoga5GnD+24TFrCtDfP/12k0FmFszh9zpbfDmwuaV\n9rhAHQpbVLDSuOyoOXGmtscG/vTj8hotT25H8+IO60e7ItPPXmKZzXZdfEr3\nF2WhTbLDkCH3/XiM9rfpQ2w+wigyu4hy7a/8gweYmyEoi9bISIDB8IK9E5fE\n2UNLNy1ymKqR/rNQBda2MW6JK+jOJNp49fCbQ5kgEJQRr0or6s0tF2hhzRpz\nh1vLnyWcLjrvrv06U21kn3vQCPG6wTJ38+4iY11uRdW8+KOuD/HbLYjV7k1u\njuApoPzp6pS4w2XoV2ZJmw0MWBOONZhrPW+56dJHDuj9rqDRh7RYv7PB0S8E\nuvx/lpS58Ve2E407bnupEdKli2MmX669UYhCY0YOyJTM21WDH8SK9Mos+qDP\nUA2sL/14e4r8KOHoQuGXncvCnqawzmzdTr31qQDf3dJFZwQvDohoZgDr3Kad\nuAW7vE+MsazlqvqoBqHOwiqZFAeD4C4PEGX44LVJ/24u66PuKYAyU0a43hkM\nT+cm\r\n=brFx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGEdtD6VX7KEDTyhMfCU/dnvtmDkDJIBw8SCsggKNO9uAiAqy21xN5YgLSPGeCgQrodarNiEjXUo4lX6WyzailNBOg=="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.5_1562146189309_0.8964219747466164"},"_hasShrinkwrap":false},"0.0.6-2019.7.9.14.16.0":{"name":"@c4dt/dynacred","version":"0.0.6-2019.7.9.14.16.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","dexie":"^2.0.4","node-fetch":"^2.6.0","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-2019.7.9.14.16.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-HHtYQ8ivK1cIyHWtX60t8BPSCcLnRyIdAgsIeu9pSJGPBhsso44CjqG/+GKZMPYChrfPWkdKjw1Fay6cHoAdSw==","shasum":"cf53f6c349ed8d0fcb2f95e3c6e89dcbf54f1055","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-2019.7.9.14.16.0.tgz","fileCount":82,"unpackedSize":3348224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJJLCCRA9TVsSAnZWagAAnKsP/A6mbmN8nk17dPil4v98\nL17UD+KMSoXnDSOCrzoqZGhdcm0wuioJLVRZ59vebPTp4xYKqquAV6j6UTlG\nVwEO/A1NLvFERK+YqdKR+fVh5bW1dNZzf8AHq2ylAJESoJ9y2kyG9Me8/5C3\n7IajwYPDOY7jpzG4ht41xG9A/qPmv9SdFzdQNi0tlaV7YxVvGUXpAcetMq4/\ngEXXtGSlgbuizHaeKZU7apzp/OuTctXPc6TB87223gqxWl8lyZBEcFJ0/+A2\nskou1W+UNS/hGoNQy/dRG+NZxn8/b4akIw6NprpJP1qjeqY7W81R3gPYc3bQ\nLvDJlyYry2rWD7Uw02VbLB7rkQeoUacPa6pn3XBbRqUkC8QG1yqohuZDFux2\nJBukojST3+xZfpfY76vBbGVYjLolg6NzJzbL338V3fNm+7GeFih3Tyz8uuIf\nzwcS4/fIMyWHHnI3PIxo4biUjhhVUcJAhMlI+J3lhQiaOVevW1U9BPO0hOsz\nEbJJbBJOKM31DQm/rdonx8WHhXt168tve0vbcvHTzZ0vjS3hZsKYdHFWIRVR\nnWl8bDqxcDIixCpgq/yehBmS+2vayVa++pxOxiHRrgGJkipCeoU5J8mz35y6\n7Md3nAgiAxQ7qAyPfTzZBBRrSysWgniBTmNgIEkVEdOQGWdqfXjcu2gA+f0q\nDJNe\r\n=Xvop\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDshlRKC/TKQG0BKM7I0C/K59YrP6PlFkk8J5zguiibmAIgEd/qzg3LXDZMUKgOt9meVIZBIykGHK3ZvJ3jKOaYveg="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-2019.7.9.14.16.0_1562677950978_0.07622004354063949"},"_hasShrinkwrap":false},"0.0.6-p20190709152243.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709152243.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","dexie":"^2.0.4","node-fetch":"^2.6.0","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709152243.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-od692GpxkmC7104AUOwddbbrIbOoMATMzmewqgM6ouuRnPYYHkLw6yMMt1GHddPBEmvlLV3neALWOMthyieADw==","shasum":"b1764c246c5c1dd9ea5a71dd4eb5a6b352eef468","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709152243.0.tgz","fileCount":82,"unpackedSize":3348223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJJU2CRA9TVsSAnZWagAA9VYP/11i47kUY/Jc3sTRmbdM\nYvnzMQp7yUZZJ+tdrfmtxrg6fuzjpw1OVQ04BzmvsMKdro3bMsO9Cln2DqBF\n9keM9Ii5sl5uHxjvvFZVBcaJp8Hvd+/r+ywjy1pe5+ob1h9r4Ctni9ewYiOc\newal/07qwiGbDSSEUOTcCF3w/E9F4eC5JblF1x1K9YJg+sVclxStAqTzNBnM\ndZlVjuKu6J3SwucvYpfP5RIinJek2t6OFAp5hTY1ciCkMn1ETW2D4+YxiSIa\nqeJ2BItonBeW3sJrWWdu5zmgI2vDRJCDIKVFyIip6hd47IM/KrY/pNoQ/zVT\nSTHy8NaQLVDgvbZfITXOmHDVpVyGANA9BdJeXwk8Gq+9G0PwRlak7uH/2y1X\nFre6Nu4VQzr0XxBUp9ZlWyPXqBalaAct8PJEA8Z1XWqd55SYsbhG7Gnv5dfq\n1UoArI10jjEj781As0joKzqAmvsNar3Q5t4c/bHgTa+0i34KFGDQX87Lpxde\npiz9FjNAHPglFQTSCmBg5oF8qPttFz08jwb6QgUG8i3927oYMQTpAqGdKn9P\nrh0U9ncOwWbtEBnF3yuIyHEjmKZa4D13Yq0Ky+RXDt9el4ibTJZFIhHBvKDp\np4TzMJ60qur1fXeJ1H+k/vxlsLq+r0SQYivXB4x+2LQl+xB08f4T6NdSWLBn\nSFfD\r\n=B9hp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA7qNAENAgIStv012mIN2KjzWU1LreERdo2wMYHqQCOgIgOjijW/wXXQa2lyu/x4zzyUtxJXpOxXaOl1fAPCIiL2I="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709152243.0_1562678582017_0.33941020286672874"},"_hasShrinkwrap":false},"0.0.6-p20190709152317.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709152317.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","dexie":"^2.0.4","node-fetch":"^2.6.0","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709152317.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-05EkSCqeePATSx5NqGRg3E/POgOqvUpVY1oNg0xS2QPqCMciJtRL+idwbdx5JduER/G4xtz6iZg4THG47v2czQ==","shasum":"7f26b33c9b369b10d91aceecbd408dfe75422e06","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709152317.0.tgz","fileCount":82,"unpackedSize":3348223,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJJVWCRA9TVsSAnZWagAA9T4QAKNDIHwR5MvPZEY2nEyw\njpxUS68Q3SgMNseiyEXrR1OP+13lku8R5PBgDow1xCuIVWgHHEQ+KEKvx1Nl\npkxlSnHIfGB0tmr2JYT2kK41WoOkfBxyyfslOa3Njnwm9gsuDSCS9pl1OuOR\nMOrz62DZPbSANor4VbK+WVjemth0Vw1LxRtV1AxOgxwy8UiSAalgSsfS9ptO\nG4F6jKeDeZJqrxlgRkax/YVXpdZFkSE7shn9T2RP9B/lutFYwW7RDgR216Xj\neHc6FrEvuiX9qUj6YFOsZB0Jo9JCYsB+uU+1Tt3tjacwamE1piQqVcZrgxu8\n8HoHIYabG3jASfNmNF9fxuikBJRt9DQDts5UDGPqSMvOc7NI32h/BvXDo8ot\n4icJ6CO4DeglHikqD9IniFFo7WL4ou3pNsztrXZy8Pg8jQs/yAZ8aWI91ben\n3XLX7dg/lrE1PHPV5M3ZG1iMAEDLgRsasfkV25NgDlIUgg+MPUGb19dPYYJd\ntg6/UqyTDJTuy9gcxI15TbTgpUs1Gij4QyaeDnMLXQcCDH3mLmceFZmQgkuq\nQyRvKKf3Dm1AvxGR+fw8Py671Cr6rq7lIiHvjqatIP52dZ2Se7/mSvOqssKE\n24BevWhFtEPPDn/oDHiOimDTEANr/LK/zS77B7ebwIBMfk3znbMNVpH8fqj7\noMDw\r\n=lNEN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsrZ1oEXAyIVJ5jm0y+/t5lHxP/KDHVSUrPFlZrja73AIgDgpayYMbhuW8HQNmop/R7cRma2m/t6Yl/EAb1nYkoLU="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709152317.0_1562678614120_0.7625208520966247"},"_hasShrinkwrap":false},"0.0.6-p20190709170749.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709170749.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709170749.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-VuWkT58fCCRKSIqCaD0KBLOaUlaZHpIaHA1EuN+A+Itd68zUjQL/s6ujtZtlJMh19MrtLXuy4cSVqQewlRtLyQ==","shasum":"e3c36556aa15c8f3f2709b2eb80fa286353a5cd1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709170749.0.tgz","fileCount":82,"unpackedSize":3348224,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJK3WCRA9TVsSAnZWagAAs/YP+QEKLNo4L92FDfuGDn1j\nFL30D32AnVnKiniH7aSMxrQVA0akxr10OasH/HSTpc61sKbachP1gRjIAlxQ\nM5Bn4hcEcaFCv8iF5Z9iWLJnTniI30Zr/2ByiF3n/mdY6ak4fUX0LFZJUX6m\ntndWgJCDJu4oUXTpcc7QDlQnxN4TNasD57kOgkH10NlYVSPvyi8pK9A7jtLy\n6AZ4Qh5Jctad+TVq3y7m0QL/G/k2Sqg3qvIJoMYZdLFZUXsErOM+iRf8u8Xv\ngiXQKNjmTtbdDvHmLDcwp3K9NUgWhz8pHhohBUUc9eM9Vp8BrIL5CrlR3+X9\no4obOdVitc3KQe2v+mOOA4NzOZcg8PzrmPJdmCsA4ejkrbpOd19t8TfM9Rqy\n89zTK4RVEfHwWv0H7VnTlb27ZyJbDcJG08DPb39CT5AWC9mOQGz7Lz4HznXp\nZ+kcJTMrBiHNj8Cs/8eT/TB6OhZU+sH5Rd0dqSf6ST2nzO5P36J9AIHNi+Zs\nuQrhT3Hx2+pleq8294SS3ys3rI824R1sC4rEocsL0ZFnFzV4pGmlLfSLI4Rb\nmGwi3AD2BTPcOAFuQNpAVloWWxPzdvMdHjy+de1K1da6yipKruRVL+kaYOY7\n1gOy/NpQtiowPNdpF+QkP+PxJa7Ap0WYeYyl0BEJDrAyLWbQ1vDNjOe0FWTU\nPFqs\r\n=2S5e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4P0LNrl0A+eTwRngo6yI5Q7g/YGD4MhkuQUfM9oGy/AiEA+uljTmO6nR2JvvJCTp4RxDcfkNwq3nsqC63R44LSXY0="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709170749.0_1562684885819_0.22409766860307312"},"_hasShrinkwrap":false},"0.0.6-p20190709171718.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709171718.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709171718.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-mMf3yCX50f/z4OhDZZMS+2aG8UiazvVzVevoBrpxIheszqA0tu6mdNVc8VE76RSSUYDzBUJ6NowEDqo2mStiRA==","shasum":"0b7d1f31546c70b4895a3c2881b857cf88f6d1e5","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709171718.0.tgz","fileCount":82,"unpackedSize":3356057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJLA+CRA9TVsSAnZWagAAsJ8P/jC1VVqy6ZaVul5dMe0w\nx0Q9DYS36ZHPoy94AOHb+2DS9BwXKWtjT1R27/oCzvdYoOJCsveShcBctwjz\nwFz8mjkjH1enZQ+cTktI8N6DNlz1Sgb2lim9kuIzDaRFYvQXaaN4hgku+V9s\nu7kbBtv6bWDPVgwa91GJR6NTyod8nuoqp/5U00HNeJJekvSYYMqd88teRctf\n8CBz7v/4/uiWYXIYlq8ucm7zIleO4sPw8738KUHlQvOx6aQ/XufRdoa83/r3\nmw1E8hTt46lIjRzMD3hdqPo3IyJnFhgIkFLES26t7oaHgATPsvEo0RrhQToJ\nHAvFhnmLdxE9NjPqSvoRwiNxqRQr51+01MCMyHDVzqY9nEr7Ph74FnZovAny\nf5KloDB6hYXyoyXF2GjQwwVzE6M79fS81s2DilzTPH/4TVIJ0AXkqL820doy\nM1w077agQPFExgBeDadjc4IBqb1w+WLvGSg+pQUce/eZB7pKy7dUPPDxlAU8\n08dS/A6AvdA9Hzxg8+p9FmHaxSWd4seHfClyypjh5PmLZxTE3Y5h48OvG9Y+\nh042V9L2NFQubGVLGx/BUxL/TzlwTcALXZFkNxRkbeC9wAcELs6Vk1rulzqC\n6HZyodl9jXXqz5M3lkLKgS8H/2Non8DZe9lWmS1MsS8GZodGRiMf1bMxHhKM\nNJt2\r\n=/Qtj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhK5WgWTqAhXXRQbKP4gtNtmfe2nWyMkpJWd2jIDcLtAIgJwFlXijXKoVl9UNM2oUpzDr6XVBf+khBHgozZXfDzbg="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709171718.0_1562685501536_0.005329304329470874"},"_hasShrinkwrap":false},"0.0.6-p20190709173931.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709173931.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709173931.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-uoiuy5SLg9t8EHNnfvdQanDfFk3TBNIBJlBiZ45wa6AtrxZ6Myk5A1bcOaeH/is5oXWpVxAow/bXgzD2smdD1A==","shasum":"1ca83a994d6a2762edfdcc5fdf22dc942af0b0a3","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709173931.0.tgz","fileCount":82,"unpackedSize":3355704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJLVCCRA9TVsSAnZWagAAPDoP/3Zs4eELH9JD956+PthE\noRicUWjT+EOzoPbAd7VabgemGFYpC+vAE9JjeWP0XPqH8xrwu8uhEqZ7VZPY\nDptZYeeFAbKlqpZ0FLBcZUMEUb5UBFbuCXxIA/VF9zAH+A580YPYKhIcG9WS\nDloGUkQPhTftItdtEwZRAOdmpt9vKueHiNTfZtaqEzAJGSclczBjVOM2zl2o\nOFveUMGKiqUTLWSkJ6aJErTlgwo+W20JOhqRiep0mcG5RGKwcfwiO9e+HLES\nCJyIwHshRBxVB9e5Qs8c/ZMRTgNeFmWveFLoS7raDss1PSLgvs1inavBqv+n\n02CSraQApAw22QVMHGKGR/xFV1ErNAs4oYEv/1zS2tXuWkofT85VCvdv+hMT\ngsVtdIp8SQerQUzfg8NVBpW6IEZ9YEJ1mSfWQuU2MeLL21UgZFQJYXlwFanN\n0arV5kMNy0VKWfD1GHA41oq22EyOXWX+Z8614jDFx7PWZbhnAa1I1NTpwyTY\nDofAdc9RSotICJzLSDJ/5lQmH/pNEZ6PMNiAbdGVmME5vkM+HnRyTYG9pKWD\nkGZ7140vbGlOCX+J2+fz0d+r33c0e30iLX/F+B53Z2JoJbDpA1d1l/R2Vzks\nSQz13llSe6vNwtZnStEw+0JtFeB3jdkz6Q6SEESKsuqYMkBPstCPMBbTeTqK\nUCGn\r\n=DCZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9GVeqOZPxKTeqG3Tp8j5IaT1S9PnXKzzxuM1fw2yfTAiEAphAYbRugjrIZ1kRpXRse1rXezOAhQxHJaHd3x0OZ6xw="}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709173931.0_1562686785474_0.26297445523749086"},"_hasShrinkwrap":false},"0.0.6-p20190709174720.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190709174720.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190709174720.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.3","_npmUser":{"name":"tharvik","email":"valerian.rousset@gmail.com"},"dist":{"integrity":"sha512-2119DQ/PCpmprtii8XI7UKrd0bgZbW9uCXg/AQBJZAtwB41lvUyvjaRhpQQ30zdjDP0YjNP43bVRQm9BFjDfKA==","shasum":"3c4001289675e611421bd93c73ff77009d11266a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190709174720.0.tgz","fileCount":82,"unpackedSize":3355726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJLckCRA9TVsSAnZWagAAF0EP/RkNRl40NZE8Kg1sBL6N\n62OUMgGdfnGqT21RdBK743wjkWKZlNzRzqjK3CPIAjQMPnCRrovfnjkAkObR\n+4qkIJV6WkmqVHNe1JUCNax+S41sAVYKkLZZVYh7nKcpWB9QJv9bdifm63lP\nNTPOVdtgVhiZR8QXTFwb+hEsHXEeFgOhWAWN0x/qtwVNGgAaMa6oKl7SD90p\ny9x8hGzBAlrNc68rafq6ln2geHxHvSzb4qbTWz8ltjQsDZdXA/qhjhyrap/W\neuMIim29Lf2Gzh4kmDZOrIgywttgEpHLnDDVy3GLR7rSSVCJouj9XBlf/mxx\nE9M7sPnRcXMtq/LnbUwQFuK/2b+HKgF1CWYB89MPKlinOPdyawm1UQ1/yhZ8\nyNCMABf+wZXWSt2BCLRjhlLLw+pZJvqBZwp51q8LnQAJKr/wrM9pHMGZL5OP\n73GQmcpP9iq+ak2lxcutoi9UbV/AEiCEVDauZKiD/nmNUfXW2jP5QJEKTaSG\nO8H7+XVOVq6dNqbNucoGsUkavM2ecmi4XXXaxlYiqdF1SIupzyJyD2Z+09jM\n/QkmIdu2cJSsuBxPWsfpcZq1Mlsc3Kfp3dXr8FFrhj/Ejyn7gmKab6z8EdLC\nDMmjPSWpr0lK0qkhV8H6VRZl4vA2bOJCpaagnnUdNBU+l0T/P5NtCK23v9ah\nuyBJ\r\n=A+OS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHw2y9W0s6JFXEZewyO44uQMEjO5y7H6W0auiT1ADVhAIhANGDN9f1QCrPQqbpZ/Aesf4BiMHQ2Wlrf82cvQqqYufN"}]},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190709174720.0_1562687267674_0.130819984246058"},"_hasShrinkwrap":false},"0.0.6-p20190710110334.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190710110334.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190710110334.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+EZRIpe4/VIqAjPPnytekEGU5zaFB9lL95lW7yuwLRbIK0hY8XFr+eMU1MNf/TbbLQb7EWk7gd5sxF3UUk6cwg==","shasum":"fa9537c589a463cc9f6eb211c2136ba91cecbf54","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190710110334.0.tgz","fileCount":82,"unpackedSize":3355585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJcZUCRA9TVsSAnZWagAAg1MP/2oS/HqLVwdsaUaUYL5G\nrrIs4U6eiOf5h7U9fcHT+JjVGtoqoAspjw74+kwjpDeSGU0uF+cQr0NqgBJE\nYFqEaOm2Hf24Iep9QSZ85O12MgYpNAU0ciWFBud/Ek9nFH0PcRSi9meww2fp\n6HkmL0+1X6IxFrImk+9kN5hFmtmJ4A3MWGu6To7erhzcTtb9lSjjfElWSSM1\nAGL2q55P7Xw6KPbrNBSJXK0nKOpu0tzKJc+0yCEA8iOwmBGtiPS+ThJmAdak\nC2AWVqLCI7hnyvs3ri6kdeXlaqoOYx2awEocKVPLQ9UvIzvcs1ON2FrDCUlA\ntSoWxuMbbNiALnLAJ9UxnIIxpLhtOqIqcgKMRxxzXQkXKj2U58+ATenMC7kk\n6lYgyrjL5uFrPcsz6IknZZ5sI+Gsrjxdd1rCKWF58uROPmlomyCqd1mWlBmx\nyZWqOTxfzHBHYi2195DpFzEOmVgQAJGGA028GbdW8xBuNrYCr6Ya33ewP4a+\nkC+DQ4g476XgGUj2T7vxHtkYYdpl6DF0vzi2LTnih4WLisMgGdS6Z+mhLfmF\nQo/HAveU+NJg+I+iSfvGo9Lx5V7CXlvhrBIqAYLG1iWLZYYRR5TqLsZyu0s4\nSsSgB9ggVUsGLEKOqzifx1CV1b9u6cOoBlbxr6Rl7H4PjMZqxWIHA6GcL9jn\njdgK\r\n=yWqG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDw9EkLPPk0K2w2o4rWLvgQfJ+E7XtPLIgnXbfW06DMhAiEAuj07uUSTXghKV6udaMGEFWws8z7wMDQdRTKP2qCDYgc="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190710110334.0_1562756691791_0.8720719852592564"},"_hasShrinkwrap":false},"0.0.6-p20190711080705.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190711080705.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190711080705.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-GDUVPH1cR0SfsPO+zFixPUf3wYu/Aw1xzFIECADuBoBIxF07K/cKdRIMPFY8ymjgN4QMRBGPSeliIOqQzrlSUA==","shasum":"36336128aceaaf33941f89a58df52229f9899b1f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190711080705.0.tgz","fileCount":82,"unpackedSize":3356628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJu53CRA9TVsSAnZWagAAHTcQAJ/ybYCj0/Zc/ScfTmUZ\noFcl90uM3Dk2zfCr+HgMDaQewl9vc21mqczH5KViKgZtSz+0WYWru+1ZGpr3\n0N6tt2gRAGoK1Z/jH7GQBZ7iFfo856y06kAO7rLtZJSg30WLVdUmNH7TixNH\ngPahj0ffsk8VeN8CrwQoS6RveXtZiz9Jyaow+9pQ+6vq6enZBqJ4gl/LlwdC\niq7tzp/921Xe5MmH6+OnYafwegN2stN6WtB3YxG/dGQDzu80oQpgaoPBPQH7\n9jBxDqPIHyEgKgxsZGhybVEVDTmNcC+FCNSFJgxX60d/ozAgxhLiJbEPdxoU\n+qXwwgeZ3d++6jboUxuM7k36DNSBz1z4vUZz4c44Rz/pGZVU+SVD+yC2IbHo\nCtPi0Gzkf+HTeYJ5HBNmSTd+5yNHTde0+VMu4EoyztxeSoLvg9b8kg7fO6iq\n0bOUZsdCylb3iGQLeuj/b+kn0d3JOO/MxVPCFq1iemxJgcVtcIUpuHHbKzmV\npzd7xyx/LuanI1RFDw6Ip5EmUQbJiiqMQcbneZp1G6fZ/Sk3P0nBGgLnqvT7\nIsptBbzQ0oKn2pmAY1jA3exY6wDV+VCGINI/bqhnZ228+n6VnXKYSarNLuC7\n/Hd0UZPm8s/uS5uHpVC7LsVjyT/BfTnIh8WDIEgFZ/WfVM4/tWcC+VgWZISa\neNFa\r\n=UAqB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQAis8HJgeLTbShxk/zMQXMLxYDTIN5m5cRBlMb/XzqwIhAI2SkzR6IvNdAQ8ogWqLSdvfLAvZUHrD7N0YlgaQfVKP"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190711080705.0_1562832502698_0.37915741336075026"},"_hasShrinkwrap":false},"0.0.6-p20190712112616.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190712112616.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190712112616.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-boc/HllLrfhHiHSsb9sNl/mmGMr6fTve+xTyN++sS75PufImiLcOfTEu/XYn/zDSPaWZnXCvNdw3lkcxvxco+A==","shasum":"2762225fff432e712d9bfd441c335380d0aa1b93","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190712112616.0.tgz","fileCount":3,"unpackedSize":1693596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKG6jCRA9TVsSAnZWagAA+N0P/jEUSbM8nmfNMDSst/25\n1MIEvL7gAOzSpjUL2bui6dK02a2Lz4Kvc75gDpa/AJAWNfGA9u2lLjLJ4O2c\nFoB8v+O5l6RsX3Qb7u5Q/VKeCkYOChr+1dNWGbpqFbjghwKi3bnzdlnRzTVa\nklf7hOS9e7HF7OHQO/hXQLkruGHefIE7sfgENjcs5FwTb1OD/qJdjKAVAYVu\nQhVVd2NOSToPChgeHi2kzNyO2IjdEOdF++B8va/B4FTr9T7yp+0SSr2J9eB5\naHRLrRMsVsBOS7d9MjNJDCuHK17Qu9K+kEdrSqS0rYJW1UDkCRyPu61DF25v\n22PGbG/eFgVhvs3CbVilKPlfKfrReWLZoZHksT5SWmNPU3I7Cc9EFVfBN70x\ncqmj6/PquegRFS6F4npQMZh2R7sfllndsThbxGHUBLSZ40xSTP1bH21y1Z7x\ntuyW7A+OF30+DlFJUuel0JR6RDg7XMZlyp2F4In+JtsHSXbpGO9nTPw4c7a5\nwTjJK0D5LcL8eeVvlcWN4JU1dVehh5RZpSAsUb9LoqrwUUQdC9bFD/opm6TW\nHd88g9RF6ea4VP0sYfD9K8LWTQxuWQ/zMlS2Bl4FdFRHiDKaGuC+S3pVoGBT\n4yecOSGbB8rIaxsUHw6iv4KrXYCvknwKlxh0JXyeZ2dV/fYEPxEULGK/n0hK\nzAcA\r\n=1hqj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD49XYHHlqPxml8PY8x2mIzfXIznz83B6eg4dnyda9Z0wIhAK3uRzPEUb3JrwFcrSwfiX+tbbuRRcrJs4iVbVHuYRsV"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190712112616.0_1562930850531_0.26578844121734924"},"_hasShrinkwrap":false},"0.0.6-p20190712132111.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190712132111.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190712132111.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FX9KYhQx1OpaXondCCDakCdSTyPo/qC+ZYdALjwv4GenhlptGNHeyGEq48vfJdphpFv5HaZfBNSiE6a/FmCLIQ==","shasum":"ba152f584abff2d2012fbbcc132d6c383fd4c449","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190712132111.0.tgz","fileCount":3,"unpackedSize":1693705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKImZCRA9TVsSAnZWagAANwsQAItVn1aG9WsTem73JIEo\n7tl1B3OMTaeATnCjILodp4wAWo0vSDfj9swRWZn0SFgcs5DxZNTIRQbAdmrf\nzoHEw3W6TQPFCEc3zLD8p8F5CX7WFSu8bWwdCN6P8icaTENlw6MhpBCK/KWz\nnliEw4hCaeM/4yRu8+zd3ED+0+mpZgNbRI5g6RVAjSHDW3w1w4hfvqxOG4e5\nLEwlSeHo0uRGDrXWe0OjcECGmFLBaV+vydtwctiKqxXNfhRWXymNJaOSCmYw\nVCyFzCoYFJIyJSYYyqFsE8i2MCjunJfamG+saQXTl2yi8kqeeyivyxXXsYy1\nVRTxZchdAbxgP1jEYyoTJHWW/DDaog7T6nz4c3kXEIw0/2Bi37ZQGx9lLdiE\njiCJsI6Yjj8k1P1A0yX0ev/MH1RdfkxlEx4SMtzF8q7bxAxsZI33LQPFl3um\nKO+sDPyFmgacY+9fqK3f/CyElOexIQAP1QvhtH+ivk4ar+Lstfpne9n2qW43\ne/hw3YmZuc/l1GFbHJdHOvIIc2xflhRrHfT9ngHrXQb59/6RqeuPV9KezuqJ\n+b1gL3cKIN6q5EwIUMb9OKLGVNoWkCK7/QSrrJr91LO+lpGZPe+PAdIHFiQV\nJQ42ZzJ0iij18eYLYMf4iVHjWG6xkkDzxXSNsOr3QqxC2g2T6k9u5hvRuV0v\n4jRK\r\n=vS1I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEWFZuDpXu3cgy8LqI5NQ6R9O+sixXYXfnWsZfL49+SQAiBirEW7lL0Z1lw89Rj33OAX2qHl/pTE9DStggeQx/PHeQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190712132111.0_1562937752327_0.3554551054840982"},"_hasShrinkwrap":false},"0.0.6-p20190715071336.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190715071336.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190715071336.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Cptk8IIpcVxqK3LSjoNsvYv9De+Eu8xIxpaAjVTfkrk7VyGFVBPzAab7MzFZruAYrQX9+7JdE9mDaRo7N7Xt6g==","shasum":"ab1845192d7e8164e1468cddcc71824a94e8d698","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190715071336.0.tgz","fileCount":3,"unpackedSize":1693546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLCfuCRA9TVsSAnZWagAAFegP/0yhLkPT6DS1nfDP0FNa\nTZoKDqaZfNpYgIiXEYnkk5qedGeVBsVTLcZSv4AUu4QdG9rIPbqBK8TDGGxV\nD0xss0rOYEdXBRksTDFiucSz+hr34/ZLXXhM5pwL20GEmNd4UKRXBc1W6cCO\nq89mGUxK9rmJGIhnodpRLFTWoc9qAbElW/Q42/aXYatkm12bzn1hLTqqbAG1\npyEFWRBsTFrf5ucPxWGX8xEyNaMeh0XZ64ipSLueADW6JHGj3pQQ2rbJcgjI\nLRg/sXSpJg/8Mz6Yma+c0ITmDCHGgYK3AlFpwGgvpGPi22ZM8aCLfJYAx/+n\njVLCUoZlUVtM0uHZZfxVDV3GoRMeRza6bT4iDayziYNm1aGhM8AeKt5V2jf7\ntRuzsZhHrZgF52l8LDGVVH4KwQpKUuZ42Veo0llKol1lHsUyEx0ij+V1yC5U\ngLRFMP7KE6iYOlgeaDdWDLG6PJBlLiGBsbwErpqpnkLf7lcKoKI3mH8IygWx\noiEzl77WiYEVfOP8fOUO5+J/rGxTM/AbwBWW7eXl+ZkjwHOasnZ8twFekPtS\nzhwxeRM54d0Dr+YzGmjpxKIde8oflgayTi/kMTJuLlaXaPIeonPWfyqFFusU\nKraMndu+XNcMIZw+fUaF2LRHJ7BFLOx+fxIvc9DghTtBvUfxQI8y6epIYuvc\nWNYR\r\n=3hfw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICD2L+az8ER/T1nnEGkk73uixeogz7b2ub+QBjVImjftAiEA+/KlXYkEaR5c5vNFwg+eGCpA1uBsmVsrmDlJZhCiMoo="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190715071336.0_1563174893194_0.46806292467193367"},"_hasShrinkwrap":false},"0.0.6-p20190715072530.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190715072530.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190715072530.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vIRLM57PcAmf2z1AR9FpGnkvZ6YrIlVcKoeqfd9d+vmeo0ryF/kTDiD1DE5oRd1913xe85zgDCGdMKg/GbJCRA==","shasum":"c657550ebe7f56aac43904ab5243ec88626c7f23","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190715072530.0.tgz","fileCount":3,"unpackedSize":1693546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLCq0CRA9TVsSAnZWagAAo1AP+wTac5o8lkyDxW/7DxKO\nf7NsmTG1+076kv/hkmfz3tm+89P1W8xUe6MsAVN56icqEH2K0fGl/6rUo+2a\nskqB7ZY2El/NsgVqF4PqhYCuwjR4azfrreLn0WaCNU4eY0Rt8LJ3W8e4dnZV\nJwNoRELA9Sl/i5sHlphymhSH/sjZ/LycFjyM6d8M/Um5N0wnXDDaFulS+v7m\nDVf4+WBRNrVXjirhwV8Iss6HFHeke82lfY8PeDtrSGWwJlx/WxZT55Uq6vWg\nDwVhwYoMcRpkqmbDKH1Qnvfpj/RVRu3GG03byvAIJ+W5AZ4iusfFFYXXhBvc\nVwGsx29LztgKXEad4RKw40CaoKIryfu2ZbOEXfMy0vPfdKcJp0a/mlGQ55Zx\n0mXrO1UWj4RqI/eMnhinY+6iWKX7Qmukcxh7TpH//k/ULcTbttFaK6JvhVcr\ntfjqFGSVnnfduH8Pc48uFNb0Cciq+d7+JihqsbHE1RE9iZW6RSKiNmpAtcTt\nn/Vg2OpR/0KYt2xpI2tzphLE7wc919qk/HabmWLFiGTpxOyjMRvgl5RTT+H/\nmnRf5tJ2fBdGnUb1CCBqt4/tqdOogOaxr+ZzvZIE5Gxi7eX9QOcv0nxcDP51\nyblFgr8fHS86AqNdHEtG9BJXLvAF6xAj61EevJxA8AO4O61YlyDjwNYj5w14\nYRik\r\n=tPkX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQM2pLnLaJSxloJOAdf/SmtCdy2C/kTgiUPcVUUuIQBAIhALgALEtNkFyXT1cMvOSTVby613vToT5RnQ/HnOqtdvZh"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190715072530.0_1563175604176_0.6575978482847715"},"_hasShrinkwrap":false},"0.0.6-p20190715075149.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190715075149.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190715075149.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bXGkwM/jwBT4YLxCKsuSZVaq58hyXEk/eGJ/o9+JbO0eKb0eqWf15v7x6wSHfXJfII+V2YWxj6Xol27bTpEE4g==","shasum":"b9ee3c8cf89f2044c07b8f8deb23d0f999cec6c8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190715075149.0.tgz","fileCount":3,"unpackedSize":1693546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLDDjCRA9TVsSAnZWagAA6NYP/A3rx8+8t3pD2wBgrwHt\nCbyukeBpl2luOVlDJWrKuWipU7kmC6JYdMra20+mGT3CLb4g1p7B84ig9nz4\noQL6DEJEZWOKUY4qqOpYjh/rUSv28y4ek4YZgknKTuRkcU+5NzamxkC/lJ5R\ndM4J67JLwtkBAfDvLR8Nhs+KwIsO7toc9hYOpCz0OMjb37kLSq32BgJo2H9i\n8m5KybG2bSvbseACCb0pQFZoLqpV65XHeNtQQLvHEzqKMai2030wgCEO9Ik+\nam8kZhMrcyvlANOp2S31socPFbqelusUHwi7fN+Ft+GfpPjaX0QRNK0BU9y0\nmYWNE5Y55m4VedJApH542n3fpmjQAi7ilcIGpSQajpYz4VpSE0xEH+kzXi3J\nFwaaLCT4kg7qncxluf6i0726dlkwRZl3qFKqs4QzzSckuYwfSaYVwFjy2fBi\nBiIq2k24plVhxHywfoylOOIC1HJWbAq5LzaOI139qUNxQ8pHQHWzg4rowvvl\nBBQQuAEI/4sTk2oVc4miizewdTj8/G0yz56ez7AHl7wHQmLzWGTivDF2shwo\nmyNK2n7n3lscuSRykdZGWaeTDZM76vX9HMmuRJBJk3XQ5dr7570Fdp9tkRLv\nMNyck6v/VaULSNTRlV9JCfph5mqUX9uhZuLu7O8BMM2vMjEraV2awaGTEpmU\ndYwW\r\n=FboD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJJMq1bPnBIBbTzm89uJkn3067vM6XGCkd/3+s55qSkwIhAMdb+GsCoUQxGqGGIomApAD8HsWw5ndB9bBj597TUEY4"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190715075149.0_1563177187269_0.7681059391879677"},"_hasShrinkwrap":false},"0.0.6-p20190715080948.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190715080948.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190715080948.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S3gKbi9AaVnoHUEZvoh+IMWcl0gtnCrnOr03q+4Afdx6OkdPuPfoOIkBp1z+fpzh2hBsYrOB0l8eMBd3gyonXw==","shasum":"a10a85555654cf038de3fadd4cb36ec0648cfc55","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190715080948.0.tgz","fileCount":3,"unpackedSize":1693546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLDUaCRA9TVsSAnZWagAAFGIP/RTTwgW40qFNf+FejnE6\noHaQEkya1LWD/po36mdzt07BUU1sTXHasfJJdgNQ6Xp2HVtPyNnHMo7z5O5D\nRuAO3mGn1SI363ZP2iB8PavnkWZNVgvDXrhlmTP+aIRr4AwKa7TrSA76S93S\nUr9oCvaX7bxZSK192YwSYVo6LmXD4l04eA/gT90D9rNr9fUr6fkrEArISm6t\nWmEkQh2UjapTzTGZaDVWKfGVehpojNV7MBG/oGbdAngkY/w47icGPRCyf2se\n97VU8u8UYp/DxH5JV1ew687QpMxsN8ByuqDJVB85OlGvSEHWgU1fmcqyz5KG\noBaHyQifildItcsoK/99GvzlUeZmftdyHHDkR6mqnFEI0XypbaBeLMzas6lo\nm6/3gBZaSOwRHBCMiLk9iONsuZPzRA8oNO1uNcpxdtK2j12fF7dFvT+pdqy7\nrgl+26+b8S4noZfXeAwqiOKYPHwoiLWwBt4flspYxPQyI7Tho2pL8sm33ur8\n/HFTXFJf++EmN2hr0IkyPqWD7P8+ZTfdPBaZuj2029OH1AUlLXVtg9bEY3cR\ndDj50/dQzyE/w2ewtOTSJAXyN0nNo6alenVsHRmUtyEeWr6qfdGHCyybnUjJ\nI1S8bT/Q4uupwAatqZaIPsOoxAgWCQhenqfD3vWP2JEcdnn59YUfNmJz1TP1\nWxDH\r\n=oXcJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLBMIlm51dkuB1K14pDUxYND4/Ae9yXJJZjptYikij4QIhAKRTKD8o5Zed+9mGR2yeM7seZlzzxPp/imBI+0fF/uhs"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190715080948.0_1563178265444_0.885294271207433"},"_hasShrinkwrap":false},"0.0.6-p20190716103733.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190716103733.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190716103733.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Q5zTRwpEi2djIEPToe4yuG9Ij4OkoqkmFW9aq96sL4UZKtQOJBwCGJSikxbfYv08vN0l3FW3rq2leqiEGo+XbA==","shasum":"e5073b8e5c51b60fce4f42188bf0fcd45f710b09","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190716103733.0.tgz","fileCount":3,"unpackedSize":1692817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLak4CRA9TVsSAnZWagAAtakP/3ASgk2Azb04AyB8SWrD\n61wUy8HHEXtRVXsbhoXaPTP3xyVd+IIOPwW0aVlLOJmaUVtHo1qFNYk/G0VR\n29xZCEbGjfSwBfx8jGjdl3lhUH1BGfTZtf8MddarrkxaqWjZnY0I0tDC4vxx\ncN9HJvtN8n+9zsUw/h2eNx4rCEHaFN49BAyuUHC63RaFcSdcIy4Pcd4gLOUc\n4o9rHeimwEbRAVcDYtCw27Z+clbogyk7tnE5icnYSRLQg28zIY3Xs+TwUcFn\n3p5oGixKp2DeAb2S4Zeuvx/XFW3AjxzRTHHXD5tUasD0EHWD7nLh4W0Q3yv9\na9/YKyKPgWXS352+2WotGZt0QhBOrEhZgRY2XzVjAKhHhWBrZ0KncAfx7BkX\n3k+i2pBpGreG/23K3jw0cL7n0qw4s9NQ+TiK7VxUhhhZKhCEh0FxpjGx3SkV\nSZxpNM6xFB3gzIwbSQ4oL6CRBjjMwxy14uObMZ1TFNzF60aRMHhfkZw17YUF\nlVmCXOJtDGPJgiblrGAq+R0/AA2f8snd4vMnrlkWdWJARLTDtaFozObVIDPI\n2L+xaT+JSrM1k4B9CUT15yR4dLDv7rUmEZjjAVHVZPsl7XJl5IqcSwTnw3Dx\nFaMwlNJuXfPQHFJ2fb4p7/kZfRz4pkrmMicRncD6fSgaaa+8ZpM9EVQ0JbOn\nPNXT\r\n=8hQA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFQmWXp0C8UQNV1Ijmit/Ly6oWOmGCMDXMzOQ90x0nENAiBshhT0mSVPNwGqso9foXAvOgJPL6EyK/PhKaXG7Se4hw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190716103733.0_1563273528146_0.49103743707227654"},"_hasShrinkwrap":false},"0.0.6-p20190722082656.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190722082656.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"dist/index.js","types":"dist/index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190722082656.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vF/+PzPBP7fBttnGUPw5fzv+I5169SlyuWeGGZSOVbflkJaWqMQk93568tfG4N+bAzXFEEP1+JyC3Ho3ePslVg==","shasum":"2e3b52f9709f4663c01ad6fe825ef0db5b796455","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190722082656.0.tgz","fileCount":3,"unpackedSize":1692817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNXOdCRA9TVsSAnZWagAAYWAP/i48BVxvOnmZoRbRe4e6\nO05fWZz0gu/vWp6dkWjO/sycjlW5M+xRecYyeJqTW+RtNAxTH4XvYhgAe4/d\nP92ndYjplpxGTttmMRgVcv2fQsXjz/jWvJkkbz/trxXdEKTIiIDvq/am15Gs\nrNFY16PR0Up6nJCsvI3oaHqU1UBDtLpEfILcdT/Vmb/J4KRqQbeb0RmJx1dm\n6PY/aDMLMOjg6Y3iqPI8ZZnkpAh1Tcnppiq56/gfpnPQnJhUr68q6rdxbTxa\nt6z0OO8BFYxfrvJUvkh5FVgEpul2Q5P6C2Wp24loni7SeZSUhHaMCJJD0Bju\nzOHBBTun6VuXgjKhp46jqcs18K2zGFFxSF9qd9P0LWjrz1twxnHaiXloKv5O\nRIbxTv+rlqKUWJcX0EQqD8zwl+pes6xe5zOMD0W4pYfXCVRxf7HsJ0ebceRi\nJUDMGwQYDWc3skfQWyLSSOqUnWwDgsUFUONTAcyOyhcrwMnMv/I68Lun43LW\nJumnQvbEzmCSBf8vvqx2Ffq8OW4Oju2zMARns6jOKmeX0Hu9biCpZ9RL14fD\nKST2jPHAsLqobgWspXE2J+CHW93jbq6jlLttn9XI7+0hh3NVG0eHB/Q2wH6k\nICwffccMngEqOh6YPmafgnTxRwbQbSs6Z0Zt0c+QxYbpiIqhmI40RJ8kU9v1\nH2LN\r\n=T0d2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDqb0JDCdhaXZOo4eTurACS+2NV92uLSn0kR+Xp6tIZQIhAI/2L6lwWRZo8YjGyHPx46HWBL/SZSOaYds/oWjyHmS7"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190722082656.0_1563784092549_0.48224708766833446"},"_hasShrinkwrap":false},"0.0.6-p20190722090350.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190722090350.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190722090350.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-z7cY9AkQZ6o9eL61i3hMqt4tBVOAdcYGN9Vjy+CTXOwdpGC2B+9HVsS3CTIvKcGBwwIcGOqH0ABljr2NyiabfQ==","shasum":"fd10c20af4644fd6565c7a9760f7655626f28523","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190722090350.0.tgz","fileCount":82,"unpackedSize":3348755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNXxECRA9TVsSAnZWagAAULQQAKIZdi5H0eyXsAAkT2dZ\nla6JZVgR15xA4/4WcAvv9qmRYvWtuTDb9HV/iw9qTBSyt2g8c3Zn+ThBsZba\nZ2ZCnpXnuidygOqOor8/kxoSQHCimB5dPfx9IZQdV8Y60v7yJzkyYsXjVIVx\nkBk1yhfZ8wyJf1+XQofDj766/HJsWE4B5c5MfbXeqG/vz4CBiTQ3zsm7ydBI\nxcx2Qi5cVZzekFJFlDmjJV5TAmS6f3sQYg83kZNfyCOIfa4LdYxg1HO9se+G\nwDHgoc/uhHc4Q2wADsPxkMbt05kUsyrCZCPuHPktkwTenLG+BnfmzjESVTyW\nddcL7Ek6hKZ2MyN33bxzU7c1/46nJBdqI7TcCIK3Ux6PpeY1W8y1fEIgTF5N\nVGpfltn3dKglo/1nQKqaEqANqkLkvHGczpmqJdU0Ljbbbp8LqQ/VVz4O6ezA\ny5mj4nNdIq04ExDPTa6w3ZanCGVZWjnBbs0GAptymOEuQyjVk2cRVueK9kaW\neoaK2pTIWtI3+vXNKcQLXTS0wQBxZTfFtNANSw6jIPcGa2kYypANj8tlGmUI\nrzIPL/M9M+oWYnzrGdVGu5uv8sXk/Bd9xrqhIVNWcW+FvsEs8LYQcNLJQkq5\n6smnEQjhds3tvPbliWJoAnSrZ7xZOKpxxIulnNQ5Cn9ZwLvACg3asfXEVYSO\nC/g3\r\n=X83s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWOr73FdmHM85QRTPjN7jrYiOXwD9HQd5C7S2I8zaZ9wIhAIBZdH0nIaxvjcIlj8ZoUgiLtQDp3teETpUdhTLnyQfy"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190722090350.0_1563786307923_0.3981709048067288"},"_hasShrinkwrap":false},"0.0.6-p20190722093026.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190722093026.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190722093026.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bnmeRiMAwKuihOtd95RwLsLESgaurM1FlEcv7O7DJ5+EP0BmkpFt9YVeg/GYfm3kpw04X7Rf/YPzzChiYAG5CA==","shasum":"89afc7080de34d8f51aed2465e58a7246e7e4b65","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190722093026.0.tgz","fileCount":82,"unpackedSize":3348755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNYJ8CRA9TVsSAnZWagAA79wQAJbSAA4PRmPTdEKLueJT\nbFIRcsoNLJxrVVTd9vcnN3RXNUcsQkyRTODvKqHpAtgfeefLFJ60+7vOZr3y\nunuiY2MF2rekIho+QNH6B1FB9A06hkak+bWvGYUmK0FfSshsSY6Hwd7LB24B\niUMfLacwtTNTMcBsVXGPV6n1UtddAfGTohAQEV0opFDxCLVej5bqxPga5n26\nvYtFRm2mpKO6G/AAbte/ktXT6fCXYXgtBfaEv72V2NDYebHX04v7RuYmge/r\nKbkqMSr3FwiI3ilz3Mwi0y/SJQxM2F6U2eWUTaQOdkcXrsN8D90AChmfKrBo\ngjHdPfnoooT0GByyUu/aNoVwgkAP/ZG7BdMXOl32dwGCI7JW/L0bhBTSstH0\nHAYZuX9EuR42g4BjHwfGxO3GqCditPmHCZ3T0OUlOnj8n0sQKxgNdgqDPTNU\nl82jrDLxJzB1+OIwYik11cC5hQWgMgGWuZ48U+ootiS1Qf4ILhLpJOYP2dC2\nV3QOdtTEsyX0xsaHkdIJqsnx18XzVPxNiIGXy88dOKUiLn4K48FOF9hfP66a\nZfcOda59GjB72Xh1qvwBo0sX4cJqlKE4mN3sJE4uZrPsQvJnPNmdfcaKnnQV\ny2MFS3nZf/DCxYDuaSBPby3dFp7uQ1232DYRmprTogvRaZEFnS6M8T/CtIxa\n4ir+\r\n=wPDV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPlU3t7Q4isUtRvHxnWCu/ch/UNJhXpb3nFTZiP8DoxAiEAibmp6XZEy60vfVeqZ5nzd4DL0BM/34I/I9W/HcsoB5c="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190722093026.0_1563787899666_0.8018835895293448"},"_hasShrinkwrap":false},"0.0.6-p20190723093108.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190723093108.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190723093108.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YbR802rWbH8Xe9D7Or4cPoNpyH0ps+d7ObJsF3w+hBJC3Fm68yjdv6SFcl1/qck/sM48flAhliRPnLLk2E8BkA==","shasum":"2cb91a7daf6eb899356c91d2fa3134f83bee84ea","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190723093108.0.tgz","fileCount":82,"unpackedSize":3348866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNtQtCRA9TVsSAnZWagAAG/YP/AsS9Ls3K9gdV1VGkxhJ\n73Byh4J225rWkASKZgqW6Y5ulgkuG1v3iMRHpIkCh6dt55X6MEOeVPJ4+i/W\nlGK6Ld0nNuMx52NPrK/1jgv/q4O2RZCiwLY2oXJNU6EtIKOQqFbVQ7gPu03p\nAC5Ml2x4mZrPCTK9eiCKPnrvjL3WS1LKz/rBzmkbyb7Y0b4FfBrQt7fjtdDy\nyKIPkSZz9brA8Aizjc3iGWuByCTXjumFI/Z5XBnwJcpEc6QXlRMbKX1hTR1b\neX36yFaAevZ2Km4EmPyf6vo/HA+OCi++kn5TAlJtRy9uhJedJ+WDfCs6s5gx\nZugOvKxuR7DOJUdCfveXBK/qsaxCHrbX+WvnzkwMYWtvwS8+jTiJ1txrmTr0\nQs8neaekcj6EMHP1W8Fyapi/JgUev8IImVT1/zVBSfqw2peHl1GGoc0/X28o\nXFCO/POG2b7E6nsjNDrChHUcAC1UrXPA9ersJBhKrE7SbnsVbfIv4WRlNcvG\nSK4wLgcEl/WpKktyexDCT6d82jCgB0RQU/fgR9hgM2jSNlbwkRqbCQGF/b1j\nT/ayFSIMZ7W/czW3COoWQ5igpcrgGFYE8Xq017NCQ8kCfZh39QDjNleOHnLI\n0MaU7ZM1peUIm17lD94E3AIN9ZpVItCun84CraD/pJtFUO9t/3FtplnwticT\ni+iU\r\n=MZTs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5HcVrsykzKP34kPYgX5Ur6mc4GFibNOzngdAtYA0rFwIhAOzf0NtQxzGZ9ESCEqzJPb6qfFVsNZszZLDKgwxnZQeR"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190723093108.0_1563874349046_0.2827856920422296"},"_hasShrinkwrap":false},"0.0.6-p20190730113622.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190730113622.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190730113622.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Gswo7Mdk9ckCm6mFOulNxM9eq6nYt3Y76+dgJ3wHeZ9XvnlmW2hyMWSkHRhBPH6fFTzq1AlhjSlayxP1wAXdIA==","shasum":"de340c96d66c00b16a46fa72d4fa0f2360008ee7","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190730113622.0.tgz","fileCount":82,"unpackedSize":3348866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQCwDCRA9TVsSAnZWagAAzGwP/i3Rd9qdO4z64KOEytdF\nyhQei2YrHwUzpWFkMLdKIFfysJRAk5IBTYe7lnJiV8xYN7buhr8wTII3ho1Y\nnR4IiyDOZPeT62ByVnjQ+rMcLcrEdRVJcQLmUXIT85ox3oZQqAtl93dohfLG\nxGOrTbAWukA3Xz4nb+7vzn3PHBLHmCguazu2sf6CGpcWZXMVlwNbbubNU0sR\nn0wdB9HL7kKIJPc9pxjJ8Lvs6Fn2knxvNPkama4qPORVLdTMRRcWJnCuj58f\nXulwv+XOG8E2fisFFnXvNjOWE/AhtNTdQ69hQiNPsmMEQQol4N1WKMx/tHGf\nLSb1CVQyTmOJl8BRARPXzf2GBg+lPlRHUlAq1+Eu5jqKJvldF7AGhwNPQCrd\nAVmOhZp+wasay7pcBMOJdMNZz6Lmsi1Vaq2jaaR/5NuPYRifCtwuYg6zqwH9\nqBWB5Jta8rfnQDD4p6wBDaAXzPtknGHxhaj/nZRRpkce2gxqGf7rZXVfc3A8\ncNukKiYNeEREHcOc1hw2zpDWRaUWWVcLp5z0DZeucGiWNozcU4G3VY/0yuoK\n8E2wFxF6lGjuRkjsSWVececKu9C9rilsvgQxmCM2zeBtUDIkLVhb6Y/hf1N4\nfh6Ko4kQ1UA124ymgcfUypJt1tdVsOtX56tjp/igILkP9ZMjhzzqiRMKSGq6\nRDCp\r\n=54Xq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvNG2VIj7F+SPkjPCJEyD2+AIp6PVpTiUqHFUTBGck9AiEAzfwlVGQosj5NxJnZP/5DxfEAIWR42oSE98YrgIbBo/8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190730113622.0_1564486658709_0.33390723988094817"},"_hasShrinkwrap":false},"0.0.6-p20190807155334.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190807155334.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190807155334.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-p6X4wBSKX+UTx8fl8TpTUYhElfoQl5g+GxKzpTaQlLVJqCIxP7eZzolE6uyKQ0zlOC7l4DUSw7DcI1vCMuzQfQ==","shasum":"0685e9a45c375d429c152599bef47aed5e139874","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190807155334.0.tgz","fileCount":82,"unpackedSize":3348866,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSvRLCRA9TVsSAnZWagAAGSwP/j4D4Ld0kO++nVIi+RsM\n9qdO2yA741ZDxKfmsdAg6HWJcD8pAAHDcoy3bDCF5GHJm0N8vruGDJ6YDcFL\n0xubvfJkVU/9K8URbFp5Yj4OAYgwGQxOGGr+rQ7sjZHvYs01bOVeYXAxpAv+\nyNQE92rvQ6EfMjpvQdIzCl32vqNtUGJad+bKmhUuuCkxNpwiLA2EUX4//2eZ\nJjcPrNZ7hGpfu5CYjmf9J0lM4mW2zDZmhQtwcuwtm9kZkk0v5Kh2FrqlcMrP\nv1GU8IRd3W1PEXHTsLLxqiFGtgoeSAefOhZ8DRmNgWXdg/7e9k1G7Cqz/p9U\nGlp9O15/5n0MxeArZ7qznGZS+fFquwrtj4DDAzOOrvmzIKuAuqB+IQEUCEPe\nHy+J/XqdERM5ytsztQQQWo34G06JLltzVEz6lacelIYUCxZ6Gghq3BAkcYAW\nY83UYhf7aCNS4FNF89RsjnHWB1pKvI6jmJWH+v9CTxZar4yoYMbpJpY7o3DZ\nHtKAopes9yalVGQsuyqoNsq33tMGDTr03z0e9oFeY7B3pRa4cBPnDsDYAwH4\nEFRkTLhJZ9Bd8qFcpLsmRT3guGNYkI9lg6EE75XaqSOItL7Nv7Q6nK98mO24\n0+Trmp8XXmHGPKViVD9oUHNRkDqmVgXmHxJb1LwwEJFQYMzYYxMQENv4VZEh\n8AqJ\r\n=75ct\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDE7U9r/8Hi6/oHqf4RvTDOqnlMx2viYS6dyAnCCDN5TAIgWKnUwj5tKnEMEvOrm70Rerbn1g90GkB39FiSIWqELPw="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190807155334.0_1565193290762_0.6007063113034561"},"_hasShrinkwrap":false},"0.0.6-p20190807162005.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190807162005.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"index.js","types":"index.d.ts","browser":"bundle.min.js","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger-lib.git"},"scripts":{"build":"tsc","linter":"tslint 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","linter:fix":"tslint --fix 'src/{,**/}*.ts' 'spec/{,**/}*.ts'","test":"npm run linter && npm run cover","test:nocover":"ts-node node_modules/jasmine/bin/jasmine.js","cover":"nyc --reporter=lcov --reporter=text node_modules/jasmine/bin/jasmine.js","coveralls":"cat ./coverage/lcov.info | coveralls","bundle":"node node_modules/.bin/webpack","doc":"typedoc --out doc/ src/","link":"./publish.sh --link"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.3","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@babel/core":"^7.4.5","@babel/preset-env":"^7.4.5","@types/bn.js":"^4.11.5","@types/dockerode":"^2.5.20","@types/elliptic":"^6.4.9","@types/jasmine":"^3.3.13","@types/lodash":"^4.14.135","@types/shuffle-array":"0.0.28","@types/ws":"^6.0.1","babel-loader":"^8.0.6","coveralls":"^3.0.4","dockerode":"^2.5.8","jasmine":"^3.4.0","jasmine-console-reporter":"^3.1.0","nyc":"^13.3.0","ts-loader":"^5.4.5","ts-node":"^8.3.0","tslint":"^5.18.0","typedoc":"^0.14.2","typescript":"^3.5.2","webpack":"^4.35.2","webpack-cli":"^3.3.5"},"nyc":{"all":true,"extension":[".ts"],"exclude":["spec/**/*","**/*.d.ts","**/*.config.js","coverage/**/*","dist/**/*","doc/**/*","scripts/**/*","src/darc/signer.ts"],"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger-lib/issues"},"homepage":"https://github.com/c4dt/omniledger-lib#readme","_id":"@c4dt/dynacred@0.0.6-p20190807162005.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-LPoYB+Yqr9JDtLYm4897ZNEuDMfBr5f5Nt14PTleS5bMTN7pM9Y3fOUhH7H/+KQGxrooxdvQCrhrN3zsdV6nlw==","shasum":"572ea3710b05e7eefd630f3cc9b4f3daa41710e1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190807162005.0.tgz","fileCount":82,"unpackedSize":3349324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSvp9CRA9TVsSAnZWagAAEKkQAI887Az5r3WCZlw5SepO\n/toT4y6TvkkMpTur6TeBfchcGYunfRoRKeqSQyNm3Un/ZkEyfgs8RGP1q6vY\nsLzfkDcPHa//4K7byhLGTREpbBXplVwCmpve5ctlxt6QbRv62oWn/MbGVNuf\n6C+Na4lLdKK9PGyBgvTYfH0O4fUmtTkSModIyCA7L/FY3bRxys/5FNc2kNW+\npOo+cXbyCMCQQ/3TIwQ6UYRxxtp0tKEryhpjAvDO43PwlS3xPefSPWPaW77I\nQ9X8yNMptnvjxo14JA0vheepJirv9eewWW0eaKMbxRqu6rNSV85ygfWuPN1y\nuL0VnwFrwPSMaL5+sYtt+7W1vmUSS0mlO0SgVWk5i6NQ/pk0ksxySE3AEJOQ\n6eiczC7z/J0t5KJeer+VK5d0jjz/kOSPL8Pbu8xmlD3H8YGVTFDJIDtSa82W\nZd452k3TJWCWitwgOQgAT5SXdMd+oOXAnAemeskv0w5zFJ9YdEYk7Hq67e8K\noZjthkNTIbiSLBBPZCajakvEDWLHBf3zewga8mxG51FDo+Xstw5U4DsLZZk1\nRdCDpQ5h+1L63Sdwfkmi46IS4GIt0Zt82kZmX/ZiH88H51DUG2WJ7CxNB2mE\na37/HklbgjKOjRAjRTVsmo9rRwA02EhAnlA4Re0dP3X5o85NSmfXerGw+09F\nhkhS\r\n=E0Bx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBR8o4uOy1S4Pn4uDEDSk7xJ3wCJH+gV680imgojkaF6AiEA/nS+E/qew1NIrB23i3CfYxGGcT/0F12K5Up50E7MFnE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190807162005.0_1565194877130_0.12921293018891955"},"_hasShrinkwrap":false},"0.0.6-p20190808084312.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190808084312.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"src/index.js","types":"src/index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"tslint --project . && npm run build","cover":"nyc jasmine"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.4","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190808084312.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sxwFlMajDV+LMhxg61JHaZx5JIpCZIeIWO1/XOUBEmH0CMMUmLCBOqGLfQvBLWMBYBjmK/O6R/An7wnSIcj5Wg==","shasum":"eda1b4d70ce59ce70c0037f658b61737f42c0ba8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190808084312.0.tgz","fileCount":28,"unpackedSize":143105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS+DDCRA9TVsSAnZWagAAS5cP/iReiHZvlRGzQKtif5gw\n1sgYJjqnMQtFgN0umca4DfOCFpTHWe0QSIXT6BQNBo8sFn71s1VazIu5SBQY\nE/UhLVFaUH97WZS6heM89RsbdtlMyt2pgEG6/zGEM4wCiR6ofWUGH4hthBaG\nx27djuEFzcv5ShmUvgKRbXH1/4tk57lkuMGfPgFhZPrhYMA56TxPPo/ogQRi\nDBfMOdW7/VtZqnIwuxaOShe+bmQALEYoEB4fiB8pbVQxyjUUvFOZs3ZRA/p2\nk1fxGil1L2inaHrrTIBUh/5wNwIvrsvG6SjVGPN5OS1VKG7vOXmG5WESjKNh\neLSQUCnN4/ljgfrV+jNRQUbWJlqNSZDHj22Swsh3OyxfjR3wNo5yc23ajXvF\ny/snEQjK1pTfre1JRPVsq4QGZo3db70JuO6iSh1TW9D6rJhvqnHRWFx0sMVm\nEjJdGuwAfuSjtdea5HEQ+2Xj7tUPrn+o0kp9rWX8q+IDLaoORyRIxqUozumd\nXteLhA6gdTX4pe38Jy8kEpT0nbrr3gAuzWJp8hI7XCd5NJttpUZzNMW/a7MO\nex+9qHy010b6PH+kzGakBvjjBVqIUe/ooz/oUyRdBf6fdfyDSD+isb4auMlZ\nFrhDqP/hjFZ6PZWLQKQTejKPDXlj6cjoz84dRssEByKCxErWQKho2tOXG8n8\na/PY\r\n=8Tnc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICD87K+AC6Iy1dakgTbt61CvJUjcYSJHe5QEqWntRmduAiB/PaWMVad2uX/NZ9m+YszgogbIcCPvYH47M49WrXoRFQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190808084312.0_1565253826835_0.7705278649626099"},"_hasShrinkwrap":false},"0.0.6-p20190808085341.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190808085341.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"src/index.js","types":"src/index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"tslint --project . && npm run build","cover":"nyc jasmine"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.4","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190808085341.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-wiljuprmhECHHWxXbn3LjX0Vnfn1EHcGC/w73hyxUkUAAY9c3Duplw9oTIxes2vKxfoy9LS4oQy3LXJ3jkxPOA==","shasum":"b6f0585917aa9b12b3d58da3918a5323fd1d1197","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190808085341.0.tgz","fileCount":28,"unpackedSize":136185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS+M3CRA9TVsSAnZWagAAAiwP/0C9vbjjU5GiLmWpy/OX\nlfaBBvNWiQMfBitYQ7QIIKSvPUNkdcp9ktHpbOe3yOkY++1rcANn60Ix/qnE\n3gsCZ4gXh5WqCeB0hcXyLc5VKOJs9o1SNutrnQKe9lqKl/H0Cjd1ZCZQaxt/\nZsDzIW+5lJhdQx7+N0UbEePGsXBb++STmfdoQUH4J9Gdt2YR90rqOUDlhOUQ\nNnJlPqeFIbXAU79sTgW94Gh7w/wHqEP4Q8zdY8v9RgJgQd6jz8WHzJK1053D\nXpLQOexxqswcOqzt1dZh7YXkEQVf56qL944d6RpT9HXaRVZqeLwa+ytXE6iR\nMALVnnRJeygpVUoEro73l3GbOKLG2ToopmmiIJt2JnG9gJ5qUYwtLe/mjhyb\nnkiUYwO7N7ZP1yAgHbmXwiXDx9JFBvHukn8xpBOYp0gdSPjbdMoRFRcDo0p7\nq2GhSz5OzAB2iTqzD8mGaU+QtBLgurTwof0zbJsAHiDRcIsD5ggFYzwRs73W\nN3hFiqqexlLIe8xPv7+iRH31xOfiJ/c6GnLxcr9bPbp+oWlSneTuZngiCF5C\nLDODNFbQ0LWBgOIIJrNZULkwHt5pumFMtdowHdL8EgnBY5rGNe2+sGpjsYvx\ncDb6a7Iq3dNX3OyS0RQoepZDNfOHECLHe3FniVkNTKfIEf4em503yQ7IQGz+\nk4Mz\r\n=ncq6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEU4WLFqJOFtE3wxW48dW3BqOZD8ZambnBq6hjwExfPiAiBu3JOR5b3v7y2UlUjLgB4VHj0FhE7iIdwVWPNuseeKgA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190808085341.0_1565254454983_0.5218131867437377"},"_hasShrinkwrap":false},"0.0.6-p20190808113845.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190808113845.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"src/index.js","types":"src/index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"tslint --project . && npm run build","cover":"nyc jasmine"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.4","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190808113845.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-r6PqNB8goSIfF98/UH0vFuTtNhxLP1ozwwLnpFL2ydZbeKVvsGcG3KeMWQv5JVHXKQzPa3OSTMxM523wqagIuA==","shasum":"108831c22cded3d3a41ed6dca6df5adacc229c82","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190808113845.0.tgz","fileCount":28,"unpackedSize":136185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTAnsCRA9TVsSAnZWagAAsDoQAIYYGTRKC1Yamisx/8YF\nylhXubr350sWP4X/EyRFC82yBd5DlJ8JpoQqtMPD3ovpua8Z19TQ5xRkmE9Q\nA8NBV6xJN4HVsTLpvZJ/XA253fQKeEWNa4icWjy+GWqwe1V5HPDfcNd0XgeK\nSm70Nd0i1Ow/1FTMgJMCaF5Eued16F/eEyY4mOFdWshgUOtLv42DptwjwQBA\nenIu757ORIYNyuJuT9lvU4BE8ev5ibqYe+JQUT74L/09qJOO189nXS9X+uYC\nlii+2CbZDXT0Ai2MlX+jbJxd4hE2ayGQ9ZMdgeIgtEgHq1H8KsK21El/RcuG\nxHMaMjct98DhzKkmhvlQChYBXooZbHTf9UrK/u5e9XhupcHcCJzc7kmREX82\n6Ff0vmsYGdW0IyoCIUznPihZR4jolkuj+CF6zHFoaWHvWTlemrRjUhtzOjzd\nffLCGIP0ldcnjemfuqzYWsoSHfREyQd6bR4aqVxVahQ4hu7ClDuAgwz3OuZx\nGH7J9mQhou31+dhMhI8rTkc+lPobdo3kOgh6fZhFt6KIUMZKjoMeTYSletgb\nwq+dDA+ZMwqIFy5t+XR0NS7Nj6CqluaPG4IpTLqj8VfaXwqPPhAa6+6/QfAT\nkcy167RDErndnAwRXzK5Z0JbK59IVNrbxfsVz4lsMX3bjh9gJ5t6GHKxPtJb\nB4j7\r\n=ShZS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5BzPJTBndA04NHM7TDBxt4xlGol/6TZkLRi8Vrlqg+AiBGHLTGTOqHzJFlvyPWEkRkKJOlLFLcceyxiQ83+c1CgA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190808113845.0_1565264363169_0.6452480862962604"},"_hasShrinkwrap":false},"0.0.6-p20190808120818.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190808120818.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"src/index.js","types":"src/index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"tslint --project . && npm run build","cover":"nyc jasmine"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.4","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190808120818.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ly1ZUbKCKsr0663QhPoAIsUSL1ZBT6UVdOd6xIwxxEQ0bo3V6kjDuPeYrjPCNl2Cz8oAHEe0ZsDGgir0AoQK8A==","shasum":"adacdcd136365bd9456fa7cdb0f5f9d6c3bbf883","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190808120818.0.tgz","fileCount":28,"unpackedSize":136185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTBDUCRA9TVsSAnZWagAA4qEP/j99Z7SfuDFRuDWSdDke\n1ot7RrUtjzrbhC1Bs1nt/2AgKAs1F6xIHNF5JUwwYtDZaWiHlmLOMyppoIgr\noXC8I7e0Og8tbZNFyBJMO133DKuQOuWYxAiRxvghA/n0qQQU0zF8PrK8XVM/\nv0R9ozsq3iVh9I5BLbuWzesn/HD59paUKAkYGDThuokYbkZFGAQIythBp2r8\nDbC5fHslCNvtqpOlujy0f2H22u8NbFf5Xba7iAAX77sTZwAguu10N+46hnb+\nwMld2i+c9dJpOiQDQRE9NO5L7XtVLrcrW/a6RSue5Lzlyw89CP9rGGoo6yzt\nZpKCqOxIgX5Gl3mutoBiVI4IgoOKFKFxO7pDTJU9wrgk4nJ3+o9O1zf6xacI\n/6xI7kCVJipfmD2BLFVTx2r69wQaNPqOAFOzoC3+N1etFTW24acbNGOsw+BW\nsZXHLdd02U37ZHhOShDVihQwXY26tODpaUJgEGhaHHDzE+W//A/ZFcYkcaKJ\nP1exsxNcrMZLcCJrIdS39uWM2vTO8WfpGNjYbYEZHO+KHP4aq3XxYMYd3zN0\n1PuudQ3qL/LRsJbSoaBphZKu5zi5ipFQTFRknxUVLL2jpMdyEEiJod+KDMwy\n/7+3uRSIK+7vhyRJkzOVrCIjieJcz9wbell/EBf3i7Bs4xeQ+NFyR9W7ex4b\nZ21J\r\n=LdOK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFRjp8619k8nwCG2PtNIUNR+atm4EOClVtO/UwjkJ45ZAiAkAjn+VUr/HgolSuyYFvk7imJBLwNhlceWHcJ41YsGow=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190808120818.0_1565266132169_0.6833814686432109"},"_hasShrinkwrap":false},"0.0.6-p20190812161512.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190812161512.0","description":"The library used by the omniledger-ui and the personhood.online app","main":"src/index.js","types":"src/index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"tslint --project . && npm run build","cover":"nyc jasmine"},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.4","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190812161512.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Vao3PKLqdWXmSWtTZO1HwaSYCZBpxEgjflHqNeaX0wZfrkIqE16DlBkCRCdiooTG0q6p2KkDhrlP7bXs2eMHzg==","shasum":"d5e81ad50e3d54c8d9afe9010255c145ee4b12e9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190812161512.0.tgz","fileCount":28,"unpackedSize":136185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUZC0CRA9TVsSAnZWagAAnHUP/A8JAaQjS3j7knAaXyEQ\nG9iPKiapDZlTVE50YiDZSXFllpYAObe9GlAUDCULRqckA533+8XXfMMZD/uH\nCg+kHeCFEvowOhCtrfJvQpHK/5G4vqPfYatYXlxBO9cEan4osXtjU3T7koei\nlXLyurKEekC53P9qJnpr0Rwsx8M1AMIjm+zg1fYrSema9VXoWhDBK8wZ43Ig\nKZcfn1wmgwonorEmN7Dw5iT++1mdTR0FXeoZaeed2TmsGF0yZ9zOCtjIBXJ9\nRG5mTdYxv5rf97gtYg0Qa0ETAbRt8jzC1C3XTqPaOT9taXNPCRVuYJ2T/CXl\nwRYiMEuxkYEiebYqEt4tTj5JnHIf665js+1jVttGQfywMMMObKNbJFbPpsf5\nrC/WMSehTTgQZQ+2PzXG24LLZKpYpNIv2ri7ke+FAhTNGMF05rD23bV1oFGs\n5bJyW7DVTb7pXZ4EyxvzErxgbSTfjzOMSYHg8dHhY0r5d4xn4CC5QTTPfC7s\nemaspDdl/YSh/0doTbttfLBoTBGGKoS929mV1LwJ84dJzvPWupfJ2L3j3TIw\nYqU8c0xUSP5H88FWZRIxL5hgKl1D9HpOX2Ss5vjEfslYH3EV2/Oa18bh5oaU\nHIEaYuTeNQiq3iwHvLGpjPeVcrj3HX3my8sSvT7xz+pvkZYpDMaqywEiK7ZX\nW5uh\r\n=pwg9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChGJmb4bCi8IPMrZjNcgKK9lMW8Br6avbaF5IUrO6EswIhAL8uDxvGYimXyrPsqaJoF24445jvFu3r5CTspSwiUw7M"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190812161512.0_1565626547533_0.4412098589133331"},"_hasShrinkwrap":false},"0.0.6-p20190820091731.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190820091731.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.16","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190820091731.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-50dMLxm8Uq4OPXHUu4sETOFUMvUi6dISPAXSkt8Bj5oJXmiTAD2Zk+OVfXuzOHRRxUtndaYxQoy5KO+CX+wCaw==","shasum":"9aff8d209ca6fce55952b1cb008d1290e8891818","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190820091731.0.tgz","fileCount":28,"unpackedSize":139070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdW7rPCRA9TVsSAnZWagAAN3MP/03hibTza/4udCrviD+A\n11lRZKrrS5SgiRtaM7TZxzOsPJC2q2mdJdzHEpSS4cwILr1QalcemrBqHZjt\nhYrU8h+RXUQedh7hsm2Jp/liO5SQ1DpQyQT+RA8KYlJsqWfACVWcq3BTQwAG\nLvnzz7GhexkNpJhJEsYfJWrusEImU9xi/ZTWt4Wtx9tckz4bzVFdQ9jcAo6V\ndgEYOEw5j+yRvbor8BDA3sX0dSuSDNIGuyCt3na/uGSfk1po4XPCMZSiomXY\n/X0WCp8VkOKMKHIUskNHpcwRZFK+WBcfYAAWtIersr95Yjc9fy3KowyPktWd\nW2noFHaziNIykLL3BK4f2W+mJxiOanvUd5zuRjMtzuwhlXRO3Qd4tO40vgQG\nOrYblVweyH8F4eqzWp1rA7bMqNZxg4fn3znaOc1KsJwV/c5DgD8CHHflFaGR\nEeTfeY0lmjt/5912MRTJWVDn49nTOxbr2Udx7PZRPtL0sjZvydQKyMasVkjs\nlJbzqNmhSIt9OhfXxrv28mxcnC0VQt7WV9JXJ6jigLTUSo+ezyHxAcJu0a4Q\n3jBKIEM7SAmAdsN4QzRT48qk3rNpmuehH/PFLyfovi7kg7Hkio1WZa1hpGEN\niRrObjQON7HifwtBldVCnDi2B89ARukvMA7ExMrI3HT7U1dVl/6KS3H74P4D\nuDwH\r\n=a86V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEad4WO4qJoICGj511oMupyg2yp0jVgTx82cD0xBaJHNAiEAjE55ZC9kQc+y/OBX1cJKqCJKiOmDOhij7Pbv4tEB6L8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190820091731.0_1566292687108_0.9406045637933445"},"_hasShrinkwrap":false},"0.0.6-p20190820093325.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190820093325.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.16","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190820093325.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6z9MfX4hPyNyu49VKlNwz64KpaTpieQp1qZszp1pg2V545DQHD4i+GahQrlmVfneF+246Zs5qLHkPVr8gAA0fg==","shasum":"796a003e8cfedd74671742bd1e72ca0d179ba9e8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190820093325.0.tgz","fileCount":28,"unpackedSize":139070,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdW76HCRA9TVsSAnZWagAA+kMP/iEWjfiv1KiOYI9LL+nY\nv/IKmymN5l89CGcIOAom28gFx5rZ+TSZgDsr+nWCsgYkX3eqKbQ74XJMB0S7\n3QWRozj9V0O8GeZHhmZZOtl+vi8/ginXBtUszEiZaVKJwar3CFH+8T8lOgn1\nVLfl0iclee6SBU1ZZRhexgqx3TztblhOVFX/KBLxJ2/B9AIwngWBkMa6jGmw\nHAw5IgxBAs1U7yaAtyKryWc4W6yVW/fHPcni1EEee/ZvmvcfQdFf3k4vBTFe\nUiJoYuy29JJhp813ouA+egVLHGpNt9FOSfEnXHHGZMfNCvKYmrpzMycrN+yK\nvQ2aFZN9Jjp9vv6pg4KBPtvGJYDJnMJ8NwD2wRDig3PH5EyhQKxrzX2lvAQ1\nws/Byrmv+W57b0gluzfpiV12KcBwtxtMW9id+4LjKrjxXKgHECm8DvU4ZEn5\nhajuKUaUBj8hiNwBrYl1ZCEowbjy+tJiCo5PYp3ToOPEsbgMAamSxR2PEAgd\nWQfy1UlQ7+07qdCKExharvCRrpa1x7lNDJWp2wsnwoirpPOgvnvQ1eKp96pd\nb1k/IkyyZpVuqbC1RIV9GFTj5I7U2YjKJHK41f/b+wOTgngtEOtilXaMWlYI\nSA54nTqeicSUhgbgFBfCNNRV3o5bCPPwXIiOAPoKPbTjWoDeF7y/7Ipz29l4\nzQPL\r\n=tkPI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA3vkJWPeMOjPdg9TdxcmMizb2xfhKZk2ToQVVUqYsfwIgM7MpUp9WqxWApFFarC7yuWkt9uSbh51VZt3aOZv05CY="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190820093325.0_1566293638927_0.2907823845315298"},"_hasShrinkwrap":false},"0.0.6-p20190820143708.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190820143708.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.16","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190820143708.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-S4pyzRI4hQP1OoKTwx/IQ2ccBBX8D5R6vRgzY8LyWiPBvu4neJZ+8HpISqQ2iBCTAV4Cy6U9vj5F61i8vhWNsg==","shasum":"b746d99ac4037f94df543eab56075b8bd9262299","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190820143708.0.tgz","fileCount":26,"unpackedSize":136288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXAW6CRA9TVsSAnZWagAAoyMQAIwacR81tVu74Fs0ohoH\nY6BF8prTng2HGHf4wU79JqBaLb28WXP+x+vrTKhI9YBeBLPlb120ZcIxEUYF\n8VFYq7DKDHOJmPPKJnhs4jWh2WmLFxQjyClIRgf7o7ekbq4YzZOuJFbZjnWM\n2PEhq240UesFm8enm49hXWOKhwrfPhP3TriXG6seeHjYhVf3zHBcOvmZQ7sy\n6le5tt/felmE0MFG5JztmWZrxAKOfGGNUaPOrKxqBKNvXAI73TBfAYVJQhfT\ncRWB0OL11VWJcM+NRV1zKYACfO1yGD6Lti5P+9u4Lwdi9s/QjLb8sPwYEFDR\n2t6V12OOtxBr6se2uLfmNZ5u1pkT/Qgt+XLZUgLabjtoITj0FOB/hdIHFSsA\nHcrqGR/6ncukskhbgj8DD5QHuS3yLOtmfqEa4Koe3YWF63k9Utw+TFzraNqe\ncRDTONddS9W9YOSWwAiWJfmf8k65yBjmWEgAX6dDsUgWdFtZEmkO4vMddg61\nR+wGDIC43lcAiWbUycS6yHphsW0kGFyAoDQQEgYegqGAX+KWJfM16lU+lf5K\n0YYDHY4RCUbmB6AOINbKyYq55m4dZv8NHCCgZRBqDPfujX5+laNtp0ilJ/SC\nWde9Pmb8UH3TIEhWWQS6/7bqsASi7939II2Xa7V5iSZsKW+K2NDulXlT1lMT\nSVUE\r\n=hhyX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiPdSdovOV/pFB1rNBos1K+RBpqs5h0BAnAgbQhxQlSAIgQkVN8xOP6ZjWHqIw2IJ7Jt2IkAdjIaa5oIbIrMrC+GA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190820143708.0_1566311865606_0.6818813717605128"},"_hasShrinkwrap":false},"0.0.6-p20190828090452.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190828090452.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.16","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190828090452.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RrtnJe0AUfuF7iSxtrq+MAETGoFqEthyCy5JsAE/IMmgMAAm6x+Yg0bGlqMs0Ln2r1nUhDavQVENSPiImBIdPg==","shasum":"aae6f1153ad10ae8ff0031b40ddd89e3cbb3dc7b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190828090452.0.tgz","fileCount":26,"unpackedSize":136288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZkPYCRA9TVsSAnZWagAA8eoQAJK0+IP74guYjB+YWA5X\nQFqZ0R5fmjSWZCp/IGgKf+eNoLW7h/NjDpIJHzYhSkHpk2oXEjLVp3WgYyUP\nEeQaS3JxVMSLLWHYHEjfwtfxzetJHEjwFjZt58kOjmucu1XCYeCqqVcXZtQX\nI5yVaDyA2IUEk4FRt+YR80CzahhGIjV0Hy0WQn8yPO3JJ4aiEVQbePLh0MMu\nlq/FISWJMSo2QBMz9yuWXw3oBjWGz6noDA+OIkDBWl4DrqIX5mbe+GOye8Hi\nZubIjAO42jqp61NAHZlRe0xHkaNDXIAyHh3uQMj/X3TvSkTybzBs71HJZWBK\nWj/B1naqQfrvkiQ4MQTg6tC++276+Z8IIiDYCn8Af4lpNbNiJZpPqe/4qza2\n6nUZV1ukSWyUtggvDQsga/OBa/wRxGAIgTLI1N2g7jUhPOonJe0HKotIddzw\ne6LLozHV3im/cyLyPJCs5kSELONa6bB09N8o+KdoKyk3xziCqgI3ByK2O0jT\nc0EhkWB0cog80p7DtRYyBG4CYCCHZPK1+daMkIWoO3P/Km+AD1LESw2RkLxd\n8MLxfscj9zg3FMtkxYi6AbGoNkAzq9+o858UpJHFjVfHGh0mg60KPnOPXyWs\nAVBrYSKB3YSHRf4f2XnIenW7b8EndknRgL6jcy8GBUQe7Vv8hJEMehhoeN7Y\nZHtE\r\n=sDWw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFp0Y+PjgZsACoi2dvCcx94hf9VNvwNZujYnMsoIliKAIgKCoG8E5sg26Sw3UKiBe0MqgmF5rYBc/i61bUNAwqXco="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190828090452.0_1566983127440_0.12161886775739017"},"_hasShrinkwrap":false},"0.0.6-p20190828094256.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190828094256.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.16","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","nyc":"^14.1.1","ts-node":"^8.3.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190828094256.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ul86wl2EOn2zxp5Kz4j6pHLBS0nAc+40I8HMcb6qQxUzHO/BvG2x05vPVUUW0/K8TyiKwi90sJ8WChdnTBPrVw==","shasum":"6511908a6b4b4d2c817f8e7d3c798533ebffe29b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190828094256.0.tgz","fileCount":26,"unpackedSize":136288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdZkzGCRA9TVsSAnZWagAAlwYP/0t+PvnOoKs2Cx/x8QgR\nIagGji/TbI4qK9DAUB5T3JqhA34WHopGVE9ZJ4y8GC9M5bTPkYdPkf/VB1ou\nel6jnJRcVrQlEWKy/kIIpGCk9P6yA09gzUaMTt1xM4kFrPbXn38zsNc8H7Le\nRQluDXBhOodJ9rtgkEirte5f4sBmuHrZS2hvEM6ji0tbqbqQoxrmVsDERfYV\nriCyScZwsTwnTgddGnUiwWO1kNXodSWG8/ePx93C4HKgvYS8dixyZVbCD34x\nROiF1nmq5PsDdqNGWDPMnCCW3wxJ7RPDZfFowYfTVKVkxFZz8A0r3N5PMKGL\nT3istr+99nBzUc3a3cPDb72TxaIRS7SERLzVPZFa6F0OCzrlUKbjsbm37xCe\nFcf7TfHIHxY6d3oOmYmvcrt3E5SauX6LEkfJ3RbXY5aKKgekmg0qPgNVT5ly\nYALpB4DChWD9byVBiVrsAhVFCsrRxlS3qq9B+9fh+r/YsJQYka/QhST06OgH\ncl0EMk0elR7YrX7lR5WT22kasKyjFwAbKEPvEdrTa8xmGDSGfCcG/eiRebOc\nhAKlQB+vRBNxxSmXfaSUNvMGpqebngbhnFD65r6oluVDdM+XZ9LX0uN88Ch7\nWjBV3ITgw8SGM9KDTnBDq5kT5CkUzkWITJOYaovacENjPaQLpNGPk2A+AjWz\nJuAP\r\n=2JfO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcfo8t7JVqzqEwxtQyYjQHpDC78JNQA7yoL7L9ycJsdwIhAN+5wELkrw1ioAVmZFEo/gJVklqRICx3kz8XG574au2A"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190828094256.0_1566985413771_0.5283638334855718"},"_hasShrinkwrap":false},"0.0.6-p20190905061939.0":{"name":"@c4dt/dynacred","version":"0.0.6-p20190905061939.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.18","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.0.6-p20190905061939.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-J2LUAZ/5VeDd4odCiaCJAVQMO81nBz+faPdpPMYANwJ+8CCrOAYN7tCrTRtVr9Uif0YRWTqWcxLE2fpldmc+3Q==","shasum":"0337090715f9a3669318707e99c2cc7a0cc12e51","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.0.6-p20190905061939.0.tgz","fileCount":28,"unpackedSize":142206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcKkjCRA9TVsSAnZWagAACCsP/1bfCWMSuEqAYINBHJ8V\nM9fsG4JkFSA8hHJE2WMrEXrd+gfXPD8thVu+1IovX7aGxn+KIP1j7/PJyaaQ\nxy+/lJ6mH/MNb1kiXLT27TE873JP7jjBvTjiQBtSsSQK1/Mx8LTRLPK85PsB\nvXdinDgDTzqAMbM2CadotsNlBIwAROUQ+0khAhyiovuMVkFWQR/Jr2Qm49Yo\nSJ998kKGXgj/s9pTy9cqpFZGGL4IlEop341TvUHhClrkR3mtHOP8VUm3mpLU\nOdxwjLQ6m3NjRaQ2suOxfHlsEjuwJ44lPmCg1A3P1WHDEGdK22zb2ZMZZP03\nL80rcOLm7zzJD7vrT2PjZqKaoyhcZbI1fEYloVwYwVRa0f4/6uCQEdJSqo5d\noCcU8143J2ERQGSUnVdbl6BgOaaqX4tXP9JuTIEENU92G5cV5VNHlixSAwiP\nfLlFLIzjMHzZsl3dmsOOcHiK13Lfow1FOtH82GvT3FldZUKlMNEBPV+zU6be\n6Wls2NhI5QMclE4ir84dnyVdFhNSU/S/s6StnD91z5nLOMWqBJj+NiGNGuC5\n2HqwWyrIMA+obswsgoyE98q7YJ6103328IDanAqQ/oVqCOszpse6s4xHh2ld\nQnQ1TcAmNv82x1+8MTbUeNBBzeIJ0imvqzkZ22rWPs9GRLSH+n/ZG9dVC0lA\nhS8r\r\n=Yyma\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgr0hnYSw33+76hgbrm62A/yOZwEYH3jCnnszYy8feiAiEAjmrFxHq3GMsYnANzpVzRAxjxDLYC1TguAPCnb1ZknYI="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.0.6-p20190905061939.0_1567664418671_0.414153165945095"},"_hasShrinkwrap":false},"0.1.1-p20190905065156.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190905065156.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190905065156.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-++hmsPLeEfTrtKTOz8xH17f67ZY6HG1Xn/n57rfaVpAi8wtGBXhm3hL3Tx2ypXk6PCnNZXZ1KrR6i6SCjjzoHw==","shasum":"9b0e05571e7123689119de65da1f84f8a02af9b2","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190905065156.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcLCvCRA9TVsSAnZWagAAYf8P/RJYE5FImDv6NwkKtNsb\nDsdQ6mkt3eLQFMAaflBAc9qvzNvcPmaNLnRIn1r28m6Uj+xPxxt42zrlj8fe\nkj+xm7alme5MB0Ld+lYrEGk5B+dQ0oQ/buO8kElLFhstX0T9LRaj4mY8AMwf\nGETjCaRCZPYIPLn6FGF8MiyNF+BBjxCQuS9TPBpXVORAF1qCrAX9JyuVxBXJ\nusJ15NRw/lQJa+XFrKP6fgJrBX+jtPFEpakHMC6DieQAeLe2D2AXI/+dzGX7\nad4zCnfHMwm2u9hb+SyIq9bvbDSpgWNiw+3t/dAtP4+W2iqW9GvHNI/ERj3s\nczXfmd185bIBENcFyfFB+teR2rDE3dIcU9QTQaMGFGawM3Zamj27oxxn1f1b\n+6S4Enj20iG8/oGk+Wn+LaxXf8OYkRLt5Cquo+dN/zmf/I+76XUA0rdEzgef\nYkeB+2OH8MEyDoU7bwpvzpsnrc3nzXwLAw+Zvd8kcMR7OGCe7IS6AJDeEmob\n89jIIlFOxEZ6X1j/2KGGYHBA616laCY83/y6rTOCKjmKUiG1foxkWbsH4pCF\nNWyDD4WuTiiApdoMzMkfSCE93wNsE/Y9mupdsCr98ysFvzyl9g0KTYR1qJwW\n8MaHUIRRI+je6MRfDDttE5lU4/Hks7n628EBrvT2sim4rHWfDQJSHsZTqw4f\nGzHm\r\n=uGla\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCu/Yec8bt0FwLZ9EcbJiThMEMCH9CRE2KV7ClVmAk4gAIhAMT/WPrzWyI4DXgrth/pVs6ft7RqTgFDFsPG6FL/T08D"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190905065156.0_1567666350570_0.5884862439464378"},"_hasShrinkwrap":false},"0.1.1-p20190906154027.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190906154027.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190906154027.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-1VKjaeylMl2zBZCQrkL+ucV9UqaDV6TKEXQ3nV+akYY7JnpkD1ibmYFQjv/yn6ba2ixdVjOdtYaXq8eHBm+22Q==","shasum":"0321df2b04e52523d124e23f9b97f25fc1232331","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190906154027.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcn4TCRA9TVsSAnZWagAAOgcP/1L5YLZ7qf6uUv2LSXmI\nZ4BfYAFcWK404ehnIKSSnGJzqDKB3P92f78vF3ARkHQJQe5NjG/DBOw6gbMz\ne+N1iopP0npun+lfH52g05tclRq/bXFZI5v9vKRlt+X8ScY1zvUQv4N2+Ldy\nGGJaDWhllP1n0NsRnTGGGtgOzAs+XEwk/XvHUHQ9O+zZTIyk4MRouIgJSqz1\n8OsESTNFnIatdYfyqbSIDDzYaMP0A4OFXK5l9fMzpCnB0MXZDz7bI/LTfLTa\nPUPIrKUCRdwPEoaTR/kYcg/vwIRKD0WoK0AbFcgFgq/hhbF+mc5b7oOCR9WD\nTUFxYehf7dxUjIfHXEAGhzbHQvL4eWFwzwPZSsN33a83qXHM8aHwS8phnA+4\ntQdavwAXRPftNHDpCdzBi42b3RZmXf8rAKH1jaKzZ9ZhIU1uIQJBBqvo7ost\nYZSYXihXmyZPGyqVt6CFFqxwV88Aoie8YBKWTQ0dly69bgiUpaT4MAl82IQp\nPsVv1Umch2h0wnX7LqwxSllDLIUo1rR8nW/VNNFuguTL+evXe5cE1MY+qCHk\nVWSZmSkCCI93ESt+qEKz+Zz2ndnK82SAKyKh8MKnB1/V459IWW54uNnH046z\nkRUrUTSFsnPeAeja7BYDTCNREo+/FJCnY/X8bxRtAnBVCjDeY9AFLHnfiEoL\nXKj5\r\n=qJBv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICVht7GJqxqhJYeJ59l6W/pjF7GW9AfI7JOHQasqH8scAiEA4U/W4KyV0y3JdeDAOUaHkNwTp8uaa9jk+gb+9ldXl1E="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190906154027.0_1567784466689_0.985479081966818"},"_hasShrinkwrap":false},"0.1.1-p20190909103911.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190909103911.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190909103911.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-xEwQX/doyobSPqVyNENENGu6xk+++gnsA13UBnFruYqQJeZm6zpiDkcIuuooUVhPxlQYC6Fjbm7UT1DXWVoekg==","shasum":"ece1e73c5786766338761405da36018bb48b0e54","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190909103911.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJddiv0CRA9TVsSAnZWagAA59wP/1BP80Fq7deDUrG8KfmZ\nhAh5howlHiL6CGP0G6qVzdsoMXgOfd283PHJsJWLGFuclniXpz5n4eeupw5H\ncR5bfozJCpW14CG7S7LreACkxmvOjlSCObxHxfP5WXIhrozLPl6fJKhS/2bx\nTSkXa9hrYW6sMjajwqkX3DY+1WP+NHQTCzgnd0sIJgtGD9dIpX8XBHBgvBRq\nbLj4SgH32uLtBCH1Mv1XBIHNTI2SWrskxV1Ic2nBfK6VaHdlwXIMXNrLbfku\nKcTrvnduzFQ7j2+/WPR7KFTaxrGYagMjHdlfRGyiUCgdNO4MKg7KC7T40dGD\ngr0fgZfDLu8oVr8CtS7WjzwIcrXDqLuPJpeNasXcCRVEDDvhvrV0Sfuk1UrD\n3Mz2lqPW02u9ehELo+rJqtfc42I1/xESe6EO+gQsAj5P6TqkcLGSxrL+jqp5\nAhpHgEQJubzV7Pt3V4VdO+vswbAKnQop5z2RS6a13ZPi0lO+5rxIuNhSAxA9\nCdTOc9pNRc+VXOwqVSdOUeXU9AiI6NFNIHYqhKuvEH9yXeFYu+U2f/QQ4se1\nIyEdzkFjLZYc8jjUjiZsUitN276nasPrKrbaJsdhPgH7fPxs3JpvcueAaq7q\n2VIybJGYJAb6WsQWuPQ1nju/wzlFplAEudQMJUvvEDD3NDH61V295nLx8oLK\nkqPR\r\n=t3TE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAWVnA54qJdAk1rbtXZM2xwNM8dl3RF58LQWY2u3DlryAiEAhLzjmBjTZ8mxUwJUyFMUTtt2a3P10OH6SUhttZM1FHI="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190909103911.0_1568025587904_0.4188378865980842"},"_hasShrinkwrap":false},"0.1.1-p20190911112226.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190911112226.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190911112226.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-FjKI8sJhIigIdZVvFDlDfza6cPrMVl7rhr2nbWZtabY94mq9Wm38MAGmcFoH73ooX8zDWBv64wkrSNmuyKBlxg==","shasum":"80aeb589c21dcdd8e696cfcfefd6b9adedb6e937","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190911112226.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeNkXCRA9TVsSAnZWagAAHRwP/0OXV8YIeEdwxeRFJ8yR\ngXGuwNlxuA9rIRvz/3oQWFuNOMZtB6wvsd3lzO5beMlW6GYwBGE5a3KlqKNQ\nrCUkQIFpRvYuEIBpBAZRisjHrjgeRakQFxGcq26hL0PmPFUDaNQ8zO3SwdvN\n6aTsxqIEuxkMyQRQMiM3PRoLjOUflbIOCZpWEJM3L5bPIvqAl8OmzD8kpaYi\nJocJ0/c7w2q2LpN3YXnlSno/f6NE9nc429el16HrkUCh6I1PSmjNDzVZGwpt\nQWux79pQCQzbhXwW0GUeXfQ24fDlh9KYCj4ZoY2VQ9V+5mXPjIYxEEw8y/Q3\nt/dh07hpSUI59huWb40hpyecCzjLeDMT326QP8/WAcUEGmBlWD9NQOPbiiXe\n+gWtGJaZinGXOGbKjk/sefcAMlkNxFllGPRR2WSAitL8MGAmamS6Z8kPeP2g\nrb/N95lY2StmC9zkptbU+4+d+YZJUqWw3ifAFLqprsxfJGhiNzZuaVEsqOKg\nVbrpuUVFqj7QKnxIDGe8b9hOIHAgpv01eVvWemk6/1lbzHAKU2jteXatCIdu\nI2tBRpOd4kF2hM/nYUlg65oLmcIGU/i5bVGCJXAEDvIXBtJ+0B9wmarXpoTS\nyULTF1NSrlKuCAXBiYLRpxjX/znzQw3tkBpqhQxzXBKhG99MNcaxtrHy4Vhz\nHqCr\r\n=gQXY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHM5K9PaqdUmXr3M49eRR78kRk3GZGN7iJJBgEOdeOzzAiANe2Kv3hHKv8Z38mW0uBys4gerqqNdzOI1gZn5d1zRDw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190911112226.0_1568200982925_0.13797557759651946"},"_hasShrinkwrap":false},"0.1.1-p20190911125059.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190911125059.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190911125059.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MYujYnqOVuWq6oZSL06k+ftH75XP8yxVyFBnFSkWgP2lNfYcy9L2nlPtK1c5bAWfC75zPROGuhL6/AaufYfy9g==","shasum":"cf31cb2e99a8bf0391fa1fc508c3a1754995e726","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190911125059.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeO3WCRA9TVsSAnZWagAAsQkP+QDcBkJMEx2Qo69nZc8S\nbTIE+jYr7IfUNzOg51gkl4FQwZfCY2pqUMNmDAq6aLpgzx8L32ZFmbCiYsWP\nhfVErfcVZTuQz6HjxiRfVcMb+duXzFM6lQh0hUyU1qM+B+eVm8LbCiA+mk7U\nVOfGcmIlmCQ1WcmOqvemXxL/9ySxMi4PD3Ed4kX4abQ0YI8ASxAIi5Ob2ZEK\nbeTtummu0V5XFiyJbQhp22ZmFECDGWhLQOxvi0r/C7a8NOvBruhNeyq0kBKI\n9jU6GJtmDVeAVYGGbTiKOeGIyUwTJJDyPkbwu/ZQVDaWcWTsCPbb4peseC6H\nlxm+JvDDnbbVt0rRQGfxiOskDf8/TyZZlYkTGKEcM5TJSMpQoj0TXS1yokrI\n18Yk7hy/enjUtAkPtd2f+IgQrQFKZrBOYN8LNWEeTIUGBsC5zQvjQP1FOSJD\nbwDLXhOQvHZhjtRfeJkUTo3aZB8x2Pvx8V0EVvYbyXW1hLTSBD2h+XzG5bCr\nCE3LnhEO3yPF0KLrac/LTs/i438B5BwR6OvRLqKwaamPpvmIL6jkG4Tj6jIq\nNlgd4f+XYZ7K8q2UYN4m3caf3h12xrOX4WangIcwiyxxmt0E9v0DV+24VOWU\nUm52zUdwFBVTaGNOTLoj7k+diI+knrLtAeTvIay+aIaFyhSSGnkITG9uLMek\n+uK5\r\n=b7hw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA6M7bJ9PUbItn22L7c6MhArhWGia+HxcY24BNoH7TcLAiEA1rPEoRVwXBa4gk3BETsVKETHSKso2OzcYUDPbsDO4eI="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190911125059.0_1568206293334_0.7000841018626951"},"_hasShrinkwrap":false},"0.1.1-p20190924080421.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190924080421.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190924080421.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Utx37wuDZdgpjBY01BjhLEzvEcz/1IQUQiWMl9fujye7EpU+zJmkLiZLsAUJ6EuFroQ8H7gpmKafAhA8KM1IMA==","shasum":"a7c6e83bed3fbf5c875ebc17af0fe5a85f32c269","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190924080421.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdic4sCRA9TVsSAnZWagAAjccQAJmSXPjvBxxNcsx/rU4Z\nB48uHAXBxJfZjY9nMIFKqf99RMQtW146+tKdpAsfIBidweqnkVmtuK0rIgXO\nwql5IxAL5QdN6aEJI5PU2ztcaWzrc3pxCfW0YbZc6rlaZ3fjgVnL2djiyGZK\ncftiRjkbWCW6GjT/zFM201OaqlyQ107iUdQKr4lAyCmGWpszY+OS7+UBYSCE\nN6dO8avGwV/PxNDnS6DSoSTQRV3SJVW6jaMqh5Jq4kcSxujTYS4K0sNwJe9s\nh4rh/vT9mXWUXoO/NxQ19gv6DrbAZNgifatBJ86NugjNgxBTbBphcnFP1LOD\nOUOU5C2zMGFHmCi+2qgfoP9laH0V5Nec933P91bSrJaBG1yrNCsR+8JK13ux\nXQhL5ofyyR9/f9NcB0siATjrTi1AArtcAGeRj/umsbhmcEHPKVGuByVEa6aO\nWy11rTrHbd3MAAgWri0nminJgMfHmWTePZvoXscBNekOExXQ+WNN7b2JkaMC\nssi9MtL0XCf5L+Dg1HL1UD0c+BFNkCCyZdxbjXPvZYhuXVQ+pRAsCsG4eezT\nIuCJhebuarS/eF0oqqHk5U5iY/qgi/k3FlhTFwcUK+55AdC4ylkcjKg6G6wX\niAg2Sq/jhluKQu425/bdIQQZyUbBgyfXXYFKsO5p2+jIo5LX3oq9siLUlSw9\nu5Ox\r\n=Cmj+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1gWl0PPhiOqvveqDQjLuAnnr2a9qPg5wf/m4jPBAsXAiA1EWUB19fLdke849AHNoNILlY5UXKBWbrSEh2f7MGMuA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190924080421.0_1569312297670_0.3873685816992103"},"_hasShrinkwrap":false},"0.1.1-p20190924080609.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190924080609.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190924080609.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-rPDgyJKRREoayrigzlCAb8wYXZ8DWVP3Mk1qNjoTEVPmRrnNoxxcZPqSIYrlW0wBAcKeT6rd2lE8U05GT8g7dQ==","shasum":"be60ba4867234a99a77419d72685075f63f8cb21","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190924080609.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdic6VCRA9TVsSAnZWagAAQU0P/18JUz5KixhHPq0O46oS\nr5HCoYblNjWPaDMY3CZe75KYXhJHo6UKOIM/itc14Tbv5KzTbzFxbwii+9T2\ngD9pfJZLHlS2P2gr3z/jwVmfw+A7+sv9hmv4t0FLCqVMu7z/Z20EZ5Wb9zzi\nk+XdjFjVY2cuIeOvjOF3lwcjxTQk0+myg/WG7XCvT+MTiSM84G5jkchjoISg\nhhLhi7USYiRT8IqMWIo6HpA9F7owynSSktHOLvIJie8N6Hdw7jSspCCpoPr2\n/ud1obng5W6ZcBZQhxofN+/r5hqmgX9VE9yxJwwcfiK1aX3IFjDV+omJUsQB\n8vj6DS8HCRDRVj/LpV2phB5M5abiS8ENqJcgYVilAbtXrsd4W84ZKS+cvPlU\nGD+yeI4kFzzvdprFGI/xgTnLpVD4aQ9KnWRIhVkX0g8QEf1o7Xh/XJK7bMwa\n/Tull1RP62s8oZgBDvNLaWIJ+9oYea3M1RLKcEBlgmeV2Io/bNpWDMxq8Bh4\n38Zn+W3ejodo0vucmXe4Dywgr5h9inxT24A4jvlsD7TD+hLEL2r/ygdMGZ7i\nIwU3uEwDjB0Fnl0R7dEX7QLHeTwPe8vTR2cqIvzUV1v7SiTs4BNsw/swmO1E\n0BNujJxOp9QQ/R4M8KKWFCB3UaXSEO6fU4HcSMkywWSTGmDtF79pKnoIdQs3\nBpA5\r\n=d58C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4XWu4nKaBfnc5JxHGSDzKyGuTUdOcNqszW7fJPKH+pwIgb1c50Y/f8Rc26sNR9dajcVo+gcivYG418PxSi/Ad6ew="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190924080609.0_1569312404991_0.029972292115757915"},"_hasShrinkwrap":false},"0.1.1-p20190924081053.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190924081053.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190924081053.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SYl4BVFeXaM4Lrvwnsp4jctgOwaIOo7R+m61YmpkudA6V9RI66XaqGK+CA9ELidyKPR8hLmJVxzYfLW4i9SRaw==","shasum":"ead369b2107cf2a2a1822073d5699758bd83ad6f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190924081053.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdic+1CRA9TVsSAnZWagAAR8oQAJDbpohS9JgvzDK9bW2j\nAUb9onVl9BsVxI665qrvJznuamyywOkyauYxvvYGOkvA6IfMEa/5BkBT9yt8\n3zpwl3JwLyiAe7LeMCPCkKt4kYXzRCWQnVa2YM9BgAGtKYvWqhpUg2nubb+j\nTchXaMOvwF49jGSbkgz8hMXbAKrHf7TwapXrE+Xif0Trgk8Olh3oMuyrlDVC\nP6RE64cLxMvWlMH+ffrAZtX0Ol2mIkj2zsaiS40Ams5eB6T2TYUcNZ0q65zb\nA7khWMXEFCevF0EPbDIoMd+98M0IWQYRVTXrFaCcChWIdEzYG5eNAcGCVdnX\nIiL7LnxXHPK0bgMw3ANUikq181ZOPbAyIsre9v646ayqsS15lgfVu4Q7Fyct\n76TC/m80Ey/aPEgZv5hLg0rz8q5ByrZjCN47O+8Ec8pVm2MbrQUNhaS6YG9r\ncEoFCqmsMWm/d8pwFkdm5AqSlMbamhB0aBKkEGU457v72AHyCBL1NKq8+98w\n6K2abmRsiWuyJ2wStd2nuRWfWEu6kGeAvmep+VrlCxuOSdFYG2sxuzgEpb7K\n0boqIGRfaAOEQgQhbnUXtqb2RX6rK6BgkF5DMrAOAn0B7op7GhdiWy4a+yYK\nxvV1xFYB8ilQoeWESCQfK4U9nKEd9T8bMaU+UuTAYNj5EXS+HDP5v3mSiAig\nA81D\r\n=oYF7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp4m71hmdDaMhI3biEZfnxOA1LSmNrjqPFEbVkKSdjrQIhAIarcSxfUyOLzOI5cZ6w0aN8jU6A5eqFOgW40r875P+m"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190924081053.0_1569312692473_0.34044900038046566"},"_hasShrinkwrap":false},"0.1.1-p20190925095637.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925095637.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925095637.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZuaXZNqul+OHMnTaOo+99tYQg7r9pNyMcYtaZpYQFe8lRYjgfQSOjywmCohcgoL8NxORTIoa7I5YPYe94/Zm+A==","shasum":"8ce083c8e0510bd44dd907117dfb72d441c17790","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925095637.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdizn+CRA9TVsSAnZWagAAXO0P+QFcPtyAC1oKDfmy4bjE\nSZdE2Wb3Fuy0JL1rfAFQrvn2aSgWdyLp6Cyc8CTLvIunnep3gb/pk+DSQoBl\nA50EdfwDFH9oYkdn/PjHagM4iONqx8vHpEJw0vQg+K+2aslGKWozg2XK3Mhd\n1HwxtOaGNJhxsqbByxJSvzS9Df1xT0RazCi4FMLUnvRVYh+TqcWaGNfQWcY7\nJhobtcMq3hcG+ZJZqHZ52V7q+Iu6l7xE8w9e1Udt6CVUw2zapwaKAIWtceGS\nr02t2xMAKKWeVLLGAJi+3AVZQ0SsrKZDJKPsxNJNipbef39mN36rnSaT3Eaj\n/WGTPOLeHI7ot85NvQ+fgFbFK6oK6kgsp/BGlghutkYIcuIl6OPKVaHjsR5s\nabSwzC1ONkPj61B8qb2WfqHfQ3fWRyiH8yXJVRBmthCED8UyZKrMEm2/Ej46\n3vTCk7ukNuCBg+4sfE5jTmRZMbf88TgIhk4r1eql+bOhPcWLzusaQYdC9w7t\nXxKt+xCWhYkKYjLx/rvWmPxtxmgdxNU9/km0jwifwlvg+PVK5ifqikhT/jQh\nG+HcdHCP9M+z4+ywBYQM9N1/uwC7LJAot74GXg3EQcUi14+7/M0UwLDdgnpN\nTq4/0jgjHQ3PZh/86elSp7zF986s/4/vyB7HcSq65bGE/TaLBWfcL8xh3awG\nAEQd\r\n=diTr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExbu36uqgzM/KrMvTFaQhnEKn59xaoIpyhEnWNBy9ebAiEAvviWWhE401vgCbiNkDx9JyLbS0sJHSxgLnMTgb8Huk4="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925095637.0_1569405436490_0.4792590924385647"},"_hasShrinkwrap":false},"0.1.1-p20190925103235.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925103235.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925103235.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Q4m5yGFwoKC7HmDVfQ2njA+l3lydLAcew/bzBLOmEMYUo9Z5bydk1mi2ZsDYPUqd0BxHa0VVxt5KEqa0snm5Tg==","shasum":"bd7bfe4aff846fe55b66e52e5dfd88d561397bc9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925103235.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi0JrCRA9TVsSAnZWagAAJWwP/jxAFICg5ihB9+NJJAUd\nX7FR7dyM9lWgTMHkxq+7A6CZIlyjbmEMbuxs5EVYZv0pwF3M12nWwL039dxG\ndenua5f/BIDpRl/IR4/egF3DI5n6cne4WWpl0PR0l5inMbE0LG2z90zY0bdp\noUO5yTX4bS9laiuvtcJmES56RUKC3gGyjWMdStrS0t/wiWxis2nOmT3rPK43\n5IfGtB3pBygBmexIYV5AQE3iTMvhMO3cv55zFl8TLXFbCPvLdifg6HAhGmKy\nNqRt2/aa5JPKuLoV7gnMu6aMZONBqVlcEVXEEFrEW+hVV0vKbi/Hkkd7r13x\njdf7aw3Og4GoqcVkhAUtcLTxSQwl5jb0GdlAl1Xx59OvHgBeKbXyjo2j0uvh\nO4mbRCCqjpXZuuFZbz9YLCEgLxg5ZG5Ze8RPgidoBOJwprFUI2p7dk5+O4Da\nR07gtEsjralSjvMqLg2ZdO3DHkozRQTxIixqh6sf3KX3tsD5qEH2hfIFP1Yk\naouB3XKXfERHiBoNP5cBxg7B63L8GujJZyexoZQx060lDjhsDkejiSh2tbRz\n8FJqAEaH64iN4xY9SSel6pIPIXch+a5JGJ8/wJVfASL7NfsQf4p+9dQ5eZVe\njuNKOBx4TWs7y78JOnVBafmX1GjPTPR4PnEz4uZrKWQW2px2dlozvYdPgc3Q\nVlFZ\r\n=S8Q0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/NNvMT6SU/YeIFyq9vm6audP8jD8IJu2jgom2OyYX3AIhAIhclYqGrR68LPe2a8PUXTDkTcVns1GXZkat0h2WTtHF"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925103235.0_1569407594614_0.6348409800905432"},"_hasShrinkwrap":false},"0.1.1-p20190925141545.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925141545.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925141545.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uznP4GBQiey96r/qC9uXJMf62fuND2eplFCpOYkjOEat59Tw7k1Zq83toFwEuol+3KhGoKa62eUmRLT/VHIrEg==","shasum":"5265b1d7d69ae9aec9398334acd67c71f3dab91e","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925141545.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi3a5CRA9TVsSAnZWagAAnxIP/3mmV0jvSkWk9kYtGnmT\nGT//dh5FpdoG5hu3r7AxJaIEhat2K4Tsj7pfasLIpMyZNGrUgBno87IB30a8\nHCXxGSouD8W1Ql0Bi3630Cq6h+r9HlqjINeqe673T2QJK8VdK/W9mhMqQFFm\ncKdyxP5q0lAo5GFyO5EuCIWmK7Wcc9zUEq9jIiu3zcRzQplVwSG2IYOUSXks\nryr7e2W3g+FnwXcrzwBfuKfIfDjxTiUpQeRQISiNhWDVoZdIpjiBgTok5l8B\n3q8pfW0e8F9GbsqRDKhyjMyCZD5+UFzZPvKv8ngWInhXracTKBRJ3gCN6Bsk\nX3P7wVjxyMLDq7mrGA59wHv3c3dMvK+DnYcqThhhTMK2BO3jHPbQWIvY2sRU\nKf2CboNklEdz2rlhHz8TzyThLYt5/7NuCgHXcFyVWpI+U7sWnAWcYrod89Zx\n5GyDgNtDgHorPu2QQuoC1KzHmfWz4a4nlNhI72raX/fi3CARhgR+UInD8t7Q\n9cGV2gD/2esrLcJ4Z1swr2d39I83mEkNpw+OXFFteqQN3CEm3a7YBwJ9fIsl\noBjuXysJonEkQL2/kRYEpfvSgydZ2e6ExWRw+kMrCvMYdQ6HBwRaMe4Ef1XC\nOudzLmJjvOQq9kYnMNVToaLAvkx8gTnV1e6hVJkQkcKsIgbajdFUrXAWw4Uh\nHtmB\r\n=eAoa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxBNSI+SeNDg3WgXT0UkcGTRcINypYT19UcTdwpwRoewIhANIzD2dziic/YqhFOX+4Ybckfpqnz9C6xrdkfoJYUEMs"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925141545.0_1569420985041_0.20627482834447464"},"_hasShrinkwrap":false},"0.1.1-p20190925141746.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925141746.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925141746.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-RLJg2r49B3IKvidqaRVqzt1/pBT75r5QeTubVfmIF3sGor+AdeNVWx5yZEHfHMmHZ89bWU+qVe44s+DYFTzAVA==","shasum":"d71df578a825c99daac04e31ae790a404d5963f8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925141746.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi3cwCRA9TVsSAnZWagAAvQYP/1XHXPRHhPkzLioJQznf\nURHSnMv5H/yI+KAyxX7i2X+LlmK6MWTJZvIc1tHNuXcWdnT7CCkVR7TCOBUl\n2q3npAK65f9qcmsDW0znnSSu+Y3n9W7ESyjoC15A5DxMFjggFJW69jJeFfZi\nGwTs5FpinO/0T8yy722tYjhwS3KIBrrPVVKe3AFvrzQawkg0/f3e6QxlXV6I\nipjEEkW2Iuw5AYrMLevJK6vnelIRZarB9GPLvmVrpobZUPWy9NGWcJIXMOC+\nSp7UgsIhrZfKpGAEcPR1us7oqritCa3XzemutbVLjwbz5obYBB0hOxj2fX9P\n3HG7hpQXQAWzEZk5EHUu/2w8P3gwoarb3ZgZxAHjFt8gVkw0oaFGCoVsXr6P\ngj24B7YAXa6X7Uly0Zk0x1inCLGdRyvDayCjsssaRl5OFXNTCOHUfmOrPLp2\n5HF3SuzIDUutY7s7iLn5CJD7rRGfHubs3v8gXeDpeDBW74/Uc0Ns6QrVoJ5s\n1GUByin7EvEeTwP+L5YTgYPnPeKoVueMh46+tF/OFXlypCiA4YjLlq9FyqUo\nNEckKW6iumyrdddHYbkEKXY6zdoVxge44NshVFho1CYF3pk0Kl8lWmkwLbX7\nnJvwzU88XM+EXDLl93Wc60fb4W35x13VPiuTTVQGpJWt5qO6hz+lyhe+429M\nLHAB\r\n=Gp8B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOkkpq2aGbj/EFaMDVigWeL/Y9/GmnxiBPWi974lha1QIgQ+zBi4oI5BBytelsgztphRDulEVjCD+nIsbxyRYTNSA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925141746.0_1569421104212_0.554831053186029"},"_hasShrinkwrap":false},"0.1.1-p20190925142245.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925142245.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925142245.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0iKIVPWkIA1yYLax1SRU7/JGy9nJ1/EMkPR93ed7SOXxFUTfvmhVKxv6wD8FXCcDw/AY+ZzQYxNRj3yFSt7rCQ==","shasum":"f23287fafe14fbcb603ed9c959b8c5a8183f80cd","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925142245.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi3hdCRA9TVsSAnZWagAAKf4P/ReVtbcc+6XzCGu58TW+\nL6gQyWEeLOYbVstI7pnCm45wYrpDxuCcOEJznM09eCBdF3n/MP/kLt4rLgXV\ntYWU5epCIQfx4B/XeF3O4VNPuWor408vklEhIJHJKt8PXx86yNCz9v5TlzcG\nGudwzdVEZ103a9NLccJXqQw6VNn6MgTaiYkU7l8HXk8HeuOw13ys2+8t0dwl\nToRPwfAVqSvXq9wqJYP9ppA6QN3/ytxa+9viCdDunuET7r/94JVzcZvIX5fw\n4DKZFat7KXRYeyJpcvgnGKG3KHpvATmQ6UVBUN6xWvU3MshqBZzR2jj/Hmwe\nYNbptOKeLOFbBMhOticg/V+9GvDPpDLe5VBryepWSbFJUjmTYAhrtHyZABH2\nLL//f/+8t77M6oBnF+2F0BCrsf5hbakGtvQIK1t2pBvokBZHWOqR3YywjuAW\n99tNWfzmr3iG7cHVHZyNwluzvolzOm+htY5qq/m50iMrn8KzKv4/i8EdZiGQ\nbhoKIcfpN8//TCpmLxuwtg8nTFU4kGxNzCsHeGQKoYc+FZivPyFZ5G9uYHPc\nnWLG2iAoiFonJsLO4H5gorj0xRP9p+kCR3U4F3LPJpz5sqIBcRYc/fFnPRnd\n3/Xn/zneLVa8IXL0nWFh53l8p8AaocfbweiJkR15hBTMABEmsyrTeh9WWy0r\novl7\r\n=+ZEZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB6c4vsBD7y6GOG8QKsAxMImOCq6LJl8Mr36U3clbfA4AiEA1puSe2n5hCphNVVOWmmi5rLIFxZB+pZiZP1IaL2Gr70="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925142245.0_1569421405299_0.08043714192709772"},"_hasShrinkwrap":false},"0.1.1-p20190925151049.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190925151049.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190925151049.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YAnmFkxr3Tlb5o/yzCZ7hPwJFLzARGxLw3B6eiA4cL1p54JDXjVAhmU1xTNh6jz74GEeeaJYeDx/t1fbEB0rTg==","shasum":"04b2117b93d26d211bc31ed32d3a6d47ecda8afb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190925151049.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi4O0CRA9TVsSAnZWagAAfvAP+gIghh51VKNTQGAM3bpE\ngtoKsxHYq61VelYeTYvBKWRAC/I4516tdRCX3sqBiaUvB18MpgUx4wrjXzfc\nlRVEWcsPJN9yewzr/e3ladgWp/gYVLw4pzaYc3pMznhsRo9L8JpEV7Zz2ZoW\nXvAAs4Tjx2IY3y2+l9W+GfLJm1JfJ1nNcu2yE6u9sQRiTZMCwsQb1SFamSSH\nbExDGrwf6oqPgAFs1tcy5t/GDZ+fOUbRSSR5O/LwFHJ5aAbGCxZiL3vfcCkL\nNkQYTmlOMTX22nqV3wqvUuSuZBN1PiONbnMOUTVJKd9f/KdjPvtMXfnQYZPk\n0SBauWKWEkBhYSAr1nAaBRcUTm97Rpfn9gqk+EfK4d94jYN69owKICT/Is0H\nplws5kpwsPI9N0lwbNV4jHkLCbvcSTICUKds5JCSc11iB4Zl9nvI5KiQ1gMK\nYDJGevxkxyOtADwsbLoped9oqow5AehTuDmc57gGAy8Q+5tmS3//3E1WpJnA\niM9MRmozxvS5TE04sCuxMT2voJyKIRgEFDcIiUR6jQGuzpduUUjzi9IzfHUy\n66ufx2iYOACzrO8l0eCPV4pTGlJwZNbVvLS3NMTBmMStYhBu93SV7GH9010p\nSOEXbTLJ9UQsKf/3SkENoysSdB4TPjcMrL23ZiNQ4YQuIsUWOoCJ5JJ0dcrj\nuj9R\r\n=AZsi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEK0N539tsj7/DWablrCKG0xnIE7CWezBf5AK3yCT5UcAiEAhE5WSbftWMEjGatwJcepSCwvVv6YS2zdTtFF/dAgk1I="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190925151049.0_1569424308294_0.6317568962278841"},"_hasShrinkwrap":false},"0.1.1-p20190927103652.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190927103652.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190927103652.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+pSUPkESvml2eyARRktXeUUFYqKgj8kRMFbvTTOoXR4xrSrokzaHnTJ04fNWefNeERvGnlLeeVX0PE7AlKmYUg==","shasum":"0e72d791bf0fa60c5c375fedc65ff0f1e8605217","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190927103652.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjeZpCRA9TVsSAnZWagAATrUP/16FGcTbIAbczvowQQNf\nAWZmJ4pJ6fhG5XbgnTqSAARR7cNqm0CT8xWDarwT9vWsV6EwtTPRDYUF5UmD\nRYUUAVRyXoYZSYIDQrWNhoYvsJW+vXAJkJSSfQgOeILP/kvwwXYPRRPCd7rM\nt90RS4Yx2Ldv91UM3I0XQyQjZGUqSZKacvvNfjsBUlwc3ja6KrZF9Rbo87V0\nQe/oT2WEgkCTS7tDX87kdIa0AW6d5t3pqBSyrRnjq36iY4vKZZAleE7ZJGgb\nRDxHy6BR03gGc/DElAYxkqTifGzsatUqptvkOCYZL7+yYOEg/7SLAEy+2oBC\nD6MEPMIypNcxR1nudvdsx4mrdEJ2hwJ9XVfkNEE2iztWau+Jb8nizrEKBgn7\nhHLMxO5au5JCmzDGaxM1OtXfdY5boQTHZyEzWpGlezxooPF7cMi4wmuL9NoV\nm4M3zwEHtLh2cMKRerimJDutzXQLv79d/0oXbh7jTNOKmp6GSqAtdLwS/2C4\nNRrJobqX2cynwqy/+3MDP45MybRW20kDL4yfpxxi/TbELg2VFtHP6G8FGjD9\n97SMLeHaYQJk9+FGmzkcH3vhBjfj3hEn30t9rlHCz6ORTN5MLdfioCHrDqAK\n7i+Y/UR5vfrgHX5LARkAmN9Xcd6lHdp/eGUmRXNYYOW/7CxdtuFbgQ6lC8uE\n+bia\r\n=/Crn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGk23SRsW8HgMhWOMA+n9R4ZJUjBMlK6ip9sBu0Cb2lqAiEAshfgm+z/xJkV3kULjBUpoQ0THiaP0BSxZjiHHhHxpt8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190927103652.0_1569580648413_0.7935995028659919"},"_hasShrinkwrap":false},"0.1.1-p20190930080204.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190930080204.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190930080204.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-VW5TadrIoj2yPYmg05OjE+gD9RjejTMHQBu1gqg8xR2ARcrEeggoF+gind5oLxcclUcw3kTGjhye+wmfFM1RXg==","shasum":"69a0c8692ad973ea6de571534124d660836eeb39","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190930080204.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkbamCRA9TVsSAnZWagAAIcYP/36elYokTcUosIYENCOu\nqC55UbGMzpiQswb4P04Jl+TSmQQEhJWuOgZ5tz05o3BGE6CGP0KervwoZI1s\np5UOL48M7zyrHjILNH7FQqAmjE0gYjdP+1kXVyUrjUbZKfMICzKw+WlMEJly\nFN8Z5s+m93bL8sk1KDd+w090Y5QsEqeHYH5gfZJNP+/GOiU6pN61vDqK/1UL\n4Ig7iPOaJBm9pkk2ygPDfzuKf2d32X3HQcwWpZkUP5S3cSIThPkiJlOhb/uL\n0qqBCrwSrlgAs5iH15NqYjTfvDDBETz3/07k95JvIIzB0s9WOB4qukOVChbt\ndyWDlSwEQyZXwq9s+GnsYhBAt2Hc+cNfBVJReQTbNP31coORzOQ+UH4SBxhb\n+8IBYTmV71IlucDLl6rGTsNMpXeD6YEKu61wMKu/udLqL6zrTueQOHDClWPc\nvrwDd5JJQFOZkh4uW6fzuiaN4Akiv5CJCXXrJoqxL66+zjbRjHXHkHtje+Cm\nWmeHBUUDQXGUqyIK7LCw6cKeBkG4HyQdp9bIqEwRrsTJdgorWTRzCe1Vq3ux\nW3marhkeuD4CreNVabdD4O118K3J3M1Og112CIMOHEF/qJjsSWgiC1F+geut\n3yUg049vJDLVd4xo9F1YYc534I41FQZgloGQpu1kj8hPzJu1keNmMLzd+0Oo\npB3O\r\n=P/m7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPt29SuVzgoVv8YiSWcA7rdf59ob0E2F2pw4LPVNMAUQIgJf8c6rYsfcYkKnHV5DmYERpWIAoehU9c5jhGxIeQGnM="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190930080204.0_1569830565632_0.6268559911419651"},"_hasShrinkwrap":false},"0.1.1-p20190930080305.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190930080305.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190930080305.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TOXf+eOw4uKj2W6u+iZZ3SvXUT+KnQDNgChEB7qceF3ZP/iiAcx8f4zfZImp/By3xcFw1dXSo09EkMbjf4aC7g==","shasum":"50bd43b98bf90401b3aef6a18bfd31f82b3d8696","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190930080305.0.tgz","fileCount":28,"unpackedSize":142582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkbbkCRA9TVsSAnZWagAA4ZoP/0OFWcHDVYjeF4+162FS\nLOmc5Hk4jxNgnpHx9EwWFM1Ij3rV0FqgQTIHJBwjKIdU2CkpqjGvo6wGkjBM\nO//sqHV4Gxr0+NIclS7zosQmEnQu1wF9BqJVqD8kk04uafu5/SOXNxoOgBU4\nbGlMlqEL3wouAuOryLioeovfDG7afnhrpSEgErdi7+V6LJyZjg0p1LmRlZv+\nAfWGh/qHjQ7/gKY4CR0mM3L+Yay+C9EAnSsAnJQ1agBhArLXbGi+eSzIETdJ\nxqspnnw9SgG98FcNe4m6w3U2cVPRl86hdRVOHblV18q5byLrMEinzhM/Zi5P\noNEkATSDpmhQat+J6Vrp04pNEM8VmUQzAt3e05redAP+JqpVP62qie0uyzCI\n6eapRAT32qcRUGEb8/2T3P+7A/D0doMiutkaEGYAvWsJyCY+gqm9ICvfpp5b\nF774lEVyE28JlhTfTkp+ISmdYR1ZJgplkZXy7jIsNShG8+HmDrBMFgixiaUG\nNjpHY78n+aqnDt5z1cxXvFloPkhbD/e7rgfWd51E3h6JBzzrgxlcryJIZHwC\n7j0iZBmpKB9ItGzIRUH/hwlPgv1znsxLLC0lyJmnX0d2yLaMuMvqVhRNlB4k\nWev5XHo2GBItS3wrcyYbtq7hq8JOjlvQA8NlhJCmaoHAeT7M7YKelXKK3fBc\nj130\r\n=sRSZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCl3TTD4BCA8F0fWEYzYtt9vqW4Jd7CZpFW7twPI0WvDwIgBqR/6ikJ1EtkzSJwV0LcYl6gPY/zaAfjYf6ue47X3B0="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190930080305.0_1569830627309_0.29980341147082834"},"_hasShrinkwrap":false},"0.1.1-p20190930115955.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20190930115955.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20190930115955.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-agJ40YzIBmmcJn63CROLyBN+CYZZdSmb2UUUfbGiymgMH4g0AnZg5PfauEXsvUfGKz4F1GP7hTKC0473OXT8FA==","shasum":"b7b08f73f18dd19bc9e6dd47117ae24f9c1e0a1c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20190930115955.0.tgz","fileCount":28,"unpackedSize":145297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdke5fCRA9TVsSAnZWagAAVx8QAKFe6KaS2FkSwm2IArY7\nXoVWnnVD4gCP+CcANHT4jzgxyTle/HMDWvhdZQE5n3JNiUIL1VQ86tbnLzj2\nRV7HC1jmXpnK9f9pOKtaEq63VoeyYaz2pnTs2mY1B/yk7zbifbLfhpPUbKT6\n85eYQsS8tQp5K0MoU3h6orHNVBoBu1UvdlpKcKmh6KdOC71jem3uAOpFX3n8\nA/dd4q9o0bsq1zA+774KAzHaRDcbyeOt0Me1AjUtSPejyndYT2Ekok911cd1\nLNBwnnxr9Ao8nv4vjCWlc77knCs2JdaOlSVBd4FZPCnkoWIiQ/d+x/e6noc5\nqUYzI3SPWYer7UInt3GkckTPMgSFQSR+7PJ9+GhObGXwjb7LGs1+jC3BTgdm\nSd5Q9Zh3MgD/iZ9Ob8o8AjpRm/24/75cXR1VtluHqUY0M92k1he47VDST4zP\nVo0sHi2uTtPCe6n5lo9nNouVKv829o92sUPNrj4x31pDwPzQ8JQ2R2TJ3VDB\niYAl8k4JEZg7/uNiFVDqB0QQGJveYkk6BZuICXNmwpJoEf6qaQ4+QksSJsMU\nf1BKQjl+hwa1sw6U3O1EQYe5C3mJouoCWMBpQ7rY95f+lZvlC5rh7L0yLw97\nJ3qw+ajZX2fPAvvXrUZZ5ADLJRtFMQuUF/8Pfzrg+Frur7Rr+a4erIt0QxpM\ntMlp\r\n=Ca0f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFcx8h1H22N5ue+BGrVR5tiigvs6xPJ/YAPl7hZgrA1nAiB+o++YM1GOZY9d20NhTvw4QZORtrlIzQhqEdk8goXp9A=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20190930115955.0_1569844830968_0.9563849183301476"},"_hasShrinkwrap":false},"0.1.1-p20191001132941.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191001132941.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","dockerode":"^2.5.8","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.3.15","jasmine":"^3.4.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.3.0","tsconfig-paths":"^3.8.0","tslint":"^5.18.0","typescript":"^3.5.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191001132941.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Dvo8MwNs+vT5IV6vInjt+gR+zRlWfjtkOEmQnRQk9v9exleHpbqefQo29isCU+KiQYV05B3x8wyLuvSlTxANHg==","shasum":"a12aa8671eccbdd4a7bad0a5b7b5ee5b0206ea55","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191001132941.0.tgz","fileCount":28,"unpackedSize":145297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk1TrCRA9TVsSAnZWagAAD0AP/1SsGhtTn2oxA570PKNe\n6fVDpHS4DLPpVVIPN43le6b1OHm6a4c5L0cb8impk/H+8X5EYerNwG0zeVvx\niLatKsoKjIwcvqp2qnF7H6wjYKikl5UbpcU97gX28gn15hck0UfyxNuGGoGK\nWGjHpMaHV15QK8lnhY53zHpCtXpwje+vSD4z147gcx3FtifA0eWEsc17+msM\nb5kbALK5lxQqG5y2DTBv3Bw3Hnz2lBvHfeFIdg4T5Fqtgfb5+I/kF5Nj9O30\nXqToZLpKvvb5ohZn+ghGpFKodB7E6bOlTjwqb330Gf5gCsUH4kk01iG5hZad\nKtT41x/UhPBx0wdIpoa24skp7yMEVZX/CSVxvImFpEInfpjaQXj5YfcFmwco\n5s3CLTZHYa+ge6u5LTgPOODrSmh5RoMGtvgULs+1R656NF9L+BQEKQ2r05xe\nlDS4O551bWAL6R+LNgN5vdBmfeTuLIfDDixZkLIiF1o+MOYIVLz9KG5i5afc\nQi/JcqAQFPmUEMgqLVOHlsNQBGtTueRMYELer6R4MStvInWUQajQZtxtuNch\nUs6wU5r6gLvimKf79XiYTCoplNyiCzaG+ugjhmGnmco3Kkm7EIzAp+bCXXmY\nbPzBJLx1twr/wVWfEff4tHB4okyQlgaKVTewLzklg8T7JmD/wOtq73EJ6ieI\nurw5\r\n=2Ena\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMatUGcpjmvsqFT0K+1AbGdF6PA5ts62osTdTeZ6EANAIhAKVDfsrRR4O1EhkPh5GflE8tlGhuSHIOQip3s/1WSR6F"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191001132941.0_1569936618560_0.3962115708181453"},"_hasShrinkwrap":false},"0.1.1-p20191003114417.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191003114417.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191003114417.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-EAmCV7Nnk01IoH2moBMQGf79u5CgA+GPb9cbHJwwftO65plWHS8uodPxOk7iILxqnfC+9azlvenT4VeKtVWncg==","shasum":"91123d776954f0675c148d5858017dfa64fc27ea","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191003114417.0.tgz","fileCount":28,"unpackedSize":145856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdld81CRA9TVsSAnZWagAAPmcP+wckVVPpRcSO3SN6uf+y\nB4/IXiWUFZBbHJOpfaa559MePieizfmcZk0To4UUuhLr/j3oD6gt4wVDDjJU\n/BEyZ5LZM6+FFTOIIETh6SdbLej9Zmq7cf6dGTVDqkLVHTinPuIstR8WPQtJ\n0gSWs68duad1bNZ7km3D7Qg9YDqzEEgS/x2iL33kyRjqBgSPxOyeBtFJ7pqw\nwT7yyJ1LHKM9dBMbqXJpnk52IhPSAuhmrlBbgM4Bv0Vg+uqZs6C3UWb0c9mi\nAzhemYi4ZZNTsIVeH9FrdVYkY3ZKSmPwm3Z/2kDfQTnIEgEuXvxEUlSeNdiU\njmWT5raWjPN/h3A2eM4dPw4AIioGLCdF0cokJhlFEhaYY0ex1pAg5N5KBdSd\njlN2ut44MQ/8jU8AGVY4QYzq/86abiw0EhH+ApVcuDwaa0cEsNBT1MGg0UxF\n5YO85M1XBhkKLow4+PYZu+5FbQQ4rm0PE6yZGPDux3X7WNEQMjjwK4aigzok\n9PtD59dGv2Qzg99ixzSu2LYAL3KNzGm7Yo/2V6tjlseD6FGPyUP3QSiV8kGq\ncsDyfeT/pN3x8+ZcaNNVUYM1zAjOnGk7dbxR/29UfnoBGVhpyyhG5Z1Hg3Yu\nemEcPR6fKdcRiOMLX32fiy8LvsYjlp1qqLciBVyvRiyFjyW4cd82Qwjm1tK7\nWbUf\r\n=YwFU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHO227JJHL+eCw4BAT1SF28OTzEW4m5dJZddavCLZkrzAiAul/LvAiS+czBJCm8n6Dv9JZtvz5VplGNkxGsXABeHXw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191003114417.0_1570103092361_0.015435871259189549"},"_hasShrinkwrap":false},"0.1.1-p20191003130802.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191003130802.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191003130802.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-sU0rsjgK+1DH8QTp9uoMAYI4kbsdyhxF0x4YdybK9uOAwbDiW86HjBEh1JOh6HOlAbB6A+vifAw3nQW/b3IYNg==","shasum":"135ae443f58f51663a1db8d92c52a98bfec2e243","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191003130802.0.tgz","fileCount":28,"unpackedSize":145819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlfLbCRA9TVsSAnZWagAA37AP/2bvXR6QwmXLyUGVO/Mh\nMq0+qYz08QkcD+zQTXNQ6m6m+eEp+92r+ot58q9L6J8LbbzaaN+GCsQAWi6I\nSDIF5W3U2xYAkJ6/lK3uHOZySIdBA9+MvgzSn1O+RvRXPgE+mjY+MueZyU/T\nm6/J/0NeLWRO3Pa81UgndWaTJcZbXBuHPFlZL3nCW61D8YVCiZUzJqJxMsUn\nQ3N3ZgPhahuCwaMDLJRn+pZuJdqa4QdI7ZKvhBxLgnX0dCwtZzPA/YonpIcd\nrlQEtPKwCHkvcWZXUML1g1EBm5VV2Zry89qm+Qh23QYIeG8zQpDIjfT0sX1v\n+iluJTut7J7EilZURtFqOihN4klRO081lhwpI66v5cTIZwmM/Ehk//Pb/a/7\ndjKFP9f08lHU21cLYmSQnQCEMVx2ceT+YvOArhCExWcBVN8Z+thtx/mztI8+\n+yV9qDbogrEXyPqKaJkOQnf7vzmD/fYuVYS9lCb2Bm5gmqNAPHvMRogWAouO\nsOs7nqjn2v1rV/Eh7JUNGEbXDKgaicEdlCy6ER7hMMHJGsFloJsDINjOR8t7\n7TeptE8ix5oFQcOymayR5cZGWdV8S98PBhXc1kgWGVw4JbmHcXq3ObaUdb5w\nPe7+38OFv4JuCdDtsSKO1zahVDE12757yDrRn29zKAcneMUTBhJCBKUuMry0\n5VQJ\r\n=qtib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeZ3xDsg5i4395SDfmECPEqdAYeBFOdmXiLEciITrbuAiEA5HQhz3AKUJBOHrAF2q6jhag2SWnjd4hhY9MHN5npWUk="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191003130802.0_1570108119844_0.8531187760472514"},"_hasShrinkwrap":false},"0.1.1-p20191003135448.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191003135448.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191003135448.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-l+5za2ioHd5NVCQA1VPvqp4yWNz2JKCs7M/Fgm6TpwKP2yMCiInYqxyh4TxCfDiJYSFsQbYo6HfMKmjEgBm9gA==","shasum":"4226cf435dacb2423f22c36fb32090439d4ff61f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191003135448.0.tgz","fileCount":28,"unpackedSize":145819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlf3RCRA9TVsSAnZWagAAjNcQAJlSzeF/1iE1vr2V+LJ5\nfiOz2elaN6optQmS7T6NrLpF46TlSpwCe0agyaMucOtd4fcxdLaHWUT12nGo\nf7M9k/vVz0oo0ghw6ODuw0koM5C9kamopo7nSRGIXX8HV8lKPZEJSPdsPRAR\nM71gEIdQCPmxO8OTC7pd33/5HvXVCez0PHdtfv9p1VKYhfvYo0mmbk0/YpV2\nZLW+VsAd4fhqRBbqA06rgkyJevhcGp3qTays4qq9MsCkxz+Yf88zkfp8WcYu\nY5EOVvb20ZUPl4HG3JDE/pp8So/daGafKlTg773I0SEX5WyQa2h1bDXR6V0k\n0MlbNeS2JcSwEuC6FIYTjL7UiMaqumaJeUrEYbEbdRN4zYnekYowA1p3GRjT\nG5gMa4R3AZbAr/1EhUu6FB95boBxcZwCNVdxYHNZeQaLzMUQals+pO3Q94B3\npCHVHar7vyD4qWvSD/b/buBm/cnNqRef2mAlACiOZbdkhHIA7X26QsJSDFsp\nNm4jPr5m62nwAa87OFL1CFPud83mgH1vbyLyct9zATs9t8HUV6eTd6vHkJ7D\nK07Nr+EMXUlnuAk4FY9rn3eiQKUT9B1Ir1U6MlEptMaBhaOLC/1x2Xzb2jJI\nXtR7RVnpRvKQuVCt9lwSZdirnYy7jrzrD8zBFhirebYNRaEjx5NqclvKmip1\nHYIl\r\n=tRQX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2MFhuzZZANxegJbmnFz2o2ro3Hq8THd6P8gOTSVfm0AiAJPU0Pn3cEtLT5M1m+UuI+pawJk0vLNnZeDiKJ5r4VDw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191003135448.0_1570110929205_0.7012184392580618"},"_hasShrinkwrap":false},"0.1.1-p20191007084439.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191007084439.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191007084439.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-fB/d4VMna3Xz/RblMmc/d27GLKzidyoeVrFbGUaWdkDaiiZL3durZzszV3S6FkHsaMhOU6Oe6ffYiXUsu73nJQ==","shasum":"204d34f1a7b9c29c55f4f3d17a78b8c0570a8b31","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191007084439.0.tgz","fileCount":28,"unpackedSize":145929,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmvscCRA9TVsSAnZWagAAogMP/RgIAwkQ1PvaafIC7L5j\n+LT/FM4QJ928oMiVu66DnvgEVd4uULmM6AXsV7Gf9neFLLnCwXB+/4zPQ+jL\ni4yaao8z2SMbFqJ4n1E49pZNo1cT/9lR1h9RayCPeczdYqa8F2pMSv+szkEn\n0U+coM/CQSR3yr63ffm+oNFEaOw4lOpgVSS9SE5rhj7vakA5lQkK/MndsTCM\n8HA69pzWUgCwH6QSopgcxozH7MFpxh2YsHSi6UeYbUzjYam+fhrV5TK5wBRH\nOZ6/NhDOHqOFP5aZb+ETofAzh+5k57lhSHF+JpjRj0e2YriCb8XcUgUV0c+l\n8UpOboMQLsL86FfROq5A+C4ozh+eDMoxDcHPrChC6KO3Dofdrs5zgWgMrMCy\ngQHnS5TCHF2+QzHOPED5AsHEIm4H9891yNtLfGzaRckKHIzCXATvUJonJ7eA\nDnIoQez4lLv41qrEg0uI98BLhU9AslXk/whH0OYepjB5/h2khcjWKPEO8qZm\npOBwolkcY4oMSAm+3eZAGDdhHuX1UVK8vyWFdcPfmMt6V4QhqMeGc2bTBrBV\nJcTOsWYdwBUX9qtUOXDQjdfLIW5Oxf4QzGT2F7OcacZYtbOV57N9OSHPCDUQ\n2zaglr9/Nf7oW+oSTvFpNUTIScl0zVCp9Ej0Xa0RhPjxCEVuY79+4ffh2ew+\nXU+S\r\n=CyWO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCv5BOj5S5TcQGvNeNW5l4KNaYsteIcbptLFjz5joiPngIhAJp1AWjXbinvZ03SKWczxmU48Et0jhclYE+aBt4bgRfx"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191007084439.0_1570437915963_0.8320398327900029"},"_hasShrinkwrap":false},"0.1.1-p20191008090849.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191008090849.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191008090849.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Yfp5TH9fsdovtZBI2EV0ZoynsqLiL4E5+SgJLBKspoa2i5L8XRk9UQBmVNhJh1SLW72+1BsnHCPk1Wgj8X7AmQ==","shasum":"329d3b7229d48fc142b2a4bf2833d2ac13b36bdb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191008090849.0.tgz","fileCount":28,"unpackedSize":146087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnFJJCRA9TVsSAnZWagAA+H0P/1VNcYdtxTnPjLomwR0z\nKj+2//F8UtR23H44prKEPqFlqY1JqwR3Ol7WqXcuAm3fmBivt8zqxTT0/0lL\no/INlXw2YqXoYB0Kp+Oqzk1jz/gj4+Vgh2gJIzgrZVo/Ja5IFM2FpMNeASNE\nqJjVwsJHMnc771r+hRmYvuMB+BU4KFXfJk4scnYllHiSDXFnlnjZemCON76j\nuls86VhptvtXYJmnmh605j6ApdKyIXFcMP44k6E54Vaq/QozptxPiS36DM8H\n6ZIRMZCilccaLL3BZRnbq67kmendUJf7A1zjj+Oy883T2D0bHW88EUZYHBY8\nLQuZjPj04suZyyTK2MQOPLVEJ/pYlg6ReUwubBCUv2FFLIOjGlS4KDUKhEnT\nec2NH7/En34BFtl/cf/a1PLl/pov6RKX1o0fGj2RuVHzkTEpwz6Gd9GKzE2p\nOIhlzr08Uh7GamHRJAJ2WjM6P9NZotBou4ncEwG448sIm2fSqd+EyRIWe7HS\ndN7UdP0hHRSIFJkC4st7fvFtJkqvzSHnnNqTIaKpnvm1cHbFdyNgZOh0agXo\nADw5lJmaG5YKzWWmgGjPT6sYPeIkMoX0Gsx1ef2rn7V8uBdrZQqR1yj20Yv1\nmrcfzHHQXbmVyryCwMML3SV9u6Q1v1ynSP/rRl97AV3RKlEE86EKVlTGD0Lh\nKOc9\r\n=dwxE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAU5eCt5stgdA5KMzr2IZi8pS6AF+EAddurshSbWVYYeAiBKMbbJ4a4r8I8FQ1XNxgi28coF3aagL5loDh1DYrUaEQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191008090849.0_1570525768952_0.2306817800090668"},"_hasShrinkwrap":false},"0.1.1-p20191008114336.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191008114336.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191008114336.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-pclF5OOs0Susekid+bF0N7Crq6c4akWpM2dcq1vUccRCtD3ge+tUaAnB6FbGJ19v3S3xNADmnnneuMmGgKUh3Q==","shasum":"7f6def1c454180bfa889f9bb4c3f18900f3354c1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191008114336.0.tgz","fileCount":28,"unpackedSize":146087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnHaOCRA9TVsSAnZWagAAiekP/0KAfyhwCtXdSKPp7Syn\nCpcCAj+qLvhQAtSyK8zRE0X0RzVe2fe59M3J8Wks824D2gncnsd9B8wMxVEq\nr3j3hBqxPdSGBgRHxini83Yd4lwa0wFHZL7LHl+sHqnfdzUgnl4SIbjVYZuK\npMrLRMH5Zf+efdEJFobnRXjdUm4XrJZC6Lh/oYlMg4PIOqLTYXI6bqNPY+ET\neuuBptdPGw9Q+o16qZbj/hp8Ar6HFAs4LDCtZhXXEOkfSnI+dCd9N6lQULNh\nmrRve6vTIk60KwKVOUWZKyWCj4ERPDm/MXVA4P9PI7N7wsn/XUZsCFoSjGdE\nr14pAf0hjQ9qu5SUbqOmhkBKK45bBp8Wihf5oCqpIHdhK3hwcUE9qCK/lHKz\n0GePKYHEvjQKmiKX2xyu3gm/Va7QGz4sZmVz8QlL6ocyakOupy47pUO3mGTV\nCw7yMlPJ/nyLxAUb6EkD+KQj9wQbF8DTiiAnuNSh2MAXSbJR5VEh2TqJ9gsl\nB1ScrJ1+Mhkhr4xWmQxYn7yaMu7XEpnpQfVsuFPFpIidv6lq2VKwWUZrw3Tk\nrlvKQANF91lM6JZWxrmLQU+eJEXfcm6i50N02TpHIZJbwtEMNhTAw4vV4Do9\nrgMswHs8r7Puwoy2Lo49J5sciLgneYEH4P3rELi8S8w2UsjWWkxufwRqlvqO\n85Qx\r\n=hiXg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLQikQUxX5Q8zBtH5k/29xgqLpbcrWeXo0Ew+2Fp5ERAiBq5jpZNbBCBTAjliVNH56abPRTCnLlyW892v2HHd+F5g=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191008114336.0_1570535053475_0.7460868114067531"},"_hasShrinkwrap":false},"0.1.1-p20191009090723.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191009090723.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191009090723.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kMHsJIPAIJZ3IuF77iyO9UIWd06CLcKZFNY43FiOm8GPlFUESWv1K7xPDPSWfbOLXdVUgrGC5gQUqUKStu5+0g==","shasum":"53ee50be3819e70930615a8f4212ad2bab14136e","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191009090723.0.tgz","fileCount":28,"unpackedSize":146087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnaNxCRA9TVsSAnZWagAAyyIQAJHNt7sc89WTxUgUiJES\n16/LDjD7N36HXGmRR4hU8qISpH1CGqMKE5NC/ia+DBDyRl3kZxuDp3bvucKU\nfGqhxUH7YlfR/APYK0LMuD67Wb2ltLlpQRoxOHDmhqmdW7NIZ8v9uxIvCe2E\n4GP7mRjloH7CQHA/12+NZc4+u8pfMP81phDOJbN7OhUqV6yOznE4aa/nAx4F\npsEfBuiJpWhui38a93g1ikLKSiNL29jerS1Fq0c8u915ja4g9owqqL9HAZy5\n4DqiT/sojZZeCrdrv6YMubi7xTykE2gg14VgGDSMZMR0XxGNn1CYIO+kckxv\nOaBgNf2B+jFv3WECD3mdx0pO8sug9H2Dp3JtmVsMUBon2iXhE0g7G9ea04U4\n2Gp3ks0Cf2qBOBNvkjYI+PTDiRLROjtUVLHbh0w+Ex3hKOoSgozlpt8QrQxs\nzut12dRPy7Hz0ZxRxA3qqM8EHY5uNxKZNKmG3fcJVLf8SYs/dHKTusdNML6a\n4WZOp/oPAdzvrD4msALKrcJSA2IaW1f9hmhPFlr1kQsSP5HdgiZZxrBvPJqD\nPZDBllwIlQPY2mTdRCC+Fc1BQ0vcaOaSZybBeoHoLLoc5n1JSbQcb2A73v+8\ny58+PtovU+ogCm7ceOTOCuovvxOW2NFCG4L5Tztg0mx37enJrF7NBTFwtcs5\nOk0Y\r\n=wjmo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClg8NP5fLwPNIJ4SMizYmM659HL+ucDgSvXB09JL9cOgIhAO0Y5OEJdNRlMfRLx7VLYDfJ6cggs7DHSg7ykB/o6rgF"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191009090723.0_1570612080887_0.5915954532033416"},"_hasShrinkwrap":false},"0.1.1-p20191010083636.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191010083636.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.23","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191010083636.0","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-c66TdgI2I0poFDNEuot2VOGfFERVBPF2tGIzyqDhB4C5dQYV8EMB/KcTlH2Iy+nFw0fXyLp1BLZVp/jdrVR4mA==","shasum":"eb608b7ff6c9c975f77c457f8f27ca1edccf8f4b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191010083636.0.tgz","fileCount":28,"unpackedSize":146087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnu27CRA9TVsSAnZWagAAdoIP+wWq2t0w7afYjipyMh0n\nLZ1r6uTc0xnvF7nkkxSklTIaw5mhKahLTKvnR4GOKfzvlHXacnab3SDx9ysO\nIrBuqzWM41k6lGNHTn+6yCgV5CrJD7+Bjo5+DMaZGeg5R2KnrwvAhS3szo6f\nUhkSKgy+fNej/QkXixauRlxq6+YPY854zErFQL38FxAknK9u2WtuSwSf5kel\nvSqsvBCBbpfWQ8rfvk0bT98shKmuRz7Jf4wb4oBa9o2VG+FZRzLmSf3AAuTc\nX3LN2H/GgkWeINXORq7OXPQVBsXn8YTCllOcaq79IZOOa8ynai1KLBMC90u7\nkv1G19TnWCw0hkPWmKUY7uiKTuXTXLM492H9LW4BB+CkeF1iLg35XMtdunoJ\nnYEQxa6PwGtA7fu0gouCshFGLvEaNgRhc2ye3ELmr7y9knk95cw6aKDdWYKH\n++SHVeAGxvxmi7pi0VyXovywcHhR2l8Y3+ntloEBY6BZHh4a295G3P2uhNDK\nTCy+1X1o5bOxR9/iakG7VHys2WSjaOFu337l2XjdfcO1zXI0PTJwjB6qdjRa\nCCT4edFnfikrX8ACEdpMusK6w94fMHMdOtDSqjIC+nIihHmMElMh4R2B0C/W\nQwaJCgWCjuXXOPAxg28RIZjFhxEt5vbn7t9P4D5h88B7ahmOBeyi8ZfRP0If\nTvfq\r\n=QGWs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdrb3Sg5l55Vm8orSQ/3CZui5ouWWhh8fsviBbKBpoqAiEAv7UGzXFTc2EUlohmjmeSV8iScjr9cJW85YJ+/wEgLv8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191010083636.0_1570696635051_0.9633146090428337"},"_hasShrinkwrap":false},"0.1.1-p20191023044514.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191023044514.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191023044514.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-RpB8LUJ2UaoHF3ca043MyTqTLZMj4jnJ/V5z70aWV9hxeDoeHXBmanbdTXRHrlTJCIdzbU32XsyM+U/DTmLxDQ==","shasum":"6017dba79a635bc2fc37383ebb934d9cc4137b0f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191023044514.0.tgz","fileCount":28,"unpackedSize":146217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdr9r/CRA9TVsSAnZWagAAIHMP/A8Ng1KdWaEt7UUT1let\nFWArmhfaYLuXfDx0SazfR1C63rV72pvk0QOf738e4sIy6mgxnDMIGIYID9n/\n6HzgbvUt6uEXjAIc7LG4hg9a1ivFwfhhmQBwWwTysRov+n7wNA2oOJdAnAAa\n8pZgrm2DtSV05daZwgETRK/Tg9aFBXXz/49/i1avETgDCXr8sveuzuaJa9ff\nIDdxhk4SsWuRXN9t8p0k/5XLJIy6y1tlPc0N6qzqLgDHW5ebwg0xwDgS4kAK\nhEIqYa6YvwjbdI/a+RN+rrK4MW6AgppN4Xec7coF8vTtzItO8A+t/CU7BwbH\nj6XbDJlCuBPt5j2fGqCVMwDK+WKOdq/wOcqyAbO5CK0tV1/6ypJpm3nwJdDd\nqBaR0OUoQ5c+4KaKivi+RadxEi1Tbx7bGYqTPVkuYkh5s2MZ5NWQKkAaq3zd\nJs4PenUqwEVZDfvshQGplXVLMGJzguiFEpe8NsHFZQqsb9QFLC9MqDEHiUaN\n8/MiI2kAYb2uTc6gkZWnlW7coggszhWsh8NFkTavP9omECv3NWiJfMKr+Zy5\nbYkMZzzPtWTuICChjNY+/m58TQr+eCWs1NTtTYdmssQAVjfZrfdG+B3eC8TY\nRJWy8msVBkgFlaB/HrPTlhQ7vTfDP72Fpon3qzG6SNpDSMYEbV1YcP4RG8ag\nytmn\r\n=/cSQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGFi8n7bn/cRZXQsFNzu9d/58TszNOQLRnlHNdCxFuJYAiAaQi5XlIIVccwr7j7DuG5xcErvYtowxD3cY3sHf8E47w=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191023044514.0_1571805950708_0.7665661766652117"},"_hasShrinkwrap":false},"0.1.1-p20191029102623.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191029102623.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191029102623.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-xsaswm18fsOAX0gSYYy0z03sijLQ4fXE/6haF0oStxbOQ2RIF51kad/dotf+THcelaS1Vc56+drYT0fvNaxTEQ==","shasum":"8ae853029424ccc1962b1d51c57c406dbc93ab1f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191029102623.0.tgz","fileCount":28,"unpackedSize":146217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduBP1CRA9TVsSAnZWagAA2yEP/RJ7yuCUD7RK84VTyACb\npggqE/wRj7FeL74Yc+m0DNDOLfpsd2R7AQ0GYYLethU9UCBOiRIhvrq/0Jlz\nz9qNgXFz53vFqR81UE36ZFhD/G7psDUh5AyvKhyfchcRMqz6VmhdBCOc0sTl\ny4IN2o7N7cLugxTCeaJSMnjmOmC7XKC5DX2vIxfZf4zcVghUF3boBR6SQIk4\nN9XogHVTuQubjey1+CkEvy/J9u3Y2iR62DH7DwiTGgxUgbJXvCEsmf8UOE9N\nePJDznmhxOiaQAlEdiA6ipO6oIyBlZIlRQIkwO906IKE96TTULksru0ZfJX1\n15F7/Gg6oNqdl4Q+EeXbHJXF+FPl7V5dwuymwigkDCax6Df2SWtiNWWaVX2j\n06BOjTCo/wmTRRgoG0MEEdcdtSQy6z0j+7zuzxfOy+a5MlZ3Lhs4Ep8hVRog\nH2Lq8fRu3tAh3OKxCH0wWMOEtL4uBKc6f1WWQYZ1DFa1bScKRtw8kVaXC2aV\nyvfSnoWvsdTThbHtK5SAY1kJQZ6AfKnxPyx3a+rQkbn2QN7RQ0yejYuRoy6m\nkekOUSVpiyFtVlm1XD6ObV/Yx0tN+mCDySLdeqaOOtljHn3ii3mdMsVDxv5T\n94IWIeUAFF+4eu4Ezq8Gx+RKGxTHwESI/vBi0v8L/QlqZ0MlgfCLChhWpW5f\nZHRw\r\n=oXsI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHptXMnueDVY53iekNjHxsUKM2+lM6tYGl6q1XUCjYJ5AiBg4C7kffn4m0pJF7b64m+nkaRNmOHCVGGkRdjThX+niA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191029102623.0_1572344820878_0.23506228848331667"},"_hasShrinkwrap":false},"0.2.0":{"name":"@c4dt/dynacred","version":"0.2.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.24","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.2.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MJ6sssavPjxyqh9b1niWM/F7IQeWrJ8UucAvyyScZex5YNwhYgmcAg4xnT2u9Yquz7h+yqeGcUTgKiMF0gKhcg==","shasum":"3e6e98bd757656a990887f5b2aa4de8536c540c6","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.2.0.tgz","fileCount":3,"unpackedSize":2995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdz/b7CRA9TVsSAnZWagAA7UEP/04/RQxaFvdNCvXihqM+\ntSaHFlqh77vW6nVNGDEF5e9iBG+h2WrAi/qaZoyeos9NSCe7GUAttvCcyvUz\ncqq7H3ns/l3uMAcjHSrSB6nFRx82xzikMda4lXPB2nDxY6Ysh9At2ZNWOWp1\nc6sG2iV/x59Hp1jxxOsMdtjIzLs/HC9UKrx6EBAXLLBbclRvJcuBDWF6SHwg\nrdqFMt4YKGT8jR74Gyey+2o2Ur3uI9KRUYkWs1Eun21Zl34JV80oqaCdygMj\nUR5GBeCzdzvla2sjrUonvZ2eVFgMFToGg3FhLzVqTCp6JV8V/bkHiq0+6izH\nXg3isnBIpdzZKSwn7/ZY6wSRBJsp7WOJU4+bdKODCa6yz5vq85ALN587ptJy\nvhWS+rDCksaXz6P4USTj4CEVkTCgdbBot6X8mfFQUwNEAnFBRT08j/ZCUHhx\nxwwYZUjLl/oXq3SQ3QH5aBnKigO/OPQIzASU2VeYb9W8VrzfjSsW6nbllEkB\niP8imgElcJ12/+GkrUtB/Gkokg76DU0M8e313dUNCQpGyYxTGbd+YgpyF7F8\nZ9ZZXUWpfZUN2R+FpDzEetpoS8WtNcoYMbpQg8z+3P5EEpRglzN3z1J0mgPl\nZV5wsgj2dAxtGgPubdLFwuE5193orysw3oL6d2tkYg598DfYS6XClaGl3oJQ\n1v/P\r\n=f1ga\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLlO6Np6MjirKKAGVx6qnZU0Kq1hXTPJAsMQC17a+vPgIgZVOJyqItMx4fQ6+o8Ax4QUU3VSnDIgLndQpurwFsWTo="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.2.0_1573910267082_0.011631380939246316"},"_hasShrinkwrap":false},"0.2.1":{"name":"@c4dt/dynacred","version":"0.2.1","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.24","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.2.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ujXgI6W1vO8NVCThmu3nflgtoqnmlUX5Uo76dH3Qf7D1MdM+3m3swihiYDfVuNMvu8Udtpgo195OTZONYUo0iw==","shasum":"780c76b76865c9327b72cbd75a828f2453cc9980","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.2.1.tgz","fileCount":28,"unpackedSize":157867,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdz/eXCRA9TVsSAnZWagAA5AYP/3ZEFngdvfz5vzfgf3KV\nFRVSnqGKncpee1XPq9Ry6ForCC8OwAnu2SYKaR4UiZX+6Xdi4F3+RbMm2vrg\ngGgdGgkvExL1RVhyVTqVis7hOZqZZYquoJvMBbDStGmJcBX+mtLJddskm5Ik\nlIxSbnSui2D0iErkn4up+4obO5oPI+PiTBmlb2FiEr1CxQHbtd3d3o30KvJJ\n0tQVGzTW+/B4qyG7x7hR1FWatiI4EIMbfY+Lbtl2qqJDOu99M69bbz/G65P6\nFoOA29uf9UI0wPY336BL+ygxaUkdE/hK//SwKontSRw61h6+NejtYrbh02LB\nXDO8ZUMhrMF+abc9DELJ5myb0yJBEO76AP5UjvQIdYYQNaY8dIs8vPdxV8FM\ncOAG/KyvEr0vEG52WNAYUstBdDBxrpOfcqgHFsObBUoq8vjQtLW8WKY16MLk\nx3j4OPcEZeANga+4CQRPCCBmV6FOKCByKzcIjhM8NPJwBMqvZmT3nn6dgTk/\nguh18BH7aTCIFqPMl9KnedtfXd+JTDTNJXVCvz+F3uqv1Y4tGNqHBsn+e8wC\nGYk3gIh6UX6ik26qkl9Mv/HPQUJyfE3fS9jwRcKIikSF2mYKlF8HxkWDOt1m\nJyyES47EBF0WIQfp9IwkwIzh8bmlVF+MLMkVmyIE4hxckgwJdQSUjXwjAjwi\n3tTK\r\n=k7ye\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5o4XbOSIMrDgjBfA4FEH4WJdwmcvnI5TyqNVWKsZXwgIhAO1U5EY1V9HFFN2mXktszLRx2PsN2HW57a1AH/C0BqKs"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.2.1_1573910423023_0.7749325343005515"},"_hasShrinkwrap":false},"0.2.2":{"name":"@c4dt/dynacred","version":"0.2.2","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.24","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.2.2","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-HyJBl20278ln8smju3bpvCdC0h4SpIApQPHG8k8dVKJa4/SuPW6FvQuPk9UXrWa9n8s4C8MSacbg0SAJCMnuCA==","shasum":"fc5d0a0d1819d2bbe35d81907fc53b6cee178376","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.2.2.tgz","fileCount":3,"unpackedSize":2995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdz/8ZCRA9TVsSAnZWagAA8HEP/0rY93KtM4WTfvqYATcn\nEzNt+Jh7CBmkZXlyO//cjRAIg316F5MG0IkRjv/4xy0PotrOFswtC7phsNWv\nXDWrDYVr79tvCdNXIIdbqGKHSCglfScwmGBPw4B2xvRjhRNpis+Z2T2ZdcUe\npatRS33m6avqiiOrgyzsVTchsKVPWPmQnZb/xUXlKQvKiKJkOQm6Lixq6gQP\n15OBesXQ8Fs+8t4ApP8nr10Ads4TBx46p8LJ0MxuKFvQBtD05lVs740F8Ha8\nbK3/dNWNp938tC4gLnyBYyR7kmXULgniTky1BPUsWgDVn5PbkA95s34UlqvW\nLGWO8drQwNFmIPn5++3mdGvvfIFZtOGUFSWnuL5ZwlSji+pcnviqNCme1T4I\nbHXxUvJTN5IC/9QDjOtAuzv1citof0q8CWoLghBa9V+CV1XxPqW435Y7orib\nA3j0a11yD2AWlrnf923wy78gFvPyGDTtHXm+OW3TMs657ItRQSejvPEBgcRA\nvDX0q0F+XLXRPp/GWjKsVLWr/XSdAQgN2MpmyJ+7NCa6pjEBydaRRmvyl+40\np3aoee1hgL2yjrAwxsN6Ea0E6YaO7ZPdUEu115SWbzC7iZDRaywzmzGTnb5O\nEX2QVzcC6Ak29A3eJjXy/gVti+L2r/CCPhDl1t47NwL7x8GyMWNhAij9XsNl\nCvmI\r\n=b9D6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHS6PPJIxdbNccLskbVOes7WQC8E36o9+70p/CnV3hzgAiALEwuKKdKvrt3KREpXxXWD9k2dX98MpXJvUVdXER/Zrw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.2.2_1573912344839_0.32042943082875186"},"_hasShrinkwrap":false},"0.2.4":{"name":"@c4dt/dynacred","version":"0.2.4","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.24","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.2.4","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Yypxju31e6fnqkRVpYveZ4dkP/4HDCHyMn8JWjLN9piFSMjaI0k3GOQI2qO/FkTdOEBVGXSHFEq8lk6i8UNPFA==","shasum":"511ba6a76f0f57aa7ec3397a13d6c1deeab2a0e1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.2.4.tgz","fileCount":28,"unpackedSize":158326,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdz//oCRA9TVsSAnZWagAAFlMP/jpa5gO7v94047V4iOhQ\nlxWQHw7bo83+kOwSB+Yrivq0/goMOzwh6AeFVgB6CqrDUXSZr0D5lGC6QgQU\n0IeIVlQHdr9zCLyE7DJtFwH3phfDR8cfS6W02K85Y4gRRMv0dRT+yr9Oee3K\nKAekG3dZaDeWd4wWHnOwbTN/XRJ/Uh/MmxOeorv+sCnFzc7rX3gP1i/HUEFi\nYXInHl98ezg+3YEcN8LGa91YeGGRFcXRgJ4bg2axhUmnQqp0JyTQErXgM/6b\ntl8RY1RX0yYVtNy1MWAmsp+WPaw7q8X0zH2zCdbZOK8WqOyJid3uTRQEO8X+\ncjqM9vrLIg0K3c8stcfpj1VooSVKVCZfbF5KYlGIoMXyiVmKe+XPtNkQG42X\nby4+4nGl3G00renLOS43oxyjP0Yx0oUpa6bITq1WxNRN56ge3p1oPs9sktwN\n04UXKAvfw7EtXP4GAHO+rlEkifW1aOakPkEsM8tJJ6TUnZnfJKIANB6Pv475\nfjtamxuLHbmq4VEbqTEbzooDTlkkeutSQQxvUOgY8zdg6BNQPzrA9xb8H8cJ\nLglmJcXhnixV3+tc1zxm3SKg1Zwx+1dcGjhFiwFyzbpKftTJI4Ib2RcMkA6W\nh4vrX17oIHHOEqBF8papuG6Rcvzk4HVtDFh+khq03pLyA6SA1/v42jm/VWnQ\nn4xO\r\n=A1OK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGGCeswnfMYo/3/FxI0nf1jXOVenF5AnORwqhRy/XaQuAiBA4xBGmDjBtlPYYgpoXO84D0G651+81YQ/U0i/i2P54g=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.2.4_1573912551743_0.8883937107866455"},"_hasShrinkwrap":false},"0.1.1-p20191118075310.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191118075310.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191118075310.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-MbUbv9ley6ndFOK7uRAB6hKVZiz/X56DTQlqlfM9wRGrd38yelOAsIYBI9nLW8LvozBFY1hqqIYKkZESCQZWRw==","shasum":"03758818ef3cfa9a6643d031a62e43e3f9da8731","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191118075310.0.tgz","fileCount":28,"unpackedSize":146217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0k4MCRA9TVsSAnZWagAA2pAP/ixUfaxqb+e4oNzh+IwE\nkgzRP7vru0ozQE97opvi6V59/Rr4bG/1u8ZpWM726ry2EydVnvIXrwgNwyUl\nVsIPCsLwlYz2iRdoxX1ilT16S/V31IU7RRUKv3+1uY8yBH98o1gFn/XHKRzq\nXqhENT72BIhCZj9oJQhw724bM4rhPoZh6uPy2fJAiXcYhsW1m6lP0z5QZWPr\nFRgmcadrzKgPzfZ9eI3BkzmNg7WrOmKqcHFGRw4grGQNIEV8ww9Iq9dObn0i\nlBnszqCllPp82OX7KNXtKRliLoCFfwN1gzoxrkzKQ+JXjJwlwyRbMRs4eTTG\nbamuBOMEKmX7Sks12b5Mr784c1QDkUlpSghaTs9XTxnhrbZxehQkSdkEqZMO\nb+J0kSzZU9TLa4Hq+cD+pzxtS+MsRc9HeTGyMe3c1jgQ8m6j1wP5eYbOxyp9\n7EbBNjYpPE0REesXSdq4PfUHwPygGWyALsyc28ObrnWWjNK0wsjhQqOR1sIZ\nuRncCWs9EikERLpC1ftXEK+21cmUyO+Sdm86Qpewal6OynhZAkrDdj9d361/\ngSxP23mZv3aw9XTWikVUrhzrbxY/pC1ITX5svKfZYDJpoj7qtemgwpZvBJil\nI4KBHfeAna2RUeXAph6J7NLl9GzFFpJJ/U9c5AGso3dKr8r6jPsJmf8uSjPc\nalFm\r\n=1zLL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCj/38As/KvTf4zJZyMbrMsUXLS7JxQzrTxCwDnsHT8BQIhAJTaXhntgiVIKFdow/tJ8ZZPi34ZbEUuENoss0dF6cey"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191118075310.0_1574063628224_0.816688151687424"},"_hasShrinkwrap":false},"0.1.1":{"name":"@c4dt/dynacred","version":"0.1.1","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.28","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nvl6YSCasePdJMtXW7V5BFG3NteoaKYkPn7Jt8IASdWqV5oQ/jaVCV5ruj9UKIbrUX67vnguR0Xx9+Q7KzAG2A==","shasum":"43283a4cfae4b254e6971b86da55e88ee8284c3f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1.tgz","fileCount":28,"unpackedSize":248819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0swwCRA9TVsSAnZWagAAxW0QAI/fjNLwHV9k+Q16XryI\nXgO+0b30C7fxoXsV7la0j36v5IJXAdE1SyK+ewoNnRAQ7/NfqfquEqMWHFGF\n5wOjcjXaw2Yq3oT/rA4gs/1vivHurJ/lr1cilf9HLO26iDLh86KcNqOg8in/\npRcnI5rgOF+GfjSHaFq3b7RvwTdL3UQeaTCFIOD5nUvVF6C683mJziV1Iij3\nV83pd0gXuYMrSShC+ljOj9QVAH22/bHhZFYL+AcXgj/62R4/nqyLYA4jx5IF\nR0C0CAtE3IyAcex7sBGh3EAPHcbWxTe8COMNvjufzUbhgTRZzj4UIRbh7Dlu\nNGhX6cZpI3SfvXByWLSkcw1RWROgqZulhReByWhwYtWYsAJ/l/hPNi0q3Bga\nXPD0GBIzbCLlbRCblgWCr5JJip5ac571VXoATJkgLF6wp3dESk88fjcqu5oB\n9q4X5rBuuplE2RvRNA4ugn0l8zZG73FDVS4Oqh4xZ5OIbu9UAyJgtJ4rFNkU\nkdFwk4lIbcEZwMXX6qbUKqpbM7UHEq4caZliX9ziFDJaTXw2z3OqPAnyZ/Go\nwSxA5NIEaSFR0i35yBETzxyyj9CLoCXH46sZINuBfwHuSMol8xNPe8WCe/Zb\nI2/uzJ45O1tiGcSunbuPcUWo+g9PFfNxGPU6dlESiF9Asy+ArymMN7IeqXWy\nEOWV\r\n=gh6q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCR/cJtNwUq7UxPG9fpeguX2+k7luznYZj3S72/i/VUGQIhAJR+oPsaneVo5Mqe7O5fT/ljyuya4vCnxSbFh+vLT3tJ"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1_1574095919748_0.3825150761020497"},"_hasShrinkwrap":false},"0.3.0":{"name":"@c4dt/dynacred","version":"0.3.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.28","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Qqj3R65GtMM2UJPcuBuRSjBwvon0XzVBjk+oIwN7145mZaCLxEMT2Hf2taDYwC+nmPiVbMGeEGoTU31DejyiAA==","shasum":"9e2cd84bbb98a0f95361c219ac459ae858ff130f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.0.tgz","fileCount":28,"unpackedSize":248819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0sxYCRA9TVsSAnZWagAAX2EP/1QhQrzn/pPIQuGaOdaK\nxEQzFhIVLKbGicI7k9qYdHzjb/gWPSHKoELae+qRRpEsqpah3jyTiuf3+3ul\nm8UBBWeaRa8vPhvDgw+UTPNiDiHGYbPjlYEZWcvI59AcgkuBvCZu+5aofO2D\nR+GXrn5/GKzrvdi4S7GmsKSlrcsLznzLcY0Jjk4t67k4tmJFh7sE4sq6nNNg\nd4E/DZKCoPlNAaPyRhh0M9cOrkHlHDBlKSSSi8pfUbBFrryhRwg0PhDqW5M9\n1ZnaHS1XLr5qr7y3sGTLcVy6J4qU6xn4FD3d4zdgE+klSnMc3/lKHdB8zntR\n404jfcUy1iGohdbTJXwL1eYpRTnLTYM11ngJ0GbFyLx0xEl5AY2IKhYknj3T\nl5V/JUo3nX7/qfVSDeEaskPN0xg+7g6f+Js5pfAvYtA7WV65LPpIjgOD2h3t\nuL81iPLVsme+mdgTfzn/ZhVo06FDYwXZrP8JtbWAHXfDuaRf9vi6fT3u1EFA\n/jhnOhjq0vYUQTpOcvm+pGAbk682SuwnfWDFxFwpLNjYo0cgbdtCWSH+9pXT\nvftPxW5k91ZPhe6y6Y6yG+cohbXJJe6tq9K5JBzSE/Gg81fvJY+Hf2+usOTt\ncpHccmLeD+hKLRQUvONu28pVU533phIksgvyop2CvCA7zOQICQTrXOmEKsj2\nwBEv\r\n=Aoot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDSfPXBrOzDmIeP9/CoY4CO/EI36JJJsdQNuh5P2xynUAiASWbR8eoWW/iprZjcvqUSsj12ufqoZXduQvWgXLHp20g=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.0_1574095960253_0.8821062233540378"},"_hasShrinkwrap":false},"0.3.1":{"name":"@c4dt/dynacred","version":"0.3.1","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.1.29","@dedis/kyber":"^3.0.9","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-YNtOxU5nV1seQlPcKqzHMfF1sWXNa2WSdjQIVxDV5RVxWop6XRetwCoQMJ99spvsjtE44kKCBy7rElQPbKfC1w==","shasum":"72b89655288837f7247e9dd5929347179adac4cd","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.1.tgz","fileCount":28,"unpackedSize":248758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd076ICRA9TVsSAnZWagAA9wsP/RUlhj4LFwv9EUhehh1C\nsPbDM8fboPSc8YaUnB8/PnV0cU/2QEMVIrmExm783E6XrSEvSwfe05oV08lU\nCdke8yueErkLgA6SMQ4v/4e2UioMx3KsIJaDYCFljMSvmwekCz0hoXIP8BBI\nIFCMUqmtO3AiKueJ/b6iEUR9wDa05REzHUpWgKrDMzMhY/IXRy0fliqmqc3+\nENrDQA4H8up/proYgbWzjIOYYFLlJabCkECbYivc86u2sjezpRGVy/AtPWCz\nFWvXWYKOYBTFKN+rmQrLfrmBlMFN/HYW5kixAftnp8JL0/On729fLgBraIWq\n9AQvUwkTasWlWtJTmLAmS57vJQx3V7sCfCCdU8+M2L74m/ZI0RAoTvG+38Sf\nAKPE5lFrtz9dEgDiJrnZ2HQp+ss2KWmD4ft5usNIWeSt7zRpSsLfACdOGeBa\nJ01frv2odwTujJ5A2l9D3O3yg633gqgxAMcQw3MLOGb52Txxt7j3Wi0rRr+X\nawGNo0jY3md6d1wb64hOwgcVjxid2OlzzVTst7vKcW3u0qQzHwKRwWGhVdUu\nB1DH1wUssMrNs/s2BWnMxB5v1W2rXXh103NdGEmxzpNTdmaDp6CBQ3ITj10g\nOPrzzSLTaZPLoG44YjfT+cfAvafILkiCR8GejtJ/kgoZ6mNzXc6UpFDL8qyt\niTyB\r\n=pbgd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAu0W77B9XnR3Sw0LG2IHlTGPEyM46GfJoA/OkVg67FxAiAA1XYI1WUvbDJtI5ppSVN4FvcV8RPeFZcRjDbVq0yYCg=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.1_1574157959910_0.7897275421886756"},"_hasShrinkwrap":false},"0.1.1-p20191127084700.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191127084700.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191127084700.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-QwZ0qLVGVJECvCRoW1X4duwgXIthrGLA3OeC2q2zk3dHv5tVil7fcG36R/iarvoJnyTWb9YE59oBVxbe4EuFWQ==","shasum":"355e9020b3192c795412c81d13ca627f0c652317","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191127084700.0.tgz","fileCount":28,"unpackedSize":146217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3jgoCRA9TVsSAnZWagAA/LQP/3HQi9/yszhB7cf3LRRz\nDhVJvF7NUVbgXu38bhHtuLds5GjV0OBLf+U/D5mBkXnPf0usRL7+3S0JPrF0\nLfgzoN4vsjtAxdmbX+i4HtocVDV+W3fZjZeZnhMhHzPs8jiuFf3jfTh6C3fF\n3dPykLPesggF3sfKCAMmRK+dZI8Qs8lqr4+HImzW5e2N/jHpJ4jUtHBejsbC\nWO0He3Lp4RlmFPxkGt3mL2vST+7fhYjZzp3RFSWWbac3BSh7hq6pPbGcaBub\nfPmBEUIN3crlXwBtxelCeX8jgtjeFsbAv+sm4P4hYmfBr0XKU5XCzLJIDeHs\n7Bea1s7v/DuwW7W94Pv2svPSb8GU+5PQ2MKW1U+Ux0WkkDvzlZdRd7E+dlVm\nHgfTqs9QOvQmWxu22X1E2yJuFsq5DSf6QWBSSvHrJm5psipOuk3KBqu9cvR/\n8PSCDVzW90ClQcBQuSAxylUqqTud6q7GXlBTvhxRFBa9ySr/VgVF2XCp/Ubc\nRE00D8bmcVEI0cJduDtPZ1IXLz2g6L0JPHZhzxGilm27PPtuw1Wcn9pX51QP\nFsA1M4vgwm/kEc9D84/xaR2sXCq8R8fQny0N4/pXDHC1NFsnkspLNmFPo+bF\negHCE3oVrtlQDgFVE93yWlIX0wr8AVbmutu9wTiWpafaeO4nFtP2iPVGK6N1\nZLF+\r\n=ZH2D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHzYWi81+j0mfCIjRg4Bu5kEZ28k721w6GTuLZtb3SuwIgCnlgpxZ8rfynOTRo5jHVGZS6/ZQRHxfe+sKbbJwH7KA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191127084700.0_1574844455941_0.08924456745949372"},"_hasShrinkwrap":false},"0.1.1-p20191127100156.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191127100156.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191127100156.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-xy8R+KFK2f6zPI874RyI5sEEpcLeWeAF9XCExFfhCp+/j/KiHV0Ofa28aGKbuYu6xA6h18EMqEnfbjqvuEbl7g==","shasum":"1c257af87b43825e47c1cd0bca175d2c5eeb050f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191127100156.0.tgz","fileCount":28,"unpackedSize":146733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd3km9CRA9TVsSAnZWagAAWAwP/2X8qZWZ6GInJcskcxBy\nVGvA5lKCrsi2d/bx61Fs+BsVTHYmMPcrn+jVdwbltLNHRhfAG1RjiqnBJqsy\nCE0VRlZeIyM014Coo/c2ujF3z8OVnJq1Ure/2RKnBcq+E3wvE2IL7Tlk62tE\n9bGHClKVJudDpX1MVNsvp/XEE8KY7aSCQdlT2ndVNWnry2WEZILGelRMQqLu\nE5owb32L+kQT01EPxTx1y8DiYkv3vtmS4GCsNPIW3DAU1RMQ2qY3Xgq5HcL8\nCjpqYKVtBWp9M9jJP4Si7n16YII0O7KjSaAio+RfM2aH8eBcWMC+h0miEt37\n2hFptTJ9+4Bh72/6vH7H+XWUiXyipaGawS54AUiGeCkW19qyY1ZqE9flWSPe\ns1nx8QzTYIXPKey874za1x6VRnp5H8uom4v3tT7+owEm/B+Q4cgTvmUowiIE\n/yqivVtDCbubX2i6dQhqXVUuvW3J3VNxBdX8Oh3poEcMUgrurBoL7Un1pT0K\nbe0vLINRYYVVAx9mVvrgw0+SCRgvyoAS9egoYX/mDOpee/FhUhQ4r+8agw9i\n6SXsnq3OCMr9vWkQeBPdm4pI2pjRA4POisJ25M+dlYRtwub7tYiBEhacfjAh\nEDMoAn6cBCNTpK+UuEHO52S7Vc3CSIMSRQprW5YB1SgMh/D6VigreLe2MYJv\nQwY7\r\n=CkYY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcProx5cCzyn0H/DpGFvp5oIFmgmiqk7341JZMv76wkwIhALjbLuk20rL2KzR9ESf+RdEFeorUyadS7d53In10HvRQ"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191127100156.0_1574848956985_0.8276739051655713"},"_hasShrinkwrap":false},"0.1.1-p20191128120222.0":{"name":"@c4dt/dynacred","version":"0.1.1-p20191128120222.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.1.7","cross-fetch":"^3.0.4","dexie":"^2.0.4","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.1.1-p20191128120222.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-NaN/VTI0gCCNYVj8kfzu0PewoHw7uvM34CSVKLJeNDF4CcBf4FMg9ciVw8c6C/GcchEIG17/SNRP4T6Xd+aD5A==","shasum":"871f2fc5c031c5efab5ade350c2a4bae349e1a7e","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.1.1-p20191128120222.0.tgz","fileCount":28,"unpackedSize":146733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd37dzCRA9TVsSAnZWagAAQDwP/1lpH8rVynuEYj4lYWJh\naSmDNcczJ+8vbhEBaQaURi5brq0tqNRcHXPAqI6NyQbQD9cyFuEZIgpJQrwa\nJZkhP0cbq2js529+PtMSuoQUfRH44gZCHUC72Q8rKjvovhiNw5DVMZDYTAWw\nGvLdV0oxlZXGK/0yY58UcIBqSxWiGJOQSJ48aHi/KY/vJB6+pKGB1WYGaphR\nVTRL3sr0AADTa3JQValS7IFkEOfLBEMbc0HRZR3bqIIzvjHIRyFHSiFCka3y\nlE8coWBt2P7HLd1gm+LXHf6xxNs7w8hPS3k6mLEoPHYORkuYqNkmLxIerz5o\nLDgfPBTaXO6uewmRBQ2tXsWTc6nDprIA5U2XU6f53gzr7ABib+k37NrBGuB9\nlW2JCqod/h+ZPJZoFW49as0jZOw2s/rJg4hkhwnRXCd3VL/hLjd43mMeMSWF\nP8OEr52AJEeviiWAjzIw5DzHilKLSO1TQ7qgRB0nLvdFJwpoTVkXHZBtuZSN\nKpPkRJ1wU6HRvkSoHQKwbQRGB+3hqkXJwWXlypoo27uBQpnvQfqbg1klBkJM\nhX5uIdSVeTL9d81iS6yqi7zxCs31/Y5WbdCreWDPMnFi0iFN8A58OQyTGZsd\nrbssQwSDfqYSxw09V3m0M2xG9Z0SdYRgcr5dPzS3ZcmmEkbYxYXwSXbIU8eJ\nQnj9\r\n=wKOo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA3yMDGg94mD9hilRwMnNOOfPy9kSA+mi5ZaYFBO/HPQIgYx1P8U5xKTQLvrGId7LuvQm7RQexpwnBAdL+i/8qrd4="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.1.1-p20191128120222.0_1574942578903_0.35340162801783537"},"_hasShrinkwrap":false},"0.3.3-p20191206120653.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191206120653.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191206120653.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-9EMLYZ0v5U9GPGHM55XoJHtSeG3PaMLnpofFq0Pnn+6OnlWXnb4p0k9QkHLUhRzE3upVdRMFUKVbNJQUhI/ELQ==","shasum":"cb98b24807f39c09170e1a65a6dba568cd72d81d","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191206120653.0.tgz","fileCount":28,"unpackedSize":251736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6kSBCRA9TVsSAnZWagAAWoAQAI9ODZEv33gtEjmLHP/6\nmi+bYg67yiEwiRH2PERWslSx3Nhk2hoKYHLajHpcvmKLZsYH+UYED5x9HaX+\nYqyIV7DeXPRiLCwXu9jexKpUGsIYqefT2o6J2S2muQVn10jCKbPADRKdi9KO\nyWNegn24htRUyiyguf15LMCagpuMzU8t+xtMjM7sGeSSJ0rB2GL1rD4oFhNZ\nRJwVGYx6gGcyJxCI7rWk/yUsJEz0CMWYdopatAFjKvvvTI6I2kDrcGqC2WVN\nJgohMCBHJIZZx365GXFgSKBQxHVMhCgzSeiZngQ8uny6Iae24iSVHJTUlkem\nbhm49RF2mLtfzcgR5RHyoM5bT4ydmElNbSwj1fh3PDQ4OPOtVOJ19CKKnJrS\nqiEv3WMSEBJ5BCMkxnR1KcnrHRK0nuqTyl4SLBzAfVDIbeP597S5BtbrBZvf\nUsWER+8z2ddBz9Pd/ikrfe1qtGfMU0G/52iHP0oL/v95yUOgDBBm4MYhEKRt\nVFd1Pf9iv+qy8eHblJMAG8lE4OYjMXIm5DX8lX6bBxJCVlipcNUt9mpxQMRX\nX8E02PQGUYs/+5AjgExFmnZYblVdKKNrVNktT64leEYRiEICf/BX6uTArdMU\nNVgwhqxp/ng8vjx+G8VycfkJzo0a/FL7wqYEa7E5RZnkK92mUD0FXReVfFi9\ndC5P\r\n=BRZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7HK11SrhkLSPEAOvyVsRGxffgACD9t9UPSDGZJmKDsAiAEB7lD4vGpAtLikgSCXqINSXYgPre+95gvaWCDj/A+dQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191206120653.0_1575634048653_0.7729738539685989"},"_hasShrinkwrap":false},"0.3.2":{"name":"@c4dt/dynacred","version":"0.3.2","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.2","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-wxXxCH0Lx9kGGon9HNd7ASSuuJ4MwTdtmLRtYCAMOxiaTrnI0mODVwZNNjZEjBSkvZmM/m1pfg0RypRwiTaGzg==","shasum":"eaf2d8bc0a99263c4a82a505af44f085706efc49","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.2.tgz","fileCount":125,"unpackedSize":788821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd6ky7CRA9TVsSAnZWagAALXQP/AhUvFvWc43nWJMyFSA6\n/OJvotD3YmSlil6HGOcBVlQDqCju1N9+1/s5LeilZmCQ/RMAayk21lz8iC4N\n2235+m+8TPGGrEJFtMI9aWJ+EmnJ4W+eAYgot1A8OZYRO7A6CkRskNqsM7Cl\nfqGskxV+X8HX0x9i4yLR8fJyNldO6NgqFZupcv7w6Ra3LphsqrffJZthJIae\nq/mvfQoCFj3MXNWOhjrc9KAzMKRFayL5+YviqYy4yBb5h4Pc7rctEeJrW4Dg\nMRxnyxzYrPK4Ht5yJYdiTi3gIcqY5ENHgDVMadyjdD9HU9+J94ze8/XG6DuO\nmtCvWmi24izrYzKneUnDOdR6ihgD0to2EfNSh8hP6p9850HHJuin0kEfSGbO\nX71bfQ4wb7OUorOCSPBE2TsRm74yhk1RlAd7ncxY6yKBxqNBKCg1OqVEuQgn\nd5T7FdJjToVsez5mPrMG710XMM4x8HBkZhuVcsf9Vk2dA/c+/nObLayN8URD\n63bBClg3zB91vFL/adr3oHXj2YcxFhQlDUG8TH7qJ/TLFI4xSc/Ap8wJ4zxp\nywh7aDW+TJDeElxYQ2t25AohJgFQBmWlVyQEbddDCAURwXJJwgXKrWxMdZZg\nCVvoCJ95DN/pGHFNO4LFs4l7ELwGLEt+d87c+Mz1XjiHyQ+h54mXaczAjVA+\nznue\r\n=XwrK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQZ/QFpBG7rkKKv8QfXvyiovNknxKTUcBfhsE7Xku6WwIgbDDeE90BB/SA9pW2kAuOEVMP/xkYcSx0KMGnjgNPRgo="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.2_1575636154579_0.8626681306991377"},"_hasShrinkwrap":false},"0.3.3-p20191209090703.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191209090703.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191209090703.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-oTRCeDsJN9aA7NLb2Gphwr7l1nCcDnojd+KwA2SWfrfBKpFK1aRWoQbfE+OG5SuHfgevN25eybvRIhJzoORhgg==","shasum":"d950fc4fac820a94f2ddd2f03c11bc3d5f360e90","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191209090703.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7g7cCRA9TVsSAnZWagAASDIP/1mEY7E3yTYvBWJ3SKQx\nUOPp/B/qPd01MdQW/WxTxblb8PvvdBjGuZ1jl+nEuWilXO2japRbVSWLBB0E\nmPQ5nnifFN848ewVJAGmjhuCfMSRhOXfebueevY8x0DkPFR32y/e/SrkhezP\nVJ526/yMXiGCSi+uyeIowPXavcYhiDQshkxmZseYoD7M6dfQRrvC6RNiXv14\nX2HE7699y4oHrkQe0Pgim6zyslnvhrzAjOnIDHsS4JAlCJ/UtCpyOA9B6WqE\nyHpcD6vB2Hc8wp8RYkjnJkEFp3n3xt03oB9q+gI7YYBDkBIMPadprDJoOAdY\nMsZ68/fxLATWctoAIndndfNhef5qBkXhUGQSgzpnRvUg+juG53ChMFy5nPd7\n5F+eVH6wee3/06miGhRqSExPeBJEmQGjLxoEKOrClIBl3tzujeKUg2js5+fD\nFGX+1pU9AvULlLXK0oDheS7PYUAuiyv9qRBdW+6D3y3SVQs+yRZ1KPH+WzIg\nb0VeP6ZKmFf5jOaVCzi2QqHeRLvMHy8ge8K2QHlUPKPgPLnGucEuX2zbvcmz\n4yKf6n/h/QWGFtqSJ791zrGX6tXTtQhmWVVqaCOiefx7F6sKbk2+A5q7gcji\nLppxFki/ypiVf3+Rv45acGFRcLRCK6tGDTy5MoKjDoBSano+it7rWM1zqAKW\nasXA\r\n=mmfw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwEve3fPb2YBmRn52HHY9yUInaReR8lr7WHjZ3Ki9gFAiA5YputV7jkvLjmk52Rv1qTx9h05yFAg1qLYiVF3VBwbw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191209090703.0_1575882460126_0.06604571391431624"},"_hasShrinkwrap":false},"0.3.3-p20191209092010.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191209092010.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191209092010.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-mhcKAq7yYk8dU3UDvFzcUkxF2tMvkn1ziBF+l0HUvdr4s1PKkU983N18aJO7pQmzKgWhaB14ox/zOzwZkBH/kw==","shasum":"d9f110ac657b29f836051d65008157f448242583","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191209092010.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7hHxCRA9TVsSAnZWagAAO5kQAIh0GcfshvUCKEnvMGLc\nBm+f7ous3EC11Zny9DJeDgZuC2IPDIMaaKxliecUxwN5ndafI5PaPeYM/cge\nxkECifzxpodiGc2T2AGEZf3ZKfPQAW7EZFkK6gkPUnXUYynaVPnexnA5ZmOn\nPSbEooqQqTbWxegPuweGewgQYJ70iTLJ2k2MHCFr5s0AhJqiYK1ZoesXhi6O\nTSF1+alZsWtPhzwG82UR21JZkgrj2bnMNZ3H+IFrlkWunYdnK2QfVqYRhVQp\nrKxeKYlNbjbrf4VN30SMaXiPhzk1PZ1ipx/x3cC9Sg8jysissIOntQclB/K2\n/QCCVCypWdrSJGQVTu/YmdktE6XQdhxHElDvvrQA5xlH4daNm4JPC4b2ZvI+\nV/g1i5c6aC2BuUYugvKrGPpDgnEbtNdlGXNx6QfkdV1X0CRmipjvM5r2QCV0\nssYOK8dXYsw/ggiqKUW8oLQve/JynHmVHCaubKMznSFqWD3LS4pJoON51jfH\nrJ21AoijM/S3ju7nEALAsEXy48FCh3JQwVmqyLa1rQ+4IjYMYINjS7cMPrCc\nqFvDGF6OVP2TT9PPFaBSuLsv9FexnK5BfckQEDUb1qi05fQQ9Uuv2MfdEpqW\nHiRclFfNxTowBXgHe0l3irfHAgnWVFPkHO/hNhNBkj3rxDWF4yWdLGteYOFJ\n/NeQ\r\n=16jJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfRTtpnB33wQFYKzt7NRcQtKbwjm8M4k0Qd7BX4x1MGQIgD6+NYsiJ+2dtvVs6sgCKqF4JToW6LJ1FrngoFwr+bIA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191209092010.0_1575883249387_0.7446783980854095"},"_hasShrinkwrap":false},"0.3.3-p20191212172233.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191212172233.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191212172233.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-PjAT6kYqOKnbTU8qpl5eXajj58+LeHURiPJ8kDc4dK/CWnG6krFTL999Q54XiJWl6PfdCmkeYZEdpK0A7cd13Q==","shasum":"d7d587a0bdad24790cab27d9f9ab21965f4f059d","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191212172233.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8nd+CRA9TVsSAnZWagAAtHoQAJvwOUd6u5l6WjHdutfI\nxZRDwkaKcA0JyDXe7RVF/XyiP8ln0H5LFcIDYDDpzcFca25uNcl8g9Y0wlGu\nypKW0n0oCfyWVJLJ0PhFQoAURy3MRu2Mwm/I6EtDcHfg6q/rCIf3jQRFJnrP\n/6t3tArd7EApJ75vEmWeZTPHzNB3Yz1rcYfziVhe8QEO0X4xdVJhnjR5U+8Q\nmfJBn+TRXIEGLs2wdXJVy2EO5tdSMWozd8UgDegBgQrgzMn+LCPxCwVFlhJc\nv85etCHAPiwHSWorKvHe+wJhPuzZwOaBkFFiIk/gLOqr9z3BR9xzYTrqMoLd\noG1O+FNA9YwUbEvPfFMkiUuejQr8LEDf1nZ0QAaFBojCHX/CFmz7K4msQx+w\nSCO2tOIBe06GID4y3Ec6y5pQio3s9mwwAJPeT+f8B/2zCCryErtGv9NKF3kR\nDzyRB4wmZZFeNkLSl1VYkGbLh3GXNGxeSQESeK4ubEYN3DOl6xVqQTodhmoW\nk7U479hKnWb4h5eTbU++lc9zPZZ6GzV8M9RoQuqIBEk0+zaqwwQQ7OV4+o8i\nZVQ8QWeQcw7Cq8gMeWYq2aNAo0T4JvZ1aNtFLqXrGHhHRxIERWZGB5S6uIkp\nn13aXvvoUEaBaDFvPjQiAToTHxw+hbBon6YyFM7Ovl76NDwV9v4UPQV6TyxR\ngy0N\r\n=88uc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClquSaS/GCvEXA4bYHAFZORuGeARFvfUriakAhYKFTUwIgCN+THMJUe4ns9hTN2IAeZJ+EHR6lNULSKrzpO8LRexI="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191212172233.0_1576171389811_0.8031425381183492"},"_hasShrinkwrap":false},"0.3.3-p20191213153220.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191213153220.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191213153220.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-MNypwUXyavdkyIxA3E0/0eYv5lwQyjuHeTn4SjbXw22/lLtcB9G9ATebgC7z3CgpurGd59z57jmM9ZBnwwc58Q==","shasum":"02d9039c297a667f9a37630b61d615cf7c03ba00","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191213153220.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd868qCRA9TVsSAnZWagAAZ7EP/0kmO1R1W7tSzNiX33BX\nJ+bITZZxzYEYSgGtuN/LMDqUaVYjip9t1p9Hiyp+8BK0ZJ7+WjGd0G0QW1h8\nQbEvaC3qRbcrrkEctkDO8TgNQ5/jJUe4gHYTJPzP+mDR2IGhxyglzccflnao\nuJl3vf+dXZOCHu2+HEecWYIJ2nYlMjm6LRJOPrSUW/EExNCoJMwEgdO7MNx2\nCc01PdA3GsmorW+NGkV16Q7OxN/knQd30wRdxc0uVbQASXHwI4q1Krna3B9c\nvkV6Z8j+dHQa+8R9dZDh78a2A+vle35CwqqhkXJbN0Z3BTRgWMFcObrosxge\ndy4enerWPfb9NBw10jLZl2tujuE3b0YbC2M89xSdxKbLp3dci/i1gj/GMUWg\nwao0jJNclg4ew2/4+Ogv4QKjU2QLY79ULhEDR5jXeWp7/VLMaDJWDEmOpuNr\nAWcPNAKpShL0CeBKxFXWee7BO+YZ5NVUARKN01OwNPAjUdWb0SOjOkWD0YF+\nKs6TCJHpoFCcwLd6PXBEVr9NzZp7TsWsHL4Ubs4/a1iqvYGZbRHAhUC0NygU\nR70nqATH3whHaoDXo6H27Lb5UDZExRH5upQvaOVVPv3rki3/RjlFRPU8jMWj\nu/w5EAFIyiWJthoWEhxr5kkd63OF82dDvIcmK61Wap7bNs0RrCTwkmiKtnLr\n7xOJ\r\n=d+DC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkWJbvdP4mbcqhquXLJBFNdwvz+evkewMPdZOnKzQHAQIgD2QRtXEP6s2Lz0stOFkfwaQc8faASpkR4nf9efcHCPM="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191213153220.0_1576251177632_0.46460825667337713"},"_hasShrinkwrap":false},"0.3.3-p20191213154611.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191213154611.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191213154611.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-SeuuCiHIRXDrESaYfeRDf/368qKVIjZnGBL6p0s0uNGG7R7ymTqXF4dy42pwehAWdQyFTnE4YMJUshs7WLtrNA==","shasum":"85a075bc26cb629c319d0f0b46a65d6bd5e8bb90","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191213154611.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd87JgCRA9TVsSAnZWagAA4soP/0bY6h2GqnWeDqB1XyhP\n5yLgXR7WFuJPOGWNDRc+J7CldBn0M3JRRFuxZkMTNPYVKq7w8eInX1MKmUNE\nHFt1zGl37TsnPkFDU33/xnVRMuWY7ZWvfYbJnNf+ntty7eAlKmhzp71m/EtK\nq7g9SkM4z5+UQfjXyitBUUKNCJA9DpS9fvNW2fmmx2gws1HChT/lvGHDB6l8\nnR8YPY/iLBeXxuFwJJkW191S970pKNmbNhKLMag+QfcYODpVf7Yjnd94V40a\n5gIQQWl/qjUabxwFRwg2sLvKDbzH8+hpI1bZP76UGievG/Zv/64NmUXwUOC9\nLaWQgtzCGUCqc+kFSiKZQaq728lg2zlTkbUlo03y8kdKRhp3GCwOeM5CKNGF\ndWVUyZPoj0ttNQvoQ5xAs/N/kCwfxSrAeiRTGMiuZnJfUFpsvkxWZ/LO4dnh\nByus+86EiqyWJF7XfuWYOtrdumjsJolizKav5R93NBncVsoUNyAOP9VqDC4l\nq/sqZR1I7GQX8GYmd0cvfbKfDCUrT0jqYtBQkDyA+jNWaasY3VAziuwYHF+5\njMxcrA914spZNa5Fzg3XYgwbZrChcTrLs2pCieViSCVCk/YCNBGTElTndWTV\ngFsW/GNLrbwGmwsBvAPnG+GOIeO4lkDCjUeFvBOp7AA/chOrkcD8GT119UAF\nDitA\r\n=W6aT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAry+jso4fjn1mzRiLc7Pt/i1dvnrXAkKDMYQzXPIx5+AiEA3fP0xbfoC/Z4bu3NAaFcs9vm3J1g4z/+hiP5baqw7PY="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191213154611.0_1576252000545_0.8831174018603629"},"_hasShrinkwrap":false},"0.3.3-p20191213165611.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191213165611.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.1-1","@c4dt/kyber":"^3.4.0-1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191213165611.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-CjPWcxP5K1WTcvAriR7BZJaSPeZ1s/IqmEbBqIyyW0Y051I91MqDPRVm+/zdmA5iQ0AdHUA07JhF8xfmmYlCFQ==","shasum":"deefd9d6ec1257001ce3fd515071930cfc5c44c8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191213165611.0.tgz","fileCount":28,"unpackedSize":250921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd88LLCRA9TVsSAnZWagAAu50P/3KCFfEKHCKaikWcIZBj\nM0IZJW+p2OEkI+BNt9QZuQO9abCLsuM79pJs7SIhZw++psgGuEvnCzkQLDMJ\nKTXjgoXW4bxnbyWLRy6pIOMNn3PII3ArbvM0aJ8KllrLi58wPahm1Cvy5o6C\nbmVSrXdG+e4uAAvlZTA4HsUepbte4y53YMgvPCvA4PBd0yahMK6eIhe7r1F3\nq0izS/6NcF0gdIo48K5fEr71abS0VuI6qQndYjMGUQ8KwglxPJGNR1+YVuO2\n3UuHstD+e06dsNZMAoyXtqCMlGPfLxUQwA4c1S4/E+4YFzgHHl+bb6xL0MTP\nZUIOYqo+dKT2kBK9CUzrabn5P/zI5mD5h0+TdQwtZFUyAcbJEHsd7Gh1HYKz\n4huf67vEa/goq+TKWKGnLCyHBDiNR/03Uk9HQzvGPqH9XmXBj6NI7yQs4Avl\nqSG5c53KUIblRSTL3sC4BLkHpPtWZrV51yQar9pNJG8FPkPZECbItXYF1zrb\nh5JpYR1iorHsVOPKrhQMIql7cnE4E4q9ZOws1sJKurTdggD/j+qAbnTqTxmw\nDD4N1hADXXGMIgQB4XJTBb2i45lZ+KySbCLHsqnJ7g5HZvgTXm3Iv3+wgS8u\nn5PMtfDJSazno/UeWKSGZECE5Gd7ErmmFrPsaXz9J0A0TUtBP9zzfTa3GPLO\nPy1c\r\n=+Omd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA/h/PHoX3lIkPRFGtf4pZkQl7t0mkgQliPybtZuwFubAiBZkVIVXUORFKaWCqO32tNSE1VcKb9Bfw1x4b4xMz7G8g=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191213165611.0_1576256202582_0.8754405594199526"},"_hasShrinkwrap":false},"0.3.3-p20191213202407.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191213202407.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191213202407.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-aL6iUqoR175jDx7HgIvuLSr1Z56pIcUygU74m+rlQtjWFMOC734aODyaAYK43d/s8ct11PQkNkZSfsOQghbJ8w==","shasum":"a3365f2b95f387c46cbc132eb0f95e568aad2ee9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191213202407.0.tgz","fileCount":28,"unpackedSize":251014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd8/ONCRA9TVsSAnZWagAAJWsP/21Pt+WdEycVjDyWmZB8\niwO4kPAxdRpxC403TGLwlGoOZ2CZFAvnfwTYrujT4gtC2JBrXwikxec+2AbN\nfYY4yWU7Y4lriI/pROLR3XbgHVNyTYQVRJ3SjB659z9BS2bXnY+9cZk1ZCrR\nK1lbHIRN+2cS/JSLadoBJIxvchgeQlDK6/WVSDeuLZL0VQWhR05hK7oYgQsV\nybFYOrIcmauiJU+CA42PqfZyW7O8kTrMAa3Foom23ZQYTMecy7Rl45TqnXc4\nR+y+xPMoRlLItyt4m4JIn6OlYKHnJ62FhEDeh7rGgp0lYF2WRGbe2gjkL+NX\nq6r28hoDP018sy6HDqj7SgXu/YLOCTrorIJt7wX0tCvNZjdSfHtPvLVTwfnE\nebQ0NPu+2CJgT+J7E6a8+lhJJlShiMjC2sQNrzMebqPO5mu5b9HFfsVzXyHo\nAscbsXnKl1PHW91eIk6JdbfBVCDoX3VV/YvzphdoFcQR2GpEZU8v1tE3wGKl\n3gbicmkmjPCd9lzfPi0bt/mSh+MRFBqpilfr+xT4Np4rjbewekOdRXbmInPG\nTSqv7Aof626Ejo4YaY4nC77leFkrp7BSqiPor0bXwxSxhffqADjXftgYji0B\nb0iH1NP7r/hOUSE7O4Pzs6z9Jc5xmJvkD5AWf4yyXx5c506ozTgll+FDy4I1\n9TqD\r\n=oy/K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw+GPQFHC8m6g8qLVmDwWch92LNGb8DX7YicydP+POaAIgeOYffLbk4rWfFcbm041wvWfAnatEdwsbpG3QlBh+FdE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191213202407.0_1576268685158_0.042936575269591604"},"_hasShrinkwrap":false},"0.3.3-p20191216150102.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191216150102.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191216150102.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-7BS7b7d095P/o248hwZVfTAYDmMinPuXwcAcp54eH7R/UPsoaamRfcXW1PEteY9Me3WZDZcIxZOfbnrzl7Ecag==","shasum":"cee52026d6c33496359d44cf43c71bf4862813af","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191216150102.0.tgz","fileCount":28,"unpackedSize":251917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd95xSCRA9TVsSAnZWagAAzIUP/1/2XeBAcGG+iQRsG0p3\nln+mzeOBYIFAP/YfBDtERUK0qFCgQNuTsSz7FeIsZyMn2vcjBgC/r8MJOiGC\njZvTeCxBdtwSBVlRjVcuvhnzD1SGqZx+wD3X5DDXlsMY51W0xik8optRRooq\n1bGj9lLeyHd2iGbDhYEfquLZgKKlvU3ileRayTngaHaWW4vfnz3SatKrRq7O\nELKgvccnSNPtDicJXm6Vgfq5Xdtr7FDWlSUbEi5CRSVuevouFj2CiOCoCKRc\nKZpyR0Icjk/JiBn0WPRdBYrWkm1BjzSkVRe/oZBv19NCsXIo7dGegQ/jNp91\na+rlXOUwCgDri1Bj9T6m2VjWtvH4L8isNV3qAw94bNSlE8oZoDO2Xr+wLfeh\nnUnppxyJ19rqpRVkxRVvP+3lpO0tfwfIQc3AnoQYuLf/Y8+6E2J6chn/nNny\nqx7G5r0hv0zHRzIaqodHDHndPxJGo5hqIfY/gpet+c+PGq+IubjKJfmHxjk3\n6JxVFDlZzE7DPYjwKNEQpwp14Nq6OccxLe588Jv7iwV/JfVST70vrdVdJjKx\nQjNGy6o4F+/GecffJTV0hV+WNjKpgjjLVg4Tua7rQtUI3V+PIKdZTgI/Qacv\n015tOAnFeACHBMvWB4w8VOBHmt5E4NSblr14bkDC/HX9aEmdagVBL3IdtvSq\nlJsA\r\n=/xLS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWP18Zn333JoQyDnbW1LcIYMAm1gSR8hqIQqjxPvnfdAIgOAiJhYmFvs2h8sT1EPx0c4DBqsAfbRyjANeE2XSJfCU="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191216150102.0_1576508497778_0.1192370781735339"},"_hasShrinkwrap":false},"0.3.3-p20191217084311.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191217084311.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191217084311.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-R9/kSLwJ7oUW5DHchOrTABjndHygEiylbkkZl9lKpR8tF1WAHuVjvM9HrQuxPKi8ay3O/O6kIabDukefbd8eXQ==","shasum":"4b69e681a58745d1b333f500aa81cf457c681582","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191217084311.0.tgz","fileCount":28,"unpackedSize":251917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+JVDCRA9TVsSAnZWagAA/swQAJhnu30Ldvn2Fz1IScGJ\nJFJ2nnq//1QTpEdqX21LHfbov1GeIJSqZeNDKY3SKfyVBhjKLW+3fAN5z+VY\nKG2WqnsfEB/c+MKMRzNK8FtDktd1OYkLIW5Mg+gdrer2rMLhTMWnTf+G2hlV\n9b/5uoqg28SpE/ex3NhMwwVl8c4PNyF4KQYl7Z9QJbvcFMWilSHoHX2eMiSR\nGo6+xXpbHHvkzmyXkCFacMW31RySjk5O0+XpYbGf10n06L2a45Xu85HkHoiL\nVXUVMm1wkZu36SbBMkjSnq2kamk6MQ+Lr6nVMNyt2KZtKGV0Dz6s65I2zz4T\nCDGgwwOTa9MZw83xoUXvCWGYLWyTRxDsTbMstcTspfF13Z5pqSPFYpJeOPc5\nV4Q+02UMn8lr/HIEquCQhNfM4mNuZGfAEJ08iRBXiuzAuV16wvXkFTHpzB6r\nnVhgoAry5VXR7OIILMie28iwk5M7Kq8Q1ckkR7QWoW3uk8VZPF0xYrkVLd6P\nrV88D8Q4zuv1duTFuv1eouSos1+v/Xq4AN+wIv5tdlj+5j6xUuCwSCR/tUUG\nXOLENMqshqnsUbvOmDKF9y/j5MOZpdFXhnssBfweqwFUKu7aiTJss0jwha5C\nyyfn8kOzvhNGz5c+Z8cB6kQj5uy3q1RIsqUQOg47dLRQjDXuhIzyGR/aOiBx\nJCdX\r\n=XmNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChuJOcw3qBwxJyGcE0X6WBU25GKai4N2DJNLrOQOAvPwIhAL9ZDafqp/MpxMPDpz1030/EEXqa1bwOCBrPFbwpOiFP"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191217084311.0_1576572227276_0.35784342870035335"},"_hasShrinkwrap":false},"0.3.3-p20191217092420.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191217092420.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191217092420.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-nI+wHjeSHmCRSlUBInwUwZCKmij2IX1EWQnWWd+xDdxOiEkKzC33SqXi9D5qnKi19/kRAfVOdybYA0ExyjalZQ==","shasum":"b331748bd5d3878016756262eda32986c7474409","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191217092420.0.tgz","fileCount":28,"unpackedSize":251917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+J7uCRA9TVsSAnZWagAApXAP/0NM7fbnqNXLkb07YBEw\n2Sn6OkDF9JQA6vg49pbIYc7R/X5mQr7nWDymF4un9g+aLzTOAW+ZJjd5qS7L\nXEvKvuM2xf5AgD0Hm7U9e64QC5+KBiBevqcJz3B6Rr9bGZ1uXeylCjvsm530\noqX7PqdgjlY3w/G8f7ofEb6Z7XhmrRbFXo1qQsLqOxx5kTiI0serFyPqscca\nGk1fXJyeA3DX8RTBdLVNxj8J36rDxZ8rQN3IscIvneLw6YLV5xA/BCDcMW6D\ncqoPbLjyuh+jwG0gVdiwkD8JQGMLtV5e7PyLn3ui8uPADMafmMTX6NVhze+W\n1uPAodDX75FCgseEMJApmmWqoC35nDCQNAqHm8F6BCkpTuY9NNkaf0iqrXrE\ncS82E0ewJYADwA85ASd//EHmfPlseCisBm9ZPRnNI9hbg/Q3vKAI43Pxbbai\n+MXtDH13T5uSPo5WU5EzfSgZNvjhxPsX44OUnKI8jttYgs2TCk62aujJnzxW\nAUyPVX+F88x8Jl3MWAip77gEnmneiBabqX87C77LVWpcaGGXmL/eIZf4AUow\netij9ZCLX2tlkiaoUGQzp03DlIgQ3lOtyg/OWtIzrA5viF+ACitvUJIJ8xNq\nKohngzKOglURwdc7ej9kwvyTeq8EAcvZX6wZnN/71rsegCRkIYEgAPscLcuj\ngJZg\r\n=iYWS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbyCzjpA25rKY9yaDDvjlmvHmppdtxv5tvS9KtuPV1RQIgLUwhDYguv6VyNuymVtLf4qS6HpcHKSpZzpu/YffM2Ao="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191217092420.0_1576574701467_0.3247123662060467"},"_hasShrinkwrap":false},"0.3.3-p20191217134328.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191217134328.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191217134328.0","_nodeVersion":"10.17.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-vq15fYHDe9ncLh1JcIZYCTjLCSvU61N27I+NHtWv0oALGGY0YkNKMUSLdpiSG+KPxM6g8c2akzyqG718KEyZUw==","shasum":"74ca6acf03755b7fb4f44a2ab3ce6bf516a0ff5f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191217134328.0.tgz","fileCount":28,"unpackedSize":251917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+NueCRA9TVsSAnZWagAARJQQAIE4Df6Kwjyg5i2WjEiL\nYV6u22T9bnhcbNoMF97z4KHjxW1NGg7c8jO0HL4oLgkDuoDB3n4z634+Y5jb\nuSN5wlLQbBbmRVV5fpiykPjJYUluPPu9ABzyglUOd/SrLB6cSjEBEtsUA1VO\nq+SMGFWFUjET6hEh7jzAhZxJx7YIcmAt0CfredKeG9VriFrvbolE4brutWac\ns98oBG0pn4KT2CzFIdaF2v2699Ke/gYTp6At0un8gw2oe8sscQnXCeDZtImB\nPauTy65mGSRaz2enNkiQnCntD2K8nuAxOGJn17Z2oXD+UOMwMAeyUysPNvRs\n7gtlTTaAlMY7jO484BxzGCu1lb0k8IL/Vo0TlnMJSp4DOMCW88VacHfWWejF\nLgpko5NypQY3dLbUzS6ckb0cNtvK9V0G7R6Tg4W5mZ17BTtTnbpLLFdKhilg\nncxta1h8+vlx/pfyZkEfBej5F8g1coG/gNuiWiEgxKRLwlF/fG2uItLhEAwv\n8fCOBWEtKLmUHikQIen1EnSn0JA5HSUmAgbZHXSmwkD+7oT2GFh3jSDzBmA9\nKV5PaOz/961AxwpHpOXqKPgMelAkfXmzzMteui9E9UGN+6j5ZNaPJYqCoHke\nt1zkn2UsQjlPLT7raFtPIetiHbyN6vmBZexjtw+DJRFUQQwSqqynNHDgbb1f\nHB1G\r\n=FsO2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFdjLwdIv1LZ65hA5EPwsMmwfaWNACxbHUf93RBxZ+5NAiBOW19yCaigQf7bbVzskzhG+JEBDwcW2txW6E2iKGjEjA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191217134328.0_1576590238331_0.9398144471001824"},"_hasShrinkwrap":false},"0.3.3-p20191219111936.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191219111936.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191219111936.0","_nodeVersion":"10.18.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-3X62lsDm9z329Kbdg0uZTA/exNunp6FBokyiHQxp90QFafKTTJM9jjd6AsyLI1F0FYH/fbOjVkJXf83waX8V5Q==","shasum":"09a5d745d330476edc2ad4b8517662b3f3a2727a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191219111936.0.tgz","fileCount":28,"unpackedSize":255032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+1zoCRA9TVsSAnZWagAAiJ8QAIuv/iQAPE/Q3yvlGJwY\njNGPItZZSN5ohcca9YRd6KKQFfA+oA/OaeGO3WPCoYdAhEK2iTvnl5rKU6OB\n0lBbu7EUqu3B40jUlo1eqUaZ8of8ojVQi6gRCLbaLoe3hsRYZkvHxiPO1SYt\nICNO9akyBnGaMLtzVbR3KTMUY2HI3AH1igzt7PK2v4mU2Vm66GqbKag8tm/A\nwv3zaQb4a8UTjxJ64csjRf0swUs/sNSMAoan4MnP/KqU8Ieqjq+XG2c6BrFZ\nPlhnpbpdXrdn6fa2lo9jnB3e9YltnEbgJVBSjEo+13etRjjJeNTkz/iewl0W\nKW7N2nKcqzTjEAtSszPhGtPuoukAK/BiwRVA/ed3pWDJBeIZr2jDrtaSoJj8\nzB8+F/LDpS2obqnjcMpF3cq6w4jNBLcU+r/FGoAvWIB966NsLkiYgTLYgi1y\naSh3B89vUbPJMYHTBb/b3MLqZVUkHl4CFNvPoGnVmEOGG0dvcuGOHobg/AVG\nZ3Wfvnfv87ip/9LkPFhAOx7Ta8/4PQbayZXNZ2cyMeCvCHu+yehwSPG+OQY8\nBxpxAOUc7dzb9WqeJnPS9Bv34Rba5Mku6jxyGcWoTOE4W4rcNf+QLHOKiZBG\nk1PG7iF14NhGrwV/XdeLG0OzJfJ4u4QfaiK1SKDESoaFMTkM57DrfGUhtG7A\nqxIJ\r\n=RR6k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdkzyWhagaVa+ez+iVJu85YmYJCILrZJC61tNTCGvfSwIhAJOUyHNwnTiD7HfezB+oWaOfxaD+lwSlcVxGPWQjrRaV"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191219111936.0_1576754408386_0.0848758309680615"},"_hasShrinkwrap":false},"0.3.3-p20191220140851.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20191220140851.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20191220140851.0","_nodeVersion":"10.18.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-OkCcuHiIXMt6awnl+KDX6cjwsfKOrAmN9xqffin5dd8aEi6/HckpJyxW/95PfuyE8JsYySoS3igy5z1Kk6gy0Q==","shasum":"4db056259f0350c5cb129ab4ea250e8cbee1b3fb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20191220140851.0.tgz","fileCount":28,"unpackedSize":255035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd/NYSCRA9TVsSAnZWagAAa7UP/iThV1tBM3WW9hPHoSo0\n26/JflbjClD/KgliwF/i9Bs6hbbLcuiaERBR1LrJAlH5Ze5ID6g+Hsg1Qmon\nTBJIxQuGTLJx500FHZNNHru628iauJNl0A7e/7EQGRMw70XcLAGWUm4EHoSG\nCydmlNM8ngNfmiZont6/p+3jp6JkKy2TJJ+htSneaMFHaHN9BacAAC4d+4z+\nTGDYNN++VUEnswcegg2ymjIjN4atGpuUxAij1pN7aznjL02ikb4PjpzriK2r\nqgt9zMuFDimyAeQpzODjUbZOx+YYZWQC9syi/QRPbGezT4T1WoKEhaU50QTx\nUAK0j8lkOkzkpL/Smgmz24RmLQM3EQgDzILWYvTWi8PiPY4u8MDRPff8b4KM\nQf99OcArg09C/ffRW2j42Q4ejdWmjmV7/1Q01W+dlIS+L+dZICQNN7nJ9TIV\nItNSDeaVxlgy8l4QhUSFlvF0SZD/kNmymPZmNGd+tnVRirUYIbyHr5AtPyIh\nkWuU8cEQ5szhzXqgibecjbbG/ymxjEBK0/qIo0h2+PcC68PdAH8Kj3FvSHCn\nBc2uMIvqQ/ZJSGOhqGRk+RnbuglYpqmHhdQosdGQx7uZwypqVDmPVDzaIyFW\nO2BqWmI7Gd0niE/Bbf1z/5p6QnY9/1e+OYxtPXDnfCTlmrDCCpGcqrSCt7yJ\nnuC2\r\n=YAjM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICm2bL992YXE3Q9vds3/6PL8OaEmHDSmGQiy9S/I29cMAiBQIIdsmLAg5LveKlVSLSoQv0ftnhjhcG5TKXL0M6/d5Q=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20191220140851.0_1576850962360_0.22432707464714197"},"_hasShrinkwrap":false},"0.3.3-p20200106174612.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200106174612.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200106174612.0","_nodeVersion":"10.18.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-bGIZCEFkPNXRmevPwkXbcmWDVct5JkdUI03l5hzZy4Su79HY829aK/7G5FFCAhY14lql8HRe0LOheBKNaVTdTQ==","shasum":"4d28303cb6932d461c39a6a5be575bb5741e7b10","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200106174612.0.tgz","fileCount":28,"unpackedSize":255035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE3KCCRA9TVsSAnZWagAAdKkQAKEA6FItdSR52FM/mmFv\nS/Tv0NLK9kYpGBo40ye5Wr2P0h0YysfKxU3L4ly5+O8hrRZ8lzWtENbgyTi2\nsTpYA1uNXAnGoA5Va+YjypykMH8OIEQDE8b2mI6KR/sXb4/275tPwo9bL+wK\nzY5VQjmlievedIxsKPq3ZFAy0hZPiQ1taX8dExOFSGW5iH2NnVIWyuBISMzi\nZpDRAq6Q3SyQ0XSaBVm7rfG6lNyAzhYNbZxBOsTxVlAktp3jJ7RAxzprVvK/\nNkVGt5MyDbcWyWCz5AjKgoriBY8GPsdrS5xYiaWxlFsLV/WSpV5UPrF2F/5M\nrL4DgDwoBLFjJiGppT/gAmbMAiCcn1ij7ubRWvEcQrmnv1RKBoYwOv/+4RLS\nCh0iVWxK5jI+TmY5opbaJbNzqqhabNVmxXwtRbPioLiDkA7/byDiCmTnOVJy\nODgEEIUELyuypWPqEfHWM62kEwA/5ZHSFB7BbzsorOUOzLNg8FprVPXZ+MuU\niDF9GJ3wntYpxwo+dudWzh1F2kE3gDcD42nTIAiCgT27n4152TqIfSU55ouD\n8VKhnPiZIWTb6n7mauFfGfou7yGe+6IbjnEjmrVM7P4jjdECQl26YAAv34vZ\nvf01OLG0fDORTHo3MPXg3oUN2Qcertwt1e8NP7pcd4Qj64Hdu5LXrEtQQEj6\npUow\r\n=/Pv5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmul5uet8ICCp35vQNDIjdGJkTwacl2cxJ/jqTLsRmCAIgGXjJ3t7Orp8ft3tiBE0KZTDAIplrHrs9ynkwDrDwt6k="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200106174612.0_1578332802053_0.882717516951391"},"_hasShrinkwrap":false},"0.3.3-p20200107085043.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200107085043.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200107085043.0","_nodeVersion":"10.18.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-pjlQubn1go2PHUS/R4hR4dAAyIVpKhjBYCIk6kaQHyp3izt19oT1VX8ZaYC9Em43HlJT3SUX5r+eZl4XDDA2oA==","shasum":"65e4463dbadb9a84d8ce852104b4a0598c846b45","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200107085043.0.tgz","fileCount":28,"unpackedSize":255035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeFEaCCRA9TVsSAnZWagAAy3QP/j+6GToiqt6qtDoK24qN\nweHfgCaJwD52uE1At7AX1D9qhb+yIWHalLQYq38BUvGbcaCrXPD5RjPB3Hnl\ngm7tzZVl11pawqaR0uQqlu2v4xb8ZuWES6G5MQaQo8tWLUprJDAFGpCJ4MEP\niybknXctFS/wHJHGaESWvaFzMGHBwRtFGXQRw2ytDM+7+/Mt4mbSaQNJVOgT\ncsj19Lz3y75w6WcW/gl859lxVI1WjVzC08N4JoVeMZtoIiv0nUvGqWi0DGLu\n6IpA1bZ++SCrhQDTWuzaQkWGjErer2Qd3CF5fjEKITkEmPAQwEICMN451KNk\nRUb/U4h9zZKnbasuJA5isnuQELnysJMtU27WdBPtwV/LwKhiXLUdSo70HEfP\npnGwo5qaE4m/9FmheTGT/CABv2RVZKk38EwqCNY4vcMRJxoC80SE1w95R1SH\nx/JUeCsCRvr/alQYWkAro3glqtiT6XRDU4Iib9r+1zTG69ify0f2/REgIGYy\nl9Qodk3qxqldswYtsAjbWqvjl1bJx25ivFTbuUBXym2G1IiGn5b8OoVj9reT\n9Dg/Z3vUAMKA3U+oK7Cgi63shjWACjwOjVDS38HCCWqUs7V7EtkDQYaCPj0K\nnkOcwozKU2sDEkhyfZRvXryW3R5utTZ08eC1GGuOrtZ4rfFz87g/OrgXA5d+\nN0kU\r\n=QYXP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQCxSC/BmoY56sPCfVjqwzUDJOF4m+eCfnPfCinKvpARswIffTyO4ZL8oICLObbBMZ/iY2FOvv9e7e+P+0VnZcN+Tw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200107085043.0_1578387074433_0.49850658103898016"},"_hasShrinkwrap":false},"0.3.3-p20200117132932.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200117132932.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.2","@dedis/kyber":"^3.4.1","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200117132932.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-cmFQMwtHWXMO8+VVfpNV/jdlYxyaNhTzymd/l0McIJCboRAiccIso3BIINkMdI2thhgMt0YOqbA/Unh3Zmj6XA==","shasum":"2fd6c1049afb835735738812e12efd1b3ccbb8d8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200117132932.0.tgz","fileCount":28,"unpackedSize":255035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIbbcCRA9TVsSAnZWagAA7VkP/jeslnA6VbsgxO5PTA08\nPF9eIewatqp8xxUFZdX9Gl0PdIp/dE62khp6GwAwQPzcOk763YE/Bw10jYIL\nNr56XMdJddTnEzgH1QE3RD2JexFfPZ68NxrUPCQaSl9C27x+Cch88vrbzYr3\nx8+Jd5r4fMxAZ6B0ubUxvoxcy+4Lz0NuLngVvK6PlsNg10mHUXmcx3lXUTKC\n2h7e8Z5VveLHteW9yf8P2omLblE34yOQMfUi2PHSHDyu27F2G6nN6nGdXeu9\nQuEL6+KFr+nKqjZLcT3lKJDZt8jDU/63OraUWbr4VoY9kzpDfitxT81D5JcT\n9GbnnFcXCTpAgPkZhJhs6xooBbw7TjGhT4DA3Yg6jdw23Gl7IXKSe4vY/J6M\nIE9dJY8hsOhyiHcZCFVIhWsTeuzoGWAYX188ACSXlODIkBfEzQvYL+ghpgRy\nuvcxQ1JecH6fkgvUUgEJCIVJvZXlUou06iV1fFSY8Z88EOYz0LfUNXMMRx+3\nSUxhyP77rOCa7JjGcuDYSpM9QsNnkre/IDeztIhtP5ex0BVXSTvFurYVFN6Q\n1DI15gPnJLWlMVHwtqtsSMCBVv7eesF+h9A3xzp9/8wCsR3SsAGoOhefIsbN\nC10i5RWAAU+PptXEN93kzAYm6qhixR/gcz56U697SQ676EXqoigTYDONLMsR\nTOo4\r\n=pl3Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCG+9qDaD2kxtm1VJHufeIC6SexuQ0L027CFk2feocDMAIhAL3fDODAeDlQpZLz2w+sKHGBlrrkfL0aKMu+CvzNgqhE"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200117132932.0_1579267804215_0.3715022357519939"},"_hasShrinkwrap":false},"0.3.3-p20200117173309.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200117173309.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200117173309.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-9wdzrG7yPzYGesmdMXmthdknTCO2ySyl1ZcHbfIA2+A37WT8cdRy5qmTX458pf5q1s8nUR6b72DEvOkZ67NqUA==","shasum":"f783f721f62497bebf45e184ae7ad1dc4202c173","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200117173309.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeIe/0CRA9TVsSAnZWagAARgYP/1V80sPMBEQHCFHpKLPW\nU3/CwcGtGlncXtdfdp6RzDTiPRnFd4qA+V3vN1PXmnIKISipCA21N60mFt8p\nrkj835/+LV0CskNfe4F1a4ypDCsL/m6r87FoQvTS6SWBVbNp+BDTJlYE9AX2\nWdSuRMMez68hbSkD61+75ba1vfkj8lWrJUTKuCXjQI2r9wdnFTcC3FUWuQrG\nTPA//pLlvX8RZigW+WAJ6Z+RNg/jaZPzbgwwjIxJRZdBRFLJS0qAfw0GYEl2\nSw6XWgq1JCWZ//aQ+PnmaKXrBBgoJSQRlxqGZd4Q4e1nlUoHLVo9excLXFoY\nKoJYDAPAb0GAqDax/D8Dd62aV8i7lWqlLtQ/LJQfaC5W0uIhZFI78NNLY0kf\n58U5WNQqVzJ1T5mvl3XrrR2NGOxW58YUKXIbxvfk3WyHtIt26rayHbzqn32Y\naNfO9ZIxmyEMnDwyz7DTCsvPQdiIMWd2awrwTPXdnuRPbf96r6XZkvbeaZuM\noyP/2D2iaL1xwYKhVFzUczuaUq7l5n1RO39NyZzoTdQ3KfgOz9ZnbyVAHlV9\nTSzNUue+wbjgepAaHgjf7ZP8icUR9px8crS4HlrP+j9ErGRqcePqte9gEQUa\nEd3uFB4nfVQtKLMjLI9kXItd7r5YyZTvoii1oQDASl44wFy9m3GwSszxF+o0\nCfE4\r\n=vIaI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDz5aYLWH3ImpPjc+nb51VQjEumtBYF6OpHRjfN+Eh61AiAO2ZVdy2qOzMTQzPxv7m6bFVj4CC2yAbCvXKmy+ACM2g=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200117173309.0_1579282419480_0.7032060947547631"},"_hasShrinkwrap":false},"0.3.3-p20200120110853.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200120110853.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200120110853.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-P7xZS3UzkVNT2yWWCuI8/0GMCbDyNu88MMES5kxueoXj0cSSCRWKKHONY2Wy7o6a5kkx71TZnqaVoq3i+pQZzw==","shasum":"aa7e00693d99f498b8b06e944fb3eb96502dd225","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200120110853.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJYplCRA9TVsSAnZWagAAkP8QAKCEgrvsPI4S4K13GnvU\n0b4nDke/iuZTV096q6Ix6IQhQfWw6eneEZQvAMLuU2v6t1OBrd4OBLf+5Mzu\nyxdSsqp1UoEkkaYfzp9704gfva0i40zZaX6WZtvjOLwJ66kdL4jISNgp83Nr\nX9UYmHGcAcpdnZ0w5WvjAGtEfOE/ptRVkHrVOS1bsG1edaa80U241PIHbSo0\nE4cLb4iyT0BbBTUdgjOulBqXhsbJkKwmfWskFX3tCrWlgdJ4F6YEsnok4yoK\nk2n9C+V4RMgtcXBnGZHLT9fkGJY0HrjexleA4OlK5gpqLCR0HWV1mSKP6w/3\nifceF5ehvKK+sHNMXb2Fz6lice7SeXx9cfmoL+F2NR0gpcYqo20LdISwuxff\n11zOaHRzP2iLO9LhKkOX0U/46FTxuLlnq/e3usMsfFw2Nt4y+vLApLFOnpdH\nv9z7gi6S4ZTjVRQQOpvHrmf0N5rT9lNlaGgWLK37h9gXJJEP3P6CRbRs25uU\nx2aJzgZqPGB8CTTFsOzuF0n+Wv6y2QVkBGsNt7Tk2qarYcA9BjZWUIULJB9w\nHE4P9YtAWGS/8ZgseUBL5yZdJBFV0K3Xd3aTgHk2v/0F/l6vbLN05nkHZ6F6\nZKF9VZcZy8KG0esJlz1WeQnPoibU0RZ96oqmuAO8PZ1AFRXb0l28tQHAxFC4\nTsHV\r\n=qalp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4khlIHOjxqsKKhAPIC1d9jUNsW3JC+ToWLtyUv4CW5AIgH+2R+GbU/7vWRI/gbKbSsI4eGNDeE66qGxkdZMMS6KA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200120110853.0_1579518565534_0.4674907489713238"},"_hasShrinkwrap":false},"0.3.3-p20200120124448.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200120124448.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200120124448.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-jk6eSIyzDG/FUjqjQ083LZ47rexAajM5e+QX6a/3xkYorZDl3bfQ3QfHnb7ejHbWlLec6N3kTgA7uTDqIoKalw==","shasum":"837a81dc3a462ddb858888045bcb69d14b8e0686","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200120124448.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJaDgCRA9TVsSAnZWagAA2rkP/3THMHTVECAiuc8bCAxb\ndOBOLPV7B924i2Pfbxn+DVmY9uezHNimAKVOJkoGYfFdMQUM6OMmmbiiI5DB\no6ws6WeeHFxLQkAbz1sOF0bBY24k2v8/8M3qkJRcARbK64NLYrRZAC2cBngE\n41ceKZPxigtqUXJi3T5aK0wjEIMGvcKGwesvjHEvHE4ac42+UgCSDPLJZPDN\nIqeVcyV6/G/y0cbxkhFgmoU8U8rawy0AJymP2u6EazhIXeQSXSNjQoCpozr4\nyTW7VQeD2BAZILnu69yl4Kn1zUqppUcQb0M77BJxjIrlWqTOPafoDoxBtt8V\nEApqSuGVegsmDf+JDOJEs6H4FzL2WtrKWrpwra3QvVtnu7G6f6eyDoCEc4SM\nZ1UxLa39LbDmMY/WGRvVsAw8F/7/iN7IROpYDvAdiTbxosVvwztkpTZzelF8\ninSvI68wR/jpFVCo7/ZwjYtSn6KN65qh2qcjolIWnoHBhRc4z6y6YjWzP2G0\nkUEB5DCamtVwItZkZkGa9m6rujOLnPfTpWH2ChZR1v53cCNwtKNAgMAya7lC\nSjOxC52teJAAPLV5jqOWRv4trv0mJgOQOkpM8fargPLkd0aDPAVZXOjT/8LN\ndOMXjAAnaah2C0G5YeARopxSVGDMI/ciwKbTvdTofjaIG0TiBLrpkMvg9K5i\ny69b\r\n=WUKy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDcYPHgXNgOwFyCpDZMO9kZ/32r3+CUw/eeTL2ggEYirAiBZTlasB/5yqfsZhvo0SX4X6BHHYWKeoe36FJqh2baMHA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200120124448.0_1579524320330_0.4891036249532623"},"_hasShrinkwrap":false},"0.3.3-p20200120141533.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200120141533.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200120141533.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-No3fFG2HjGk4MAgmIlsU13EGcqlqgWKs4IF8b/UEQOdo2xellADmHMuR5LEG/pcHVp7DPugsFvqcIpPIqZ0rKA==","shasum":"58e7764863f05ceb36f113457adfcb496c494e7f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200120141533.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeJbYlCRA9TVsSAnZWagAAXYEP+wfX8ssEha07kioyJqrN\nRTxk/0lc/fDkuiWZn+ESLOcDFv4iVFvjJo13Md01393MFNekdXLLS3mSgZ/Q\nLmRWJhgHJT8jtDzui7Furc1BAQX7f93DnlCoU4BQ64/qqUC8TrZ8QtLR2PO2\n6NJodwjkOYCtVvO01RPwvqaqk309tU8Rar/zP8Yu3rWY5SJ8UyFMausGaNgg\nQHlAQ4mrgRGtEGePX+Ix/lLbm/UkFreawHnCYtwSpBKus8v+P1FMeHinlax7\nqyGN6hmmSBMGkIqlRPrnqjJFE2t+PzG8PqXDdaJBNjaZHeLYbqi1fnhENli8\niviAeXkTxYTYjRsStq1u97FhW6rMfghr/LyNkiMcEs+CljfMlYoTvf8fKg/D\nOh7lB1A8hXVwBRc1c+ZIoMhXxKVym3Jez8olbjnPStxemCRnDtzZCMn/jHgF\neSdl7vN9JVSIKp6qFN2PClfEPZ+Xe7pdPTdXe7JfME1E8PGTlqrDBsJtVJGs\n8ML49Um8voUYzqjUbx4lhfkcActMj7G+y4dnT+VmVKb9JVnoMOU4JcBmEbrH\nKAP7ScWV3CoxoXnqeTjC845757bZwZj5vALQLmJBhAS+rVgKnIJMdA7xVtbM\nJnY/fmCYO+NXKt29O4Tk9/XLsCa1HNiQxQ7XQhEiD1DkWaIBjYwiAoYPz9fU\nUIq4\r\n=6t3Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdeTzZgrbsEUrTmTeKu1cSntv4+NuBVRtTO4tew605xQIgYk1ljjs2DdIMtDctB6DbcN0i5FKnq+G4X4xrG5nLqRo="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200120141533.0_1579529765321_0.8924000420508285"},"_hasShrinkwrap":false},"0.3.3-p20200122125835.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200122125835.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200122125835.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-ciilXRHgPwmGlGB6eLtnB9g7scmGGIQv8M6cRxgEi+6F1WWNh7L1VOttOhsvr8N8qMY5CkWiDyjRixR+LwNwHQ==","shasum":"c840efe492016c0a70ec18266de536105b4e4adb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200122125835.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKEccCRA9TVsSAnZWagAAB14P+wVzs1+1u6GRHBZnky0t\n48yHDf1fl0pXg9ufaab5s5yBs8SaBX2pCp8z1inx7Rv7r+UiJXxxp7SwDOrT\ngqcrstxC2QjhWMgqlctMLRiy/w1200XQKxKm7vnxOiFjtw2tyAI9fQto8fkL\nonO7UzyvHv1uwOy3Uic6NGeNS9gk9SkBmeIJjPIaGcPQOJ9y2zUY8kN9Mw4D\nAmxNiW0bXrBpcHCvwhl+O0CSKaCoScrJv93dr2eKEFb84TiIcbPD21WhKTQy\nABuaFFPrFHaIdSKWOul8WSr/+yINbD1xqb7a0CTFET5kAALljDTsVU/mIOYm\nC1Ue4AvdlWA0WzXq1ddi7EV8In5uaq0srHu/6rpeLbR8/sbPi8EEvG3lQjL8\nLcBLMU1rvFpSQwx+X+TSgopC36sJTZaa/mBJ/WscVaJOgNDix8qHeAWVU+Tk\nPDeGrN6+69w/VkMrw/AcAPOElSzFcvuNl74VOON1vshy0yS02ZXiFbWBGMw2\nBopyyL7Uz03TjrgF4rS4lMg/+jugMCQ7X0JmP00tjoJxU4SWzsAnTPGXHwFw\nwxMarY2RRt/H5ck6wVq2GEju9mdMm16MjsShSAZk6nbhFMjJ/D2Jry2usdJ3\n4D1TfICeoRfJX8aUUzYQZG5Kdie5nyjtUPU53oKILlDMs9cBsSnFfnnJn9aI\nJCpj\r\n=UFDJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE1rhVZ3URSqodXJTD93mswjiaa3/xXBevNuSJnBwZvBAiBYGKxOX2B+9Zfp+kEI2Gh52zqhjEUXezT10sme52d/sA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200122125835.0_1579697947561_0.17229835701971496"},"_hasShrinkwrap":false},"0.3.3-p20200128065310.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200128065310.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200128065310.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-RVqjqB++4mJWc802DFz7eny4ycCfXPhW3IBvJMmxKwSeRdpoQzxR1IbXGMw6FQWKCrqaIkda7iCeCflown/mBQ==","shasum":"911b1c716513b663cdf82261317e3364d227aee1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200128065310.0.tgz","fileCount":28,"unpackedSize":254941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL9p2CRA9TVsSAnZWagAA5YMQAKFQ+eghEc0yQEY7OrMn\nYGRxxLlJgMBEpCJfzaUSFiPjUu2y1C4wzarvmXS7cPHpptLpTG3yIlEhR2cV\nYNaFMxP1DZRH1CvySaRt3xobh5SPJ1091HwIGdRGwB5sUimVqJ1xmzsWruFw\nGjZr0nKB9soJV0IYl+jNRtPsI7AtXut+simib4IWKJmbGq1J4V4FNo+8k0aK\nTqnXuGQmlU8PkI0fCkIk61DIXWhFtA2leXAm4BeC5sPGIUbnmXcR+iYS+D0w\nw8B2WnsXq/jk6n6o8BGSL6FFPTeaJ5HtBNpSJfafYNmVGjrnNvf6Ntss9cNk\nGzrrGDwEFlWcQyT5EbSMo7kKPPlV7oHgicML6/qYtfH1EFNZGJ/emBCsePoB\nCWoRl2BAgJBkw3sIWBNlHX09wNyvoQTPAwzyFmh8hWsUnuqt7Lh3Shn294OT\nke0KKU8FCo2nlf6cIChRSQR4BWnd91I+aXzZrGISLsogiZl6e2tapjX/eBLU\nwBWLwnPAmVKo4lkYlv36jNBiVIZzq07eEwETB19D2gViiRCsshSlTHs6C3bE\nViyF5cIX398Ubvn5/bS6IXiaI4dd5dJCt7t68sKIYUPBIxe8jTkOf8djz2Mr\nrc4jFmr1X/OLk183KEWklcQs4bpU71ghSLyA1uK3eyrH+fCYzkY0fzhEGW2F\nFu4V\r\n=WFPi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlcvAhiD5y8T3wQmCamzT+KXpNOFKRwNRFo2HYNaYSYgIgCjXifwq7NH3lFUaKWd+go8bsEX9tC7EE61RyBDpPK8c="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200128065310.0_1580194422160_0.1460371677889012"},"_hasShrinkwrap":false},"0.3.3-p20200203155355.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200203155355.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.2-2","@c4dt/kyber":"^3.4.1-2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200203155355.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-t9RzvpPYP8alHU700F6CkWIW3RPc6/BDfST5oUtkfNqBFUUOnl//XDLSIPCu7eHWt41mimLKBVQxzdOifahdmg==","shasum":"cbc485b2fd0bbb4585efc8935e0f417b1bbe99a3","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200203155355.0.tgz","fileCount":36,"unpackedSize":295010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOEI2CRA9TVsSAnZWagAAe1oP/0AxWte5Vhv9dEwBimkI\n3rdVReusbYAelSEtV2eycmtx3p2/hvOUW0Y/iSdUlv7852ACu+Sdhszbmnu5\neUitF8yPpnsYO1O6mesawGNmRFxPIuzEU3KUdybEvENu0Tu29HggHhP73sf/\nT776t2u9M+vd7NSiCf3p7/gAUqvKxxdpoUYPMWyE8JxTTFCM+lXLq7XfX8Gh\nfIyVDzzcciGJPACmiROMHy1OIS/y1PNqOxoqf34SZWENxKPvFts+FsKgBjkm\nc5PjB9oPUIdnR4CeFMHwtIbV2CI0qVnkRIocjWGlN6n1tTdLdapWuazHEFoN\nBhl93ywW1vXvvUA3h4iOrA+ZLiliASL9uWYL9WNux4qstPlfbKHs3nAozowI\nzAj3P3h85xwMiypHCdry+ezRFrpatJm1LxMiKQmLz8WwXYkYetfCKhZQUg8F\nWuuhHWwWbemd8k10vrvJYL2Ikw1v6L4Lh65fxm+UNWtpZ5sKKjTjIW2xhYcv\ndLLnN3czR1eruZ29oCnvSXamhEWg6HVTismtCRUde2520LN4QmgGyUSZdoF7\n5LlB66PCoRhVSnZH5o1D3U/4qWHyb5q317//RDBkmqbYSCPOD9/M0QbRy3jf\ngZDNEe6F4DJls8zbJynIQL2PLBjMiS604CTINwUfdzYXn+VlAYhYXAiJuR1+\ntoxa\r\n=Ihoc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFk9cSWGFkWN0sULzpkzAV7rP+w+RQqb1Ms2/K2T0lvTAiBV7tzfDtm7EMCCMl3UspHHV7QBQ5ktN6k6E5DMKEfFTw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200203155355.0_1580745270019_0.05579174914274576"},"_hasShrinkwrap":false},"0.3.3-p20200206071501.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200206071501.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200206071501.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-7OlWCN4e5avVTpFgw8vX2QvbwXFneHn0SvcvRStuFrChEho+82AMkUgpo804babTRIBtZ6XXawMSwH3uoyBRmA==","shasum":"6f7bdfa8ef0d821fb14f8a260a29d6627fcc4b0d","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200206071501.0.tgz","fileCount":36,"unpackedSize":295108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeO70XCRA9TVsSAnZWagAAYYoP/3u87IVa6vhzC+vhhtlm\n00bO8O4fkaK60wEShMHB7RPBZpdzAYyHrWLfS5cqVYenUFH8090jIx7Jwelf\nt31Oxas/n3DXf+zQqN/tmKXsZSQD0zheUTFy7V5r+aL8AL8nmBfEqKMiNUyO\n+uedg5SzgUFLKGCCqIEQRRV03kT5uZpdc9WwZu1A1mqr92FvLt+LDiZjteW9\nBcffJCtqd6JaoTg6BU8WcpZlc98bgQ1YTZLb7IcvjVw+Y1IYueg4U+TTXPqe\n3A4R1E2+a2TsAqDnTT9qz3gx2I6gc4NobO+4XCLreghRQDJ+ONQOa1KcbaFv\nj6JMeVDewhCmK3WwpTXezA6u/DY8RSwoUMO/Z0Iu3N3fB2T694AmCzoiJEOc\nFtwtXkRzQOKJTQlS2ZJFMrWkb+KoHMcbmDHcDZ4oITylYHboQ3b85vqMFxQH\nTp157gw18wfhE4uyNXWHI3v3B0sU/cQFGD53pwUj10hlK3A+7FiIyfzWrovZ\n0Esr7eM6PaiS6TTgxKK7Ka14ETkWKag2kO9LH3aOkLSdw1v2ukWvPgqXtofB\nK/UhP8NviyKs3eWZOKzqqnPQMRcn/SCrDu77Dn6CU7PAJwTuByOInkkrOUQ/\n7n0lKnrUPDX1h9gllzv8oiQ4fs95HQA8J+2wV662F4OzAxE8HcKRf887VK6D\n2D8l\r\n=BDbu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtJ2YJ52URyPUiXW8XNw9LnXo0KSsZi0qh8J+1yNFhdAiEAw7hAQ/jnr2RfjYpCbuXCpT+b5W0/U0UB0YVGBoe7rjg="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200206071501.0_1580973334226_0.6681328910229638"},"_hasShrinkwrap":false},"0.3.3-p20200206075108.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200206075108.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200206075108.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-8HZUbRJVeyZPDJQ4irLOCc/0IsDKQkLa+B5jb2uIePa2AB4zAZeUbhdig6coZTD0++ZMYwE7HgaO/MXgiZkn/w==","shasum":"51375df81ae41126cb11df127d6610b6c101cbb8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200206075108.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeO8WOCRA9TVsSAnZWagAA5ooP/iKZpkHYtsrwU7WIQksw\nXWCRdwxkWGYuw4iZkRAr51t09KLK4nZa2oRPrtFuJpA6XE6bbTSSnHavC8T0\np4dDz7cKcETYE4Goea3MKMpJC+6tknFEJQ6Q01uyJngn2V6cBr/ArFaLJgQP\nnbwuGHDvl8T+TnkBnDUcStiZf4mN5WbQLo5xuBH2rBKaezF+kQu3M/gcfq2c\nMfSYY36xME9eaQOKng2/0fLb2hR7fVypUh32/bFYNbav1UHXE6lUDEMxzj0a\nLdVPa4+GKO/vsYt2KAbtn7blX2e3+B9t+oGY16UgTIgrzMY2/WCri7ai/MAc\n8ecdv/KnAKYxyMrlmNTAPDBKmPPt4SXlD6MyAcJZKwGpoj2Ef2ApYwHESPt8\na6jtDF00L9cYHtvTC9MkPYynfr8q76WDNiVKTqaM6S71y3o+ulqMsn6sPDbs\nzh5qE7xux/7iKtAJvmJAYmFlp4XVubO/XY4N7pSTU5oAhjwYG0LcUbt0SiCn\nsNSVNJxq2p4i01jsUuAQrP2ze93BM3CdlTIdskciGItQr2vPhmTZqj6AofCa\nvTbZPuPz1LHgitLdBp6tFA3DBM+xj21XD2nm1sgupu/TLImt5ujTGcff9fCu\n5bk9vd1WjIZOKaMvRdAMoEk7ZWKDjMKrUr/pz6jN3mXxGX1X2uQ2UU1vosGE\niB+T\r\n=kit2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3dorbRwkt9pgsqz5cvqpDKtmAJTff10cwZ5TsXXOTbwIhAMygu69CLYi/vxlkGbYooPnd3lxCX0RiPCngwUCZihhV"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200206075108.0_1580975501503_0.632714130690198"},"_hasShrinkwrap":false},"0.3.3-p20200214132139.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200214132139.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200214132139.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-nuu2JywpkRdRRDRX1kYs1jrP+oTtaUZfSAQVaAmgRgAXQl94WYFhBM+ydzn82+9yVUvNXoONQLMj4CIWnkxesQ==","shasum":"bb755e120f566a9031ffc4fef7cdb696530a2e8a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200214132139.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRp8FCRA9TVsSAnZWagAAu8kP/Ro+tiDmccmlTV636YPq\nON4UjOLSCHJ1O5Px5wCo+K6vbPH7uVC5sz4ZPvhgLqFCKHwJp6A2tf3NMPTq\numWR8wVPK7i5z6WhYAusDHoIhZhZi3GouJygNmqUe4+da6Ay4J4lHGKx+jiM\nbbGQwSU1mAfReFLh7shGJjrVEJ9ym3nsHy4JKppFT/IER8DWuMWUzd7faDjE\npGNZwAlaz2OfUQv9JRVdnYnBvgzkzWQ3D5ytSiSDYUUKPTWMGhRHJtyI/pxz\ngwDd60Qee0GH/bjAx88mh8f7SbJK5iXcLpMWMpU5KH4nWcUtCYMQSrB1xd42\neTh1IQDGAmRYtpgC7ewtoPANZhZ+G76Sj0lgv9mOFUxx5wQhuIHfEUGmFHbG\ntaJivbFJ6ZF4dWmRpyjdUcd7CfgfOtf6R1SRbkK03rR3sXKx8e6X7N9RzLIh\nOTglWvvP4CAqQLK4Vw9BtsmgelvGN3ImOTGCWhZMfsHo7f7xAqgjzj5HSEMW\nILe7I6lX5HYMs9zSIx/BibTM9g+B2WTC/AzNVyWGpYJKqhxVMZfUpQvooM5o\nTDMmosqVKRADfwvrb82B7Tb+5a56hNFKazR/K4/z7b5OvNdOrJWoT2EAm6Nj\nHBw1cffh34xvidDvaIwGF0ESlQrHJ0WHGJpVACOB/hrtm03wH1biNQ5zMb5Q\nvltW\r\n=Xh90\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDridgY8OFcH06xEnLzfucuTt9LaRnnzKK0UYnSuDMv8QIhAJqwQNV371TA5nuoJtP8ArMi/ithWXMBGqjJGqkAy6V2"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200214132139.0_1581686533367_0.20497301878127727"},"_hasShrinkwrap":false},"0.3.3-p20200228114508.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200228114508.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200228114508.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-OedUM10mlvBP8RHIuDX7Rfrr9HJxjQkBDR9xbxKFdDi5n3uWayTJwvMOd+TJ2BfsC10v6MxWyuB0xOpNwLeKpQ==","shasum":"aaa36de826c97be1a64440c7eb9db70f0febab42","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200228114508.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeWP1oCRA9TVsSAnZWagAAprAP/RAVAdbxubV0h3KctSOB\nNdsFEhTP+kK8G3SCVk7JNlAeBzpn1Lr2TvS69U/wBv/J51hqj/6hdfDHS4dQ\n7tWMBqrnf6l9mHHNZu5Bve2Fi3ffz6PwFu6vRMn4bJFv7sBNE+QPC6fPyQOO\nTT5uz74F6uXlbFOvAnTIdZSQFsHzx1qW5t1Egn1ibY2RZBJq3pcrfTsYtBGk\nU7Voixja764GwLP9DiJTwrIf0budJAHK2xoVw1Gl6nQQ4fyf6ixEbAALrqgN\nqfJqWXr0nOHINcPDErPlBsNCakQ/+7hFEEnmwUE+dRXpBGA3xLsm5WsaK9zQ\nfPl41X9zv69Fq68mLINFHRNj77D8JOI7i7D3MXYtMsmfXnlXyvDJSYl+Q/2p\nMcc/07onz03hbd+FNt3pvmkmN/uWRO8R62SfT1VBNkfkUyjTFMgIFETFtrGM\n/T45/w6LQnBQhBH7g9nZEbgrIrF1oT3jk0Qd+rdnytH6e1MM/ltnSQTet6ql\n3uJzY0vD4y3ECtyPyUGZU7xOp5YVlvd7yLRC4QZjH0ruI/wUj/NcUHYjFx3b\nGmOz2eEvfXdhPNxpxjd8G2b+xwxevGTDyJvfaB1Wl5mEb/cajqSF5e9k+IuO\nxWAYBeg6p1MYpn7TnKvsh3ivqho1C5IsrlWqDsTsrMS/6hBTpCz4vkTlM6oG\nguBE\r\n=W9j/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDNj4rmMAvLyLDgN7GzdntRERg2MDmkEv3hn4LPOpFxSAiEAh1yK99ZF32XBimXaVeWiLQGMybSY2s0zTZ0mj214m84="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200228114508.0_1582890343819_0.47908538544550505"},"_hasShrinkwrap":false},"0.3.3-p20200302154217.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200302154217.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200302154217.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-IuME/n2nvXShIH8ps6dPc7T5zGuFwa6ARAScPvrBdvZjke6ciPV7qPPAAFTqw1ZTm7kgcSqSFbj5SCo5cp78uw==","shasum":"f4ffea12c568266ebe5f3ebcdeede16328008103","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200302154217.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXSl5CRA9TVsSAnZWagAATmUP/1QpaioD2rkXxbSzlQun\n3uBhs5d+NRxbAEA2R6fJrk0C17mhy2vAgdxCkaz/rcjbdpHt4Y65kCWtrQmV\nqI2TpQyn30UztKbPm9t94QI/u6PW7sjqN8l3vP/0p3wyek8F4y8S3BQ0Caj1\nqPJDEd23v5kAom5j9vrWa03uH/MBC6PZHDFkaEKerUeWXUTTXlzm21AU66jq\n9KfXcQ7y5wCRSRmLoAnKmTbB1dukVhHnSM7Ai3tP3rafv8r2mUCJtVykgob6\nPHDnbrENs5ABTcGUOAnGDZeF/LB6tsx1YMGcn/bQi2rgG/9+0+vBaotCshEu\nLSqoWMSEJR2sqRk3oGqLY/NBfszbWOxm6BoG6y/hyfBe3DvXY+jWpUhrsf8Y\nTjXLrls1ujfcoMO4WR3ecxFaDFpeAsfSb5AqIZqD2GpdnxoEzKfi0QkAW7gf\nIgw0eD3WABSN53jgAAeMmz43Hjn7G0ckVVCgJ6D8nogMBQbFvTm2TjzOtcpc\n8HQfg5aUA1S/RBI8hUlWVI2M3kLCfCG87TX/4Lxbs/xlDGwPQBVWWZbnX01N\nlWbKYyX23ed29r7Dyd65dQek1hcPcb3rhAu1ic+gqNU16t+w9nt6az5o5s7G\nIcAPNl0lbcTcCRQeYwdZu+KejaIEXmxBSRPzTKd2B/8hSdRMJ5qou6YJIJx6\n6LKt\r\n=fhrF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO0kSlU5B6oPCjpq03AQmwefD//gdLB7jKQ5YQ2U6YNwIgWtA5GqQwZRGeMhaHwM6bkc6injoDsqWMBRKbQeC40nw="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200302154217.0_1583163768698_0.3527106017332351"},"_hasShrinkwrap":false},"0.3.3-p20200309073939.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200309073939.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200309073939.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-cv8VFmf1AOzDaD70ivJVRLj2gdvClW8MNlo8kW57VnkGPJ7u6iwjt7Ksmsv1/9rmkrWp5/D0vpAM3n488dLSMw==","shasum":"7e103eb9ae721bec1d5e66d5221f54152639f16c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200309073939.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZfLZCRA9TVsSAnZWagAA46sQAJVrn2O62D5EZI605qlg\nyZn4tEIAP4jFek+xUGQh0YDXVRpbrA0KFEZqH+A1M/H4yGP6coFzdNTUo8nn\n9UoNirftSfAUj+9zf0/Uo2NOA8g9cckB2jY/aVSDPpgrPSpZQKWpCa1t+sqo\ny+WnoojPFfoFMos/YGrVOA+R3tQaSFr9Wp+Qvt1zVB+VuR69GamLhwOekRME\nTM36AxujzcRqw5COimej7fsIcRk2Wmq67bbK4NZpKm6uqZzYQ+IFwAHPEZys\nYydBRHONuElCQHWfik907TG0MMscMi+Isqf6u7R5xqfjbCtDB2knN8gN3XAI\n1+dlHfgC7k19/bG5a2VeJ7H1dvv6lKbQclK/7v/r49HonF9M4BVr7+KTEV3g\nxNLGLeMdieZ0Hq/LWjPommmcaRexVM0qoHbxXwT4q3y2rDaWBblO/1x3oKJW\nneOVeHjXJj5HuuROqA7wOYefZ2jJL3Wvhdsnb975rCP0TSeK7yEJ42j81E8Q\ngG1xnKGzekX6oh/59fREzUyONLUsUYrN4Ed3NiMFksuNWWsV/eldmuD8jRwv\nDBevqwEje0jJuGpW1kYs/YFQIXhC8wM4jvBlASjN9bq71DrG57TlFKUlgENF\nxtp4rxNrTljqR7VwnGEcv1Ab1BHXtvBbNMJCLZO9+TSnh8bmS1524kj9avYy\nsX/4\r\n=yhtr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG4rpvRilynVNmmC1vO6aRwDwANngeuhRJ8FNsnSLiGfAiA0geOWo7iIyW0vrwR1oP7EnirOcun0gBbXsaZfCNFpKQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200309073939.0_1583739609021_0.5223761910131481"},"_hasShrinkwrap":false},"0.3.3-p20200309145001.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200309145001.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200309145001.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-XwAIx6QIXRljK2YIDZrC3O3YZKoAEYB0ecVIEZFGhbVc5EtvMHbiwtJAgAPF8KV7TwuBZP1ZZpRg0tkf6qsmkg==","shasum":"c0b29cb9e46d3d041d262bf44d165c074277e4ef","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200309145001.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZle4CRA9TVsSAnZWagAAQWEP/RihycjyjAEyFr7clOKg\njr2uQSGNPGXq4fneAEVUImJJqR/6KgH1GWBXCTbP+UNhaojKDjt93w5O/cw5\nAoBBKahQm/hYSKgeTLW6Ib2PpsQHo1IXD2WhCYwnA4c515xfoBen0uriAsEu\nCjSPaioLXRbOZRpXPckclMtJEwt4CuFidNqDPsAjPRWVyOJgtgAq5moUHLwY\nHspkM0zbnWzyVHxtzEhZZlISM8v91rdMikbcuRDWI6WlH4iTaGueu6qvQafv\nm4ZXdIhlqrK7qhPt1y0UjqESighJ9ZcZ/m5+CfXEr83gZbeB4zOCW9RYSguD\nbUAh4BUNULBRsCQenBEJAHLxFW+UpIrPkSbq3uLpbU4mZvHPAZXfiJnoMd6c\nOvvKrWjpDugzdgUFY0IqFtaaDGEHi5siUAglxfRQP+ebfcxXjDP+Pk3uheWC\nR0cupPsvGVmPmW98efnDAZh9vdhNzWo91gle0cp/f5/rBcvoeBcsTWaYIYk2\n5lS58snZUl3wkN/zC4p5qqX5naxOS1UR9zk3XIXB1g/m/5Gj8Kb8Mwwh7dFx\npFEGzqRL5OCSUOkHzz+MUyBJoQSZyVQ/CyFvLLtmCA6L8bKxlJrVECmdz/2h\n8vHTI8UgZww1LNuC4zoUM7QfXnGzByxtJ2DV79V/iyKQ0FJD04u61KXRv7xk\nWrJe\r\n=p11x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGi00JLxW/wsOYGrl64m4fybSKS3CB/Siy2e2y+tcmStAiEA/aFUBNoZENnsuv8K+ZHeK9id+ZLTCExig37EH/6NAQE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200309145001.0_1583765431953_0.357275954090456"},"_hasShrinkwrap":false},"0.3.3-p20200309220554.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200309220554.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200309220554.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-xvYPrTEpX/HpaKwXbYCTl8mIWPvwpKsp9xVUnU76oXEsNBUUl80UdwRn/4LPh2qe08G5xGy0i6wc57IhveWkcA==","shasum":"6e2b9e9f1ce0228b2f37b6862b9d3e0d0739b6b9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200309220554.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZr3gCRA9TVsSAnZWagAAmYMP/2G79Acl18eFsjvN8DKB\n0NWUG20coIOeeuuJtLusru+FTLeWtFfnvWW7A0Ud4AIHn//89HUS3+i9OV0E\nqUNyyV/wTXYnj+fMSkUe8uSduUYk1g25gR354FCQYOOedw04+XuUUkJFYdFM\nqbOnf+ToyKcN8D8aXotiAMWqBORwwxyB7W3dv0Y+ErNBpf/+2nDgERAUf1ch\nd0Ng6p813IutFLrputacL8PAnYGQoqV8MifPOuL/DD8/X3rupy1plA2mKacD\n6pV0S+QdI96Wxj7rCE0OUbPyvKDZhdtl7G/vA71BFGtMKayUAgMopr4/7d/C\n9Lt+z6htSWbMljlhplm4dc7DBYjniFCh8kkfyYhUgOT+k6p3ONrlQjqkShNu\nDUOB+S9ShZ/SQaHPOwXyw/ipx2u1+PlBnYWbtn7QuVsyJG8UCVoutprqzuux\ntyR143aN75F3Q8SfFwWOphjWhIFhkOAKZskZZvbipcA6cGI/erpBHZHIV77P\n9J0Q9NYEN2UFtTftOA2rlFjcKerUsyyEeUAkWE/jLGJObG/N2aSJU+DZQ8lT\nrIGv0nG4G+ncGBE9XzrNfrtMsGepCkLjvBRwFKGeyBjWueLCP830G9qD3jD/\n9cUzrxp1b+mC/81oh4UkxBL0Kbv/NRDZm+QW31tw6OSkRtwbEo07uZY2xFmR\no/E5\r\n=lN+e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYVIqNfP83lbskx7aXE50zurvJk/YrNFHB7S8kn7wpgQIgY4ukFkmYii0LwLE2CLVHSl0b8yY0vTsGSZiAs1fKZYM="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200309220554.0_1583791584287_0.6848644891486075"},"_hasShrinkwrap":false},"0.3.3-p20200309222531.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200309222531.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200309222531.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-HV71oowdWs5l8NCsmYIEFBngdQ9aNc2qoL8tDr5fagnCNEt+kvxomVZpKGabVErAtRihVjyGyHL13Y7VwBGjYw==","shasum":"8d510f6f4484e70b534b4bab17d7402a7ef6b8f0","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200309222531.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZsJ8CRA9TVsSAnZWagAARgQP/R0APMMBeNV/yp1hGRWI\nRZHCtLqUQRaJxtwber46tTatBBNTXq/zvkJtj1wchCwB97wa47X2GM0qSxNt\nb/t60AIr5YbHnyqjtJGDyJBJj7zXvBdyF85+eCU9A2J4UzNRl0+lDmwEL+sr\nrke0nl2/0OYiAp8m3/Jk+Mk8bwXEZVd/S1Br3jzIiQYtzleVeLdntp+ovz80\nMPd2JVL+ZPSc/8mkfSYT54ZzPVT87kBGaQg0ZB8/H6b6fxlHiIfHrvKSKbxw\n0aoh4dRojJD5mygR14fPH9LY92xIw1R3HXUMcyMmwTsF88oO9n4Yza+r5dvu\nsePiLxe2i2aNBYsgzXxftX21LuZD3mHfgjjcC/Mu9LHTVFCEltlIbbKfsHHa\ng9swiq5ZGt+htGqcq3SLxLQlHYch7A9QKgkiLBM5BeieHUUIXJuIz73n8bIu\nNGigd1FDi1B9Lu2dgbXtCDpwa00kSt4r4GRhL4fSGPog646B8e91nHseYY3S\niDwr2JB3eTJQW4LGFOayAtN/9LvTbAIVmOuxqns6o/WXZLOjsOhp8gf+cOPC\n2/RqODgfdQpRS64GWx/5pnqGbDzW6pk37a29/sye1PBzuL9itt9gou3U3D3d\n3je1FDmhtEmjgTSbLV6NvgHP6yzp7njkjqImBubNN5rpHexUfNegPcD1t9e+\nsD1s\r\n=1SCl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx8frkKt2N2zEf1W3YFSsJwxN5um/avgeH7NelbhYnEgIgXLDF4nSOVGI8omg4bIvq5JncQgxoaEpwag6Ap9JrVE8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200309222531.0_1583792763771_0.6900573711489051"},"_hasShrinkwrap":false},"0.3.3-p20200310103551.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200310103551.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200310103551.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-XPu/Br5PUCcJEtdefi6oLtq+14IYt/cw6VslTcSkUxGQy7rYi5EPzQTWF4F9ReiMOxgR2uK5rsWJOUNvO4OiqA==","shasum":"374ccee0360ef592341580ae41a913603799169c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200310103551.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ22qCRA9TVsSAnZWagAA7osP/28lftYff9DiRTZlbD1s\nKRvSgCnnndpFBPIm7p9pt7icbImTkOn21+Jqx896zVvq5fa2wsTP6nsYxA6h\nYUM15FbJzJ67G+3C3vANwcJQbzqo9YL4KqjJfwzTsdHeE9kUNeO5Pg3OfMD1\ng3exS0qZQ+F1DVl9oeDKCxm8FZURLBj5ZvSgpCggZ7oSOLwKhJJJeyyakvVT\nTnO6VIc5caG4lhoX1YSb1wV1Z0p+k8s6/X+bO4i8Cdlm/IISchJTW3RKkQ1A\nbpiWx2o3ZlM2+7yb9YKRqeGTLtrbjU8qVIQXbG6rDKVQ9nl9pMx6Vp4BjAp6\nTDq38Wur8uvD8C9wJ1L/5FAo15A2vSeGk4fmSSqg3bbFSCA7M4ahiyatpM8U\ng3CAx+tDA4hdBLQuka8WzMOPBBsOPINp3dq1Mpk5rjiUYcbQQzGv0g14zuiY\npCasBmbX+sykM1vfb5H4h5ZCz2++e5eVIFeYCOlozH5MomE4Scv3/Vy1LPym\nMwdzlmQygfNr4gRDEzMSSYs24OQFfq9iqEXrjIhI9navjzPN1ox8qp2nlCox\nYqjDfV2wCnO+edZ+ksErB3UVIHSSN0zvUngG426gSDF737oo8UNVtBBIYj6I\nMBai+TcXEJ/AEQuaTrhtiSukYexXMXI5seyi/UkGoPerHdeCVIbtrgWt50mb\nj7cS\r\n=bO89\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi/Euc82od+BOMB5XhM5LXWTIlv2nrDtKKRAc2Gm6u2QIgSVcy+oe8HVlcvNJ+EfILmxyEbngPCLiNtqF86EmUYlA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200310103551.0_1583836585926_0.13019733543044043"},"_hasShrinkwrap":false},"0.3.3-p20200310111257.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200310111257.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200310111257.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-lnA4gFZGpsMZAhTKKnG7Yuz7DHwYCBxzHUh1wc96vydf9z+E50KcFIIgV21/LoUz+owhpYrRf54DBABuR4G7+Q==","shasum":"8568afa56f7350393bd8914aed4d19e34f5ae830","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200310111257.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ3ZYCRA9TVsSAnZWagAAzpAP+wWWMMuNcHv5uKWYrfW+\nmooyDbFJ5zOiBc2xjtzz8KC/9/TRNppnRFdwqOLBvXL4jJvb9VD+f/bq2NjY\ngkn5ITeif4/ynfqxXYkRnJLzlzw45Vd9jI+V9gMMx0pxgpEIvUR0fzlIvZBv\ne/YscXbOxuJnWwkB4ONPPQs3Eey9sOLZx1PatJduQnnXm3LWSw1zdMFljkaI\naFKGIKMupvvG1fhV+f2+/LnMm0L6rNbjInfBer9ng/Ou/zsx5S+zdDlBUyp7\n9zXewtZxkZKqXYSwT9VlL/3RuQN1FQ1CqP7IHL9+dKphda6yuO52zGcIPYmw\naF9RrViusr6q6fUJL/yQm5Aj+9vSU3tdZcb/fOQU2YXSWj2u7N1ojPEjrW5B\nGCfFplS06+H+gqn8sUVvs5dKstH8uyI/7XTwbflIGi79RTAFjFk5ZvpwvIx1\nM2T9DSwf9JpGxYIHhKXZu73239gSoo17FMiHYxpluVeGiGrbtYDmzWXY5iTF\noruBxR8cFVk6k4mW2moct7fCCUwyIopA0f8QQsX63SClqH+Fjff0rZ5lB2Be\njakXE+oGCUzlk9PHRS+o1iEXln3akRaaS52NkqlAfGvJugc5KM1c2Y3jGpct\nOTRT2SRRYafStxwomgYV+MWfnYhU5ms4qmHYKqLRk0qAQIQpJ98COaaJ2Jkl\nVsXr\r\n=RCr8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMtCEqSSHUPbo1LCA6/xNRw881AVlvYXLwl2Jf0DW+CAiEA92zMIdyjiV6ojFC9Q+rJTJTaokatbB7RMJsKD1T62pU="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200310111257.0_1583838808054_0.8531543220498918"},"_hasShrinkwrap":false},"0.3.3-p20200312095450.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200312095450.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200312095450.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-5klCR2No1ZPCxk5hxZ4xn9gQtsdYOgjTBz9rSvQgRwbFoBY829PMJ/oeG3WZpnBo73p11pcExzFIiFLqKTpJsA==","shasum":"07f9e6ad1cf272b160a68442529bd1018a46644a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200312095450.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeagcKCRA9TVsSAnZWagAAUYsP/1jhILqAXr3/amkbhcvy\nDtqktUhBinXSuRPDnrrc+hp4dZlbC58XEwyWSP+uZm/6sZtgGpG6cXesA8zg\n7J/zQDW0eLMnQCFjGhA39qc+WL+xGGfnYeQLHLES08+2zpHzoKhi+YZ6hStI\nkedFC4x9q72BORvpc9iqfYSZtZHMIe07NKVS4usJNBq3JgHKolp1JZZOL5c1\nTzqKWzbiEDoH2kG4LtUvXCbh4Xej09PbzzjEX2SUZX3PRxKSwz8DtatFCGyf\nfpe8H7ubnYkd7/QK7r9AgYW0tQUOYnoG22pnfI3i1x6Z5Cit0TzkJjekz29d\nGXVtuHrVXgkTojsiTgspw7AHNxnN2fRin2kf7weeQp3VCoHnkWW6XpPTm9PW\n9gkSQO99unwg8QfLO7sI/omBJQgeauLzK3AuD9ldnq10bJSYxL3XQihmDbpe\nvKxkZkczu7mGfiR+cmXvc/utynHlfaWjnQw8mq6SdOIyZTC7cBagUKLR7JKG\n1A4Uu0EIt0MAJUJwFc9xJifMxiEJJI3vpwgcfOkTkxyab7Ilm/r9MvTrHPDJ\nzvVB+wEJbNbqXlcPsQ58R6oxA/HwWJA2biiU9lg7fAb9KuTxagzBeNDZVRtC\nBytAHCouYpUxtpd2xCVFRgsJ/uH4k6aLUNOdzm4e7OFm/KgyKFzDKbu/pxA5\n0ZIG\r\n=F6xn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDTB8f1DPdmqQMC8Hqsnk25LYFNWYc8WFyPITOhh14+aAiA/4qVez9iRDU2IHPA7CkR086whfpBPZf0dtQaab1SYlw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200312095450.0_1584006921866_0.8163596041743404"},"_hasShrinkwrap":false},"0.3.3-p20200316170941.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200316170941.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200316170941.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-xawJ2Cl0ki83x+7kMTPBCjK9re458R1eSCNVWLcrY17oSrJY75QpnbrBb2H6rd07YZfZl66kprCPaWY+W33ErA==","shasum":"db133fc518b5692b848e148904862d659bee121c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200316170941.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb7L4CRA9TVsSAnZWagAA0JUP/1Ks+IwBsT39VYB5ZyrS\nrPzvYbZ3sb1n/BHXdPM5meXmz+RvY/m+iudr0xzqcSZCm7FzWl3jqamAkI5T\nsQGsyfxPJShreAYFQ9ZAUb1dvKME9hbi6BZ3j1DL3vAcKcHslf2EOAktFb8l\nx1dCifxA/6r5TZ7keEzRTnW42k+e39vbGbZhjrXukGLTl+ow1wwo4EOGH6NR\nQWbankzUuAemcgH56ENi32bpJ+91zBZkYzcX1fQL0t8A7CHV6DgbnGj7hXbH\nijdlt+2iuzi+muP6xD+hzrydr3vGPUmm8Ri5QwKHwXFApOZ2xx4oAANPv859\naa521Z+SK9wiVgsFUSeKrDIGNn0lQED7gNw3Im5tRMdoI8t0QzCs5dwdM2tD\nFyX6Bp3EuPqcnsDlSqZFJqY7ZbqOB0JU0+bxMEQ078UbF/G4ZgsGKdSxj6Hm\n+QE53N8fMNLqFoYG7oPsSszxWFfqlkAyTQB0NO66Nt3PpJea64wByjDXPPWR\ngVkquJYQLbkGPaSnh3lztBODJ3tREjV1spJOmcVF44udJy0lL8KTmHYEBAsS\n6LOkgjAmzYauxecCBDCjpkZDe/eUVmUwyuWSgZlQNBlNHLmMDd1wYCq9olcx\nHsSUfQYuDj9RgsQFHT9kzYULYSHhtaV7Wk7TiKtt99EsG8Clu9GPAB7c83eB\n00dZ\r\n=9XPF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7B1k8fXsznKxf7i5vCjM8WPISSftRLku5OPI7V127kwIgB4QrL0LfRDuFranGS4I5c3DYgKeQjlSkghtqayXCoS4="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200316170941.0_1584378615625_0.9711583821221905"},"_hasShrinkwrap":false},"0.3.3-p20200317061117.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200317061117.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200317061117.0","_nodeVersion":"10.19.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Z2WXiPblL1KAY6AQDL1hzUyPRDs4NnAFk9PEMJJfaqdx42IUllqXsdvQiB2xgtZ2vPi9FMXRoC+XtW8HX/lRPA==","shasum":"b2e447a8f35cdf7c2106d99637e1783c42c62289","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200317061117.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecGokCRA9TVsSAnZWagAATM0P/ioZfbSbrhsi9JmqC9lt\nzI9XykhCDE1GqKxlXLbyBaeHUGPsdvW9gofuHTtQ2bYm2V5NtFhXRNNLarnQ\nq2D1DmV7DqvztSi4ivFQNK8cE39+rI7cdK+L6gCySa9jJHkMy6LW8G2Wa+AN\nxkMCq1dnqK1Ph0TAy+e+hkbwmI6GpvL1eYkuZekl/apU6xXb+ckQTsSw73NY\nT65DSdkq4hiDzfBTttEn9zI25ocHqC5Uc8Joar9jFaoXGfyl2Pn1Jw/HBPVo\niAi9erssrjDDFz+ZCcKvKGPC6FBIs7VhOYx+jqwUBpk/kGnLC4P3wNyeERVX\nLISY9JbFSF2N0o7SZTHssbel3fzolN/EzTwFJ2shPVeeg5ppinYxpRLDvYwn\nWT6Ytfjvxo1tfn6LPACZzizS0N4J0H9Ex5hl05YEbcmCWok/0j4OxsIk/xor\nQ8tx07rs1XHo9F1CUZcBjltMHurfJBS99jgMn4ZVWByQwsxv19den5/y6Yv1\nNIALqgLc809jVvF4Z0SBj+KxfArQ40aXVtv5czsg/Nca2IQp4YL9uku+ze7H\nxB/KCms8XqsNipXh2h7/W+maBhJ6nKqlttw2c+B1P5+pQzirfRQm8vThBKDM\nUJw0/h3j/GKwY7f/Vj7s9oWtwGO36yDUy+C9tA1S4e79cVg0gjI0dYagCMDt\n9Nn5\r\n=Ljoo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCR4WMUHqlX0CpyrTEmnmB11dCQJppfrEWq9jVVjZFWwgIgNKVSS9pPDtHMJ4JbR3v646wGBC1G9F901Eb4alm0mn0="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200317061117.0_1584425507961_0.3271255550438572"},"_hasShrinkwrap":false},"0.3.3-p20200430124636.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200430124636.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200430124636.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5xyrbH7Wrx+1G5Ox9lCNV3HJU6HT8GrEdMIlMjnozzQ3Un5fHVsGg3s2TFSFbwUv0on7x/CN8xcibi/Diawejw==","shasum":"4a669128adbe60a477185fdc7fb59bdc84845411","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200430124636.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqsjLCRA9TVsSAnZWagAAANUP/0Fec/FttsXCsOfKuKbk\nW3XLkQUunAMIEYmLWQnVAlw133VVADQYt+U7SzciFRLXjQxrl9x8jChRWvu2\nSqsV75VQZNsYpn1UdfULkD2BWLSRX33pC/YLORECBrKdGu+11sxYnDE3meF8\nGzIdIwdH8CiMh0T4d3egL4z0a6TWWmzc4SbmUHW3sBrbTjntog7XFilpkGW2\n/d1kq+OpLAX750+PutupPHiOfMKGO0gFOJZnV04wPE2sIMP7dJ/n1OUXtJzi\noGLU8Di8IzvUV51BfTKEx2mDfxSMuCyoR9WTPG3X5WZ2SsWRfjTZc1AjvTdT\n7ty1mVvdfmHlg2kQDGwE6VxknTw79cK6FgFp3H2nwwY4lHp6F1YT6B3s6MiC\naDuDah2+rjBVv+Cxieu8a5cUrKDBQbbKJw0NclD7hGC+g1HTGjbSkYL54/ZN\nDWV2L8knNIqSbDp37FomQdQZvQCe9EIWUzEvwb/ivk8uIsj0AHPPi21UZxlL\naZBDcV3TNeCBbCqW87Bvo0maqSdApxTPYUME1nlQidQqCNMGjQBj5GGaNKfN\nejUFCR+cg8FKsW2zWwky2tLrQnMl5tfE121CcrtSoXrp1UkwYQcrEIsoe+sD\nG6vr7gwg44PNdRNH7osGnVHlPGz+3uncRtUrXXfudQrqXj31hSujW1SzUSrn\nhfYO\r\n=Dq5e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFKrXN5OgHAKWs/RaArRup3BZPyVeavKkF+4UhuoTPUbAiA/izXYxcUYxHiOldN365oOneweXjecjcolXsathrkJ8Q=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200430124636.0_1588250826619_0.003177527754461895"},"_hasShrinkwrap":false},"0.3.3-p20200513151638.0":{"name":"@c4dt/dynacred","version":"0.3.3-p20200513151638.0","description":"The library used by the omniledger-ui and the personhood.online app","repository":{"type":"git","url":"git+ssh://git@github.com/c4dt/omniledger.git"},"scripts":{"build":"tsc","test":"ts-node --project tsconfig.spec.json -r tsconfig-paths/register --prefer-ts-exts node_modules/.bin/jasmine","prepare":"npm run lint && npm run build","cover":"nyc jasmine","lint":"tslint --project .","lint:fix":"tslint --fix --project ."},"keywords":["cothority","network"],"author":{"name":"C4DT"},"license":"GPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.3","@dedis/kyber":"^3.4.2","cross-fetch":"^3.0.4","crypto-browserify":"^3.12.0","dexie":"^2.0.4","elliptic":"^6.5.2","isomorphic-ws":"^4.0.1","keccak":"^2.1.0","long":"^4.0.0","moment":"^2.24.0","protobufjs":"^6.8.8","pure-uuid":"^1.5.7","shuffle-array":"^1.0.1","sprintf-js":"^1.1.2","toml":"^3.0.0","tweetnacl-ts":"^1.0.3","url-parse":"^1.4.7","ws":"^7.2.0"},"devDependencies":{"@types/jasmine":"^3.4.2","dockerode":"^3.0.1","jasmine":"^3.5.0","jasmine-ts-console-reporter":"^3.1.1","nyc":"^14.1.1","ts-node":"^8.4.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.0","typescript":"^3.6.3"},"nyc":{"extends":"@istanbuljs/nyc-config-typescript","all":true,"require":["ts-node/register"]},"main":"build/index.js","types":"build/index.d.ts","readme":"# omniledger-lib\nThe library part of the omniledger-ui, that is also used in the mobile app\n\n# run\nIt expects to get the initial list of nodes from\n`window.location.origin + \"/assets/conodes.toml\"`.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@0.3.3-p20200513151638.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-R+kUAJdPT6FrC6s6p8KVrEp6gPKRvJMnwhx/yatsqyHZIVdksN/ZPol+0ZJW6Hz88BMma8aWyursR5dAYmsUiA==","shasum":"6ba75957d71e64bb964e935e2010cce1a8189a69","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-0.3.3-p20200513151638.0.tgz","fileCount":36,"unpackedSize":295254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevA92CRA9TVsSAnZWagAARHgQAJncbgNGiWbDoPsKjAO0\nJVt6R93HwcDnco8D4Q62w9GfNDCTtofPpoAEPwMOUUKzoWEQuRuoD6zxQ189\neE9LCB1iXHp3XP4Q9coi5s1sQM3YtrYojAmIQ1MMcM0OUJcT58LuZ3yJdcy6\n3Qrlhlmu8cSDHXfWgULUEQSMDlMrzM3JjvuF8eUDbMVBGzp2N/l+ndaF4FV8\n3m+ZM2WmzEPSpmavsBpi5jN1h/pvCzw7jliclC0GXSvKHY9+zzxOflgWziTm\nppKL6N65StnYGdY2pjbgB/POtg6oNmEy3v9ryI9Lst4lD/4jN3pit0tMTWFH\nAFI4ZbgPaWm0IAZBhRVOL/kWQmQPDsdpuWKNh5VvlOulV+XH2J3i97dvsrVV\nCklft+uao8aXfCWXwQjoK7FCp6boy99PNHKOfQxd5MdvaQVMV3G8/RiNoUIA\n/Po36+2FkfYwCo263xhbpZWuhn8r4XKR64WfQhGENDWYRJHWkN8GLpvS1Yif\nbhqwJHOYEQtR5i0W4knmgLQtT8qK0MVGJLkaqkt6NwjDXdEmNFMKqCwfubFa\npAQkyXaIr3fRzWPzipq/o+4PyE8WPOsb0iqy5wxpDSjL0PAK0v8Gd6pYDeJS\nqon1o0kNHuZblknaGrq5Z6TGpcBJTXLuJgtk0oUpNFmysyGxLtu+q+uBG7jr\n8/3l\r\n=qOrV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJeyrpaqC5LSqyBD69065/xjHGYJcxtZRiw6sIt3k9VAIgai5QO5Mul636I7zSxw9JHyCb0hh+ieCLCLbrRAX8+yg="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_0.3.3-p20200513151638.0_1589383029721_0.4889253264491846"},"_hasShrinkwrap":false},"2.0.1-p20200528155942.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200528155942.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200528155942.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-yyaLUvs9nFF9xkJofttiF0GymMAd9zz6is/KWdRuDsqvaRJVLKqkwfK1f1MBqXz02IPI4ESiuJs20LIpqNV2Fg==","shasum":"657f615b73ba01421859183195d73913425cce77","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200528155942.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez9/8CRA9TVsSAnZWagAAm9EP/ipYjKWW8qkSmu1OlHLa\n+q6jOYLaWGJLJq0p8vtqqpt9MQRX3/zzzkV5+kWLh/6kfTG+ZSeSWftoHm2W\nADViIOwBFxil4lLkfE4YKK67gzN7jN5W+kMl4kqCDwhkwH/cQaZc700yr8QR\nQ7QrN8EY27db4nSUxNoTpoRkKUI96gqVdlfKmUFk/QTG99azhehwN23OI7Sm\n6fO7nVtvq2vgLSPIKKwtsTA3gLJ+WBa3QoBcuanGY7tpO4hS+jW/jZtmt2xX\ndzQ4dqxD30c4eI46SeIIMBbXd5lJ202lxYamQ8a+JmQAZx1x8eMUOlm6dxpr\nMcd2CoboDox79hDM1qySlsaS51dbkt6mf/PARy4Kb5m7UFpELNFI5emKRu1e\nsXH1Kxrtf9p6c2ly7lmNb3OLkHsUX9NFCiqpOAC+M55RvLFYmxejw/2OrSVx\n0lLuHlaKIkNkIP1aSX7JAtAg2xu+wdbYAupc4GdX9W6kp8tP6GQGr+t4wi2O\nPOPICi3j5xdByUCFXNrCmTXBfngBqKgw4tWw3ohcUjRKwPw26RUelXsq20VX\nii+yhlOyv0VMTFUCkD7WUXF0Wx79+VriyucB9q0Q+m8oH1jeOQMdjArljS86\n15/Bi6ehs3Ub1ZQMs92w/h+RQ/W65m6GGE7JZ75fSkkjS9JKfPNXT2Aes7A7\nNMrO\r\n=r/uk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSMfpGpF9ge3OP7lfNzOF3XkG7azzo1KOHFkte8xLevAiEA+M0NwhwH8cZjUx63wvjn8aYf8YzdWHnMUMXE9RNZMDw="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200528155942.0_1590681595953_0.9272255624136907"},"_hasShrinkwrap":false},"2.0.0":{"name":"@c4dt/dynacred","version":"2.0.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-7HHO4vQtHupoS1dK56L3YByVbV47AGTN9eWNgeVMeKTG0wYmzWUzMImAkUKLzAd2oWovN9Zk+ewwfeIItzd04g==","shasum":"62d648eeec414a060e99d3a84f2746034ffd906d","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.0.tgz","fileCount":81,"unpackedSize":640735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez+AMCRA9TVsSAnZWagAAlCwP/RWg/pE5e+yw50rjnZX+\nlJaBJSrjkvXTRRfglXj87xVkmPsh7NO/WLVJzl0o5lHNWBK/DTBPlgTI+2kN\nWwOVNDfme83pl9vTekSNHggF+0QA0ypIU0Wgi6Tihvp178R0Gh63u7eWt+7v\n2eZkx15hM3vMdWYAxe+OtDpYw/gKwALOVPo+u3g+iomJP3nqMgqJASs8uLo1\nFp3cyfQODSuEbxxvAkSUabsYemJ+7MqD50ZQBtFqGVAWiSKzQEPEhsXHGtZ6\nuruXPgj5HLKV8HL6zADxRd3G4+Wf3FkGqjjcfFRhoMCK/qy7xmFTz05SPLws\nm/HKjBOPFElbQJN6BGkwn6sm7S9tMVU/BMkUyGKq95T3bEXbqrbNVhznPN7v\n79i6IfVOeOrpFJEeA6Wlhya2LITNFj1jq2kBqtYdX2Mw9DKHeQ2pBbUxcE+V\ntd7pGWYH4WBKnFtKNU/yEGJe33z2PdUhTWCqN8jtCls4UjlDHcGbNS/lil7i\no0Ins/Ddr/gU5dqjaIvIYGilyparxdwvlUvCV4+2WmawnuGSIVzktGE4DTod\nL0lQlaoEM3wSp869vvr0N5zAUK471qbuxGHncl2viGE23GxJ2uNksb2tXFSE\nmuzkwl3uk8uMAheAwACso2rpgQT8xvJ/njgm35zPmuc8+VCFwyGxsdjBreFy\nA3S7\r\n=2TNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1YWMD563BfmkYMaypIsEj/2TjSegUTyR21hPpBSj9JAIhAKiOvmpjx5lsFVSY9m8aGZg56r5WGfoj9Q38dpHr/XUP"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.0_1590681611951_0.9791508805185012"},"_hasShrinkwrap":false},"2.0.1-p20200528161746.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200528161746.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200528161746.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-c1ZLOhGhpcuiT8tfEz+zDAJqLoBuXWNdVoUaz5BBAGm62aYi7QFv96u7sgfrm+KTDJ6/6NwXmy/dS7Xa/28u9Q==","shasum":"c3822933f48be1ff6c1503d755504c37a0b01530","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200528161746.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJez+Q4CRA9TVsSAnZWagAAwY0P/26yR6dCdfbA7rhUy/mK\n6a2+Aao1NpZT7eJYGYTsbCvFbO4bs4p+/IYRsSdjw3DndCQdIhIsjKSEXC4t\np5vQ+ao35Kxm2GutZdkJd7rNxZmdfrZmQMoQO39CAYe9LQk+FBHojO73KZ3e\n+hxahRlkKwYqYT65JQmn/TtFPevFsCJYTRgGoP3ot7xbZOAFFq6K08oAK2c0\nX21v1fIKhbeViv+c7PbUSb1/e8E8TbmGbaDz9Zabv9wyaeLj7RChRpRFklmf\ny3DPlJpdrypW+nridpif9ysKM5ihpTDgWhbfor8a7gqiueIpYD5tQN/AL+do\nDdW+B7mQ5TROPq0Wu4UM45JrJVNRoG4z6p+uJWk5jBHeNgTWcDVQ4IXk1wGE\nRDbJrLpblJyBHdAipLbcp04M1yA0kKDyRiSJdl06FeU8Fvn2xcJTRSRQpSpf\npU+8fb9tMQJSZk2xvVCobqeqKq5HbdqOvDKk9ZBk9a3TRQDkr2B4rzDJjP0D\n4gt93WsS2TpZY6V1ukqMD8GL5E6959DAZE/1A10jdgY9eQpyJXsQCtj9g8lm\n5S6cSAslIQvQzDlANQQxwMK2JHiK0+NsHuMqfeoEGccrAiu9QyqejoU49JxG\nm/cy3jKUqMIOu4Vq7uBzlRY482k8MF84wmhJFiZ7r4ng9Po8g1Lk2/IuzEWR\najAV\r\n=wwSQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLdgpuzFwCFRKlIFVo5KD81RQ++M2k5DU0LlB4+V2sbwIhALqqZKH0vRzqmXSAilyzmtgsGx6HVdZsAgDi4g59cRmv"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200528161746.0_1590682679360_0.16883078578908406"},"_hasShrinkwrap":false},"2.0.1-p20200529044220.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200529044220.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200529044220.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-taNCZauSlEFKSlEkVN14OkUY8a8LrEsdlyXP7FqW/AixztI/OqM55BLZPfjgOsFqsOkax1IssmnYUxJe6JBxNw==","shasum":"ba80c642c23736f8549bbf5287ad4fe89fbdeb8f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200529044220.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0JK7CRA9TVsSAnZWagAAU6kP/jGzRmORvM5z7d5yjYmR\nEpROdApkY8X2ZRlQo1ojl5k9YhVTw3c7gunbVYWYK1TIG18Mm2dlWebbaNpz\ng+sgZevsU7slzPWjNxNCzrTJmf1UOS1JhlIndyf2ROANeoSFFyhwlolgw+sv\n1rEDLjtfTvckkLZMyImm4b0NWDe5YY+ShtU074ZvBHRdCa8BgkRoeCirMAll\nQQ22OH0910f6+EFTV2xPCGuVFrPYcrSgy1Wo5ZmYWbx2t/NTkWhXttkOth01\nK1w8+7Vnd38hHlY9SBYQuXB2mOxJWXSn16O+glVtN6xYpSQ6oQj5rcwkUhXY\nRBlL4CIR5UdnHHGIonec7bZ0MHrXEhzbpWQsntuqX0BPwh+cXoEB2w+IbsBX\nrmqbk6/lm4OcipMsF0KFXxtKcGLsWhcmEogcjp/oKSbRRNm/rRzY3jxrR+nN\nWoq/RM4fdNt5bEuQODEnm/5vuz9MRQfWivWUQtn8BpA98JWDYXoaQ/r7tSCs\nYcF2xJ6osNkOk/Nqcgkmu9HjsqgJO8SqR2S9jIVWGLqjs0A9+Dd1BoSIeAYL\nKFNaahZD+LA7KxqG/H6LCwU06fuom4z6eG244Dunk+Z5UcEa/BB0e296TBp1\nyJTlvj5Z1tVMY1dDhJjHm/HtLYtZsjne2UgVNPMDoa4wNV7VxTrzjpRV4Ifw\nz3O0\r\n=sO4o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFVYzOlZlRMIZFroisyPLA3OUyValH6dh84SkECMe/4wIgagy25/57C7qJ0ZAy2j9zUXj83orEY3hS3CGHyTjCqmE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200529044220.0_1590727354700_0.24122595744580622"},"_hasShrinkwrap":false},"2.0.0-1":{"name":"@c4dt/dynacred","version":"2.0.0-1","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@c4dt/cothority":"^3.4.5","@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.0-1","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-kL/StuFnKKnN6GSRfWMPVyBz3WEE2Xr0yePS/anpeqtw2aV7hKv3r+HrV24Ri7W50DV9rIu5WpYJ+w8WE9aMMQ==","shasum":"b2093653b6c46ffa7864672096914a5b75d34b17","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.0-1.tgz","fileCount":143,"unpackedSize":930256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0ROvCRA9TVsSAnZWagAAhAsP/A+BTlAInaNkRv3dMAg+\nxDI5r8jY3qom783W2Z+f7Adv2UfpF/qW4k8PgQ28kZB29V7XRht5i+FqgQn2\njkpMeXUutNjJQ5H7txLi8yiw6YXbMECGKcgm1Re8Dcu73Ku70Ou4oWW/6X/2\nHCIiLuUvUA16BdPJPYEKpZL1QLAhwfhgD02A91FANWSyMDCQ8XvUkD1s+CSb\nN9Masd68MmJ47gCX5tK2n/eKq4DkZinz6fxsptLZRzJTanNhKbVYiUvo9sxr\nGh1oIsv209qCdOqXOKahjqkjGntBcqZk9sNah/CBIY302PQfWmPtVFi7LVqA\nhx3yV8m9i3yzpsDM1BEPwUDpplmbfxHV+SpgMpxjUIEeAykeiZeIePirZu/0\npRgR5eH3cFtLTSLEY2HW9SSMOdvisj9LyieK8iv0H7Sxvv7vsV1aZXncQT/S\nA6WBaKR4ewc6URMIaqmnwb6z9VzhBakgPRs1ctaUOXGeQIxzSEfmK7cGz6Zw\nfDvTT0+srDEeF1F0sO/PdsHvE0fOtky6du9E5DqA+uuRwtqOltl3sCcF6oFP\ndz3nQ/dX+r+BNK1w7G2n3a2FvyvWfymM9raslkTCX3DoYRyzJpOm/IKs4Jjx\n5ZjJNFrXouGYH20V0J0y1JH8NKVddjbLqP30dXxh0lr6SMvKlH2SG8Q6pXHZ\n5B+M\r\n=O9xY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNoMjw96b0WjnBS4fmSmITX8gcIzxy7m1gZXx6XmSy8AiB5KFi4db+p9Z/xvrxRYF7eRJ5T/w89RyW/ClwrG+2A/w=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.0-1_1590760365688_0.198997675537399"},"_hasShrinkwrap":false},"2.0.1-p20200531155008.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200531155008.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200531155008.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-YIXOqaM2+VRyIvBgD6Jdzktc0RuFq9tM/vZm3ZLHYQqSsq4+cPlg+CRHHFVtOjTC4pe8Rn/PH8Az2v+a0OJtBA==","shasum":"3b6d253594cb9efa404eed8a416ace1dd7b54fd9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200531155008.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe09I9CRA9TVsSAnZWagAA6lsP/iBfatShrdcdzbIzbmVe\n5BcTjj/5KqpTakLL86DHirlqr40IOa0dvxkLiOClwBqQdWbMrOzI7i+uZOzR\nADjNa4fP/nIKgtvzBh5znUjJ+AxKQ73O9Pj7NJ5xxfxBLQiyq4o0k5uE3Ag3\n7LvxDWHFjDDCZp0tq6nfc0ewkP90/RnLP/XsIPy8Pby+VTKbvDowSsdVMCFB\nMJd1a9QVxQm4Mpcf6eEIkpalZTqEjrc1mm5uvWXNZdr1CGeqfQsEiNqTNx24\npvm2ZdnktxBElCXstA9K8phuhkYMMvU4kuBeNh+ifuT9BouDLajG1+u5a85K\ngdFTtLcsIvJfhVeAaWJ3K/0sGJsPTe3lAJGPTiIc7BHKqr5/ved2Qfc2bpN9\nZeDziHxYu4mqvAaZTeZcsa04EH3pfR6Av3Xv2A6IyGCDPj7yyirv5JrPqtmx\nB4ccy17dBr/9Y3Nj1CDkCUI698ahchIaR27op+QbXtm+ZTAzfomLLvMnMSib\nGTlVIU9L+jurOKy9VR54+YijK/cyyjKBUxOg5uKoDBIZ06uhNQGWfAhGPKXL\nm9ip8UqGT7ZhBOL8LLqfanJSXYkrOKo73XEj3tj8J+Pn6IxvBBRhEQDxXvO/\n3ZliTPeg27SlI+zSBJR+uLtcirzzgIDFSSNxOQIDEbYGJpzuLLevPnzcRAFI\niy/7\r\n=jruz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBxLshTlDpEq2pWeRjjsu4AbiAWnUza++Ak4lrFVHEwvAiEAnbO9n4ZtCUWu+yK9Jg4b+adiRt1rI7pER0cKRp+V3DE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200531155008.0_1590940220966_0.007057760321144357"},"_hasShrinkwrap":false},"2.0.1-p20200601061154.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200601061154.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200601061154.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HZeyejCddO7A7okVcfbNWna0nNp0tRBztUF59ah5v4IWWTlfpWvaU5jfzZxof0QHyHx+AB9K2zWupsZmfPIEew==","shasum":"935f0e6b1546dcbab081b69c3f60b8cb8dbbe32b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200601061154.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1Jw3CRA9TVsSAnZWagAAiAcQAI/td89yopCchTFUGePa\nQzrPanA2ID59Vn8LP4NTpR8x/chsxqqFERaVX9OC9AyoTBXR+uN7Xh++0s4V\naXI/rAzsd52mbE7uK32nQWf9fRjid8JlZ6uRhLGzaNYJj3MKrZJJNS9oN43k\n/proQOiQAiNs2jmRzoPxoHXvIv4/cw8LwwJwjdw8UpjH65U1WA3CaVG8By7z\nqPZMBpKhb8+zAMDmmU+g0te/21vJqet6g9eay7jyEd5oGSF8ApkIFbNGu6Uy\nB3Jv41mjMuneqGsTiR+c46SLDy3cV46KPnBq04XvwI3PBsGpeYPVrquBnf9T\ncoOtFF+lESjVletyH5MlI9pljfoswCGPUh1u5REkeHwNyaWZ0/o7kLJG/CF3\nrloPktQTkwP+dSirH2zb6XqVHCA768no3gaU6xlOejsMEythPSmqBY5OKpLV\n0et6WrdrL8NnueVUqf97JTjBYRFU0bD9TVq1lssMCAQjKCnzwgYHztyt2SGp\nl4KTF5u2w/GU87kpkUoXF4USsAQffen2eKwS95Olnhz8CEJm3C26DuYFy7M1\nk32mvTOH5LLwPoWJoHxjazatsISTKIEu1w+eAfGgpoWmdzzl6QDuqOo7Jppi\no92pEz97rH7OrOWJQxnqEkOYz95AMO8/n+70OLs1FugcQ3NZrHkEmhx3twU6\nB8Aa\r\n=q+VQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCH3lNBnKkYQezGvgJl4q8bOIkUA95pyEZHWJtv/yqtgkCIQCTDR9dYSNMFZsJgzQBxtEr4LnVcM4dUH2bD6ThD8sBGA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200601061154.0_1590991927224_0.3763600507898843"},"_hasShrinkwrap":false},"2.0.1-p20200601091327.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200601091327.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200601091327.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-kkxtIJN0MnZaen7ynEb1zJoyxq8oCXODSs1sIFUu1TGeFwYW3gjFKY/ONq58MMarsW6+h0Cw0lcPdJyuoBg5KQ==","shasum":"134b30b997f244eb3ea8958f21a0b3c5e3eaa7b2","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200601091327.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1MbFCRA9TVsSAnZWagAAoXoP/2c6R/JGxiyMgQc8SVXL\n6/MO043efk7s7GNIGZswpNu2KQuZDBJlO6iuwAL0GClSIYPSWMFHEjfJoJpI\nX2goPr8hhgw7pU/mPBySepuGUHLE9bq2jWVot3VkHL1mhGoUUbu4nFWrH1l9\nfBlZg2K7Qfq0Nz90qUrD3zwy4WxKzwY0zfEUIZZaI2dHlCafkB29gD2C4saw\nb0HQinGS4izBV6BZ4TfhT21AsGiGC6Ys1Npnjb+YKm6EOhIwkf/WkSXFqCxh\n8wBIDzR5/bbyKVKI2hHTiqXZKOaldQ2pLjYi+iTcUuDaEhNf6+p3fNmSKCqA\nWRu5SaNW3MV6pDUy36lKHVlA2RuAmR0T3/S7nbtSW7VoSy33NcmXTc53AUZW\nmDsAztEuos1UeFDj/S1uzJSOeJbnf4ViUiT23rHge/2p+wfFyavIX7iS/xZ2\nCbdu88e+UUpzbrGrWraIDH6ef47nPXSDOp2wduRNxLBkriL5a4gOPQubAQeL\no4qkdyLiZ0eM54MfgtrIPjZWzcKr9BT9f3CItAM6aeoQJAn5arFmVt6kWph8\nfECSFAlbhlblv0LjKXDyPtIQG1GLgh5YpFqmMw6if+dZbKZ92VjIGI61PVL3\nUWpFNdfx9JaNGKVvrsN4E0WaXWg5eW02piSP7d3e1hL867CBWiLbYRzSnBHk\njjdT\r\n=aZsa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHSuul1QbymqrH9mr3rX+DFCk6Tf8tm0ocD8fX8UN104AiAdNVEwcn2gnEz8++5nBkESQT7Q6NZ4Y4s/mXHL40JE1Q=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200601091327.0_1591002821034_0.08492298833133027"},"_hasShrinkwrap":false},"2.0.1-p20200602053230.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200602053230.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200602053230.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-oMU85XikMbiwUBo7sB82whuWUGK6eMmthtteoP2/lltyPF6aOzAZbEJcO8S/EjzlUD8saqiwbzB5CEkquioq3g==","shasum":"4e4a0f7c9e4ee931fdcb2d30f4d01b4ead6681e9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200602053230.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1eR9CRA9TVsSAnZWagAARZsP/ivgcNCciqDhcbgy7gIY\nSYvFVl6RrzJS2HLAXgdC/nadSXlerW88FluvrNp4BZaV5HAfN9IOQkhU+2Uj\nOaaLC9X/GEAPbaKvY4uJZ/BF++qqXbLBpJwOjqhmIb+s5TJmqNxJ5fcoQOrY\npGYNymwLZ46J0EwtSgN6hFO6cdCbvy3UaM04zIm55NWnjr7dU0J4EO5oJh7E\nO9IkhRgaiUiSs0sRfVRkP+ulb1TCZnE+In2/2NXEhaxB4Bk/2DGj+xaVdp4u\nhiSiBgaZIHl609G9OHxyK7k3uVnCYhzfJnbJenIRCFc3ZcpVcdFQjeadl90u\n2z9A8doiQl1toU4Y4fUpPfAp99/C9fbVIibE5XJ7xcOXDWGvQggkhNcNKmKD\n1A6v1Drrpgc6jo6dc9/6mTO1drCvY0vZnZr43QLZpPswjxWhFFFy+gmAjjMO\n0eoOtGWvUckx2Hw9cppvTV0D9ew61kN6gGCTscocPRNHiCM4L3AMbcf16APX\nCYRupPMl3BTguFBedr2cRQoj2RXf9kaExN06Wdu3F6SAHygh21B9BhcYPMsu\n54xkQOZBamBjkVDiyjtLu1QC8fStwUZhBzIM4CD7OVHJZwVu1Z9VEDoSeD1M\nmzwDUfuPsHHwBU54k8f1L9FlgOyRLLhnT1v/TdezRlMgb2N4VJYROi3lIyhI\nfn0/\r\n=yK3a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYdvTvi3uFhCAIOJ7Q32Mv5c5WFfN9SpG3qda9G2dQ5QIhAOuResxl4ASkgwKexED3Zy7543eTEVsYM985o31QZa6J"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200602053230.0_1591075965469_0.47378431312754254"},"_hasShrinkwrap":false},"2.0.1-p20200602092428.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200602092428.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200602092428.0","_nodeVersion":"10.20.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-9rWOg/qeyejPBNrpCHGkwnJaaBfJ9DlkU+oOgoaW39FWM0ZNecsY7PjyMaQU384QRLQt6Q7Ph130x0yiC2vQGA==","shasum":"9f4b0495248d1aa2835e18f2b662d2b87dc026c8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200602092428.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1hraCRA9TVsSAnZWagAArOAP/jKUqHsLTPrJnmVZi5jj\nhTBcbFb2X2CZkzWrwCuoQaEMRUfe0ZJQ4hkrGmi/Ma/FgnmIg4rDByFlMiVm\n1J2E7iJDgkgFcFP/I40xLc+Mryw70YGQyksXnFKyf3idkRfEFQQRBVnDUIgl\nM9v1L8PqjN9hLBz0zzewlpOP6uAOf9y/nUse9206nr4jH+7qACVqSJWsZScC\nQesovOofful7aWi543Sk/HVrm24H2FnvCCZFkO05uS21cEfE5wVR8OePkqB/\ndKhvh6cV6wxNktApjKJlvrwolL8fDtTWquiGSNoJ3biSwS0IQcFvtHLmwpdQ\nY2yQ9X/wSYU6u6rJWfTGARGtdFfHAvBhvMANaeNqDLXBBXtAErTLI+iIOy8T\nUPHThMkUtWTH3L0S06FNdruuHLok8BzJcmWckIuy+Tr+7N+5hNvq5q0b1OxK\nZlNb6EZ3ShRCk8M8HlRp1/SLU4x2afEwYfa0uW++N2LV+zefFvy+59x8Pe0J\nxsB2GUuCe1mDJ9cUAA6Op6Xos6Cdowuv0rhwDYD8b6ECzGIOW5ujCdiKOK/O\n4zf5zN/w8g52KMz7ZlOG0hkYwtdEEQZ5icmOczB1eX7g2RxHavkoZzrpV4Mw\n2r31NPLUyy6QJCmq4cp1YXiMQI27e/MkQBgZd7xaAG+vyXZ6dagVYY6L3Rho\n3iod\r\n=OgmN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOfHGHMLCwwfdFiOYBWiU8qzH8yIMMyxEwZCt7zaIhnQIgWkTx7qxWDy8+o47vVDT0Y5g5hT4eRj1uL7kGux9XkL0="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200602092428.0_1591089881957_0.6581296912666528"},"_hasShrinkwrap":false},"2.0.1-p20200604092943.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200604092943.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200604092943.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-+NmeHznl2AuQjR5XtqaOYc+18tTnBdYYD8trT8q1GTQVhsuVd/mJRiYgVS2si3Nc56k6vXmhnMg5PgB0HWqD1A==","shasum":"d3f045a5cec690be8e6a18129821d9f3ea33d92b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200604092943.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2L8WCRA9TVsSAnZWagAAA48P/1M942+vKni+ASNItz7K\nAl5tL90DSMO5kqlTFEid+kpsqPw76sRegEOT/1YWgH0ky9goDUqk/ehND8tQ\nERD+kUIYQPT0nvJiex1HDjAqHf3dQGqqheKA8H1pSp9bgWrt7f1MlOwbBRoZ\nFMKa1Ii6lZFFpQ6/+QlkpKBpt2EJBtGFaAn+IwQDe5yNEMnZWlV8ZGgv+/RP\nehWnyC/nWvq8ZXJUgJT7yOkDrhKDiy14IPlCTjUIZXIYPzNihTBv9TPyrIXi\nCOOnU1UzS5fGrST+K98tBbUGLTVPCq03HHFmkNk2h8XUQ7q+Ft17lOqPmBRu\ndVsNn81FHy+iv4lHdRCKczSoRkoBYYnUp7V15Ss2VYTjjK9sATnYFbcqDAB0\nKEDs+xBUHUYxV1JD6l8zmcF1mnm1VefNAARj2HchWkKiPQqh4WZQfl5cQ1Gw\nCIpV4UHmXGc7gg5Dtq4Ye9SSjSt5WLDAL1aJp8NsAkXiZdH/u1Cmoc3S5Nvc\nEc09UXEKLmJPeHOlhkyDOqQuEYZVFOhJxSNJuLDDhvA0G328uz6LLT0cUyW0\nMkyVzhFeA1OZjwwbPH2EJgT0m82gsR/P8QE4ESmvavxllDq8E5LqMxBtHxsC\nRfccxbQsrOSfebMpJplHZCSmE0lhmdXIFtYgkUpRw+FEzBTxM/uYDR1f8T3j\nC7Ly\r\n=MD4R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZZ+znBaRcWe9/IqCtpSGjcz1AGhuMhOleRlcxYmibsAIgfW6P0Up2Dm5lT1pBerZBWOIfJb3zIJIQfuUTKgPL4fg="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200604092943.0_1591262997596_0.5738611963271258"},"_hasShrinkwrap":false},"2.0.1-p20200608053637.0":{"name":"@c4dt/dynacred","version":"2.0.1-p20200608053637.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.5-p2005.2210.1948.0","@dedis/kyber":"^3.4.3-p2005.2210.1945.0","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.1-p20200608053637.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bFV7LSWZkMBQoS0AXKcyoYoVpBTxVGHkY/0Dz60RnpnvvoZMMXTj9AjGajDyOfbfrwAM/xGwzRFow41QZWAf/Q==","shasum":"5811c5a253d00908112ba3dc3edf23f00e1bc68e","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.1-p20200608053637.0.tgz","fileCount":47,"unpackedSize":487109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3c5zCRA9TVsSAnZWagAA5n8P/2uiOtOx/J1dW3EYF/RO\nkZbS99JqFxNLtmjZ4TSwdwMJRjrR3QYfj12QsJJgUd+bu1TgGghJxfnleiEx\nRDKAW6oY+y01PwN0jCQWmfdITmn+aSsgYFkW/aBAvKXm0m4pGPx/UgN3aQNW\nuKdsWx/W6IIy2+7MReov+ren83K6Dzo2QgdT/3cfNdRtWG8ICIjM5/eeNIOy\ntgQ4DBbDFh0RGPjSdvIsSu/FMZwl366gp3qb4KaAf4580rwc/6t7nL7/yz2U\nwFRmKPiZxuhab79+vpCSM3rdxcGlmZzQzj5ukBTp4W3eAyhuEUPB7Z8BPCN5\nmMrr9IemE36CDaW9imADAK0xtwH7Y2wH3o2Um+0nHues5+3Z0wAy3i0Dwoqs\n4oDJJf1DhzL3wGeBcZb8mAKzD827zdYrkQ9LIA1XxVj2I06/f8oPdfFmh79+\n1FEXEebO5A34bsxxZItioH/aX+eUZXzxXwnJLqyhQc+4DNR+X+UTeX3qXWyQ\nSj4SqfviPu1f9LEESGGtZqu/pqZ6LsMuGnaF5759goVROAauClfRXqKom+B8\nzb+/qGa0eLUbFLr5pJWYSnER89oBbjEyW9UGfp+UEYSz8rBOLMsLBG/UepLO\nW/MSyHtQUVZ/A+ULuAWrHoyefHR8aprIJhqpHkqyvMqaHq8bHY0U55tD8pDo\nZhOG\r\n=qhSn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEXfu8GetedndvDL5j/viCD75C6Wd1GazRf5flMGglAvAiAPDFQR6Mpu+mOKEVm9H4YC07DxTUJjsWA9qwnZWLYFnQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.1-p20200608053637.0_1591594610960_0.2536856064883022"},"_hasShrinkwrap":false},"2.0.7-p20200608120401.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200608120401.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200608120401.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-fWw1NGbUKLUVMD97ITOAW2xwqDUAJMxAxfQ+U/2azfhff3O2HYKuk5pj8nXHrtiuov50CqMVnm2K5IO3FpXHwA==","shasum":"2b636514222539208f58004b0cf3b50db8d836df","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200608120401.0.tgz","fileCount":47,"unpackedSize":489272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3ik+CRA9TVsSAnZWagAAqI8P/20GThyh5q2COjrSyP8F\nwUIJaLLXUKNN6j7jv1GkFBT1zgbsH0XwhT4nQ91ilW/C7NofaU5AO00HCUTM\n/dqlwZ6K0hJydBi4MeXOdEuCHPkoULs0kihoicomygIAQcrvXdbvJ+AOXbTu\nJLREz1gPPcmBwlWwa5GibTG+clcgprWXlQT3QaHrtVwgsdZNopOCaIQGdxF6\ne54S5B5fqUxteyjNw0pkuktHjaCFyY1WObori5hGahzclvrzuI4t1l2pZf0y\nmkSAnhCcOARGOPsuJxQDu1RJ2SPfwXN5NOzwpyvFb7s3O0PEsejF2XvK43Z0\n7fDo8kabhqxAmhZ9V13FhNh1B/Dr5yWCaCe/Gg2hoLiQIt87WphyTq64Rczl\nGzA/G4r4IomsQXuJt5sBDe+m3VfCh58Fvn5ejRkW5znSXoEjGC8f8re+REvH\nDrjh4aH3+4u2BZLlXMZ6c0vyOs2RpQPjtrihdo8diMbPac5fk/roz6zwjIPT\nUDcMFF10suViXPaodHcD0aAYWbVtr+HWUYf+zglzd6fR5wXND9RkAN3E0VOT\nmKgM99amUb0WKOKptVNwLYRXofLGxCMlSc2ByqjAWwtV6TTMQeqTcqRlkEfV\nsIfD/bfbXOJSVTB/Bz8bIy0d+aMTm4tRaKkB84OUpkrCQ4rv45Jbsqw5MMD5\nX2Nl\r\n=9uBT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAcUHaaPRHuqr79+Yb3POludM11HRdxL88lwi5YSrs+wIhANuLAal8rDECJ/VKxZk3EclcRzyb5MWFSFJH6PHNr6cv"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200608120401.0_1591617853863_0.8890659847005622"},"_hasShrinkwrap":false},"2.0.7-p20200608122115.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200608122115.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200608122115.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tQakLJ+nBK4On1wjehFa80Z9I+upECNZ96F1Q9bxoiR3Cnsls6wuaGNYj9ZcR2eWIMUwDFhoe3PUXbaoLcqVLw==","shasum":"8a74f2670ce1f0c0f5e7716dabaa49c3485b0643","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200608122115.0.tgz","fileCount":47,"unpackedSize":489272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3i1HCRA9TVsSAnZWagAAH+UP/2WVXauLaAEKu7lIC99v\nEDsF/M2R621fFXabG6EmFxHt4/lUNrupycshoWVddmSvOzv9LUgNtCgoSYzE\nlZqfmXKAjBZ9DpYpWTuMKkJu85xt4JhqlgbjV1y5oXDTEuntXk/B04e7B3k6\nvq/8oMFx66stWAETw7VxxNN7M+ocU7o6dxRMJF+yRodcYT6V56CrfbcOtkN2\nJROnZrWjd73f5nMN0ZYmoKNbm4w/knoeEl1vtCYMpJYOYmj2TCNcCsxdkN0S\nCW02FhRGGR26hudUTjSPs+C73Bk8pilK60lNKiq1zKC/eqFo9pp/ATJo/EwN\nG6wZuFXdVKk5MwJ9zhAH8CwQzWY379PTJLvbFGKQCe74G+kp6TbTwcsdX+tU\nMsaIrVbJ0Y+t4BxByFAZr/W4j38F6/rnBhaoobflgI1JLHoIVOeyYyzaQoGl\n7J3lbdcazv5ilIJqMLOQl7T2kSMaXcIviigZoxeNUlc6wTZVYAF8HkdRw+K5\nVGA2FonheCk3mxxNoglBKZm3/HzEyNTWGkX227rkJTZjQG9WzmjVqVSolww0\nNSfxyiLAs3Wm4tITxl4pu4tALHTCuiwlwZo1xWdDoC2ectKpW8NYnY66Qf5I\n1xK68w/gLeAGsJsv8qCCZhp47BRuHQ/UK932mRv2HdwKpwls6brmWfSu7XIE\negxu\r\n=M+W/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9YL6qpTpQrQX0edlzRnH0wvtgLrsfqqztis/ofBMbNwIgY+w51P2xi/gGCfyvIIlLvIw/UA+l6UgoXIrNuB9tmz8="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200608122115.0_1591618887223_0.6776656396521874"},"_hasShrinkwrap":false},"2.0.6":{"name":"@c4dt/dynacred","version":"2.0.6","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.6","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-vfm3ygAfLY/+aLml2jCsYuW4KRQwow4nvVCcDaVUAb3vY19weARZJc7YV8IusxQbZXQlTEDSzXkZyIUn+iBZuw==","shasum":"37ce5ff343acaac4cce0f835409da47099e7414b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.6.tgz","fileCount":81,"unpackedSize":646503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3kLkCRA9TVsSAnZWagAAC8YP+gOa12fhks19PxV5tp63\nVws0FovcMY1OxKCFVi0Rx7jnO65zJrrM5FyZSI5A2pGl5sefE1eAf9tQEBqq\nJt+gTZqb1lIuOkujAjTOQAuZOsxHd6fBWlNwIU+vkZIINUZZprzrcp04O9Nu\n9qWCzvUqbSeyzWbtQmffY7vbyhufZB1PXgCxXc7kF2mP/jbl7wUQHM3LMDCi\nftBKWJaAGcTpScbDRRaBPdsN33LHt8mbyRCukhAVQYpwSNO9IdL/z9k7l6ih\n4Ftnd+cjKorO1eefzUjdYD2aEa4R3hmXGAMhOoCMcwRs83POC8JTsRUBjmIe\nw4BSPTuq9PwRSL8kudmdpAauQwSdIdH/WvLHJAIN1JUAwgLET9P3immh5nyo\no/RDgnUUXzcyPj2Cyl6S50mhwBQL1r2d87ec72cmKR4cqVupdv3DPy+8TQ9k\nNUzwLpxp8yrKsz2oE3qcwEDqfDSMZOCCosbA2KbD1HHNS0mssSf93bBAKPfn\nvt/1sW5NsnDIZotd2nTI6knlLf3VPIAXEzsxou2XbJKXDQnBVht1jhNNOy5K\nr8WsaU8+X2jBw5s9W66/MHy37pg8Rm1QSYXLFDjw4iMDL/xYXXbivX2aKtZb\n+cEvFr2+8HVuwHbG5HFPcAECZMJ5YJxeL3MVWPPFhVD0CeIi0Fcr6hlFNTu2\nHqz1\r\n=+UUW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHH1eDLLroHwnFKuqiFzeaX/JMX3m18NXffKBsPfYWWQAiEAtJK+RHh1P9lXwdVxrl1MHYqehMd0/hyO0UadEZx8JQc="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.6_1591624419680_0.35553698550723256"},"_hasShrinkwrap":false},"2.0.7-p20200608155902.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200608155902.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200608155902.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XY8LTGpm6KVA/J+75FIhvuFDmLFGFDG9LUvLZm+hX7x/E6TBbOKI6+0PmGFHrGxShfRIPs8JAOmR5DPPNmahMg==","shasum":"51f9e24503dae234ae864635b250c20ba9257ca7","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200608155902.0.tgz","fileCount":47,"unpackedSize":489272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3mBUCRA9TVsSAnZWagAAVzwP/1Z6zqFdEazFuNvMrnjW\nbuRb+bBIWDqIPVw+ZtTdiTm3iBb5bX99ZKUeKxUZI0G7t/EL/+KAcdCo619I\n5DeRcG5iyacZ/VaO8W64kbNa/L/1gy/Now6jtxuEOKEgG046X0YckXB2P3pf\nP0pzir10mbCloFhrtb8xdY0qSJurTeP+2zqrcUtME/eNUYcgTSHlYjUYxvUi\nznbSIdU0p/4nx4deiGL+wr3/EDg0JUG420E3HLtxtv3rwT38Y0RT2WC8t1vH\nigTYZdXrJpWt9igwmAEPdyiWb+Xi7wCLqjVhT0597XekQ+ILP0jT7Zfa3zOi\njbl+40BHAX1/EUjVVBLQc8Dqh73KP5CAqL0m7+x2tMPbywNMLGhrb7cFf6GE\nFuI81uFA1QjzwDO2uNO26DRgyskExWkKUc1Sb3WyMthE8GcefEnYJsD3U5t6\nNPbNDmNuiF5xvsIExZvxwSFZFlkrzbvzdoL/Tlu04kyPjzT/CapygAQNAfjr\nhKzg4Grp6USf23NwVoSoUQzfApBnSX2q1BW+8tMh0au6gxZxc0I+19lNvkMX\nxmLmrNdlnFA339DpX76nlp/OEZcAqDy2OHaq2u7a+MYLrQSeQ4OsDILYphNS\ngFDo3QYz4tEKrKce1LrUgvYmIURvRd3N0FyPjXNTsOa0vqfGU3o/U11sVhn1\nVrqM\r\n=K0Tz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDu4AH+qPE13GhlU0k5R+DaNKlDvHnj+5BhfMs9ZZgsHgIgbRqgzIlaSWeuw06/hdZ5lxI36/nyMPhyUkJ9foCeOpk="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200608155902.0_1591631955451_0.20407892264888972"},"_hasShrinkwrap":false},"2.0.7-p20200609091851.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200609091851.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200609091851.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qFTnskGUnsA6uixmmAf6fCxkUtM8IRF3S01mbsyp+KyQzttpIFCvSk49KLCqM2+AYbJNI51/1sKpMWzJbdQd7A==","shasum":"6f6b68c30bb884ecd25f27209e4adcf42a2d8aa7","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200609091851.0.tgz","fileCount":47,"unpackedSize":489272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe31QJCRA9TVsSAnZWagAAAa8QAJrXPI7WyXTqDfdMcR0O\nvdFQoC65fI3aYG/yj5zMNcyZk46qOxYgslKosilZPIuKql7EtSZq/UiJXTAH\nKcteMReBICd1t63t8/RUc0O8ydilMeTQxSkpsU6Mpicowic9Z6XNFpQragD7\nQZxZ4hTSeFYP4FMkJD6Y/of+xONtw0l39vCKL2f2rD9w3Y8bHqQpxk0LApgT\nlg4R7jjbGfyd0Xn3B3LUBUFTmghNSkV1sP5OJd/w1OcdiQrjtbqmfdkZteSF\nl4huCPzHKc29XiZ5AgCpPA+gB7IvgZuOPvXPkPP6xvlcZn3W2wIuW72WQ1Xw\nUTQkJm/EwQj862ccL7+krIPrHioJ1ayfhV9wtUmI/V5RMSkrYmrOj22kxZs0\nZ+UJPpT9BTcN+fDI/nLQUjnWIy20HSEkMfbKHJXiV/HlUioKhd6DPxqGvlIl\n8AUdZHO0eLvbz5HEft4doKKhETRAPjfDa2t2yAWHjtfF5vnbfD76GbotxSCI\ncXQA5OUy02VkgDbYt6IYsu8ro60D7CQw9nbSMwdCdrvLfBHJmxIc+bBLdHpz\nuLaYyNUmmgGynfW5fGRvsDygjiU1fFImUTAF+vHfjk06/1sg2i+d/JlxAMSt\n20OPGa2TmoqRZzCvVrVCllI9HSCOCmnQQsAPJD9eXqrl9+OkkZlmwucywj+M\nk59B\r\n=g0eX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEgZVNpFJlSCyaxMkHK+JdvDaSNnnccKie341lQvftTWAiEAtSfLhcN1WoFzMh40XssOya7Y7HKjXUIFODB5IeK+vkw="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200609091851.0_1591694344841_0.5169549489236043"},"_hasShrinkwrap":false},"2.0.7-p20200609101227.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200609101227.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200609101227.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-tIpXGE2keflhwTDd0unoQoe09Ly725LuGnZ8FWnLjfZISjP6HTgWlHDy/gr0o9ZWT+99uuXPK1wHDqcx/kPA+A==","shasum":"ef895866692ee2349303a3527ba261c86f9c32bf","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200609101227.0.tgz","fileCount":47,"unpackedSize":489180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe32CZCRA9TVsSAnZWagAArkQP/2lL2ULj3IJBHUBtckb7\nHDfygds1NPkbpml4VWiQHEiFkMuPygolfJ9z1npgtGmFPYnXA6h0kGmuBi1A\n5mleG2NUAZuTMcPy4RKSmyb76gBUvHEckAymg6wui1FOVA+Q+sCRXXJSxkHc\n4+iKnC2WQUjEolMoxnNlArX8FGGLTBodIOIh/JNzQYmh6Iv4X833WGQARJkg\n6ZaWgaAhcWFA8RdHLFrNo1LkLXpAtBEgId8s9Zxo+1rgeCB3lg7HBs8z3pCA\niUin3gg+zY+af/yyhs7fcfX/b9xXb9NixnbQTyd22gLNChOVvXEm8qcm6kka\ndcGzn3b4BDLicCGZl8gQsGFHTTjOuTeA2pcf/g8hbrEr5TDqNTxTsT7kOE8d\nwHDx/TZQDRcvxAeKbWNZk/Vt74hXREPsP95HtNhb2M9GBqKzw5H7j7CagXmA\nx4oo54xQV3IAHEuEXaB6YkkmDUDkKoxQUrqaxB9cnjols5TlWQXz1GNUkwjb\n0aTjEqrdJFMRhJi/7jtXCgUURfteooYC+0gqiRdadEvkO1lgjU8JPkJdexFj\nS8/q6qBDYo7CTpxM+CjYhhvOu/1RKV+aiSYuoxAdVb28pSFSWNjrSXQL6P1N\nf8IQCWSnxXe0ZSl3fiY/UsH5bxrxtB8MOVslNortN4aH3Q/2lO/YJHxnavHI\nPwCL\r\n=WEIu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE5IavOtVviqcKAzJIHxR6BP+g0r6AMPpfD3g12Izdo9AiBzzMbt6wxJlcsOYVcxpGGUa9Yava03XOVkdjzju8up1A=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200609101227.0_1591697560863_0.8225710933920931"},"_hasShrinkwrap":false},"2.0.7-p20200609112050.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200609112050.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200609112050.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-uZCy/2pAt4LpEaUOZF7DRso7wAeE/rpZCy9AX1yheEnQhhxxuqnhcVXG4HmKAxeJ2CdKHWrRapxmLsaFfB1aLQ==","shasum":"fb9207d5331b0a12a9f7d292bbb9300bc6b3f59c","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200609112050.0.tgz","fileCount":47,"unpackedSize":489180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe33CgCRA9TVsSAnZWagAAMKQQAJd++LMnyMnKf+1yf+Nl\nZGcImvFMIHfuRqPtQzVMuoaqj7SwekX/dqyf5AE/M0ToLaLjacZhQAx5xhSe\nKAPx8n+XsSSyCF0vddhsW7vbzc6orC94IjKm76T8b/dYe2mXhnti0DPCYSN8\nRIybjnEtvEjPiTVhaiRbnsdbo3DwuIbG3i3ojNeMZaoqoi1O1rCZl6nMLhJJ\nX8w0yjFyDwvHXpkayrWW/DXWGDyRr0tcnDCbKFYqa6So3zfg2SvQ0M3xgZGN\nOf3yNT78fZsQzY+WVUQAOs+yZ1V1v/kH7sW0qzMjCP+nCS35MRl67FtKl36F\ncDsn6/EkyrLIeCOEGHpQvd7+QHi1Nmn6jh4+lcFV/TLfJXRNRyDTp/xt3Lr6\nDYXmuirpjVCvU9Bj8nDV5BfxVHsuK6qAy258dtLGJgrCWF8k1oWMwheeW/PC\nLD0STlC9vhC84pcaDn7qzoxYjaTS+8OSAcldYSaDe1w5jxoaNWEgPBaPpkXz\nRw2iTi9yUYTyON+oY4DXQ5k22qUTuUYukjsnbYCbqzOMGgOWmGqOztx5Lnha\n67uLVTCNy50C9abLAaGPjQPSH28u/A4UQpvo7GPBiXMyyT9UROzkT79YguMi\nIELKWoyYvhgQX21KSm4bfHLzIOWjmul63VLcMUrs+ytAQW9m0sXyS/yd6o1X\nDIXg\r\n=FHT4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGewoLQG2iI2pr/HByRornIt7sWExBRbiRz9N9qGzelSAiAUGmguVsC/wrCd5aKL9Qr021GEnU3UNI63nG9NIk2qBw=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200609112050.0_1591701663759_0.48662784863524156"},"_hasShrinkwrap":false},"2.0.7-p20200609143644.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200609143644.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.6","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200609143644.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-odsXXmaMbK/bG2j2vvZU/paPQcEH5xKtR9iLnmmC4A7tD7geHZQD9tS5fS5BU2YNdYYphMNhexMoS+mAR73Xog==","shasum":"fc74dfe981442b2695519a63c16259d1adb7f930","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200609143644.0.tgz","fileCount":47,"unpackedSize":489238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe356JCRA9TVsSAnZWagAAoUoP/1sm3RX+fQjUA+Y0Flqu\n4+YzTD6YKkiwfmF0v7PyJ1eA1+d4ZsEI8JKgBwUuola1onxq/yX/C0TTaEHW\n8dKW9mxqh6IwDYi0/lavZCQxcsKYqxqFfAl1qPTRt1Xi16UXQ7164M1IPzJC\nBp3a9nfRbaQh0Ar5FIlNv3ySlX6VSUCVQoMix4vgembodPRHz7CTX5Smk61X\nheP4TFuCjgaMlcGStsntA/0BA6eTHvJCHP1DEs0PavNpaLEtKxswxqYogaok\nZqdwUXa6u4C2YIKgTOEWO60P2Ix974KZ2AQnOwTMuBdGZ8h8UEqdpSQppUSL\nNOrmLBHk/UBf0kt36BK9Do54bs6ECFR8TrwOpeIXwr61MnkdFHyI0wPzAfaP\nnrFa/6feiS6Nun3dNxqU0WnZ49QLPwCaNz0ocxkd8enczYDrjvg2tPXCntza\n0U3MmyPMZMd9gNFm4RqBWtDQ4RgA9Ygn+vAMpnqkuWaf7jWtbNw6IMD0KN65\nPgNvR5G+Rt/hk937aBD0HtQaGwRhAIxK+m0oRevwsAATAf+2vb6l7NPp7+rl\new4imgp0dXxzHDQdmvCBEjGVVnpurhQEX4Yo9GepR+oBvnGQHQqrO2vwGzRF\nE7Yd8P/JqbzqhY3+AM9hG/v8wk0ZcjNnioDh53e5pa7ILZdV0WGguYpMqy2C\nv4D/\r\n=h+KJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSBfv/a9z1ZEuNYXWO9uHVya32XqfiXppHLv8QysO9EAiEA6yDEaaPq0f8KkbZpuvEnbFkuujfcwQIzX7rnR8WJ9iM="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200609143644.0_1591713417094_0.9984339299698057"},"_hasShrinkwrap":false},"2.0.7-p20200615082048.0":{"name":"@c4dt/dynacred","version":"2.0.7-p20200615082048.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7-p20200615082048.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-wz7YeqoUP6Rl1iPr/7j1PgjsBrMGLaa1dWlXAYhdEl2Ic5YTy43EOg5WcyCvPUVIZKOiWGNzjvDDPV8Bnwgrhw==","shasum":"36bec1b613d720f7ea9931644e52ecfc4fb9c99a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7-p20200615082048.0.tgz","fileCount":47,"unpackedSize":489238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5y9tCRA9TVsSAnZWagAARU0P/j3031JAkSW5hPY5WX3U\nYHs3MlVfVDY0OlCquRa5NjPvwE9QS4ruu04NASkS+tzMFX76q2ZIrawF3BG8\n++w2EP+TVf6akAaznibRVASXVOq3twdkqARSmkgU4IZ2lxrBazK1h6VsHpco\nPTyq4zURDeVNVo4vLgkQEThVnuaK6O1vX05zFbL4xBWcRPpTNO0GKX3Yf2cK\nXoRX5u2NPWcowSdSEiBz/NqEN54ZDYG2AtiCgOb3DW5A593bztz1p9iu3pKp\nbCyJB8Oof/50n2KQw7RNqBYkRv+DJB4NRpgPfQ0DYKP+JaqfmV1/i+PF0Nge\n+jzk5BQILhzKlepXShFVMZDIKRoo32F3BpBR/GeV/NNOH6QVb54D+nTQaxqV\nfQBfC+5tl9kBJn0wG0Jw2T3hFNr/NxAcVGscqfb3wV7MJ2ZCkxkFkPYbwQdx\nYMgwi8vjKn7lqjX0+ovJYXaLJb3ELYt3Ay01fh/a/bK3dx43eH2DIRAUcba9\nU+y/yd5Il9+rCSRjYUCI6LGvNB9CRHi1K+CUvdnhQuxAvJIR82C3zsA6vHNh\neioA7N0frM4dGv1uO6+O3XoxmLROOMrrEsACNy46XMlRYAxWbTCLok7fRa3v\n2i9HEGRgg7onjPeBnHsr0OHGa+2YnT/pGZ5wOL7x0aqz94pVT9drczm8SHPQ\nFe+L\r\n=U2yJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEkoGZEZTTKyUZVaVnSBvaiN1ocSfxXFHiPN17aoyjehAiEAsJgYikTrpUIvrIEVhOX27UACV2Aje72v6lVc/MCaLn4="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7-p20200615082048.0_1592209261107_0.22307233305265717"},"_hasShrinkwrap":false},"2.0.7":{"name":"@c4dt/dynacred","version":"2.0.7","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.7","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SUCF3CCYboNFZj23W7dUdwP1JgkptSYxGzpoWj3nCor/vwuFFLeTC5BvP7mGmwgxhBVD9XIyO3y4GHlSDWjX+g==","shasum":"bb352b140c71ba49ea81e3acbed6c505392aabb2","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.7.tgz","fileCount":249,"unpackedSize":1524876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe52NhCRA9TVsSAnZWagAAO7QP/2kXX5oDKOzhAJogymB+\n+YOkPqbobsm40Zr+IShfz0FNxeQYLb8vugk/+MM+AE/9Cquhm9+/m3H+XTBd\nVeoaIl0oG0GqAnZL2GkSL3v7KQZCF76dvpQyrPR0KN5wyIxz/PZtGK29zRQK\nJmLRrI8H9rEBrAlG8Wt14zyEx6XGbidQrGrZSGbcixlTrAmGjlMtcMwisR7n\nJVQRf1mpcl2XHuFmjHbbHKuYGy4aCT2SOAmylBudZY23UmmunACsTuRC4w79\nsKSPhV1O1u/nz5fEGRiBp0UJDc90Ptk+sfc0u6uRt8+V6dq8LE6H14W9vsbn\nNPPfme3fUyQLcxwV+4+H0KwIpohqGG7kh8nmKu4q/htdF9oAB9MxqwbZSup+\nEuKSLvnYeODiSodq8eCQLOLUe/h9IT3sln8voNi+F4WZ9ZQ/Mof++JU+Tlxv\nRVLhL3QqKrrTWxi6eKlxCsZXeJHJmpYEUNbIuqBUCKQtA8KJgcOPqE/t9X16\n5S53ocGM9fvB2J3vVqDfmA3fO0zwLTyup1YMxlv3hoa4+tUbiqW6TFYBPkYT\nETQ1ZX1WvHSo6oScB1wKMGOrk4F3XNlHB+cSMUiN0RndKnadl92Qmh0uNrHu\nEGsqFDIjKB5abUzTesKine0oF5rSgLaDx5Mvj/N7LUWYI7sBRDbgUL3tnaXE\nh/5V\r\n=FnVb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICowGNicFMfYmjqkusZi8l5IfvewTvBXmXUP6C9aH37sAiEAoObm9yqhroHplJ0NSEjftNXEtofLG7Bvy027YmF1vo4="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.7_1592222561162_0.7259685988092586"},"_hasShrinkwrap":false},"2.0.8":{"name":"@c4dt/dynacred","version":"2.0.8","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.8","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-UIcm60Ji4/WxlpMvt3iAHSFA/wYLFDNjlkgiLq9BF6hkk5t3ZO/ySVwKlE6MvTSnfd6E2M1Q34NkLTgcTRb4TQ==","shasum":"e3daf5068c5ca85ede549500bf148c5a3bb7ad65","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.8.tgz","fileCount":81,"unpackedSize":647481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe52k2CRA9TVsSAnZWagAARmsP/j3rXsYXkdvte2aWyMJt\naswIAYtgunF2VxickDYCNfUu6v4ysGbMfLhDG2QoRVNkzpZWWtWKUP/zFqwp\ngAwD0wzeIsJSg60NhtW+vcKX7YGl42fMszN+Y5gUMuQ1Ollxm/2DXifHRRyh\nh2AhomHSIMbTEMBKI6D9asnYEKKWe8oMhF9irqCFBcvYrqD5akAlkVy9tHce\nXHnox5GEOdxbcdBjDNmYVs3E2KGfgT7p2aQTdEz5VY0Jm57P86M5AZShgrYe\noFDVlV4mYi515iPAjyrsF4sThcqCPPnNx2mTole78WHg81xHGfyqa2ltj/8B\ncVpUO1KmOYZsz5MfhlrzomEHPZ9T9WJrDldvvoOVJvqnceIpxfitPG1TPfYS\nRVbTpl6/iATeeffGQeVP0ud0yJ4AiLORWAwP6EAcgN6ruDL3CQG6RxOgVpPa\nFZxWDsx+Lb6Pi8fwej2GndZfTjaoFPJjyVq1M8r0sKLmSb+/50N2ph6y1YO6\nj3J6QtXukJllQYdcN0P6z/6h3OdOdx2JCjMpfhI1xyn4nlHCc0e5DmHgdD1E\nzkYIouo0BdpAoBR3BbkYoFZraBBfPFioCbr3byXfxAWKoDofDXfzC6+hHy9Y\nj7ZWMYnt+Z1AEiAe2X47ddRdQn7+Yy9ChmQtUPUoK5PP0CpcnuWPIE19dZK9\n3Twu\r\n=NDBo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9xgZGXsWXdl/KPMxBosAtzd0wyAoXwCqV9ZlkEOq8QgIhANY9Miy5CBtv0H5zObVrn5+C7++hvVSm3TWgr4Lx/ODf"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.8_1592224054207_0.3991059317847572"},"_hasShrinkwrap":false},"2.0.9-p20200615123330.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200615123330.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200615123330.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TNcUCv9OpvtcorHwWYifAZkaaMFygn1+kK9ONyJZ1tUP7JwRryNGQqNPo6PRTaER20Da0RFuMcSISqpe3STG5g==","shasum":"e2123ac1b24833889e19998bca37f9733d4be5c8","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200615123330.0.tgz","fileCount":47,"unpackedSize":489862,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe52qoCRA9TVsSAnZWagAAEykP/1zmv1EYL4KOKuJ2HGDX\nmclbua3eHjAgnOJRE4KgfrwAKlGCorUPMqYuw4nu43mIEzDo5ziz2pM3HR9x\nfUtPXzy8irT6/PyYzQESUYQoDfN75v29Q99TE5/feNRMRN9VF7ov11UKF8xE\nh1+4QgAx8SVL0/gzUJRjGEmwa8ngZHXSvHclZaV0KWxbw1djpmm3EADoXz9k\n1L2B/E5NT+kBuIRZHPJtOqT1GRBZnHtn9xRSQRTY/KBq7fEBQHDpmt5hChyY\nUYrewssj1TeFHR6uBoiqniYbanE7nUT5O3idEHDAT8vEsqnNOULOGie2bvd0\n/wujrIoDr7f3UK1Jx9SLB+0k1OEyILJBbIFQL8QT8Lz/wfC8n2e6UXpfhQ3x\nkHjFuP3BlKtVZ6e4BBHZ9hcb29LoQIIAmCfRdwSetMhUXVOTzFeXeVmd7YTN\nzCKD7sVXEP10v0r2MAi3ZLRe+ao3B9oxQguA7FH4R5nxrqgmFqxM98dNUV03\nMvz/z0vmaZCZkXSUHc/rRQXexxYMqzrP9vwRjahmtBCsuttSBnaT4kDbmQyi\nzURAmW8DyBvL0j3P5YC38RaBWnNYSfe/SYZlV2w1RzuHw2OdiH01GZzS/AGU\nPNZlxsvjawzSxmFn557qNARrrSr2A7rI/5QoSUMLL+aw2V4ri0s15ccgzCKy\nGJTO\r\n=QGgf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICAiEU0yXdRI0TkRZ7h9M+SagZgt3IbYBg5Psq5vsPkQAiEA90decgl29pjS5lTnowoWbUIu5erY1fJHlnzcPLUl4JA="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200615123330.0_1592224424402_0.14588917450171013"},"_hasShrinkwrap":false},"2.0.9-p20200619133521.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200619133521.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200619133521.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-3rI+Idc2pf1psQDnTRTR9aDk/eiAEy6ZZE1qUCZxKDCVeLIGXIYCN5wLpzmFfVxX66/8l7uN9GJh7aRX7nLRCQ==","shasum":"16ce729ab89922f68998be2ac2bd2e0159a0aa45","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200619133521.0.tgz","fileCount":47,"unpackedSize":490187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7L8nCRA9TVsSAnZWagAA+HMQAItgjI+nscc5zsZ7Zx0E\nJiMWvNAyw2zOMCyMEeCs5AuxzXLFZZDn8fzviV34j45BoKF6FO+24iLwNCYl\nNUqQQ9fHFjqgnsccO9kWgvLUD2bPLlsNVw0y3ACB6mshbp5obFuLJJqoNk6R\nFIZqoZcjEuRKgfC0iZQn3BqwGyW4Bp3bmEoj0rblKbh5V/reSCl+nQR5vd2k\n1OA4FT8UPzlWWkkATjJ8s2hyInF0nycaOImC7tFHuPWwC9aHZD5mLsEw7/fy\nfyoYDiBsRNcNsCtcMByqFm6JfPatHxMjc5bFBuNvlkq43NJ3fbdamWMMShBn\nRNPwVDKxcJ84HLl2QFxzIzilqly2hADdD0WVigA6JM4Y2MBuZKpFTUCdzZ0E\nfJ7w5H0AJqColG6O1EZ4Wu5VkOUdsohyj737iIrD/giJlwLMUc5FPG2F6F8L\nlo5yM/o/0hu7rtWE+qHndWzy8QEGKW9nMYCmIW5dxvj8SfWoI+pE2TSfWuE+\nyofLMOjvBdIZb/S+/RNdfry51yv92OTyLN3/1WzgSL2JcTZOWVeHNTVA+eZF\nzgakPuOcUirhH/wZqf0qHVgNRdE3ysSOfWM6rCykgDo4+iMnQEMNnaTRuQBI\n+gQ8eOVWjslI+wdeRcwYYzjv00KHgsaEysG+d05UEvtLLaB52+rVj9SjRJa4\nhESh\r\n=730v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAJJ2JAqg9SHEdqX0yds7D7W3y+ZE8BLuIWzWJzMqI/9AiEA11hflDtyLpieyTlUxALMpe2t3iqutfTg2DgyAR8SIXE="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200619133521.0_1592573735158_0.4039813100762153"},"_hasShrinkwrap":false},"2.0.9-p20200630082123.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200630082123.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200630082123.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-nnkLqKL73eThqzOpJ5ubXvPXxAqRHGFUlu0tWBZjaPlxdcyKhjeQvA0nYD880Pf7JHC06vhooS9ikwwl+Trwcg==","shasum":"fbbc511e9688c6f7b02ad3d69b193c7bc5248647","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200630082123.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+vYRCRA9TVsSAnZWagAAlVAP/2cT+uKnCheXCZ/fTw/6\nToTcvNwAIJK601EpnRExg/g8AezefF1wx5t3i7tM8AyZEePJC2ZxXXYOImeS\naV4B1WW1k9A/w+VfvPvOTR/IfTBT9FmR7b7ukgQ3vp1RgjKJoZNPoT8g+eJp\njy1ATjjm8Fa7r1nW+iaNNC1ctQ58M8tuAUbTsYAlvfXTGFfyCFymVJvUOOWD\n4ivAFIJ56vk3tWhOkV8uVyM+vtSDM4Oi2C+8wxCtai1jVw38V0UCy9Z36Qx9\nYkRc91TgVwsLq7azNMeLktlVkOe8Isikki32RHEdDTye2mmhWdPfaQWStOij\nLHfkGI0hvGMioGKwjB/9+uPvbASE6FHC/5qcNZX4KzTHQEhwbexfJUyrIxFB\n35wI2F4AMqNingSIghgjZDJ+UOsBaEke7AFnoevyVCsRMs/P3nECMm7m7x7P\ngEXrs5jJUIywDq3/vWxsVpNyQLhTZGmYGNkJIiiTP80ZUtJ6tGmSwsHGfJ+4\n4RIdY5SquIvh46QvCyfqSrPFG9teEHug9GTnRbHbFEw9AVSIkTcBiENbZtxa\nDpuuXV9ZWSZAV1qX4qF6MScGm2RQnRHJdzQ3/N/zYdIkTMpU6Ozz7tlePiJU\nFLYlHuVqMKCtHLNQVbMuCsLKjtarLtgwCOikjGlEjlChrTzB0753cuzzUtJ2\nlpHY\r\n=SJ3g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIExSj/sxRZ7fDZmkGp5zZAeK8Zw1+rdAqCn9h+yNxUwaAiAebNdjUy9Zn3JRYOpzig2Jm7juFEynKshvUpoizbnegA=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200630082123.0_1593505296424_0.33396740017909465"},"_hasShrinkwrap":false},"2.0.9-p20200720062539.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200720062539.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200720062539.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-x1lAie/Lq/uiDqZ65DSMtjn6491uCp0FRw6cBUZPtYUs1Qcu3u339GaOC90q+e4VdhwpIVnDCe/69Vu8/Prlzw==","shasum":"c8363cc8b9233f10c49d2c843d8c7652b3e74770","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200720062539.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFTjwCRA9TVsSAnZWagAA4L0P/AmWvtovK2VIsfeHYfRi\nKJ7OZs1Yh5MAjQYqjNGqspbpIeOkaJlfw3Bii58ecX1k+M7MkUZRl3pnLulG\nqFUrn3BW3vg1kuZzyyWIpksxtJFg8ZyZ0OOQssKWAu5Ce18pthwNFrynEtV7\n6+rIbqes+x+31nMNOIp5eSNBWxHHOtJAX8AaxudUqTwRHPOtofwDP4WURESC\nNmxEK73i3DYuRCr34a6v8uunpPdFUUBMMyQDLvTc7lgNrKrg9N/l0KVypws+\nHayoayL08x4hMCRT73cH2lVSTIBfcz6ZmGLQXJUU0m4BpFSe/GBdhQUoZb98\n/lW+fnvn8LRlqm4HN+pAK3m8wmIJDgxW/+2aGtYWNHd4KWLSb3gEkpIA0mKI\nEnaWm2JBf9B5371SR/QuYL7y8ymBYVUs0VW2EZAnjGR4A0MiauChiM30U55Y\nAMLxFWbrSGggsSULm+cZ0lSD3o29Goy4KjSWinDknOcnAKcuebco67XoFmbn\n2cMZam156ZtN50Kkfs71eiAh86Es2srjoexQqZai/YwjaEXvyS22TERJ1kxz\nmdw+9TnmFCyUvekYjCRBOGdKzCg3vx5EHCVPwvkKrNH4LfYU6LfLPG49iYz9\nzrPQfVy1I6dJGYWvJPHbbjKpTLiOTX9zXop1JolC/NcdqJ6lVPhrEIaZoPEn\n8VPo\r\n=a5Ta\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZKaqCCIhrwYR+2kruusGEUi6Bivv7mBSWizvGA/U7QAiEAqGdIFW4471MRh8HGAx5kzA64af9RMUHyJys3xEU88Qw="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200720062539.0_1595226351974_0.30146060846835376"},"_hasShrinkwrap":false},"2.0.9-p20200731071926.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200731071926.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200731071926.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Cfg1atonNMaY3e0Z/fHTkMdJRhm0z2fkJjgvaRcAFuI7k1TmIcT0yASyMOLDrlABwYNE9xUbXCvw3RcIG7Vcjg==","shasum":"ba12ae76f5406805d77fc70d3a98a59711fa0bca","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200731071926.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI8YMCRA9TVsSAnZWagAAC3oQAJlwd77Z7+y+VghLutqK\ndlwcIAWiImUaKxq+84e1Lqn57A+VK35q25OLk/1QNSTHzc0ce61gCYRMFEgv\nqkwT+5gGJMLyd9vtCuxI8j1pduVp/qEdhc86PNMk4jpdT4CLNQOWvhWQymzC\n8sgTJx0KAgEA16VLSt1RsyV7ZM9/audW0QogzL8bZAkNmoxc5WJI7befEjw4\nx5dbuJFMtvcyqFOC5SPDAUfdb5TW5XsdIfAHp+MmJCBlDnutBV9EFlHnHG7Z\neGebcklnbGkl1ZrPI/A1RJxxzjdL9Hs340cQfvxU7RkOJosBimX/SZxyPxJH\ncQP7vvhrjDVMV83wNnE1nDGVQpzQp96EBjzOB4Wo3hpVXHAdrLpcMiIC9PEn\nUon8fTLoLtT6Gd6uJ9oW11YcyrhnmWrNAAk9kR22lLPsYBRfOTLK8mFy0fq2\n0LZTQEdf/Vx327hKeVdSPJpLfbgO8lejxCnC261PPuciW5halSxBFgRxWdCY\nYZYo2aq1dY9VDGFmFOj1++k+Bt9mZPKsvgrTTBisvJUNwypWUtYmbMUG23Ul\nxdTgfSigopaQeYG8Rr+TmsoquFEOizznyt0nFAU3FTdBxFUMijsSMW/QLWCm\nLDPAl5RYSx1V950bFrPjZwYIL78tgWhmYrDmNhOcfnP3tyY5Dz8JMaxcfa+4\nyA75\r\n=O/21\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDW9luJeWc1GU0tu4Ub2yYQWuBqv0coMmeDMJzJjHWcQAiEA7oSbwSAhRSxsVgyVXXnjFNqJGxCGMRcGZCEXaRfV+wc="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200731071926.0_1596179979629_0.7360064888151387"},"_hasShrinkwrap":false},"2.0.9-p20200731083511.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200731083511.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200731083511.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L+AvM/vIQuAVgL8FrQ9lXmELHfCSdD9e1tt2+Lc+bCz0ztYSihBC81PTcGpPkx7U5jkcvWm2zCRxIrF5mWj3Xw==","shasum":"b50fd68b68945d0c694471dc5aed1fcc008939e9","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200731083511.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfI9fPCRA9TVsSAnZWagAAQfUQAI5QyQx03D6oNBJigsoq\nLx0AJO190LGcMmjdPRjhSGg0FXWL6IO0RtZYHUnsTa8StPZZP7/DYpy29X2R\nZ25XGqaJaFez4K9lfh6VFA2bxuOpl/pBq/5lcTs62r5044fd8Z03stnpN3Df\nM9WInHplohqqFRiBnnH8/T2p27wVFpnSYCqeoPyS5pbJDHuswNZfY56BqLrL\nyA4S1HpHy0fP41ydhPdgKYwMS2E8hnyYhAeDAeSBJnE0C6AB7auhDuKWFCQN\nzxWUdPUKihIMUYaUpcOVdSc6J95G4aL6Qn1mPMNmSi1gyP6Vw+doixiSMHuy\nNbY8MTRlOFgVlJgg6sITxQdgfS9cE2qPiMds6O+i4fMJX3dQEycIyEfPKCeB\n9nRzqMpuctZxT/kNrYQjPRBExkrn+/Qdc8iUAcrUeZXo5x8j4BRq6PCjKM5l\niT0mT+w+sKpnihLr9AAoenahNlzkei9yCQKu+l9Ye/JX8YsuptW0nWo9xUUs\nU16xV50WHkQwh8sbFB/zk/kOEjzRzI/itcrvpVL39hYPbf6RRbXBXselyw65\nbitwziv+YGCWl8qG2OgUEQpV3epI2iwfR/Sk/5w9isVqd2gdbLlm6RttH2P3\niYYKmd8Rrm0mv3a5C4gqFCnbYITVOpkvUqmKy+V1usuQcNL0rWYGRfniacSn\nAlEd\r\n=ZI29\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQuCdtOdzZm/anyDTnf3t256gA3L9K6Keg+pAsRfYpSgIhAN2dvAW7cQauPniuInS9GoROfrBVnZx4f1ucRtpZIcbw"}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200731083511.0_1596184526674_0.7333188046126482"},"_hasShrinkwrap":false},"2.0.9-p20200903054254.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200903054254.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200903054254.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-9ms6iZ3W+P6Eq2Oxz8TXogMcDU6yqdWwKSPCEnUQPxqa2ac4erjrwFuws1F9uPaandNT06kEgo8sd5DKpY0g0g==","shasum":"72446a59af54f335920d74e795091b59631110af","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200903054254.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUIJsCRA9TVsSAnZWagAArWIP/3vOEUcWR67CbUS0PSx6\nu6ffRzPHjUPmNTVlzBvpqHNnpXoA/ujqnA6O9aUQ7Xn35Adj7Fqht+Px2YLw\n98Lm1NUjxAZqV4kxcBU76mGGESrCfXgN52y5wtz82t4pnYYJ+Sgz4Hfwuhrw\np35MK7EwT5d1vzE4BrOWxNANFtuSOLjubARsGcR00w6druCBvGVlp0TYI3UR\neSYwX470SgiosIUpK5gAmQ7gEmeXOji4WkYgIoE7BXug/Ev4JisnnBgijPJ+\n1M9XfFNKkj5NPSyb6NsIe1OGnUE/aM/cMSYGrNBnIvaQQDT0V7O7cg5bsHZ7\n+MA+nMaEibMPhbBjantHIb7J0RLUSZ7m7FSAq21Vn7FAnRM+KdWlOHEcXBNS\nSNioMEDZF1SbbWhnrJ6Tqv8BdBHwuYz3GITqKa0HiFTLHuMd+wyug6gTkr/W\n35GmzOqbCqG1ZZV2WAtXVGvxKKzvuEzIa2G0LGf5lcQCDSvDY51f2HWksMmR\nOmC1ohCTEzQ0M7IIuWc+CDP7DV1Gb/LVGwalN0KXjpAK2YlFISfUcv1od56d\nG9JOa2hgznjdSYTvj67HqtodmUDIJbKj/blvSNgOhhnRsnLN82hPKIORgXeq\n+jdcclqjlMrcVAhG0bpKVvTGzmeTOWETV1q0CgmOLiguz0tpzBW+hMkY62I3\nCGrn\r\n=HG5Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEfvmAFuhVGhdCNUUP3M3LltSYP6Voc3qKH0JVuP81jeAiAVZUfVis9qYefarb7G/Lsw4rmRkYCxaCVc7ALock4DqQ=="}]},"maintainers":[{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"},{"email":"christian.grigis@epfl.ch","name":"cgrigis"},{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200903054254.0_1599111787631_0.35619068102328266"},"_hasShrinkwrap":false},"2.0.9-p20200911063502.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200911063502.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200911063502.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-PSCrzyDVZ7iocF5yv3mF0apDphMJk/rGu5khyet2acYTNYqSdI0dY25eKzVFN59BKk7qfKr03zemb5oOQuFKZw==","shasum":"8251229a81c0c1b1054c3de2f6bbdb1b1305a11f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200911063502.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWxqjCRA9TVsSAnZWagAAJNwQAJqvzSkA+nAWGEG2XLwm\nQBJnsQI+8n3i91RSSaAMgXCl1YJ18VEcrQnDVUSFgsZ66hFZ1zdBxOJ7D12D\nhKU6DbknByOdYMCDML9ctQz1q/fsvsstDtt21A3jDAst0XqDJfTKmB93m0tx\nlnW+vGowXJ0YmXchrtptJN95oMSupYrexDSxLX3AiBhxpCVvCF7b5FSMHDmm\nlVkz6/8QQy7goso9G2y/BAMKAl6vU7Z4MpALhgjX0/zRFaBoI3Z4bJSoaG+6\nN5LTLj2jQxD4mCuSpghUBOHzUHKoSH8XGZx+Trbfz50Pe5R6nSqpm7QqpwSQ\nL0dBfaqNQ2rTeVxVihXrWDgziwf6lVT55FMEbSS2Pmr/36eJyK8GrvysMzw1\nJ5AFXHnlqlIl1tUSdutz1pVZYIIjHqsrhR4uzHH/X5QBcEx507HqKl8OJnI8\nRxZuhgZ43k3spwrSP4vJVilnSSnbaPW7w+eqAVU8vGySTxltvbgjtyreDdMl\neZYZS7TDsw5b/5Ww/O/+5RXIhmn2R3t8UB4k7q9Zadt8m8lamnXMviBWVEog\nVttw8meRHHnJ25qJfxsL+Zk5u5i/lXFTsZ4oGrGFJ+BElT7PruSKnRSMy1iS\n8oX+SVsguVkpcGttbO/yEri9ew9mvFj/JKlv4cr/MLN7rOKXuD3vnbft6zZ7\n3GOh\r\n=tjNQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDYqBkl86pwYrLqz0xq5CqXuhOeShfNtUgn5+Mll+AKiAiAM7TsHRJovuGKODCApjup++AiDkaX/ixlTxaRhlb8RtA=="}]},"maintainers":[{"name":"cgrigis","email":"christian.grigis@epfl.ch"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200911063502.0_1599806114829_0.579730517235511"},"_hasShrinkwrap":false},"2.0.9-p20200911104450.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200911104450.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200911104450.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-X9zfO1CftOvL8+hAkDjF01jI8MB0PxxCLY/IrAJxJqK6Wxpjbeau4k1pPyYfuutk9K4FYV4ws5sa1fff9Elh6g==","shasum":"4200e1255eccd1991c62b8e00f4885e162cf89f5","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200911104450.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfW1UxCRA9TVsSAnZWagAAanIQAKIAyIEVu+iD+SHBooBc\nzoR1TyWVENAw/tutOvQjAdLqct588Fy9848x6MFQuEbO3lQuPad/p9wGCmsi\nirQ2pFZ3dZaNHoOwNGU0SX78UC/vXv7zSJiqKv6WTIGelizn2m17e0qovyFy\na4GeLAi4xG76cuwuo8E5OppDfLI5Ki9AMbpcu9NTVJG1nKRw11HHa+uvgPGJ\nqJkwX5Bsm0kQ6sw6dnuuQKfy+Stt9O+ZfZkKVj3BZJCA4UKrPO6gtRPlcE6G\nmx3Hin09ceLEpqlWcmKwlJNxvIHw5OzI3RlxuFwVv3u3kf3O8t76EANipfkw\nSzM5Nf4LCdJNJbZXPJ/h3y6kesLKVoercnhO6JITDx1Yu1eEliA2VQ4z8Q4j\nLf1sWBOEgmfo/6PBZ76T48Xv7TqIL0wg3GWe7cDlhvtDxbQ/dsGWZKL9/SBp\ncbzOf8VWsJb96tIrgvx14Q5KQtDAQ+eRIYL7EX8x9c+zMf7CAOigAT+mk1Aw\nJavMQYNKAPifCnmFdypq1/sS8GafC9bXrZaedVP1fdHutqx8JWB8ubXuDcP1\nINoSN73FT/1uClJFEpU5ZAFX1PnplmsDMGFBGE3NWBt5YFBga2/354HhGPql\nM0dBuvGeVgIL15pfY9u4CqJzAYiCIGyQs60YhV3ejRXsBsgGIpohwce4bPtd\n0mdS\r\n=N7Ur\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFJLl2LCpzRPDWN8TYWDVIDkPamq9VwnctYMONvSG0XqAiEAgrfPc5DwtFjmRsDlOFxMYlJWoh0MNKN0Kn1hxXiYg8c="}]},"maintainers":[{"name":"cgrigis","email":"christian.grigis@epfl.ch"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200911104450.0_1599821104937_0.7951396083843312"},"_hasShrinkwrap":false},"2.0.9-p20200922101817.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20200922101817.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20200922101817.0","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-d9FjdB1lPd25l50avwWPPW0brMY04Jr1j7TZCDmUVh29wWyE8rWPEsIznDBR1zxmB6HiRgyQpUXaBtBAWJQV9w==","shasum":"a02f5cbaebed0dab7a8374d6cdb1dd37d161022b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20200922101817.0.tgz","fileCount":48,"unpackedSize":496383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfac95CRA9TVsSAnZWagAAd/0P/iAy6ioKmxdYoU4iiGMD\nbqrdeu1zdQw/p1Aq+zSzsLkO9be917/w23lwj6OsVIKjaOUgSPOw3SM79bxB\nTAWkXpHAzZoUXd5kaUqbikjegUsRNroshPgcJoz5cTbLzlDnvrdCBrB9sQjt\nuNMeP05ALIvcZkUbCZNkUyHP50N7sojVWDlLF6umSSynYc7axt8fJUwc8Ktd\nGKImxXmX6Nyy4G0CIksxM0lQfMXO7l8MochcNze5uLq29qUKliOSxqmqqZQN\nqLm2ALI22aKS65mM2T6hhsNgXoi6gLdWZ5i4v3kl8CjFAgGl1TjNaD09pHId\nFP1d+8Tj7Md8alUWKUe8zWsN7iH/K88LGbIbt4YtzC9mguS1f4oy0jayFYD1\no8uezssIR/Y9CBLpBZYqW4lvSBnF+r31Mks7v2+DAAVECojvy4mJer97DcFl\nIBaz/vdHwBQMcR/gZpbSvGAdZZpTOKiR4ws8zpjcwFXvWeHDTvpC+PGao4xX\nvEn6vlDoQk69ceUrVeW7177/VFEikU7nq/8QgQWC8nfJIQWI6vMfNypg15nf\nvq7mjM5JV60FvhyAhyRK8vQVE6DhaaAzvjdtt8F3pZ1vv7uYd7aSKI4ueXXI\ndUqA5HE0kvyHhNeHqQsdC+cso3VCT6yfutYeUPO7U+3WsQWh0rZe6pVKCQQt\ndaZi\r\n=Y5c2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEddDRrEkQvZtZkH/wijggFCv7FTdoIu9IZLcq07B5gGAiAXO/QzY9rhrzEc01yDrM6AnV7jGtS+rbSUE6I7Ry2n9g=="}]},"maintainers":[{"name":"cgrigis","email":"christian.grigis@epfl.ch"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20200922101817.0_1600769912614_0.23609335523522623"},"_hasShrinkwrap":false},"2.0.9-p20201001070546.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20201001070546.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20201001070546.0","_nodeVersion":"10.22.1","_npmVersion":"6.14.6","dist":{"integrity":"sha512-rk0UeQMNo/CUNWv5nekcuGX/rQUX2iAJnJZJ5G/gMkmPhqbKhzqCnqDn7RvsZ/a3S+unA2WfW0KeUXKEzBwCZQ==","shasum":"9db786a85fffd9db60cb46de093c82bfb4b84343","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20201001070546.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdX/YCRA9TVsSAnZWagAAp54P/1c4QyfSw3x3PFeQd4gk\nL3OI8TjfdLXeNcn/FXVMWDXG4FsO8jLlgVVD15eE+s/COMiqFhjHDt+NqgpV\nbvC6w6f42vL/5B0p06r/lGNRnVIyGfcdr/F1tvrDlOCWcFgDwKk6bn6OG5w2\nG938wB6x+xBt1x+cP4ZpkY2NRRyTzIECEeY0enIUWEI0luaVaxXK9khgpog0\nutVRg/kFIaMzqE1uPTPxA2MjPNgw1p/rGD5gMpide1e25ziwwCfjbY3M4zU9\nYPyh8a5k8UBhSvMNxUHsKyl34KLdI/qI5Lpj9W8Ol9EoEnKgDGDJ9G0wKHA3\niEijfYbTx6uBc3S2aAUi5wX3fLvHwVqFwzz+WagXPIOlbfXcqZLkb+VoZyTR\nA8LhxvuZCMA0k+sQUJvuxYWE3bz6VDzCg3juQQ3eC+P4vlWiml10YSryi3JY\nUULFRx+13q2DOqi9NnLwic0syEJKKmI44wbhXYW4+g39ytNCSY7HkhulEf3J\n/H8y4NDZ+Z/OCpY++Ea0i1mNlJRVhqFbeBgqOASq4Ef+oZMwgcaSYEMP02Ht\nOYIGmQ/G+kLKHOXjKQLuOmhdPI/JYP+7XGj09bCp8/oY3NEjIHoY1ZhWmMDV\n5OrAZtpt2k9E/LHlLVj9YJET8/punk6hKdFDPTo3h/w8/h9N0dG12ovgfwRD\nYuDJ\r\n=eU/p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhEr3JYByrGzDgfxo9b/dbB2mOhuCGS192lNoP2exnxAIhAPyYJZc7ezQhTgnyOuaorwfeeIC0GBNI+TUQfg6g1OYE"}]},"maintainers":[{"name":"cgrigis","email":"christian.grigis@epfl.ch"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20201001070546.0_1601535960170_0.0010054526941343234"},"_hasShrinkwrap":false},"2.0.9-p20201204161121.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20201204161121.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20201204161121.0","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-gOx0s4/out2MAp3gZfyD3t5PTGPN1DL1JLwhae8F1sNqJ7sZ0/V34J97fAOzf2xyZ6NWOm2CiO2kIBASsABJqA==","shasum":"5bac1656e0cd36ad2d669fc5b558e9f26fdc048b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20201204161121.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfyl+2CRA9TVsSAnZWagAA3MsP/1Rg7BdOwG0ThbCPbuqy\nmvfm5LdjyuQUeHjEQ88FTy6njYsYdmt4imPhnPvFyFTLlhIHSKici/MHBxIq\nZrdusUsghX0SXce3KXX8XrzBzyM3QEyPc3V+fKRkMNIxYjetN4WVL30xQUd3\nDevyBt37QWlKYmBiVDafVWS0lvFspWXf+nnE4jxs2oBbGp5geGg5PwjD+sTJ\nXcz0oU06G5Oa15UOfL0wX5hFONINqW5Yde0XsURpddAt2INiupuomuOBnm07\nV58zlUhjF1vrhVfHXpSyR1ekdbgjSV+HpPSTceSz9HwcBf8jTJ0Hmjk+whtK\nNDT6KgLHbvQ83vG9CqCLBXzZXzYs7AHFI7FJjDhNgfHlw8sqfNm1VzlTqt2O\nfC7+TDm7V0J8ddAysLPwOI/JDWFVNmLBaaOhV1bX2THY9Z6X31s2ppT/R2ON\nADWTDjVQo1jrhQ0C/Y76pVqJ7WtXaKv+OX0m88ok/o68Mib3FRGfpU7ZNm2b\nG3aQofyvcerb6SWqtZ6e2euGDnrC+wL9wvM16dXsI+KpCLlwqsyVfL8KXt1u\nx4geiIg6FgWfM1C0sEZEDtwEb4tEBa2FfGjg7+CThCkmlad5N6BBz+4t34R3\nNfdTOJ1R9biq4ymNy8i6So3y06IZA6l0DPbA/PU+DOOD7TvnRfBcPx5Vl3Mc\nwOkY\r\n=i5LI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXPXiozV6mzQOEQnYM/cPYW1wAOAHNRt9RcKSOsd+A5wIhAPScezAaM41jR6gFfPeTehJQYJKF6pBJ3U3tvy2GfpcI"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"cgrigis","email":"christian.grigis@epfl.ch"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"ineiti","email":"ineiti@gasser.blue"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20201204161121.0_1607098294082_0.44898526151508245"},"_hasShrinkwrap":false},"2.0.9-p20210119065550.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210119065550.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210119065550.0","_nodeVersion":"10.23.1","_npmVersion":"6.14.10","dist":{"integrity":"sha512-tLVveXRhAOulmAU5AG1dv+udNXiBOnxKMq8EDcPeDNXS8KnqnNpmoN/AFmwCpOo8vYfeopkuLREK6dFpxnR1rw==","shasum":"c4bc538daa9ad2bb0ef7c1507705520e1c4c63a3","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210119065550.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBoKDCRA9TVsSAnZWagAAXooQAJ1hEXt3c4XSF9bLCnor\nwoYRavm+o5d4v1dwSNmP4mm0hPUZ8eDzdV6hwAyVYzeEYjtogWgQgg7FMyL5\nnYonUpRvJ8ZK05L1+yxmwgHzSjHO5DpBW03/nxlMfzte+39Fkpk9WDlsF4pL\nNJw3G8RFTDAN16hpjCqgx4AG+XR/kpZhqordOeiKOf/0318V6iJ/LrODMEd6\nRl9gnbI5ZK7JYYmMPzcNUmAFr9JhyIre2bcPbpWS09ixuvE8yNreacvrRPvW\nMp3o8iCPCc0p5Es1G4gSKRu0MmggNA7UOgAX8VU3bouuO6PgIAQiH0elLsQV\nk+lPDDwD+GEGxQjYs4LGASQi6qrmrusSLVWBLTfte5VScwimW40trI7DLo4f\n2CoWTy0XOOFRuHlDhg7zJxmNjaLnD4gQCTSwIvjbCDRMnbLVolsQgOgK+I18\nAPGZE1aXkLnd9d6Bj/ZbNX1wcMnNGl1hbvE+9DO6abEGzBi182H8o9IzOwLb\n0Ddyk9DPO/O5079/pBpjY9cWL7hq+bk3uoqqzxTDVBM6/Vl0LVTnLLLC/NUn\nhmBKnxPr5JByyU6XAZdGlXWt4y37njkXnX9ctyFmm6giYqlpQT/USHnmwa0N\nLzEUCYRpT72qQT3R3S0JWqKYBydz2gr6r/9H1u9R6rhHh7g0J3JESlifxhJ0\nYvyE\r\n=q7go\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQ7dmBeDLToGPj2YrarCWr9MgRUgdbCvcByhVdQ+eTyQIhAJyU/S7dbmHQASvi6rjlgQ5/Rmm+i3IiAEC4D7Q1RdVo"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210119065550.0_1611039363056_0.1595148307079901"},"_hasShrinkwrap":false},"2.0.9-p20210315090424.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315090424.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315090424.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-BgJejQAT0Ts5kvojdC8NtTD0slI9KfKseBDU3egV53HaBlm4HnJ21hTv89/+yBN45oxsHX/i4TKGECP9W4DzRw==","shasum":"f25ca2ba9d64c735db387bc2e2d9102ba540e361","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315090424.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTyMlCRA9TVsSAnZWagAAqcUP/jUBs0Iou+neij0iGxR8\nU8gZq3odZYFHH1m69VVWeT66acLVRegDbEoHLddjQvG7TackuVRdwQIwRnpE\n8cHITYb0ZFaOwDzWdYfEYop+OVHnxxcGhFXwWOokSYVrQR1JCUOmwSQ6upYP\nNHaDIU8xdkohOwV7WzQKa73kjBEeLkM+PIRqoahevap3g4pQ0lebzoPXHao5\nHQX2RtgEwnflMHe++h9Mt7CbDP4/q0jMtfNBNcHI68WLvaUj6rcNxKTxL5Bp\nSHfyGHYCJjsfDeNA5j7Q24WsKsR1jADFJ/IbGywZfBp3TfxLXb3US9AocwO2\nSrN0g98ZOxNOC89HISWfzB1wGYSM4SgWZ4n//BHkIQ3IM/KX54Hf1XBCTYHD\nNlKRDSip2J0ipBoUsDuoxrUgftGjwVGRFhhzP29I8zClG8Mm/MLdrV9MpLBM\ntwr2IFs7EDKgUajmtq+MjvNSp4bSRRq5cDwJNG1y3uQu0sSdumo0OW3cz3PA\npMymZtuDKIaTpxL7H9E7Ks1Iul4KYsruQFGubVsObmulGAzw4UKnZ5O1slVp\niVVlusGAs7yS/2Tu9ztyZovKLCNwrWhiELR8Wo27ot6A3ShhVdWAPAPtm2v/\nXsgYCjDNP+vA0AWEJKKNjAxSGRUrRiITfx8GvjWylVXncz7FsmhA3C3r4wDS\nt0ZF\r\n=NzW+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDj2U+2mM8jd8D6jQBzXZKledUm6BgfKCjw+QUhVnMMBAIhANhwYIw9WFId1ylN/0WkvXWoTVTegPQbJNc/LffuFTMN"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315090424.0_1615799076937_0.5246698548632514"},"_hasShrinkwrap":false},"2.0.9-p20210315121749.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315121749.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315121749.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-3CKwZk6BV7wVQKa7kJ3z1PHbsq3w861VXPP6NDuB0rLHIydhdohfQnETwhQGGjWozvYE2NwXL2NChU4+uhH4aA==","shasum":"451708942641e987ccac9a22c4e3b7de03fcf474","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315121749.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT1B6CRA9TVsSAnZWagAAVO0QAI9ciXz9vTpAzxFfAST/\nABTXwYn6AMiXcI3voVh3bSeFCceUgn/0lHEccRngmKWaN6hlkEiiiVLf02SZ\nSdtwV8WFafcF2sCZW36xD2a3tx6evDPKDLx5XkaGeWLUshvY7pnsYvkJEluk\nQpOX+YDFkjGcWJhnj7YGPxpFHaw/nkrBJ+4sCTkEK0bJm5FwVWopkXRnbMBj\nBwhOD6r2jtj7TZjYgByGX7L/d0Qp20OezkuTsaYqTGY5kIYcOQKPt7zSeLrr\n12wmIyt4oNcK5t68JqMpE6h/mN1t8mrUs9MJxbiJy9w5/W4JJLdUsz9+GkUl\nHXgSD+VGESf183DvQKBSGbLubHYTillUxSuxV++oa3PK+LuuGI+MAtgaJt7y\nRRuUHDheouwHPqL7thu6NNrYx22IQ9T7sVL4HZWGVK8LruTv0CX5hucGithq\n3CWDY7wgmmkBOWiOr3usyT7YhVcwoAZk2rAyNM+8HLbz4nmuSorTHQ+2Yr2p\n4yGCXsroSV1DFJm5kfgoUAiDPnv+yYUaKgdh5Jy21EjV17d6ftvGyWzDddvq\n1h2zwQTOpyqCxaxGZJ2teDUtdfdBTllEzVk7SJE9U9iDnjErTUb9mEUSXTO5\nlF0ZG5Wy6iJMyBpf6kyPrDMVCTpqBPLoTmoprdCulWJX7w6lZPWPS6AhzZzP\n4gPl\r\n=u2cE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw5wVJzd1aDw5KLsSZ4ep4vZkjpgh80+z1J2z6lXmfwgIgSJAXNFRmK0Onv+W0QXU1XpKb7r+qYSrqUUm87aY/TV8="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315121749.0_1615810681867_0.20820732050482293"},"_hasShrinkwrap":false},"2.0.9-p20210315160757.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315160757.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315160757.0","_nodeVersion":"10.16.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-SBWRrF+eLvk+HMkvnVxgqE61LX4Bvc4sjQ2Ty8eGU8VKcFAPH1l4JgcHhh/TjVTEzXh82EyZp4BxVosfSMNW+g==","shasum":"4947d8a3e3ea551f991b92e5d0a45fc4a23cd174","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315160757.0.tgz","fileCount":82,"unpackedSize":658642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT3hTCRA9TVsSAnZWagAA3VAQAJbMYdaR0xU2snAoacOo\ngIv1Ob+OBu+JCRLBPh2yPxcDsD/sSuLw2lUxOY2Ou0a5UxeTd/FzPeoPpqGS\nMzuC3o3QOx25tBLJaXZZfU/OqBJdwVAmwoKP2Ji1J2DJugTNvLMqecIMFC+H\nKK6TIaafZKDbB3HSEMh1jbv02Mvj+UjlPfAspu7tkUy7H+BE3vLohm3BBMSp\nKa8m7bUKN5Iyy5wUTBVowFREkJj31qS+poZymDrg1xh7MzyDspt9UBGrnD+r\nepCMMY3m+kjQnyWS0Jlu4l4Y1mb6cCyIYYR8+J1rgEgYJ3BwPmqBgtUHK7Yi\nLsNLaym5fu8cVtl4DlD/ne9vHOdOwM2F9tT1HOsbXiqARpB7kZjeWlTYaCcp\nFvNm8SRMKTmsiKpXevjg8uwpYMY//igaiGddhKUDWnwgY1bZ6IbhAETI3Bxo\nLlS6cdQeUCpIkyTG0c7g0v0saDeAOy6rB5fFN6V/jB6jqyQRVeblZSMwJ88m\nf/BG83ecnwamdO66Ph7ibem+1t5b+FydGyrSHizGoZQT/oLmUqAKnK7YerN+\nOoGqqNh/MdjMFJpJYQIKfYucfBtXUbmbt62xP85STFdB/jdqEsuZNyW4JyYz\nXbrUGlsL9d+xCP/TW6wXu3xeswSH24F6A0zrHmSh93koGOkvRC9kceb5o7u+\nxtPl\r\n=8HOR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv94b0KnTtNsXH0t9wCTxSsvWmPuw5wQmfOHZgGEWVVQIgFo67FS8K8dkUuqKPBrUXLIgiC58SxBlHXp0TyUlmkKs="}]},"_npmUser":{"name":"ineiti","email":"ineiti@gasser.blue"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315160757.0_1615820882980_0.32972782227983966"},"_hasShrinkwrap":false},"2.0.9-p20210315155356.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315155356.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315155356.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-0OyK3CR1G34n2tOyM2pJPMd/CyI5PzYZdIy0N5RnJUdWINxMo5gxsKUp17rSHrz74XdEFiSpK2s/oaNjLWCVmg==","shasum":"a441e5b054a22d2e3d92bea0bf61e301bb929331","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315155356.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT4MhCRA9TVsSAnZWagAA0YcQAI/NBzk2KpbKjaTgCvU5\nyr2YGgZc7iJYjKgmFg9coo8Zi1xVtRvpaUweVPRkgmQqfBy8aqVXzMMAHhp3\nLSGe1ZrTWD8jNr0dfj6QBR72gGdsyTkz/afGto3buw8Omckyty/XlRU3Wg9Q\n+IN5NMvLz2mtZebYumKXkX+Yxxvlt/X4ONv0nbIg3as/ggN/MwWoFgEBYyHw\n+2kpW9lCvkcDbLSiaQcpCYdzhj65Cp29rx7UPffw2oc51JICke/EHYMK7rvR\npZDjvpG9QD4xluEUrkuT+Nc5g2KYDZ1FlVRrapNvYW+69Lg+cn90F0H9HfM9\nBRoT/IGtqlfn87lqNGFfJ0zHLpQ77Uf1Zptnp/+HFijwux3mBDQGGgGMKqQs\nQF4dwrBD7tf6yeV034+k2J5HG3r35bizOtpdUqOT/ODsvR+YmrtG5zeHOq1m\n6S8XCl/wDaLaHYvxh3EKzeRBT7QqknR7GGdDUmP9vZVLF12Zl9EV578kYWZp\nBMdEAPRyvChmGmdJp1yjQoiqjQEjbxUCC6hZUK2Aa4qK4LNMuit/6qeUHBnY\nM5cSkHvCJORtPYDeupdQWjNqSvGKZS+RxSqEKSpuvtFSn27xLQTICSEHN15H\nmdsioqZkK1Eg7eHv6Ol35/4YNiqUtzoYGKJQwczsI0/YwZVU8P4xt90gSBze\nQhUz\r\n=Yc9b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDt53T4V4z9WQAR14grx4+d9YnLfPOBbiqDRRjjRR7rWQIhAMdXeNkzePXcsS9Xr2ky7fu/AXtbvYRbWTrBaD62GWh5"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315155356.0_1615823649383_0.482378045969438"},"_hasShrinkwrap":false},"2.0.9-p20210315162832.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315162832.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315162832.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-UiFF8LPNskGLsbMojEqRCXprv8u1Xk8tH/LnSkgT1N298FBKK/HEBagV98Qx5UznNEfxWwb3ERgqC66j38gdMQ==","shasum":"efc3034fdc0eb24e1a5d65c9ee7c28879a3e8392","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315162832.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT4s9CRA9TVsSAnZWagAAqRIP/iPEY+3dwNEH+/0AUc1b\nxtOOu31UXU+JUI/BUwFNWGJ+PTsfir1dRT+forGdc8hqhKERPVESSQdsWXa6\no4wqve5tqDlRVsQKlJ3jdUjN0c1YyG5pnJwCZEIZqDInMjxXq/ziMoOhgeos\nLlBskCu76Hhf/xCwLBzXEsrxokaiUPdvUU888BpJGjgyz03bSNrn1HMwQ9m9\nQUWgG6GeZ6AYS1ybH9GCKEAGyvkwgP2UJbP342+vIfCOGsexS6R1V6VzTsDs\n/Jr7YavWj3eKwASQtjESPBlP24PUrkQHwvYySKngPRMfJXFxX3SRO1rNNH8r\n14zNiBW7QQxDovau/JcKUzbi09WBfsVJKrmwN1zJX23ywynoN9RahtRxKCiW\nVJ4150sKufzX/ib8+cGKy0TRnGRvMlveUhcPQQjypQRFqBQIjm8IFbkEzXiS\n5dgQY0DCZrsNooi8wJDOPqqw8n5yUCg0uXsNuNLNR+j+unKD7hr0+NeyApg+\nFsWzcUFxOD3uGk1uLTbZP7cZ5L6/oboZO/rbCNrwYd1qo+1IHVAcJTofMvYD\nVUTLU2p+5peo9F2s49e2VWJhbfAuaGu+LZByhls1QKOzzROujSrfm6YT3/ex\nO6PjklrJ9A58qtURapeYLo3pA/lhgVOkJC+AVNB3ALH5t9+L0vvpuw1hsQaw\nglkT\r\n=Xq6Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEOQ2JnI8ilSM0ttoshqP+nZocmj1cchOWcCkS58hMNJAiEAj8tainhcJHYhLUHN4s/9xC1KxJYCNajS55o8HfEA0UA="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315162832.0_1615825724442_0.6025920014368771"},"_hasShrinkwrap":false},"2.0.9-p20210315165128.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210315165128.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210315165128.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-ZXrcqVcJx3lNWfAmsYynW458LnuhAkbh9ezJU3DIn0ocrm4gNdcGpeTykY1VUqr90L31+UAv4gNFciVDxBA3Pg==","shasum":"eac85bcd4e163137e2f83581200c5593e5e61deb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210315165128.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT5CeCRA9TVsSAnZWagAABS4P+gOLfgLtdqsYYPStS+Jg\nr9CcR5vsq1B6DBIXXf0FYj+Qxqe0qgdBsjfYFxD3M0CofwgRBBlq4te7HQqK\nWht1bLRjqD01KzcgPHRsjRurt3o8XrDnLQYgtzCBGrRBLLJp8KQoWzYdd2Gp\n4bTE69SWiMUIrOTEiXWKMXjYmDK+GdVPJNgSLWa67AXxmPY64Z/cUfosjLsu\n0E7p6or8MnQCiz70OYVX0uwGr2NRLs3717ai6j6ObvuC/N3cL9HTx00Zcqpb\nJ+Q7ALZGDyWlTnVquH8R+YT73pEcvNR+NeSDBfEIC7S9iws1OxmVuQQHPX6b\nRpEnnhmq2aubRx+GH3lVwBtgNoYpT4uSh+OalIZunrrUVLXpAL1LjsXZeruu\nav5Wb+08h8k2xrYPrHUTCqKl7UKSB/N6RD8dONhKB6alYjMqrdsh1Jsw89ry\n4Q/O/VULQBV3KuULyQDj9gYn+VRc0vZ8qfqDO9WlU1wzIHjKMB+bdvXDf428\nOh+TO/oJgfMmeebvQOLlK+vFQOUQi+XjqOds0+0QmLVcatJQoE0yTaGqvEvV\n8x6hyLCgwn2KVOaHvmcS7hw6aTmxZy+lX2PbFCvb0p+iTr+iFWWMZaergj35\nW4WpDuXyjD3XsKaIqP9TYltOKSK5LCj3omDMy2Qd4MRw43VUIZovR5tUpQ/p\nV2+/\r\n=Se6X\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDEtc07VRxBrXNbO4YtZIgtt9N+G0mHNtuivhNaKSlAXAiAcN2kTZ9eBxTqbF+CqXHFuid0Xllg84ciMH8m1znOPYg=="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210315165128.0_1615827102237_0.758016135955341"},"_hasShrinkwrap":false},"2.0.9-p20210316062907.0":{"name":"@c4dt/dynacred","version":"2.0.9-p20210316062907.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.4.7","@dedis/kyber":"^3.4.3","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.4.7"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.0.2","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.9-p20210316062907.0","_nodeVersion":"10.24.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-C7/2aZko3lUVwRnQy6JFfR9CMBETunGMyvlQgySQleZg9CAwj4Qc1XJ5pFsZKmpSR9wjycu3Rbi+42WE1as4bA==","shasum":"2038256a13ce1ea539f582c24340543f6b4e65e5","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.9-p20210316062907.0.tgz","fileCount":48,"unpackedSize":501005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUFBBCRA9TVsSAnZWagAAC68P/AqX3thDd1uDemewvlJI\nBYUt1U+STG890kBYmkqnoO0EsZZy1wgNrMfwXV+eqJkkBQxVsWtGd5HjB2UF\nTXd7zCb4+umTvMn0lxHWtEaUss0eP+eIxDfzyEN8k53x2VbhULFM4coI8wF0\nwUzCrqqrOTWfijXG3ik1CY8KTdcFLvPVOqEiDPC/H3YPQvPh2/d13k08rkJR\nh4W7WBU/k7o62OOHC7QvkR/Vw1lJljBWFtPNESIWjAbMgV/HOwofVniQ213C\nsa4VcAplvwi1Ue04Wjpf1IYWlJM5Yw+kmAZpzihyEB7vBb49BeiPuoVrTVJg\n5fauLjxzkJoA6Mk1mbvzHojNe4/BWfQx5ibzrb+gq1vX10lA2jRhLlH23aKA\nyLqiYDKsS95gxGBh7WaomMdy5ZL50oeXFCKtd2K/JqgaKqlTsljme0zTL3Yd\n6pzku0TWg7Iv4GN15Qaih2JaKaVc4LKVERPb8K8SXQTW5oHuOLj+j+Y+sDF0\nRm+xWgaj+aP8ht06KFBvnvYpNDio3QLu1coDDJfjHgBCm+dfwR9VEdw7nNHW\n9hE9EnahEI9qhY8EgDixn4qLxdAA0PMANqvxpb0HBPr8LetS4zw/rpfx+/SI\naYk0V93zB+AxdOYdA6rAN9Q9J+j5b/0wadvoTbY7M5FT56eaRIiIO819jeMW\n4QyG\r\n=7mad\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPhGKj69bPzKasf06FJFVp4RrithqDROOi2QWY8qOrxQIgQW+IX628eQ5HeceqYRDIkPawZdmhfKCOmoQKb2WCtII="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.9-p20210316062907.0_1615876161142_0.8918119373270259"},"_hasShrinkwrap":false},"2.0.10-p20211220152742.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20211220152742.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.5","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20211220152742.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-QbqO8zacMTrbBUZ9AzHeiFYYPYQxK5pVXS1Ki9E0kIaOuSAcremRugBY6zM+x68TtR+cYFzPxWJa1gAh58za2w==","shasum":"d2fc2950022fb52edfb85cb55a254183ff9a54ef","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20211220152742.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwKDyCRA9TVsSAnZWagAA9dEP/A4V6bnva6RfnXM7NPls\nPRRMEjLBdrNJsKa9BD6lc+fOom7XgfCPnWxteOam9n8TrUY53bQX6gTW0KGR\n1hMcle4v8K0iX3Ub2fCNnkOQdQKeMNi0DX72EWED4ky6cGS1fgym+Xkxvv74\nthb1I9EClLUsgP/pbQjfQz/lfNL3Gx6A4vCvGI3fVarv5OUtUP1Z4mq1gRpl\nWQfW6GHVGEra2ny373KpcZjy1b6yp9Dyo0UPk5in1oypHeRUiB5ILI1vYnS6\ne4qMTChc2BDweXe95S6W+KfyBXLN8DW7mz9NbgLA3G8rvx86zsSVnYNJ2KkS\n7krsM1D2qaGFptVrU12zwu9U2MYJQenncrUOfS5GcRG0hOe8s/UIQfWRw28U\nCNszd+3RO0h5mrPexpmVFtFz02h+uM8OQA0Vgg+8xxvDpI0EGhctL1+H2f2Y\nzSXSZlY61HIjWGjpatkbt/ZLUUO3Fa/Vm0desmAxgxxzNHTVtmxs22jfTABc\nuIVPc++Qt49uXH2D031HXdrvy0IoZs1d7B4v03dqYCclBgIH/srggPVBDMy8\nPraDdug9KdB0CFaz27T9+WawrgM9j88SaF0YzygIBsIsTN71Qrt6MwS1zBQa\nBzaivmjtur+c/1JeHiKn/NvmNLPIA7EyOBMkaxA9OYH0/yuk0B1711XjFNyq\nKXzw\r\n=eGjU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCb8jW3XYYK2jjdoiwAGeF26TKBDDwL3o1B5GypUciZ9QIhAOHGn2dZZwUxntfok7nCrH9feTmGSbO9WTx7ZEmKad9z"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20211220152742.0_1640014065983_0.3489688759730143"},"_hasShrinkwrap":false},"2.0.10-p20211220155021.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20211220155021.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.5","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20211220155021.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-GwVY/vephF3jVreH66iRkf4VqV2sbhmaAX3UKa1koLVwy8z7w3lIxfxfV+MJpt4tbKnNK6TAGd6iIWJooCHngQ==","shasum":"d2127aa4fc1f70eef04dfa6aa525f903b49f20fc","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20211220155021.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwKZACRA9TVsSAnZWagAAHjEP/R20iOdAj1IHBvjDfRE5\ns8P/IKUEbPfd9iXWn82AedXi89BztpfOYI/YFOUTIBZrch9k/NpIvunTkAXD\nzyp5i22Ia4fbpjA2sCQeo5DIMskm4ZC40GxmpAirW8Q472S1PmVEjEq7htlO\ndHdUh0oP3zcSdsMNJ4uGFBnmdb28U6azjcSy8LLUoICxh9aCawmi+t1uQmho\n3SuoH3xMURkHY3EHPUXFi74SuswlZZe1Cz/JUiO6BnVDraa8oTJjI2JNTwPU\nhjbF6Za42KBEiyBhBdM+EB8wksbBPDb1zKM01V8vw7i5PcjM5G4nfcw8nZi2\nQFXAXxqMjHVSgQpvhIH5zia8AqvtzsNhioGqAeKwswf/RLrlNjZ4VeWX6gyG\nCIs/2wzgVHRdIkUsROvA3axKM99RtLPe7eKe0kzh4Y92wub1lB51J2HYLZsz\nmhi6kx/CMdZ1xbMrcQchZoQrzsMyT4z9ZdXmQp/e9kLc612kZ/bna1+cgN/C\naTy38FtSLPCwOeG5dqwQ8puiWQCozmeJzWc/uwqQHutBGfQSqdBa+jcEeT19\nK8b+I4Kv3CeK7GtucTZi/6R9nEbt5GWmfWKuEDpkz/O54M0RW6Co1Q3pN3Oa\neqVgUENmkZF7IjWsrPBdg5G0L/FO72WgBTF7jsYaVkclVBE8AtSTty30Uz9y\n/Oe+\r\n=NiDO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvUttltCQuDWFrkazgxGG3IvzzzUq//1+wTqftV7J4WQIgHJX5fUFx9LIkH8aGxdfN09ZOoBS1m9gZSC4q8UMQSUY="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20211220155021.0_1640015424652_0.4067887930938061"},"_hasShrinkwrap":false},"2.0.10-p20211221141339.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20211221141339.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.5","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20211221141339.0","_nodeVersion":"12.22.8","_npmVersion":"6.14.15","dist":{"integrity":"sha512-Z3XeVsLnSdqNCSSMeLDNmyeXwOiLrgwAWcX34sqUfMJTw9hICT3X9qDFqCFuKrqCgIQDaOSpy/13usutCfnh/w==","shasum":"f08f1252140a69ee0e8ce4e821d186070bfefc66","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20211221141339.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhweEXCRA9TVsSAnZWagAAWXkQAIRNTVV/bUhYaJ5g/kAr\nnZwwtH0fjKCw7oYLtzG8vgRFA5eOgwMcPLJwOcWLs13KgjKuWMtHzUPxDAeQ\nAdssb1Q/6pjV8arwemVxs+YiLJ6j91cXzonIFFyQzN/wQ0LY2PZMBI25NkEt\n5JB2ganfEyoMY9fXrcSVmaKKcfA6xR3hYuV7PS2plFRA4ENxBjRAZQcT8mRG\nO2o8RfzYF5vzWZAhvwoNB3KKBPyfByv+YhgoediwIlUvKHt0owjBvQ4EgTXc\nCd9J9rN2MWZaRCJWvN2VHx/Ey2OSjG5MRbhzlDL7WVLmqolVOiT7oSSvNLed\nkJQpT7suKHnqkcp+PwapPyzJpR6l+uzr7EEkb3sBdu1beoEmv6a/0rSxWSf2\nWNUmk2NHJ4GeOQOlH/b8GOjhtZvjPH/30cHgNBSbt49kLdseepN++7W6xKDi\nVTL6hJjETppdqQe1yn5pA+FRoa6arHs3HqyMPCCUz4LWwSARSbqT6hbq16qx\nvOYwLfS5Mvmin8LFD46tjt523uGRNISl2zP9JgeVVdNpt8Xyv1tKZF3kOb11\nvlrqg1xKWLgbTH0jFitVxR80ieLPNibVnlc6mxnZf7Dfs//de805+aYWMJki\nuKZ6JucU50RXIrnYTAuxVNuecUxL4Kuql2lKgJx4MkoN/Rc8/x8cHPd2o4mE\n0XUE\r\n=6AqG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0SIFnihCEZgTmcGbCp0hMVutYd7XgpXQkW9QZY5bgeAiEAoLe13hd0zVC0EIhCzeoBOycEN+zkwBK8t/frPAdpYdU="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20211221141339.0_1640096023581_0.885061700377374"},"_hasShrinkwrap":false},"2.0.10-p20220318123246.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220318123246.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220318123246.0","_nodeVersion":"12.22.10","_npmVersion":"6.14.16","dist":{"integrity":"sha512-msKu9vqWc4iLcB7S4FVC9FowAqWczNyHZFZ8cc+N4OyLgQ+PbOV7UFr7mAquWNGzqCtYYNPy5tvHYYD0JCoD6Q==","shasum":"1b29d94ddd60cce7351eb154bdd758cf77105709","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220318123246.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNHvyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4cQ/7Bsf3+c5CIaCwkTQ4rkV7g9PIQJBv7Xz9yt6+d4f88sNw1GJV\r\nmMY6vG4c62DTsd3KmEUGsg1VOUvnwkCo0Bjtzuz4LX5hprzxxBO8UB3FHhPI\r\nAzFqpupLIWOLu3+85dvCQLLQ2nC7/3ysj9YK/8Kz1smouy/6Uz1799hmQmni\r\nOGxdtOHQc5kUh/zZR2hIFppUb2RgITWDRBCqDRQsx5AIuLxzJ09rEjM8gb/t\r\ny9vBcK8i8ifl6tO7mmKYIkNc/TL6ywzHhgn0qlRIOLMiPXMg8PnG4hSb5Oxg\r\n99fqUX3bJ0xnqdHMZaBbq/6/1VYdHfq2yM8qMdUJrHWp6rkIejHQfBe4YL44\r\n7Sp/7BqyL9sbyynj/UrgdHYGDehJwWFV8jHhOKZ0tTgw/QhWdb0jBJ43BzWY\r\nd8ePjHjLdW4e1qqjFv6ldPtHZ5gwDuZ7gI0ISkxIhGU/EqKyZhZr6f1N468B\r\ntuQyDSZMnv3Iy+3W11VIi1rFfXRzZyJirPsEbsINpA+bP5F6mVG2afc42FSj\r\nt76nIsDi+7okJ7c2SUanVKuL/LHIEgZ0E9f8rhWttKNvzIfdcCrJxx7BdLEO\r\ndNo0ae56EzoloMHGoo+GcuES3bZ+p6K0DyjjNlfUZ+Dp1DTrHhSImBFybrmM\r\noeTGWOtpuR/5dVpt4Cs5pSlxkZ3eCTJCQqQ=\r\n=TYIA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC66cjWJWQ9V8lqGFkAquhySEddxYMU3MxYVHW/TOGcBwIhALrRumyLD1czRW4AoHAmnIno7rGf7Q1GBoAakWatpLKr"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220318123246.0_1647606770561_0.13510636978083235"},"_hasShrinkwrap":false},"2.0.10-p20220318125852.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220318125852.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220318125852.0","_nodeVersion":"12.22.10","_npmVersion":"6.14.16","dist":{"integrity":"sha512-+65uZUR57KwtYiW06IAypUKUFybFSpxlbX1qUUIV2mxWIjj1jgaWg28HiBQD9bn3cuEyyRqSnHIut0TeMFsY1g==","shasum":"e498885ad9fff4486128e33ee5e084b006ece908","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220318125852.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNIIPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrniQ//bg/8hCPGZDymvnhi6go1rYZ4qegUZPE+UNU+S9xZvLgBPUZU\r\nPrx5doVYnwNEC7Uzg5OskVtJnv7bRHuep9j+hSQ4ErKWDhYVsIgoC50yx6Z6\r\nA5UziH7Be+j62u5D7H3iekCzUrGmBftvpy40AX59Cl0yB5azpucb/2zd8lNQ\r\nxOamibcAkNxGSn8NDVRhxsw8/MwaAneOtfQQUImBPbl/02PaSKsVwYlYxZgC\r\n8FctgN2/GjpwMwXvFZsRH5J83/WOHvRxQibyN8TIMw5IwkrC1Eio701ih8+z\r\na34E77avMZ/v366kAY+7oTgMaUouEX9hT6iEa7cWtJ4DO95WODOnvxvaGyZL\r\nQD/XwWU8ixryPdqKfekhipnwBOxBtgN5Bs18P/TRGwl5FPHVeqhALKVIwX56\r\ncpthxpa8znGjLfjkDiJQkwvFgPp9AATWu+OTmKJFlCuyJ8MM3GdYXg9zdxt0\r\nJdZo65zBR6Dty7jJpFraw4ItL2mXJbYVxXF7f6Udryki0M8/mPMat0QD+mmJ\r\nWP9YN4uRmUUHZrZL5O2HvaXTL4AgeVPid8ha3iXWvc02VgOfiOuQTlbEHkpJ\r\nzuberq/N1NQpzsGeoGPq5dVINMk5a14PbwpMBJNgg9KeaATbKJj0JALZipTI\r\nome0nCAV/AIRh+bCaLf+dOOpEXjkOeeZFT4=\r\n=j7QQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDA8WZQSVB6mcb5yK1Lln/cr1xD4g606M2EPS1uchmLLQIhANPg/6V3aJxDb8UKkqCpdlPVpyDeBWpsRF9Phj8/kFbD"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220318125852.0_1647608335559_0.4952374530542858"},"_hasShrinkwrap":false},"2.0.10-p20220318130819.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220318130819.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220318130819.0","_nodeVersion":"12.22.10","_npmVersion":"6.14.16","dist":{"integrity":"sha512-p+SLTVCMzeaUWr6IEbb3jA7+i1MzPEN96fhPKw0wSm9w6i7NyRqsP8KcfdXz467RHnF6r6oUQGrfdVU8K7awCw==","shasum":"9357950d93922c1466114020cb293f6a1b5bf738","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220318130819.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiNIRGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAcQ//WK1BV/OqR404kWDNKuCH777IlWt7gn/ecAR7qcPBSxYVyjyR\r\ngLv30FL5F3//UbTmmAiqa8ZfVlDlVoKLjrYD49yOq2VEtqPJ5Upi4YpxK0m2\r\nkB/q0q4VpjqUnoHe4VURLmcAHsf5biD2eQKVwzm977FmhDgHZhwmREJB5o9G\r\n4Ow2qsJMHZ75AbLB7BN44Yc5FUjSLST8igE5gxl4pFXiP8++qc86GE0iYutx\r\nfm2qMOGRq7+lBh/BPul4Gk2GsSj1sj20hmpd4iuJM2PmJJK1EXIaJds7m84A\r\nlzaF0PaALPRvzl4U3OnhLDkBFOu9mDBmkCTeSv906mqluNt+hJkx1S7nWIde\r\noKvzc+lZokREixdxLPa25nW24rEni0igyrv6vsCa6sSZd4mIUsnpj3LF3BMw\r\nspkUFW+kKW1RzeSuQOLumsiRGLiI6qIGXaHV3NVTjk9v8kB5bMNOhaEsqiDI\r\n5MGe4RV8Tzn/xxAHPZe4/lq8nVZrwfDLB9rvhXjKoJjEzZWHv53Q+tplOsL3\r\nHiPlenDQnedf+sKaLFfYnajV3xUKOGgrsz86Zf6whHC38au2OzAvBjPDqzoM\r\nGEx93xszBzDWruHwRJkilCp5S/EsP1zsPe8Ofp2QzcrgT6+HklnUxgGEQVSJ\r\nvrRbaYwcKCxwg9OwqucfD4c5RKPWFB66jF0=\r\n=YZ52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBm14ri2DosIeYjpxilxaZYDxekF8xVFRqLzLdS9fr5GAiEA2nPhFAQmAJYc1EMSOyq9CwvqC7LhAqPXB+CgS5yJDXc="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220318130819.0_1647608902074_0.922107799501362"},"_hasShrinkwrap":false},"2.0.10-p20220324074802.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220324074802.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220324074802.0","_nodeVersion":"12.22.10","_npmVersion":"6.14.16","dist":{"integrity":"sha512-OqNBCrvhvvtrLfCcon5cqEgNSwK4XYmffgwZhlENpyKIovxsLua9JTmjP4/mJnH/Tv7mF0l/O3fAXJ8hyODQOg==","shasum":"7c8806dcadf52c5e4f2f670c4f4360be4b07feca","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220324074802.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPCI2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo5AQ//eynWwxpYXyA6e6mhDbM1ITdxQ/+LN/uJieK5kI9I18+ZsoyQ\r\nDsboZnpHf1AiypJlYmu5HrF3ebFUPEybiIvt7L2flv3G9GZ/gqeYLLPxwRZ0\r\nOiITJfO9WWr+QjRcDh0l3O6cSsFJ3mcNlcC51Chy0F87LW0SHPKeAgM+tOXH\r\n8WIU/cGeuTJ3dMPTLQV01sZJ24NHq4U5Y7eDLMaVz0ojQeRMQmufn5q80VEV\r\nGcUFjcvrc6sZGTx69rS6BhZPsiTcASwGSUALtHtJJbfv0yks09v5/XxZSoGo\r\nd3HPQPpUHIvQYI5akhd8AKYImgnaW9vWflL5Pni9TGnK9NGZ1FfzK2IuugXH\r\nYRSsnp3qxcna8PghuvXDgQtTcqqWfSE6uNmpcFt3Eb7GplDp6TA05CamGLpu\r\nLq53mcufylSjgc+T/lv+9Zw9zstqOi5aKw2iDd+pBlaSX84Wbte5Uv/gwG2o\r\nrP6k/UD1XJ9T4fK/A4pznohZ/vbTRLhbcYCMDnanxI87lCdxmj3L8Kad6L/x\r\nYJOtKnGEioTjWZQwohXaVmxgw1M+e2rSm2GCFGhsVfRgybpAKCiHrjWc6Uyw\r\nX7Zij387k9b2TeaokUw5Z3V3Uh/IRxap9nkS973JSpwJw8CSO9c2sO8xcwoR\r\nFAct5g4Jm/VzS6wtkqDJ5pWIZMdTbMjXe0c=\r\n=rUfM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmwgnqnxcoo6WgY1oZE6PnKqoQMXmlFWbLLrbPWSzhCAIhANYosNtK59ABK2ooOdDl3DIxC+CAEmlegOZZ5hitM1ee"}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220324074802.0_1648108086101_0.3705447266780224"},"_hasShrinkwrap":false},"2.0.10-p20220330074933.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220330074933.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220330074933.0","_nodeVersion":"12.22.10","_npmVersion":"6.14.16","dist":{"integrity":"sha512-xmb+RVhY9mSr4pr6sukoSPqZVtjjBNL/Xf+vspKkIiaXw1UUTDYFNmwLYg7ZYEmw2/sDu7NmumlqNitTLDcNQA==","shasum":"fef527bb00f30934da7dec68a5ef1f80ffd5bccf","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220330074933.0.tgz","fileCount":48,"unpackedSize":500968,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRAuRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmppbg/9ElpAxKKKZ5FNqiu2BBkUpxjrOkO7/WPL/BTSWS7kMNVCSxOw\r\nFCtqjIedJoUQ6s8JnwAumvlfv5uiNEUa9ZlEXAcnuckuMupmvZAaYCUGLvRL\r\nu2vBOESBUV/eSmG7Q+50hpwmpjBLtEIAzjLf+ekUxRayLoXd7QqZZrK0aRxG\r\nw1djU6BiqcH2e/bCTOa9OzhGqnn3fRqD7rccWkm7FEqdvRfE3klIAN/sAqQK\r\nOnyJ+UMOA9ZdQbSq5FocVa3sNUEmzmZhV64WC89eyZNXAaC47/zquj1qJ2ee\r\nmIoo3bsCAeocKykpTo0mn5jSCBHW/scCnr/Jkr1sNk7EkK4MXR5RS8+3UHWd\r\nHbB4D/yG31FxC/zdaCZxCaC5JkF/rRtEzIz+43xp6cea0UIeN41Sit7k/Rit\r\nHyVmCtkBoApP5xl78OR2WZw4HOnmn89smRhrta6NP6alJUT2wSNrbfi01hQE\r\n8uioJoeQ9f1Im0asxma2afau3u8pFYurzzF3OJzHLPgHVNtjfCGXL2CN7yqb\r\nfXy5j+9Aakisdw4l/GJl31L/sVMn4vd7M9KxmiJFeKUr4X3OzzQ1i9WBZ0Zm\r\nMLNvHmsCNqMSzhRc4HDVcjARdWThUJmxTdSqv0mb9WSLv88FHb31YFukJq/Q\r\nyiSqTza98rHJSmEjjExxioTFFIOWasOHbxk=\r\n=LoGT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAI2RQIsNpeaoDiDUTcXSCymd2mDZad59KuhR+GkN9UbAiEAzAAMyBMl4kf8NxfOF9fHWOw4mSx/QaYrjxWQjh0KSoY="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220330074933.0_1648626577211_0.4416537587279843"},"_hasShrinkwrap":false},"2.0.10-p20220412112548.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220412112548.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220412112548.0","_nodeVersion":"12.22.11","_npmVersion":"6.14.16","dist":{"integrity":"sha512-U5655tRTsZ76yFwpQLW4Rp9wEdNzhcoypE4s5qYm86NIyo4IRdd+8zdx6SavkbChsOoYg+jhY2Iy8gHXWC80FA==","shasum":"eec14b1c9f48f733d40d7dd5b32d15b63e6a125f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220412112548.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwyuFQ074s5kDLw5RAiamAwcfny70e0CK76+5Aw7b80AIgKh7C18iMcQ92iT0X03SP6145hKK0aq5Xq6lZX9UowDc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVWHAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr2Kg//UlApXHvB/bT259WOaX2M3Gw+vgGeNoK0svqceAp1F0ly6cIL\r\n1nKBjuOFFxMZXOvRdNtbYs2v3A4LlXXNncyRXYqzoWzA/cGpWq97Dvk2NECB\r\n1MxjehzjHekTAN0QmBj4HQTIl4SCd9nDd02avfMIHelgG6idjBpGXNZ0cQzf\r\nSUEpiBWGMOD3bQynlKbnMHH1V2FG065RjN2PZ4zwql0eNJH/8xBt3H/S5k67\r\njnxO/hr6I39YY2Q8XpRPNYFmtjPI349r1xEJlQZr0gZEyKMzpKmBtCA4406M\r\nrou5JSD6tut0YqmPyPxwu6QOxqDe7xYjQC3C84vDnCcBkFpzyfQK46OVdRMR\r\no45e/qNocgr9CYekwrqOMFZkbVhN8yB0JgMdkRL5U0G3cUOw8O/ytntK+imy\r\nnZz7HjdwEvioTH6bBTZnoKHjPI4ZsAbKAMlpkzMQ39RxppXVm3zHjjuuC5b4\r\naCPzkx9R/8eUHlQCeLosV3MysUu8BSzgXqlxr/HpRfKIuZQ/ZCoRaG+JGVs4\r\nANWy16+2rruc3EZxu6hApBbgH7dk/1gF+l09VZ1miOLw4su8pCPP5ypKMs5b\r\ndEzdawPu6bowCPK2woaxTNsZJgYwlM56Y2Kg4roFNlEpe6DKIpqWWWE07gbG\r\nQjqOJ05gRS/dnjHla40Jh7vLOa9nspjOds4=\r\n=D3s/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220412112548.0_1649762752182_0.024847772976249516"},"_hasShrinkwrap":false},"2.0.10-p20220412112606.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220412112606.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220412112606.0","_nodeVersion":"12.22.11","_npmVersion":"6.14.16","dist":{"integrity":"sha512-yLDB3A2jh9KHjP8v6J599nXVhKMYLJYLDiXkhimznE3Eu8ryrO3ycKfpr3dLLElyyd0ids+x/IL043gbtsm8JQ==","shasum":"588ccc18c7477ec6423646fafcf6e5bd095d171d","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220412112606.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBTZNVHRacJbdVM1NQ4paPLpikoIbGJ5UJ57rmeCxGwNAiApbbJq/UlRGGrcXpG2Pr+75ckx+VJODESIQwnyOKSE/Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVWHRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrPARAAiydr1+F7Z9GTtryb91NytJquHjtu+Ezb+BZ7O2w2V0WZl7Fq\r\nBWR3iMQs4EHOnDish8qkIFdcy+4yKWJjvM7DQj4gagu/9MKoehTD/EJrN17U\r\nxRFsRRg7LduiQs6Nb4FnS0bZzKEehGJLIhUyVZHEqJXgkBfrCAtB/Gml9+Ha\r\nmodR/OVQIGP61xhVwDDvbt711kST8rQGDykr26UbM0iBvHkqCmeJFDnFWfUy\r\nUhjvyUfEOA53Fyb0zJveJu268xCMAcTKCEk4SfTV3l6w2KyGc+9poCdGwCbG\r\nvHRFDfpg+gKybHcLLesFANMpYia4jLS9Jesa/AzEPBG/rRtXnghXtwDvve9G\r\ntGlIFfcmaXWxXXgF2kJyySztCo5gLZVaXGLwM2rVHIUolJmFaZZSQU5hFyTs\r\n4EC65vi23oARATR9JEuSy29f3eruJhTA3d1VjTNCj+kHhJinut8s4ymoDtWl\r\n04vC/IjSzgwbxZcM58Z7+544XcHnSChrNAk+qmfFDdKhNEylZ0qQFVDIofyl\r\nELntvAp/AvyW4rtl5F+87xYkn26i9+PXSErf/p0O3auK7MMpnydxAoXhQdzI\r\nlE1n4GmIPg7sQqhhhJABb2gFHYwdmQLwgcEJG8nS6OO5WQJjbxtNY/fMgdiP\r\nxypcuafbB6kvCw3mFYUPZWKgG1F2hsTdSrQ=\r\n=j1KW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220412112606.0_1649762769217_0.318490072346316"},"_hasShrinkwrap":false},"2.0.10-p20220510061604.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220510061604.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220510061604.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-efBNCLbSZ6KDcLXXKqDiPkD4ZLGJKAkuwqfgjFNZ6x232AW7SOAqnEzJyIRYeTlnwoWbvDTCSiyQlB9u6O1eOg==","shasum":"1a3a9d4832f4216a0b71af8cc949cac095e447af","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220510061604.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCUTqnT7uMWW1uCQJQZpuiZKfni0WqK8C/ofSsRZehqAIhAI7p8eA/u1X+xz4z0MnCOVULY/xudEOA06mNXnpcG49A"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiegMoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqjHA//f8CnhPJFGOfYHTuGDCZiJQlxlqfAalqlWjrprS8zRa4xXBBb\r\nkxF/COeNk+i+Oh27mcOBVPQ4INMUMiga36h9+eOk2Dl7lTF8ZMXWl8cHyuz8\r\nkHZn5C4ZfC2ZNCgaUbuieYu8SuK90y5Xg6aTfpkkYgbw+wZ4nGJZpCbDezm1\r\n6YR4Ye9knI2v8BAfJg3aDVADu/T62weNavcTpn6fNzS5CsBjTu/Epc88HVjC\r\nuLhVjlxNsKVnf6hZR0KBJgc6Aa0LW6LUr6GooQJuucbexlF1e4UWEamLX9sY\r\n3cJP6OVw0Zh3qNwusWh+B5recWTQxWFf3vrwirpmKj1B3EImw8FSoh80rsaL\r\niMcfQKBnumnvPqHJ4BMly+Va9juDKs3Bh3oGtXuR0b1YS+6rFMS8WYyTwkT0\r\ndK5TnNsktlIiKHx1xMiVXHLE6cPElitpV0lZf7eBH3KtP1V3KudzxsUi778j\r\nb1lMCIrA6trFizP6S/9VJ0UPD2QEXSFfcVO10D2bCzBfEFbRIGIyVxHOjq7g\r\nVym1/ILkYtPWGTtPZHTKeHeM3anFxLngTpcB6zCr7udfjzBjitzgBMgmZ8Ph\r\nx/4AgKuxsPFnKfKN6esRM44DAQhdPlKd0ZescjmtmTZrCvcullVmtzh2z/fs\r\nJFGmr2fioQ7888DRzMwuvVHabMKzZZ2cOBk=\r\n=+N6L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220510061604.0_1652163368618_0.0625076201348802"},"_hasShrinkwrap":false},"2.0.10-p20220510061620.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220510061620.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220510061620.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-4mvUn+YqL2WI1lYiINeCOfeaPCaI8mVPWzARxVET21RRIodAYQ4W0BM+TxmAtuLIKQGbX+Y3UwjFJUbprfgYuA==","shasum":"3949a1d9f203528ea3f5977cb40997bec742fcbb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220510061620.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnUIs3eqFVfEGg3Zb17F4By4lXaCfkJlwL1Mmz2ZwqfAIhAK7aku2sVpbOrtfk0EQJVShgyCJfHzCY5Wj2eXIY4JAF"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiegM4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrRwA/+Kzqo56hDQod956JOFvAeyaVJEZh6ZkADbx/KjYIpZCG2Gs7I\r\nS1FKUVeSz/Zq40cglAfmg4VjbR66dSsQSvDpkomBspagLoU1fhh3JS9qKS4C\r\n6LiZHgdhb7SVViT6/oOocBmCniLmb4eq+2REHTVoJjPCkg9i806GEhgydKYC\r\nWPLhckkvO/tpnQQXd/ZSow9wVWETbBUST5KrDWA1YQEG9hAwzX+GbGstLAt3\r\nJKpSHFBSHvRtuuujMlt2mR2WbydUoOd0wI8ppsL4jN/108Lf5Kuf26XJAKXI\r\n5RDQOXuQzZxz4S3GphwbMl55dHZ2/ndYWeFaLgYn1vKH33MSfdpizG9zRNSt\r\nT0Hmm/ecvy708Tuw70l4PUybrdtTa8xliPBgzN88KJZm1PuckPaY4K3WsU+Z\r\nZl+J6Z2yizKaPVXrYn+vBYAuL6VZIu4QdrST/teMexUiystKvtdxRK4SyuSY\r\nSXDJkJyPQEmNYy4touqCS3L7tmiIPZX97Fikqd9OKH3/mMOtnBdvlrg6N3GG\r\nkmOI3wz4u7Y+RUme7qkAGT/5Xo8TiuOfn7XG1/x6f0Dtt8TioO8aemAoeOdW\r\n4oVj5uQwHCK49O4+l7tnJ5UucXPiI7OY8TrIBJDHbKGfywcUsJ0GJUXCCIbF\r\nMuEDI4Y9xoV5V9ypv4OCEtx25aQ2L3w9DfU=\r\n=/aUG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220510061620.0_1652163383730_0.3742893485875365"},"_hasShrinkwrap":false},"2.0.10-p20220530073004.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220530073004.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220530073004.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-p7uia4HWkWc+v8yIegado5+uXa+0/H00Ha5LiOE+yGe8EMISfWh4738YHG9mjNOF82Ti8pjP7cHZPabUGIP+xA==","shasum":"d79f5e4fecd547330be46e32256e66ea95fceb0a","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220530073004.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfVlpwlo9yTfllBlVpJdkGn3OS/MdlBcN0na3O6CsYkAiARm8V6WlOXqgXLrbjPCSFKZyBTpsHJixi0Rj8GT6nPAA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilHJ/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq37g//UNT5T1NMhR8/utLSa6oDs/7dRVIDltwGm5C1b8qPG2ciL22f\r\nQ3xJyrQC6IJ9fDKdaD0gi/QyvCsTd23DHQjIkkVSc3FwVX8ZSsRfexaPxxEl\r\ntRMYIaLFZbnyafQumQDmRmGox1rOb0HDcdrV0JGHFh7JlFEi6wg/JlSbsaa/\r\n251hHDwufjeCXR28536KpoX1/k7JUY/fN17qjewKOooTWZldq/fuM6BxpLzd\r\nEqzZjvbhas3KjjgC47R22gzHZXJBRkMBqx/MJb4Dud4dLPyMJjgTN/S8BZnu\r\ne/d2y4nmkAUqWjYIAVu0raEDqxPsosb3PII0mq3nQbgkRW44Tg8wdoxJ8+dK\r\nmH4WbuCdZRzoW2BVA7Cs4dg6JRUblZ3AMG/3prVFl33huGWk+XjcLstKVZNv\r\ncZ4TBr8rMyG5JFLI8JgR+m5BOfBaKlLAK21DJHh1KkgdAUy/xu8Qk/liBkLR\r\nEuQLzo9trjwWtvavIlsAC61Xb8fkpwxp7goQ1fOCA7HW+1b5p+8y+zUP++vW\r\nCw1w63cJVvFjn3tR3EhIXSBXHN+u5+wfDhUwF9NYPAN7DUOHEfS9G9xXMZxW\r\nCQ2WMLp8I3jOteaBg7DoyKj1nYduxnGezkvDrYMxqIxCu4Orm48EqMHhUCH6\r\nAZs88dmt3d512Zg7hOL46+mIBVWth7B+EME=\r\n=qWxg\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220530073004.0_1653895807540_0.6442199483709459"},"_hasShrinkwrap":false},"2.0.10-p20220601061115.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220601061115.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220601061115.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-c2YUQdIY6VtxCWKL4jnGZRKgFTpreD+cz8KimwzuWDTFr5aRzxQYu+NgG7MjD2e+YoW2lVnQRQOMqTHdW73mjg==","shasum":"c167e9125f942eb4a5b2ad672a23b1dd89c42654","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220601061115.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEH4p1V4OODPjS+uWDCKsAww0rzhEPdzY3U+C0JC+8M/AiEA6LvaSMCS84bmgSnB5K5FAhaPElsGSOy2yp3HaaglEhM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilwMHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrmOw//Zzv3suggNNDYOfIRN3fALszbE9tXI27AecJXv3MrK/M8bRdq\r\nM2tk2qDgKNlR57oeYPQ5iaDKT7Ik5MwPbFGDiQULeqT2nw1CVIYuQI1MGyge\r\nocZl+iTHWbiabqcfwtzIh67oKCo6K3kx9Z47KnFgVyEOWueU66Gb0UUCLzTl\r\nWj5ltT2arg5E5mWAseO6ZkbIDllOGlYHZrs/mgREzx85MSRFjOcUz2NhGgq3\r\n/tmPV0EgxwTySSQFtw5sZOw5yiN98EcXvN3PByq3dpySDsSYhgu3JlRpqB6y\r\n9isqsF1j+ykzuulUD07OAgkCF1qD03rQqahqawLWlKTvucvzoJdlkg2vNht3\r\n0BRmheTNANn6eifVjhxNuDKjSKHgctdspy3XoLJ/iH9hK+lJZQ9h4tolhqh1\r\nn5niGo74pxqYHOxUsr3ydVmSzd0DkvJRGT/NiVUYeCjHAtPy11DV2AkcclLu\r\njZyaDGRPngobrE4QKJyZUGwX4bWs/BQ0AH2tLbOde/d4ZoWuP2sMhYt4+CjD\r\nv2Q97y03vrNbiiKwznSLtt64ZMLW0Dbiv9A7ueZdenUqRXV+XTwMOQ1YGbhE\r\nw1JpUsK4Pdt37AlAzRO6nukvaKg5WUwx3L9yE6FhSonDo2q4n0SHvD+ZPJH4\r\nYc70zPzMceEr37gbFqEu6VSSqk9Gh4+dvNo=\r\n=Tm0S\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220601061115.0_1654063878917_0.557128353384005"},"_hasShrinkwrap":false},"2.0.10-p20220607061519.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220607061519.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220607061519.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-Be/GK/9QBVJXKRMeNt38G4PD203AlSfZ+ndEVS1uzVHT72hFi2VZwKsiQDy8WXgQTsmS39GGsJBe1oSiJuF7XA==","shasum":"296705c7add36263214b46e2655bd8481d0f0a55","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220607061519.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEj3k1lp3Yh9id3u6E8E48Srqv2Y3ipY7JIcrJ8B+GW1AiEA+UxmdIg7AfJFhqO5C1kPTxWa9ZTPAczbbb9rXmkdBxs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinuz7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLgQ//RGLFb+ALHD19ZECD55Y8HLnJtlqWlJSZMbALlqa5KpKspS/V\r\nZiMNnV8ekRMEDjFM0oCyw2MnzhXab9glpwHtNEVCt8yQDgUJJAxJYwxpNcM5\r\nTayA2PMDkym0Q4X3j7BWk1WA/hYZ1/SJNiBLI20YTsdDLq3eNoNYvrpsOkOR\r\nBDawUTIIXfzjDYljRE2axsFVV2LCyxbZH1N5dZ3oo0VIduOxrHgYkmWRvBsG\r\nqQz0oEQQdCQrkWrrE3MWKXtKBE2XyYLrif3Zqq1szgaOit+IIjkAZaLfNkHg\r\ncZdrS87x1C8J8dqkpXFrpdqI59uFsjBZJ/IhNozkyYisJahoirMbmKR2541f\r\nDWPE3yNFIi3rsLIXuRXMwBE2I7fUaUk9G/zCKEpra25yV2ilxHJhDDjbQMSm\r\n8vAtH3jxm8NJiuGp1muXdr2zmlOqGyZLqVRkpuQswiSO4o+GcDvPP4QVJBLy\r\nj33L5jQDxaqyQJceAfUNFLfA0o2Z45KVzj4dVkfaYerAYxDdVNejys/JtFTB\r\nHLyEjJNft+vOCgtAqYKH45kUWSJgTOVRwLoJbiYRzH1gKN1m9VRKNNSwGCCN\r\ndnZ/8JAWzGXZMQcOrmjJiu9v6sJBYAajKHeIA3464v0AvSSFdGldQgqP6WdD\r\nc7yLYkTaakLjnxDYsunfg7k8ARgTkrERAIE=\r\n=F5SE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220607061519.0_1654582523247_0.08339468597829192"},"_hasShrinkwrap":false},"2.0.10-p20220607061558.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220607061558.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220607061558.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-on2eGQTOjNyIKROPdIrRdXvdxqsZRv62anAz0LTBj+ByJiROU/CKJhD9mpXSXxLLleoCb3lI83CXu7dh6w9eSw==","shasum":"3a5a1aac6fcb8aa476c835ff69e7ebd18276f18f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220607061558.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBRUHy3PJUIDPjbn4rFw5/xugnHRPefKFb5fcORV1REAiEAkcN8zdmmv97B4i9KmXfRvRGUDIpBLuQJ3s98/jfxWxk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinu0iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr7Rg//YYi7oDz0rhWCjv5ZxQ7jPiGn4M4mdFmeDJvWaiIs6mRD1bB9\r\nhgKWoBBmtq8wgLkKP+EjjJqioiISXHAv1PLP9tkmtm4Qp5zuQVqpRfyeaLbn\r\nBbyiPuNvyZ1z8LADVNxKqyiYm2jt42Z8xAminwuneLKilwXUXgBsQTdB2zqp\r\nbmTcvErPoVy+sdCHtUxm0nwkgFOyihx9Mi3X1NIkS7Nc0WowT1eq8bR2x9/a\r\nTL//QsicfkA4KMLisTERNNDc93WnlsZAvmZ8Lmwaixjo+IHUaRblzhuMNpC+\r\nIE0ovck7hdzfdvavaciUuYAc6XbO90Vsj4zGEJolE5jMvqyiZjlQxpDDuSz2\r\nBv0dPuE2w5VJmCMxfyVF1Cv2qF8Y4e2LBTJDZlvxd9JbeCSOvC1TI2Wbs8k8\r\n/QXXixasKGaohIXSbXXqGcW3TwJqXnRxx2q4hMKfm8g29RpQhgtz0eagVlld\r\nFun+ffZ/LezUP70Tgi/MxCMJXEVqSAFnlQrpHxoCEszKiNzTM+MeutFJAvps\r\nCIAHwrip6raaPfo5Fs6ZVfQC6D93nypec4PETYduXTBBjMvkaI7UskSjse+5\r\nrE2EZv++y4vRi/wY+K3pTVf4W27EJpWJEXPehbo4XYwgqQZrwUV+egQXQ/zm\r\n+fHnygMT/tB1Lg3R/+17mpaiWlcTov/zd4U=\r\n=VzUq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220607061558.0_1654582561936_0.40711370914672074"},"_hasShrinkwrap":false},"2.0.10-p20220629140134.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220629140134.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220629140134.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-TTZ3Z7hoNTuGI3qTnLbukbdItuGqhJEoXUMyGY/sm/lwBCATT+TnkEgPPUgRhpjX6NjlXfbh1HT3Jq1Ndo6/Tw==","shasum":"178a555930d6e418c80de015072165faa581fabb","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220629140134.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHLPawxmE+KihoROd45Rcm5PNltQOsp4muaODzn74Nm8AiEA83DpVRrubcZXfJd1h4Zii7Dro3uxtFNzqs9UHd4M0Yg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivFtCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLRhAAgrsDUhXjTpGb/mvBO0dB3vLIX3hdMNg8yM73kz56JwmNELkR\r\nqpfdeGnLXE06jLiIx8mpX+zY6Bvn4Aj9xElGTu09fhKtmGNbAX7UzhGOERyW\r\nkYU45tPrc0YUAwvXc6hmQELX6eiWvN2vuy/8dkO+Z3tDBEdkX2V3FOMix0My\r\nElSgARDG0bgFIxYM41CMV/MiRXYh2BAx255B99zhflfPWe+DFr/uy8GdQYW5\r\ng9Pa5dPMzDzkzmoMQsAhy9laTdI0rsFoNOJWDpv8tFBo268wpkYslOK8Yerk\r\njLRHlbamGtnSZSw04pJ87FR/CbxFkzewzSR5xkKw47Rb2psrSMRsNHuHjwXK\r\nW5Qnbf9IpODM/OYu9xFu85vEQDeReAosSxDHTAP+wkJIzoch/k61dy0CxE2S\r\nt+MmQbKfB5Ugq2Cq7iKhcqJoaYPY+u0jKUT3yxbtg6tAChwZxNuO2VoVcG73\r\nz4Hw0d70+fnBtbmiPcS1lRDnBmA2Zrr+PoTd8iI9i5F+64fEu1XZkXv8kCHV\r\n5rWuPLerlBl2pEMNdMZ2dvPeeCjDDMJnmr9KeSglQNb/bHztH0k0MFstXmRr\r\nS/xdYIGPVhiBhicUIxSK9mo5NV/SKR6zuAakUAfyBWaUiHZ9S78PFa9FZ3/i\r\nvBPkxt8SHC1RZi0OXXJX+EJJvM5YXVoFLMk=\r\n=MhXI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"christian.grigis@epfl.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220629140134.0_1656511298239_0.5200822629461066"},"_hasShrinkwrap":false},"2.0.10-p20220803064804.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220803064804.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220803064804.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-tEKcWa3HqbUVyV0xaCyEwemqr4V2kMBO+jPaQny0Nind8UPckgoMdQFFOVhD6Xk2YYEtmksxCcAH1kbIjMTkJA==","shasum":"60b6da74b0a774d8348b3854b18889e8d451eb98","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220803064804.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHq/QVv/MhMdp4yBGaYH4l0qUn5eKHqYWO4LYcYN0yseAiEA2bc1qRNYy5NNmRWkrtYZDhGf/X/XqcH8//gFDWf60mY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6hooACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrB1A/+IiZyg9vir7JyLOM3AEyZegtsak4cFYP0aHb8nnIzE8xIO/fP\r\nC+zkdpmm1+Ac9Qh7V6W2LKKrVnsLiOxV0SLh2bRyhvOn9on3RaLeKllohLRP\r\nSMhyGJOaCvquzBgwjOysUYaV/O1Qw4rj6yWB1MT4cSfYXAIRgZUtshE/Ek3U\r\nyPf2fvYtJ0p+IVtYrlCLpsjzwlZlHFFSeTNsBWlDPstZvfSO6t4lECfcYzaM\r\nVqHtlXdO6Urn9/NrTK7JGE+LXdDC9QTwztfdDPbmU+ekwg5U4bSTA5EtktbW\r\nwtrSH4W7kl5+qxJuomyCrsVNU1kTPpbA7oV3Zz3MJLdXje9WOxJbQdAteSYS\r\nlYhseDML5DlaSCp7h0j8kjm0GVU5U6RWjkH/wv/CrvtxDDc+tL0ZpR4fP0P3\r\n7InoTJrYwAKPqYnpKZkhZvmA+JRCLw0dP8KVymIGlhsxTGwyCLLdMSMvFFM9\r\nQrqFTCbPOLxYhO4TF6mZ848BLIb01FQbs698hrxrhDzqhur3mJeLrfeFVyk4\r\nDJUReTNwGJWsjBzKQVq1qN6ip67HDAKMfZDdBdGiTXzvAoxfqDEMiI3+SkRx\r\nJL3E2vD3GVGq3QOhVBfA7lqV+1mDNedpQwil2O/5IxD5+FQeApPnMSDd3KDj\r\neIO+HKTljBN5wbW+5qx6UNyCWelULMzd1Kw=\r\n=vYPI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220803064804.0_1659509288297_0.18881875392897318"},"_hasShrinkwrap":false},"2.0.10-p20220804061015.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220804061015.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220804061015.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-1J1Wd3t5F1oUWl5NbLCdysp9Ielq84FGxIGqebAa7Gw4t/kC6d13EMJ9ZhxY9ieOw/Bh+I1CS96LaOkx254rVw==","shasum":"d121b3f338d1434ee5c8aa9cc2c869f6a5698c40","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220804061015.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqlygqQaiDMK6i8R/V1GIqu+Zs3eczNRnJEwPJZ9OgwAiEArvUylQvolxgUxFxNV24Umk/vAFllhYIhCzYfIQRatWA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi62LLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpCTRAAhYnefGgCXD9KBGqi0rJ+U/Wfanh3iy2KXJyNhs5sw7rNKURE\r\nKykuV9BsjJ9Ibfc3Oy0iZCdA7VcHV+3b2oiAwtdwOI1csYKZ8iRTmj6yoB2h\r\nubYLeSIQn5MyUkh/mcTfm8TDqtxtDLpAYsnTzJr5qxYXMbQSzRsHFEZiBnYC\r\n0U7kWZs/9Ix0FIYuXFHtMDMrwl1XpcluETHguxqH4fAuUusWLWYgMiOFvI5A\r\n8mXJGQ0OGxXa1avNpXPIjjM9pXB4BWOdGrWvrv/jUYBPApDy+EZS9oadO3S3\r\nq6HpETfCgGH8tnbvu1XH1hRf5E8drNnnqlkf4en+5VKo3PhxmBzA+KMB/+05\r\njDk0jZ+KW9dU8WZ1POm4e96Ey8Cq9KVgB8bDMjQ3dBuUVbgLaMIIWQ7THnmH\r\nnIaW02qbP2VVN0qpHsSZY3ljJfwk20HYt7cZ+hxaL24mfRQDHm0re0gR3lSt\r\ngIup+TxqzgYCG582TqqRHaCRleWn/TEKf/nU6dPhWAtJ5qs4SRjENlJjzjUh\r\nPO0wuLfYout2xPkpdwtvXHt+PDXUEhka7NPs3IiuBwGcPP1HRK+9APOfvrVb\r\nSqbaLQs/lcgJytAV2u/RrRtFFCqmFWvFnbuO2CMCZeCkG9v9N0NUEp1fzJRJ\r\nMmEXiaHCLH5F4OtGL+WI1A2PljLi0SxvVCE=\r\n=V5kI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220804061015.0_1659593419386_0.34080867610354715"},"_hasShrinkwrap":false},"2.0.10-p20220804061033.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220804061033.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220804061033.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-NUatKXngVmtbMl/LaGSiy8ZKFOtFqL/849WqCTLZZuZfgy+mKknIhOcxjnftUUDkL77t674gpCtX9ENdmJE+FA==","shasum":"1bcf0f8b788099389cfb0ba63ee4a5949521bba1","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220804061033.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqMqGbn2fq1ekz8vuDoCbAn53IwopAOxRo4d5nhlbXZQIhAM18fFC1lG9luBcOiD+bstdGvlgtjuZfPziar4m1lyQj"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi62LdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrlhw/8DisVMnPvJPB8nmRYBziNOqsAnXJ2md2JOn4jDrtKhKVlCtNP\r\njiDrfhG8SBuqRb1KD90AMJ0ZZMBu/qRzhg68OjVtwOJQNn9p8n6kbw4THF5U\r\ndqS1jYli7WFKyhYiSUty6xHc8jdtZE/vsRGa9rUIB8UifPOPLydJem7h+7lT\r\ncDpHkwmbx4MMLbFJCduMNaM6FGZT9vs9GbVtTlTYo5OUZIENhFpsu+e7ELDY\r\nR5hXxNKURSW3TYjj8ApMytSRne8nHLCpyZqpyVLJPTrgA4G5gKqcO55aqmzD\r\nLrZkcXxFD4PoH9sFvLj8cle8s7Flq3o2cbm17eV36d53mxXtnjYFDBv4oSfH\r\n6Gdp+GQLXrQ3BpzPOqoUZ98W/4eMGkWtN+Pedx9UbTR7MAQl2kAIy96nIBzc\r\nitM6tpzSgHUrzvBQFG5LpN+afLUW7R3HMSAm0I5+W2L3TChHuEW4As+joEXC\r\n0DjG8HHucNiiYfMa12mL7ooywpYHUcArjc/ezuj20hvPlhiHZX0WLsRcoU/z\r\n7PcWFHQRbVmlb/5RApOdVlkKMEzlGv+8qiGrHnduc4pN3OAKrAIW1cwCYeee\r\nDV5rbimKLDKSBO+BP/IpCpXyw62tpgzu57FOl2biC6zRjmR+dQk2mHzY8pvG\r\n58PKYztUpKyP2anDGbBYMfJs+t+kk1uzTxA=\r\n=ikX4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220804061033.0_1659593437309_0.5369862412832151"},"_hasShrinkwrap":false},"2.0.10-p20220824151536.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20220824151536.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20220824151536.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-0RF7pause7pT9CG2wkaC0W5k1Go4ZEnmTGgb9TiTjrXpUtmp/4OqrKAuGUkFHtRV8768DDLyauNXAWoDeTE6pw==","shasum":"6ed959cb441c65969faaf6a0f7a7c34d157c394f","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20220824151536.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDai3ai60G1m2kr5hkFNaEhKzkbbEU0vV2QhLS5QledwIgD/yKVhkGs+2bqsS8ETfvB7Ns77n7Tn5ou6mbszA9wJI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBkCdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpn0w//QLJJWQGZVV6kUcxWqVgSJRT7zjXmYF7/gxwluU1BskL1sZcz\r\n9fNYaMMrUX/Gz2SylrMW/oJFAMktP8iWc3i874iMqvv8XrSU8K/Y+KaCE0Nt\r\nX2/PDupLe4PR3ptLIuxqcb2msRRJrRNb/36hjDi0YbwDdT+gRUv8q9W97In9\r\n4qOgqQ+UgIAFjj+DY/08RlyAUE6AmTur297oLGUTSd4/Fli4pwrVvtwhXUt7\r\nqLF+VZHD0zj5lB1Y/BytbSQBODX5AMgzRdB4ofGuoU9et7gr8OyQsd2c520Y\r\nhCJ6gYRaIcWrnCV0FU2ARluaVjMhNyudrn2+50m8SSPG17q5Y++HltN0tpg5\r\na/qQKO+2XcwA6eksXVEuuSdTmoMM3ik9yUkf9ReejTwgyQp5jYBWMupdsLkV\r\nLnS4ACL99WfMri03NEhgIUulbpKqDYvPS7lCB5nbhg031cYDqCDINrBmpGwm\r\nqyUYraISlRI6spyDMg0agKjIfeEkQysGjdjTCJ5wO+XhLbXjJT2MnC67gL5g\r\nw5pLXnQgaj42xEUMRB1+ZA9kxiy6SOjIpd+MdE2e/5MprG10GPyRC+GsZK4M\r\nuZAH3t+zOxP1dlls7WFpkeIMqD79SNbyLZoEMnAfR2Vx1oqbY9kPeLtxkVsJ\r\nbYySBMEf2Q5oIFZ75r96UIgIZbXdnOBoUXg=\r\n=RkkC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20220824151536.0_1661354141416_0.873133557592517"},"_hasShrinkwrap":false},"2.0.10-p20221107145513.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20221107145513.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20221107145513.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-eMEFnqhT+gGljWdOLMjA7ZBk8aj31p8VQn+jUtAOYLIUCND2SqjNzmNO8TjG0Gp3fr9WMm9kViDD2Ekpn3b3kw==","shasum":"459d6ed0e64b6e2119cb49b17dd0f77987344f47","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20221107145513.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBBlA4YuitO+/GwqpNn2xO7mbA0ExRF9ZVKmzr+SWBc0AiBm0+hFHenE/0RQdIYTr0CsM7Q2J+aDXBLGJytj6a3Pfw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaRxXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmolBg//aCW5WMSUB+Oy+DHj4h9Ah50E8mRRU3poj/Ktb4VOYSklF/3k\r\n8PlnlMPCIjk0/vJseTBDVx/HLStZ48gsyilflv2Qx8BCewUkByxpcCIUaYLq\r\nrpRCwbORhVhHjyVNLwS5tTqunWEaAIN5fPgP7+y6OKVm5nPb8OzPhALwKzJv\r\n7+FzxSkDFkbB/hLVrXNYTmsXyp5KhL2tvLjaYXzMr1ce9nGcgtBZNqQ9zMse\r\nh+v1OV5JOKbTDALtc5XeL0V4A1+XKU4luFm6iK6OxNSip6g7xFiZNqEzWthw\r\n7h/dkVpdjKCB3jMIPXmQTHPtkWjMElxVNkIo/8KVuwJnXcpYPSfxXtuTuet5\r\n9/SPC0YAofyQQYbjF9wyagv4qlCeQhlIlkOxmHRbs1rM8nUh7ISOPubSYTz1\r\nAfhrgSJNmuDHsot8WQN8+SXvo1mJE6xvdzehR+19d1K2os8lWoY3FJO+xS5O\r\n2GXLVjze1QPJaYXJk1r5mZ1eqTaAR7XZdiZv3+qRbTiPrPuX4LOl11wWThEU\r\nsNgpmIqcYGTG2qUWgr1xe5mOMnh+xgAb9awDfcWfjbblV2+T0y5Amn1FGsFZ\r\nxzzvdluVFIMDwkytKw0zq8ekJ9iQJhdAP9QVsHyat0KDK5GicbzPtsLbkqcw\r\nnRJ09wcbY0lrY7IDOtmP04G+AL+GaPlSgBE=\r\n=OEwn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20221107145513.0_1667832919644_0.13632204189959518"},"_hasShrinkwrap":false},"2.0.10-p20230914072535.0":{"name":"@c4dt/dynacred","version":"2.0.10-p20230914072535.0","repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"description":"New dynacred library based on observables, as everything can change","main":"build/index.js","types":"build/index.d.ts","scripts":{"build":"tsc","lint":"tslint --project . && tslint --project tsconfig.spec.json","lint:fix":"tslint --fix --project . && tslint --fix --project tsconfig.spec.json","test":"ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine"},"keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"author":{"name":"Linus Gasser"},"license":"AGPL-3.0-or-later","dependencies":{"@dedis/cothority":"^3.6.6","@dedis/kyber":"^3.4.4","bn.js":"^5.1.2","crypto-browserify":"^3.12.0","elliptic":"^6.5.2","long":"^4.0.0","rxjs":"^6.5.4","toml":"^3.0.0","url-parse":"^1.5.3"},"devDependencies":{"@types/dockerode":"^2.5.21","@types/jasmine":"^3.5.0","@types/long":"^4.0.0","dockerode":"^3.3.1","jasmine":"^3.5.0","nyc":"^15.0.0","ts-node":"^7.0.1","tsconfig-paths":"^3.9.0","tslint":"^5.20.1","typescript":"^3.7.4"},"readme":"# Dynacred - the OmniLedger Wallet\n\nThis library implements a wallet in TypeScript that can be used to hold the private keys and to communicate with the \ninstances in OmniLedger.\nYou can find a short summary of what OmniLedger can do here: https://c4dt.org/article/omniledger\nDynacred uses different smart contracts in OmniLedger to implement a simple user account system that can do the \nfollowing:\n- delegate operation on the account to other devices (browser, mobile phones, mobile app)\n- keep ids of other accounts\n- define Decentralized Access Rights Control [DARC](https://c4dt.org/article/darc), which can be used to\n    - define recovery options\n    - authenticate using CAS, compatible with WordPress, Matrix, Apache\n    - protect [Calypso](https://c4dt.org/article/calypso) encrypted data\n- encrypt and decrypt data using [Calypso](https://c4dt.org/article/calypso)\n\nOne of the next steps we'd like to do is to add access to the ByzCoin EVM, so that the wallet can be used to interact\n with the BEVM.\n \nFor more information about dynacred and byzcoin, see [DYNACRED](DYNACRED.md).\n \n## What the wallet stores\n\nThe wallet itself is stored on the OmniLedger blockchain.\nTo access your wallet and modify it, you need to sign transactions with a private key to authenticate.\nDynacred stores your private key in the browser-DB.\nAs such you need to run your scripts always from the same host, else the library will not find the private key.\n \n## Start with Dynacred\n\nThe easiest way to start with dynacred is to ask linus.gasser@epfl.ch for an account. \nYou'll receive a link that can be opened in a browser and that will store the private key in your browser.\nOnce your set up you can start using the dynacred library in your own projects.\nAn example project is the [WebApp](../webapp), which uses nearly all of dynacred's functionalities.\n\n# Library structure\n\nThis dynacred version makes extended use of rxjs observables to implement a reactive dynacred.\nThe library only needs to have the `credID` and the `privateKey` of the user.\nAll the rest is kept up-to-date by looking it up on the blockchain.\n\nEvery user has its own instance of the `User` class.\nIt needs access to a db (from the browser or mobile app) and to a `ByzCoinRPC` instance.\nThe `User` class is mostly an object with references to instances for all the user can do.\n\n## Global State, Transactions, Blocks, Contracts, and Instances\n\nA short recap of how the ByzCoin blockchain works.\nFrom a data perspective, ByzCoin is inspired heavily from Ethereum.\nEvery ByzCoin node holds a copy of the `Global State` that reflects all the data known to the nodes.\nTo change the global state, a client must send a `Transaction` to one of the nodes.\nAll `Transaction`s are collected in `Blocks` that describe how the `Global State` evolves.\nOnce all nodes accepted the new `Block`, the new `Global State` is available.\n\nThe `Global State` holds a number of `Instances`.\nEvery `Instance` holds the following information (summarized):\n- `ContractID`: points to the hardcoded behaviour of this instance\n- `Data`: holds the updated state of this instance\n- `DARC`: defines the invokable methods on this instance and how the rights are verified\n\nThe ByzCoin blockchain has a fixed number of `Contracts` that can only be changed by modifying the code of the nodes.\nTo allow for user-defined contracts, ByzCoin includes a full-fledged `Ethereum Virtual Machine`, `EVM`.\n\n## Caching of the instances\n\nA simple cache keeps track of all known instances and stores them locally.\nWhenever a new block is created, the library is informed and updates all instances that have been changed.\nEvery update to an instance triggers a `next` on all `Observable`s that are linked to it.\nUsing a web-frontend that is aware of `Observable`s, e.g., Angular, you can keep all values up-to-date by using the \n`cred.alias | sync` pipeline.\n \nIf the library starts with a warm cache, all information is already available to the app.\nAs this information might be outdated, the first step is to fetch all updates from the blockchain.\nOnly the updated parts will be contacted.\n\n## Modifying the Global State\n\nEvery method in dynacred that modifies the `Global State` needs to create an instruction.\nAll instructions are collected in a `ClientTransaction` and then sent to one of the nodes of ByzCoin.\nTo simplify the collection and the signature of these `Instruction`s, dynacred uses the `CredentialTransaction` class.\nIt abstracts the collection of the instructions and the signing of the final `ClientTransaction`.\n\nThe following is an example of the caller creating an observable on the `user.coinBS`, and then sending some\ncoins to another account:\n\n![Roundtrip](./roundtrip.png)\n\n### Details of Transactions and Instructions\n\nA `Transaction` is made up of one or more `Instructions`.\nEvery `Instruction` has a `Type` and is sent to an existing `Instance`.\nThe `Type` can be one of:\n- `Spawn`: create a new instance\n- `Invoke`: call a method on an existing instance\n- `Delete`: remove an instance\n\nEvery `Instruction` needs to be signed by a key that can be verified by the corresponding `Rule` of the `DARC`.\n\n## Class structure\n\nUser is the basic class that holds references to all other classes that make up a user:\n\n```\nUser\n  + credStructBS: CredentialStructBS        // Holds all publicly available data from the user\n  + coinBS: CoinBS                          // The coin instance of this user\n  + addressBook: AddressBook                // A list of all other credentials known to this user, including\n                                            // groups and actions\n  + credSignerBS: CredentialSignerBS        // All devices having access to this credential\n  + spawnerInstanceBS: SpawnerInstanceBS    // A link to the spawnerInstance for creating new instances\n  + kpp: KeyPair                            // The keypair for this device\n```\n\nAll the user's information are represented by the `CredentialStructBS` class.\nThis structure holds different information about the user and IDs of instances that also belong to the user.\nAll other instances of the user are represented by their own class:\n- `coinBS`: is the main coin of the user\n- `addressbook`: holds the `CredentialStructBS`s of the addresses found in `credStructBS.credPublic.contacts`\n- `credSignerBS`: references all device-DARCs that can modify this credential\n- `spawnerInstanceBS`: holds the spawner that can spawn new instances if paid for with the coin\n\n\nThe following two helper classes are used throughout the code.\n`ByzCoinBuilder` can retrieve existing instances from ByzCoin to make them available locally.\n\n```\nByzCoinBuilder > ByzCoinBS\n  - retrieveUser(|By(Ephemeral|URL|Migration|DB))\n  - retrieveAddressBook\n  - retrieveUserKeyCredID\n  - retrieveCoinBS\n  - retrieveCredentialSignerBS\n  - retrieveDarcsBS\n  - retrieveDarcBS\n  - retrieveSignerDarcBS\n```\n\n`CredentialTransaction` is a helper-class to change the state of ByzCoin.\n\n```\nCredentialTransaction > Transaction\n  - sendCoins\n  - spawnDarc(|Basic)\n  - spawnCoin\n  - spawnCredential\n  - createUser\n```\n\n### Basic credential structure definitions\n\nThese all stem from the `CredentialStruct` class and allow an easy way to access eventual updates to the values. \nNo interpretation is done that requires to query byzcoin.\nSo you'll find `Buffer` and `InstanceMap`, but no `Darc` or `Coin` in these definitions.\n\n```\nCredentialStructBS > BS<CredentialStruct>\n  + id, darcID\n  + CredentialPublic\n  + CredentialConfig\n  + credDevices: CredentialInstanceMapBS\n  + credRecoveries: CredentialInstanceMapBS\n  - getCredential(|InstanceMap)BS\n  - (update|set)Credentials\n```\n\n```\nCredentialBS > BS<Credential>\n  - getAttribute(|BS|Buffer|String|InstanceSet)\n  - setValue\n  - rmValue\n```\n\n```\nCredentialInstanceMapBS > BS<InstanceMap>\n  - setInstanceSet\n  - setValue\n  - rmValue\n```\n\n```\nAttribute(Buffer|String|Long|Point|Bool|Number|InstanceSet)BS > BS<*>\n  - setValue(T)\n```\n\n```\nCredentialPublic\n  + contacts, alias, ...: Attribute*BS\n```\n\n```\nCredentialConfig\n  + view, spawner: Attribute*BS\n```\n  \n```\nInstanceSet\n```\n\n```\nInstanceMap\n```\n\n### Structures that fetch more information from ByzCoin\n\nAs the `CredentialStruct` class points to other byzcoin-instances, these classes allow to interact directly with \nthese instances.\nEvery one of these classes gives a `BehaviorSubject` access to the underlying byzcoin-instances, as well as methods \nto `WORM` the bc-instances.\n\n#### AddressBook\n\nThe `AddressBook` represents the following DARCs of the `CredentialStruct`:\n- `credPublic.contacts` as `ABContactsBS` - links to other credentials the user knows\n- `credPublic.groups` as `ABGroupsBS` - groups the user follows\n- `credPublic.actions` as `ABActionsBS` - actions, which are DARCs + a coin-instance for actions like login\n\nEvery field is set up as a `BehaviorSubject`, which means that there is a `getValue()` method to get the current \nvalue, but also a `.subscribe()` to be informed if anything changes.\nIf an element is removed or added, the `BehaviorSubject` calls `next` method on all observers.\nIf an element is changed, only the `BehaviorSubject` of this element is updated. \n\n```\nAddressBook\n  + ABContactsBS\n  + ABGroupsBS\n  + ABActionsBS\n```\n\n```\nABContactsBS > BS<CredentialStructBS[]>\n  - create, link, unlink, rename\n```\n\n```\nABGroupsBS > BS<DarcsBS>\n  - create, link, unlink, rename\n```\n\n```\nABActionsBS > BS<ActionBS[]>\n  - create, link, unlink, rename\n```\n\n```\nActionBS\n  + DarcBS\n  + CoinBS\n```\n  \n#### CredentialSigner\n\nThis class holds all `device`s and `recovery` darcs.\nThe `CredentialSigner` class itself inherits `DarcBS`, so it follows changes to the class\nitself.\nA `device` and a `recovery` are quite similar, in that both allow full control of the\n`CredentialDarc`\n\n```\nCredentialSigner > DarcBS\n  + devices: CSTypesBS\n  + recoveries: CSTypesBS\n```\n\n```\nCSTypesBS > DarcsBS\n  - create, link, unlink, rename\n```\n  \n### Classes that could be integrated in dedis/cothority\n\nThe following classes are generic and could find their way into @dedis/cothority\nnpm.\nEvery class representing an instance is a `BehaviorSubject` that gives an eventually\ncached version of the instance, and calls `next` for every new version of the instance.\n\n```\nDarcsBS > BS<DarcBS[]>\n```\n\n```\nDarcBS > BS<Darc>\n  - evolve\n  - (set|add|rm)signEvolve\n```\n\n```\nCoinBS\n  - transfer\n```\n\n```\nTransaction\n  - send\n  - (spawn|invoke|delete)\n```\n\n## Next steps\n\n- calypso support for identity attributes (email, webpage)\n- sharable address-book\n- BEvm support\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"homepage":"https://github.com/c4dt/omniledger#readme","_id":"@c4dt/dynacred@2.0.10-p20230914072535.0","_nodeVersion":"12.22.12","_npmVersion":"6.14.16","dist":{"integrity":"sha512-wfP41Uqc3mbMw8h8LUNQx6pSw4biGuhuGbNJ01tRIs5oy3hIDxRNc2bIUDHvUPDn4uee1h0eZeavMMngIdtIpw==","shasum":"1e9c72f55eca4bb1181c87f9fdcb6c4d84ecf18b","tarball":"https://registry.npmjs.org/@c4dt/dynacred/-/dynacred-2.0.10-p20230914072535.0.tgz","fileCount":48,"unpackedSize":500968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgdx6IVNmfXJb0hEL0J7yCXjEJhFRgvd/OKr9BcqGiCAIgFL3bAwaYlCFdQ3x4rskawQ6Jzlw7guA0475QbmtBMdA="}]},"_npmUser":{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},"directories":{},"maintainers":[{"name":"ineiti","email":"ineiti@gasser.blue"},{"name":"tharvik","email":"valerian.rousset@gmail.com"},{"name":"c4dt-bot","email":"c4dt-services@listes.epfl.ch"},{"name":"cgrigis","email":"glove@grigri.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dynacred_2.0.10-p20230914072535.0_1694676339996_0.3251670649475129"},"_hasShrinkwrap":false}},"time":{"created":"2019-06-26T15:50:02.572Z","0.0.1":"2019-06-26T15:50:03.026Z","modified":"2024-05-01T15:08:20.332Z","0.0.2":"2019-06-27T11:02:07.588Z","0.0.3":"2019-06-27T12:54:44.863Z","0.0.4":"2019-07-02T09:32:50.836Z","0.0.5":"2019-07-03T09:29:49.530Z","0.0.6-2019.7.9.14.16.0":"2019-07-09T13:12:31.168Z","0.0.6-p20190709152243.0":"2019-07-09T13:23:02.374Z","0.0.6-p20190709152317.0":"2019-07-09T13:23:34.348Z","0.0.6-p20190709170749.0":"2019-07-09T15:08:05.945Z","0.0.6-p20190709171718.0":"2019-07-09T15:18:21.722Z","0.0.6-p20190709173931.0":"2019-07-09T15:39:45.755Z","0.0.6-p20190709174720.0":"2019-07-09T15:47:47.859Z","0.0.6-p20190710110334.0":"2019-07-10T11:04:51.961Z","0.0.6-p20190711080705.0":"2019-07-11T08:08:22.976Z","0.0.6-p20190712112616.0":"2019-07-12T11:27:30.727Z","0.0.6-p20190712132111.0":"2019-07-12T13:22:32.459Z","0.0.6-p20190715071336.0":"2019-07-15T07:14:53.325Z","0.0.6-p20190715072530.0":"2019-07-15T07:26:44.338Z","0.0.6-p20190715075149.0":"2019-07-15T07:53:07.441Z","0.0.6-p20190715080948.0":"2019-07-15T08:11:05.933Z","0.0.6-p20190716103733.0":"2019-07-16T10:38:48.321Z","0.0.6-p20190722082656.0":"2019-07-22T08:28:12.781Z","0.0.6-p20190722090350.0":"2019-07-22T09:05:08.211Z","0.0.6-p20190722093026.0":"2019-07-22T09:31:39.792Z","0.0.6-p20190723093108.0":"2019-07-23T09:32:29.198Z","0.0.6-p20190730113622.0":"2019-07-30T11:37:38.982Z","0.0.6-p20190807155334.0":"2019-08-07T15:54:50.924Z","0.0.6-p20190807162005.0":"2019-08-07T16:21:17.312Z","0.0.6-p20190808084312.0":"2019-08-08T08:43:47.029Z","0.0.6-p20190808085341.0":"2019-08-08T08:54:15.143Z","0.0.6-p20190808113845.0":"2019-08-08T11:39:23.327Z","0.0.6-p20190808120818.0":"2019-08-08T12:08:52.303Z","0.0.6-p20190812161512.0":"2019-08-12T16:15:47.692Z","0.0.6-p20190820091731.0":"2019-08-20T09:18:07.306Z","0.0.6-p20190820093325.0":"2019-08-20T09:33:59.052Z","0.0.6-p20190820143708.0":"2019-08-20T14:37:45.774Z","0.0.6-p20190828090452.0":"2019-08-28T09:05:27.665Z","0.0.6-p20190828094256.0":"2019-08-28T09:43:33.914Z","0.0.6-p20190905061939.0":"2019-09-05T06:20:18.908Z","0.1.1-p20190905065156.0":"2019-09-05T06:52:30.758Z","0.1.1-p20190906154027.0":"2019-09-06T15:41:06.825Z","0.1.1-p20190909103911.0":"2019-09-09T10:39:48.115Z","0.1.1-p20190911112226.0":"2019-09-11T11:23:03.082Z","0.1.1-p20190911125059.0":"2019-09-11T12:51:33.557Z","0.1.1-p20190924080421.0":"2019-09-24T08:04:57.898Z","0.1.1-p20190924080609.0":"2019-09-24T08:06:45.141Z","0.1.1-p20190924081053.0":"2019-09-24T08:11:32.721Z","0.1.1-p20190925095637.0":"2019-09-25T09:57:16.613Z","0.1.1-p20190925103235.0":"2019-09-25T10:33:14.746Z","0.1.1-p20190925141545.0":"2019-09-25T14:16:25.236Z","0.1.1-p20190925141746.0":"2019-09-25T14:18:24.376Z","0.1.1-p20190925142245.0":"2019-09-25T14:23:25.419Z","0.1.1-p20190925151049.0":"2019-09-25T15:11:48.542Z","0.1.1-p20190927103652.0":"2019-09-27T10:37:28.542Z","0.1.1-p20190930080204.0":"2019-09-30T08:02:45.784Z","0.1.1-p20190930080305.0":"2019-09-30T08:03:47.705Z","0.1.1-p20190930115955.0":"2019-09-30T12:00:31.064Z","0.1.1-p20191001132941.0":"2019-10-01T13:30:18.735Z","0.1.1-p20191003114417.0":"2019-10-03T11:44:52.522Z","0.1.1-p20191003130802.0":"2019-10-03T13:08:39.989Z","0.1.1-p20191003135448.0":"2019-10-03T13:55:29.370Z","0.1.1-p20191007084439.0":"2019-10-07T08:45:16.135Z","0.1.1-p20191008090849.0":"2019-10-08T09:09:29.086Z","0.1.1-p20191008114336.0":"2019-10-08T11:44:13.626Z","0.1.1-p20191009090723.0":"2019-10-09T09:08:01.025Z","0.1.1-p20191010083636.0":"2019-10-10T08:37:15.211Z","0.1.1-p20191023044514.0":"2019-10-23T04:45:50.858Z","0.1.1-p20191029102623.0":"2019-10-29T10:27:00.979Z","0.2.0":"2019-11-16T13:17:47.205Z","0.2.1":"2019-11-16T13:20:23.291Z","0.2.2":"2019-11-16T13:52:24.952Z","0.2.4":"2019-11-16T13:55:51.909Z","0.1.1-p20191118075310.0":"2019-11-18T07:53:48.377Z","0.1.1":"2019-11-18T16:51:59.852Z","0.3.0":"2019-11-18T16:52:40.362Z","0.3.1":"2019-11-19T10:06:00.008Z","0.1.1-p20191127084700.0":"2019-11-27T08:47:36.082Z","0.1.1-p20191127100156.0":"2019-11-27T10:02:37.233Z","0.1.1-p20191128120222.0":"2019-11-28T12:02:59.033Z","0.3.3-p20191206120653.0":"2019-12-06T12:07:28.801Z","0.3.2":"2019-12-06T12:42:34.755Z","0.3.3-p20191209090703.0":"2019-12-09T09:07:40.390Z","0.3.3-p20191209092010.0":"2019-12-09T09:20:49.549Z","0.3.3-p20191212172233.0":"2019-12-12T17:23:10.201Z","0.3.3-p20191213153220.0":"2019-12-13T15:32:57.781Z","0.3.3-p20191213154611.0":"2019-12-13T15:46:40.685Z","0.3.3-p20191213165611.0":"2019-12-13T16:56:42.732Z","0.3.3-p20191213202407.0":"2019-12-13T20:24:45.274Z","0.3.3-p20191216150102.0":"2019-12-16T15:01:37.909Z","0.3.3-p20191217084311.0":"2019-12-17T08:43:47.437Z","0.3.3-p20191217092420.0":"2019-12-17T09:25:01.629Z","0.3.3-p20191217134328.0":"2019-12-17T13:43:58.487Z","0.3.3-p20191219111936.0":"2019-12-19T11:20:08.547Z","0.3.3-p20191220140851.0":"2019-12-20T14:09:22.484Z","0.3.3-p20200106174612.0":"2020-01-06T17:46:42.227Z","0.3.3-p20200107085043.0":"2020-01-07T08:51:14.536Z","0.3.3-p20200117132932.0":"2020-01-17T13:30:04.363Z","0.3.3-p20200117173309.0":"2020-01-17T17:33:39.713Z","0.3.3-p20200120110853.0":"2020-01-20T11:09:25.661Z","0.3.3-p20200120124448.0":"2020-01-20T12:45:20.469Z","0.3.3-p20200120141533.0":"2020-01-20T14:16:05.528Z","0.3.3-p20200122125835.0":"2020-01-22T12:59:07.759Z","0.3.3-p20200128065310.0":"2020-01-28T06:53:42.310Z","0.3.3-p20200203155355.0":"2020-02-03T15:54:30.162Z","0.3.3-p20200206071501.0":"2020-02-06T07:15:34.829Z","0.3.3-p20200206075108.0":"2020-02-06T07:51:41.657Z","0.3.3-p20200214132139.0":"2020-02-14T13:22:13.535Z","0.3.3-p20200228114508.0":"2020-02-28T11:45:43.988Z","0.3.3-p20200302154217.0":"2020-03-02T15:42:48.818Z","0.3.3-p20200309073939.0":"2020-03-09T07:40:09.169Z","0.3.3-p20200309145001.0":"2020-03-09T14:50:32.095Z","0.3.3-p20200309220554.0":"2020-03-09T22:06:24.392Z","0.3.3-p20200309222531.0":"2020-03-09T22:26:04.084Z","0.3.3-p20200310103551.0":"2020-03-10T10:36:26.077Z","0.3.3-p20200310111257.0":"2020-03-10T11:13:28.165Z","0.3.3-p20200312095450.0":"2020-03-12T09:55:22.042Z","0.3.3-p20200316170941.0":"2020-03-16T17:10:15.778Z","0.3.3-p20200317061117.0":"2020-03-17T06:11:48.082Z","0.3.3-p20200430124636.0":"2020-04-30T12:47:06.770Z","0.3.3-p20200513151638.0":"2020-05-13T15:17:09.842Z","2.0.1-p20200528155942.0":"2020-05-28T15:59:56.165Z","2.0.0":"2020-05-28T16:00:12.114Z","2.0.1-p20200528161746.0":"2020-05-28T16:17:59.670Z","2.0.1-p20200529044220.0":"2020-05-29T04:42:34.869Z","2.0.0-1":"2020-05-29T13:52:45.889Z","2.0.1-p20200531155008.0":"2020-05-31T15:50:21.182Z","2.0.1-p20200601061154.0":"2020-06-01T06:12:07.404Z","2.0.1-p20200601091327.0":"2020-06-01T09:13:41.243Z","2.0.1-p20200602053230.0":"2020-06-02T05:32:45.599Z","2.0.1-p20200602092428.0":"2020-06-02T09:24:42.187Z","2.0.1-p20200604092943.0":"2020-06-04T09:29:57.774Z","2.0.1-p20200608053637.0":"2020-06-08T05:36:51.184Z","2.0.7-p20200608120401.0":"2020-06-08T12:04:14.043Z","2.0.7-p20200608122115.0":"2020-06-08T12:21:27.390Z","2.0.6":"2020-06-08T13:53:39.833Z","2.0.7-p20200608155902.0":"2020-06-08T15:59:15.680Z","2.0.7-p20200609091851.0":"2020-06-09T09:19:04.988Z","2.0.7-p20200609101227.0":"2020-06-09T10:12:41.078Z","2.0.7-p20200609112050.0":"2020-06-09T11:21:03.898Z","2.0.7-p20200609143644.0":"2020-06-09T14:36:57.349Z","2.0.7-p20200615082048.0":"2020-06-15T08:21:01.296Z","2.0.7":"2020-06-15T12:02:41.310Z","2.0.8":"2020-06-15T12:27:34.473Z","2.0.9-p20200615123330.0":"2020-06-15T12:33:44.571Z","2.0.9-p20200619133521.0":"2020-06-19T13:35:35.326Z","2.0.9-p20200630082123.0":"2020-06-30T08:21:36.662Z","2.0.9-p20200720062539.0":"2020-07-20T06:25:52.163Z","2.0.9-p20200731071926.0":"2020-07-31T07:19:39.782Z","2.0.9-p20200731083511.0":"2020-07-31T08:35:26.892Z","2.0.9-p20200903054254.0":"2020-09-03T05:43:07.778Z","2.0.9-p20200911063502.0":"2020-09-11T06:35:15.025Z","2.0.9-p20200911104450.0":"2020-09-11T10:45:05.130Z","2.0.9-p20200922101817.0":"2020-09-22T10:18:32.852Z","2.0.9-p20201001070546.0":"2020-10-01T07:06:00.358Z","2.0.9-p20201204161121.0":"2020-12-04T16:11:34.277Z","2.0.9-p20210119065550.0":"2021-01-19T06:56:03.200Z","2.0.9-p20210315090424.0":"2021-03-15T09:04:37.214Z","2.0.9-p20210315121749.0":"2021-03-15T12:18:02.078Z","2.0.9-p20210315160757.0":"2021-03-15T15:08:03.274Z","2.0.9-p20210315155356.0":"2021-03-15T15:54:09.624Z","2.0.9-p20210315162832.0":"2021-03-15T16:28:44.743Z","2.0.9-p20210315165128.0":"2021-03-15T16:51:42.440Z","2.0.9-p20210316062907.0":"2021-03-16T06:29:21.392Z","2.0.10-p20211220152742.0":"2021-12-20T15:27:46.188Z","2.0.10-p20211220155021.0":"2021-12-20T15:50:24.771Z","2.0.10-p20211221141339.0":"2021-12-21T14:13:43.792Z","2.0.10-p20220318123246.0":"2022-03-18T12:32:50.821Z","2.0.10-p20220318125852.0":"2022-03-18T12:58:55.757Z","2.0.10-p20220318130819.0":"2022-03-18T13:08:22.287Z","2.0.10-p20220324074802.0":"2022-03-24T07:48:06.326Z","2.0.10-p20220330074933.0":"2022-03-30T07:49:37.393Z","2.0.10-p20220412112548.0":"2022-04-12T11:25:52.442Z","2.0.10-p20220412112606.0":"2022-04-12T11:26:09.401Z","2.0.10-p20220510061604.0":"2022-05-10T06:16:08.921Z","2.0.10-p20220510061620.0":"2022-05-10T06:16:24.002Z","2.0.10-p20220530073004.0":"2022-05-30T07:30:07.773Z","2.0.10-p20220601061115.0":"2022-06-01T06:11:19.118Z","2.0.10-p20220607061519.0":"2022-06-07T06:15:23.550Z","2.0.10-p20220607061558.0":"2022-06-07T06:16:02.169Z","2.0.10-p20220629140134.0":"2022-06-29T14:01:38.498Z","2.0.10-p20220803064804.0":"2022-08-03T06:48:08.532Z","2.0.10-p20220804061015.0":"2022-08-04T06:10:19.668Z","2.0.10-p20220804061033.0":"2022-08-04T06:10:37.522Z","2.0.10-p20220824151536.0":"2022-08-24T15:15:41.633Z","2.0.10-p20221107145513.0":"2022-11-07T14:55:19.845Z","2.0.10-p20230914072535.0":"2023-09-14T07:25:40.326Z"},"maintainers":[{"email":"ineiti@gasser.blue","name":"ineiti"},{"email":"valerian.rousset@gmail.com","name":"tharvik"},{"email":"c4dt-services@listes.epfl.ch","name":"c4dt-bot"}],"description":"New dynacred library based on observables, as everything can change","homepage":"https://github.com/c4dt/omniledger#readme","keywords":["dynacred","blockchain","identity","crypto","calypso","secret","darc"],"repository":{"type":"git","url":"git://github.com/c4dt/omniledger.git"},"author":{"name":"Linus Gasser"},"bugs":{"url":"https://github.com/c4dt/omniledger/issues"},"license":"AGPL-3.0-or-later","readme":"","readmeFilename":""}