Code Monkey home page Code Monkey logo

github-did's Introduction

GitHub DID

Build Status codecov Docs License GitHub forks GitHub stars

๐Ÿšง This is experimental, not endorsed by GitHub, and under development. ๐Ÿšง

^ This means don't trust signatures, messages or software related to this project AND don't import keys that are used for anything else.

GitHub DID

Decentralized Identifiers (DIDs) are a new type of identifier for verifiable, "self-sovereign" digital identity. DIDs are fully under the control of the DID subject, independent from any centralized registry, identity provider, or certificate authority. DIDs are URLs that relate a DID subject to means for trustable interactions with that subject. DIDs resolve to DID Documents โ€” simple documents that describe how to use that specific DID. Each DID Document contains at least three things: cryptographic material, authentication suites, and service endpoints. Cryptographic material combined with authentication suites provide a set of mechanisms to authenticate as the DID subject (e.g., public keys, pseudonymous biometric protocols, etc.). Service endpoints enable trusted interactions with the DID subject.

Install CLI

npm i -g @github-did/cli

Install Library

npm i @github-did/lib --save

Motivation

The github method is meant to make working with DIDs very simple at the cost of trusting Github.com for assisting in resolving DID Documents.

Many developers are familar with Github, and its 2 supported public key cryptosystems, GPG and SSH.

Linked Data Signatures are difficult to work with when operating a server or running a local node of some distributed system / blockchain is a requirement.

The objective of GitHub DID is to encourage contribution to the DID Spec and Linked Data Signatures, and allow rapid development of extensions to these without requiring the use of slow, or complicated more trustless infrastructure, such as blockchains or other distributed systems.

Getting Started

Next, you will need to install the cli to complete creating your GitHub DID.

npm i -g @github-did/cli
ghdid init "my-password" https://github.com/USERNAME/ghdid

If you mess up, you can overwrite everything with:

ghdid init "my-password" https://github.com/USERNAME/ghdid --force

Don't worry about this, its all experimental for now (which means be careful!)... This will automatically revoke (according to the DID Spec, not PGP!) all keys associated with your GitHub DID.

This will clone the repo into ~/.github-did/${repo}. Your wallet will be created, encrypted and stored:

~/.github-did/wallet.enc and ~/.github-did/web.wallet.enc

Your DID Document will be:

~/.github-did/${repo}/index.jsonld;

It will be commited and push automatically by init.

Using the auto signer Github Action

The auto signer Github action will check the proof property of the did document for every commit on master, verify the validity of the signature, and automatically commit a valid proof property if necessary.

In order to use it, you need to set your wallet and password in the Github secrets of your repo: Settings -> Secrets Add a new secret and add two secrets:

  • DID_WALLET: cat ~/.github-did/web.wallet.enc | pbcopy in order to copy the valud
  • DID_WALLET_PASSWORD: the password you passed in the init command

Resolve

Now that your DID Document is on Github in the correct repo, you can use the github did method resolver, and linked data signature verification libraries.

ghdid resolve did:github:OR13

This will resolve the DID to a DID Document by using Github and https.

The signature for the DID Document will be checked.

How does the DID Resolver work?

A DID Resolver is a simple async function which takes a DID and returns a promise for a DID Document.

This one works, by converting the DID to a path in a git repo and then requesting the json-ld document at that path.

const didToDIDDocumentURL = did => {
  const [_, method, identifier] = did.split(":");
  if (_ !== "did") {
    throw new Error("Invalid DID");
  }
  if (method !== "github") {
    throw new Error("Invalid DID, should look like did:github:USERNAME");
  }

  if (method === "github") {
    const base = "https://raw.githubusercontent.com/";
    const didRepoDir = "/master/index.jsonld";
    const url = `${base}${identifier}/ghdid${didRepoDir}`;
    return url;
  }
};

Notice there is nothing here about this repo (https://github.com/decentralized-identity/github-did), this is because the github method works with any github repo that is public, the identifier includes the details needed to get the did document from dids folder. If you want to create a new folder structure, you must create a new DID method, or convince us to change this one. Since this is all highly experimental, expect this to maybe change in the future.

What can I do with my DID?

Use your DIDs to test Linked Data Signatures, such OpenPgpSignature2019 which is currently being developed. When DID Documents are signed, they include a proof attribute, which is used to provide proof that someone controlled the private key associated with the public key listed in the did document at the created datetime.

For example:

{
  "@context": "https://w3id.org/did/v1",
  "id": "did:github:OR13",
  "publicKey": [
    {
      "encoding": "application/pgp-keys",
      "type": "OpenPgpVerificationKey2019",
      "id": "did:github:OR13#kid=ibHP1ksrJp5FQjP7hhmTXV7YE5o5bB6YFoODu9n_82E",
      "controller": "did:github:OR13",
      "publicKeyPem": "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\n\r\nxk8EXNhPhBMFK4EEAAoCAwSTAb5KPYRzxaQoplpY8olodfbG3OxFqm6ULA6p\r\nvaCxZLKVwd4XCwSL8XcMMrPb78kmDEk0H5/Jl0qpRteRoy8CzRdhbm9uIDxh\r\nbm9uQGV4YW1wbGUuY29tPsJ3BBATCAAfBQJc2E+EBgsJBwgDAgQVCAoCAxYC\r\nAQIZAQIbAwIeAQAKCRAeL9f86407tSxDAP4/dXtxQKQxAsURQmNxwwlD03YM\r\n778dcM753Y4f96jW7QEAkLEDur/hKPLKKdFAi/9TCKNQvr7GVk1wYeYeiHMi\r\nJ/fOUwRc2E+EEgUrgQQACgIDBA7fIkmeQmvaG6a5B3X808pdFStePh7+uevf\r\njWpXbDYYTsxARpBT/xb34m0wrXGo7DEG6pAknQ6NBWiXSWX7qTkDAQgHwmEE\r\nGBMIAAkFAlzYT4QCGwwACgkQHi/X/OuNO7U8gQEAn3/lFx3C7iqzVG2BJgtH\r\n08Oc3h0YPwYnZjM9NXDsvEgA/3v5C28Jhx10RFKi9NDxAPjilwBDOZqYPK/s\r\nW3qWhGNU\r\n=RgYO\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n"
    },
    {
      "encoding": "application/pgp-keys",
      "type": "OpenPgpVerificationKey2019",
      "id": "did:github:OR13#kid=jNeDDagaBn466F-wH26YdQ5_NiabBvOlXTv5xItQakU",
      "controller": "did:github:OR13",
      "publicKeyPem": "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\n\r\nxk8EXNhPhBMFK4EEAAoCAwRzQtkzDYQJy7xfHE0ld/Yoznx0q5bfVrx51FPG\r\nXzjd28wktnePW+3Riq0+3YUa09mZJWEuGPwrrGGXEqobjlVBzRdhbm9uIDxh\r\nbm9uQGV4YW1wbGUuY29tPsJ3BBATCAAfBQJc2E+EBgsJBwgDAgQVCAoCAxYC\r\nAQIZAQIbAwIeAQAKCRC0BtN9z0XDqWsSAQCso31Utz8xji2B7WUBX+2798ae\r\ncqxSxMPWnOQKenBA0gD+N9Qiq6sQ/sDipXuG7xIg4NH4qpf96xvPwC4hX9Jv\r\n3FzOUwRc2E+EEgUrgQQACgIDBIPkRAFeFOrFMXa4XoZ8+aZb4iXLhce6N0LE\r\nCh3YZNJLwxWVKVCxr8niWq3Fa8RTkLA+F7PvIHjnpgx5UGeqPzgDAQgHwmEE\r\nGBMIAAkFAlzYT4QCGwwACgkQtAbTfc9Fw6nomAEAl+1tioF0BlbTNm3c879W\r\nadI46tXfqHt8T6TGdIsKbmoA/RjOfCUvMT277p+v3aYjROI3M7ygh24jbjzx\r\nKBQj/GIJ\r\n=UGd9\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n"
    }
  ],
  "authentication": [],
  "service": [],
  "proof": {
    "type": "OpenPgpSignature2019",
    "creator": "did:github:OR13#kid=ibHP1ksrJp5FQjP7hhmTXV7YE5o5bB6YFoODu9n_82E",
    "domain": "GitHubDID",
    "nonce": "9c28424e440806718a5165670f79bbc2",
    "created": "2019-05-12T16:53:25.038Z",
    "signatureValue": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\n\r\nwl0EARMIAAYFAlzYT4UACgkQHi/X/OuNO7WZQAD47BbeS2pgFW/WwPbHvC8I\r\nMfsOFhSJEywkED7uz0E4RwD/RRrsmPPb4S4Z+7D2skjiFtnd2nWd+BXcxvhm\r\nGzKk1FU=\r\n=W/tu\r\n-----END PGP SIGNATURE-----\r\n"
  }
}

How do Linked Data Signatures work?

They provide authentication for JSON-LD Documents, prooving that a DID has signed the document, by attaching a signature which can be verified by resolving the DID Document. Linked Data Signatures are currently being developed and standardized, here's how they typically work:

When a user wants to sign a json-ld document, they ensure that the public key corrosponding to their private key is listed in their did document. In the document above, the public key is in publicKeyPem format and has an id which will become the creator attribute on the signed linked data. In other systems, such as ActivityPub used by Mastodon, DIDs are URLs, but the principle of retrieving cryptographic material from a downloaded json document is the same.

Next a string that will be signed is created from the document and the signatureOptions, which can include properties like nonce, domain, type, creator, etc... This step is called createVerifyData.

Create Verify Data ensures that a json document can be converted to the same hash regardless of the language (python, haskell, go, javascript, etc...). The most common cannonization algorithm is URDNA2015.

You can see how it is used in Mastodon.

Here is the method used in the OpenPgpSignature2019 Proposal.

The final string to be signed is of the following format: ${optionsHash}${documentHash}. Sometimes a signature algorithm will hash this again, be careful to ensure your implementation can verify and generate signatures that are compatible with existing implementations.

When verifying a linked data signature, first the signing key is retrieved from the creator attribute, either over https or using a DID Resolver. Once the key is available the signatureValue in the proof or signature can be verified. Often some encoding transforms are required before the signature can be verified, for example RsaSignature2017 and EcdsaKoblitzSignature2016 use base64 encoding of the result of the signature algorithm. Beware that base64 != base64url, which is commonly used with JWTs.

Danger / Fun

The Linked Data Signature Spec is still evolving, and you may find cases where a signature type such as EcdsaKoblitzSignature2016 is claimed to be used, but where the signatures cannot be verified with libraries such as jsonld-signatures. This is often due to a lack of understanding regarding Linked Data Signature type field. This field should match a value in the ld-cryptosuite-registry. Unfortunatly, this registry is very out of date and does not even contain RsaSignature2017 used by Mastodon, which is probably the mostly widely used signature suite. This can cause developers to make up their own signature type and that will work fine so long as they are the only system verifying and signing. Doing this weakens the JSON-LD Signature spec, making it harder for developers to know what EcdsaKoblitzSignature2016 means, please don't make this worse.

If you would like to develop a new signature suite, like the ones we propose such as OpenPgpSignature2019 and EcdsaKoblitzSignature2019, make sure to make it clear that it is a PROPOSAL, and get it registered once its clearly documented, has test coverage, and supports at least the fields described in terminology.

Help Wanted

The DID Spec is long, and this project does not fully support a DID implementation. If you would like to contribute, or have questions about DIDs, please feel free to open an issue or a PR.

Development

See .travis.yml.

npm i
npm run bootstrap
npm run lint
npm run test
npm i -g firebase-tools lerna
firebase login
firebase init
lerna init

Commercial Support

Commercial support for this library is available upon request from Transmute: [email protected].

Related Work

github-did's People

Contributors

dependabot[bot] avatar gjgd avatar or13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

github-did's Issues

Test failure due to jsonld.InvalidUrl

When executing npm run test, the following errors are displayed in some tests.

jsonld.InvalidUrl: Dereferencing a URL did not result in a valid JSON-LD object. Possible causes are an inaccessible URL perhaps due to a same-origin policy (ensure the server uses CORS if you are using client-side JavaScript), too many redirects, a non-JSON response, or more than one HTTP Link Header was provided for a remote context.

The reason may be that the URL it is using has been moved.

Windows WSL Error

An error occurs under windows even though the DID is successfully created

2019-07-19 13:30:14 [console] error: Command failed: cd /home/bongani/.github-did/ghdid; git pull:
/bin/sh: 1: cd: can't cd to /home/bongani/.github-did/ghdid
fatal: not a git repository (or any of the parent directories): .git

2019-07-19 13:30:27 [console] info: Create and publish did:github:bongani-m with github-did cli.
2019-07-19 13:30:27 [console] info: Config created /home/bongani/.github-did/config.json

Add Storybook

Want to add storybook, to encourage reusable components.

BUG: Forced into empty page instead of home page

There is some kind of bug with your did:github website as now whenever I go to https://github-did.com/, it instead takes me to an empty https://github-did.com/sign/new page rather go to the home page.

I'm using current Safari on macOS.

It appears to be some type of cookie issue, as when I manually delete the cookie I can now go to the home page.

If this is a Safari specific problem, you should give a warning or fail out with message of incompatibility.

Problems initializing initial `ghdid` personal repo on MacOS

I wanted to try out github-did on MacOS, and I generally don't use npm or javascript.

I am encountering problems following the initial instructions on the website at https://github-did.com:

> git clone [email protected]:ChristopherA/ghdid.git
Cloning into 'ghdid'...
Enter passphrase for key '/Users/christophera/.ssh/id_rsa': 
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
> cd ghdid
> brew install npm
> npm i -g @github-did/cli
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: this library is no longer supported
npm ERR! code 1
npm ERR! Command failed: git checkout initial
npm ERR! error: pathspec 'initial' did not match any file(s) known to git
npm ERR! 
npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/christophera/.npm/_logs/2020-09-11T02_18_26_909Z-debug.log
> ghdid init "Rdacte0sR" https://github.com/ChristopherA/ghdid
zsh: command not found: ghdid
>

Like I've found with some other projects like this, my development system system is not npm/javascript centric, so there is probably some unlisted dependency that most npm/javascript developers have but I do not.

CLI Install Fails

Symptom

  • Following command fails
% npm i -g @github-did/cli
  • machine info
% sw_vers                                                                                                                                                    
ProductName:	Mac OS X
ProductVersion:	10.15.4
BuildVersion:	19E287
% node --version
v14.2.0

expected

installs ghdidcommand line

actual

  CXX(target) Release/obj.target/generate-rsa-keypair/binding.o
../binding.cc:23:9: warning: 'RSA_generate_key' is deprecated [-Wdeprecated-declarations]
  rsa = RSA_generate_key(bits, exponent, NULL, NULL);
        ^
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/openssl/rsa.h:235:1: note: 'RSA_generate_key' has been explicitly marked deprecated here
DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void
^
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/openssl/./archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h:170:34: note: expanded from macro
      'DEPRECATEDIN_0_9_8'
# define DEPRECATEDIN_0_9_8(f)   DECLARE_DEPRECATED(f)
                                 ^
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/openssl/./archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h:121:55: note: expanded from macro
      'DECLARE_DEPRECATED'
#   define DECLARE_DEPRECATED(f)    f __attribute__ ((deprecated));
                                                      ^
../binding.cc:45:11: error: no matching member function for call to 'Set'
  result->Set(Nan::New<String>("private").ToLocalChecked(), Nan::New<String>(raw, rawLength).ToLocalChecked());
  ~~~~~~~~^~~
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/v8.h:3639:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/v8.h:3642:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
../binding.cc:64:11: error: no matching member function for call to 'Set'
  result->Set(Nan::New<String>("public").ToLocalChecked(), Nan::New<String>(raw, rawLength).ToLocalChecked());
  ~~~~~~~~^~~
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/v8.h:3639:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                    ^
/Users/kengo.suzuki/Library/Caches/node-gyp/14.2.0/include/node/v8.h:3642:37: note: candidate function not viable: requires 3 arguments, but 2 were provided
  V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                    ^
../binding.cc:71:6: error: variable has incomplete type 'void'
void Initialize(v8::Handle<v8::Object> exports) {
     ^
../binding.cc:71:21: error: no member named 'Handle' in namespace 'v8'
void Initialize(v8::Handle<v8::Object> exports) {
                ~~~~^
../binding.cc:71:38: error: expected '(' for function-style cast or type construction
void Initialize(v8::Handle<v8::Object> exports) {
                           ~~~~~~~~~~^
../binding.cc:71:40: error: use of undeclared identifier 'exports'
void Initialize(v8::Handle<v8::Object> exports) {
                                       ^
../binding.cc:71:48: error: expected ';' after top level declarator
void Initialize(v8::Handle<v8::Object> exports) {
                                               ^
                                               ;
1 warning and 7 errors generated.
make: *** [Release/obj.target/generate-rsa-keypair/binding.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:276:12)
gyp ERR! System Darwin 19.4.0
gyp ERR! command "/Users/kengo.suzuki/.nodebrew/node/v14.2.0/bin/node" "/Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/@github-did/cli/node_modules/generate-rsa-keypair
gyp ERR! node -v v14.2.0
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/ken5scal/.npm/_logs/2020-05-06T12_51_55_610Z-debug.log

Partial extraction from the log

5212 timing action:install Completed in 2149ms
5213 verbose unlock done using /Users/kengo.suzuki/.npm/_locks/staging-281b0bbe0ee43032.lock for /Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/.staging
5214 timing stage:rollbackFailedOptional Completed in 587ms
5215 timing stage:runTopLevelLifecycles Completed in 12565ms
5216 verbose stack Error: [email protected] install: `node-gyp rebuild`
5216 verbose stack Exit status 1
5216 verbose stack     at EventEmitter.<anonymous> (/Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
5216 verbose stack     at EventEmitter.emit (events.js:315:20)
5216 verbose stack     at ChildProcess.<anonymous> (/Users/kengo.suzuki/.nodebrew/node/v14.2.0/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
5216 verbose stack     at ChildProcess.emit (events.js:315:20)
5216 verbose stack     at maybeClose (internal/child_process.js:1051:16)
5216 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:287:5)
5217 verbose pkgid [email protected]
5218 verbose cwd /Users/kengo.suzuki/workspace/ghdid
5219 verbose Darwin 19.4.0
5220 verbose argv "/Users/kengo.suzuki/.nodebrew/node/v14.2.0/bin/node" "/Users/kengo.suzuki/.nodebrew/current/bin/npm" "i" "-g" "@github-did/cli"
5221 verbose node v14.2.0
5222 verbose npm  v6.14.4
5223 error code ELIFECYCLE
5224 error errno 1
5225 error [email protected] install: `node-gyp rebuild`
5225 error Exit status 1
5226 error Failed at the [email protected] install script.
5226 error This is probably not a problem with npm. There is likely additional logging output above.
5227 verbose exit [ 1, true ]

if you need the entire log, please let me know

Current package throws 900+ 'High' vulnerabilities via npm install

From npm install:

added 40 packages from 15 contributors, removed 59 packages, updated 96 packages and audited 1525867 packages in 10.191s

found 983 vulnerabilities (19 moderate, 964 high)
run npm audit fix to fix them, or npm audit for details`

All can be fixed with npm audit fix result of package upgrades can be seen here

CLI installation fails

Tried running npm i -g @github-did/cli as described on https://github-did.com/ in the Getting Started documentation. Run into this error.

npm WARN deprecated [email protected]: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: Deprecated due to CVE-2021-21366 resolved in 0.5.0
npm WARN deprecated [email protected]: this library is no longer supported
npm ERR! code 1
npm ERR! Command failed: git checkout initial
npm ERR! error: pathspec 'initial' did not match any file(s) known to git
npm ERR! 

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/kion/.npm/_logs/2021-08-16T08_26_45_159Z-debug.log

Contents of the debug log can be found here:
https://pastebin.com/C9CMp4Jt

Issue happens on my Raspberry Pi 4, and on my Ubuntu Notebook.

Two useful possibilities leveraging GitHub

Though this spec is focused in git, not GitHub, there are three features of github that may be very useful.

The first is that all GitHub users who have registered GPG keys for file signing, you can access their public key by just appending .gpg to their user name, such as https://github.com/ChristopherA.gpg โ€” this makes GitHub alternative source for keys rather than the problematic key servers.

The 2nd is that gists are actually small git repos, so you add additional files and can sign commits with GPG. You can check it out with git clone [email protected]:855bf8e4774375613c6b2e1226501ba6.git

The third, as you'll note above, any user gist, such as https://gist.github.com/ChristopherA/855bf8e4774375613c6b2e1226501ba6 can also be accessed without the user name at https://gist.github.com/855bf8e4774375613c6b2e1226501ba6 which is short enough to fit in an BTCR OP_RETURN.

All of this may make gists a useful place to store a DID or VCs.

-- Christopher Allen

cc: @rxgrant @kimdhamilton @joeandrieu

Add tutorial for creating a DID Document from 2 wallets

We want to use the CLI to create a wallet for the browser, and one for local use, or we want a way to export a wallet with a limited set of keys form the local wallet.

that way a user can include a wallet with the correct keys in the browser without fear of leaking all their keys.

also demonstrates that not all DID keys need reside in the same place.

Add Azure Deployment Instructions

It would be nice to eject from firebase cloud functions, and support docker and OpenFaaS, with deployment instructions for Azure and other cloud providers.

git clone failed

When I try to install github-did, I get the following error message:

andii@AnduntuS:~/projects/DID$ npm i -g @github-did/cli
npm ERR! code 128
npm ERR! command failed
npm ERR! command git clone --mirror -q ssh://[email protected]/digitalbazaar/x25519-key-pair.git /home/andii/.npm/_cacache/tmp/git-clone-b9e8ca13/.git
npm ERR! fatal: destination path '/home/andii/.npm/_cacache/tmp/git-clone-b9e8ca13/.git' already exists and is not an empty directory.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/andii/.npm/_logs/2021-03-27T13_46_53_614Z-debug.log

However, /home/andii/.npm/_cacache/tmp/ is in fact empty.
2021-03-27T13_46_53_614Z-debug.log

This is on Ubuntu 20.04.2 LTS, git version 2.25.1, npm 7.7.5

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.