From 96c67da6d248c142ed1d39c581a08712fa3da26a Mon Sep 17 00:00:00 2001 From: Orie Steele Date: Tue, 14 May 2019 23:39:11 -0500 Subject: [PATCH] update --- README.md | 7 ++--- src/__tests__/SignAndVerify.spec.js | 42 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/__tests__/SignAndVerify.spec.js diff --git a/README.md b/README.md index d0502bc..d404470 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ const signedData = await OpenPgpSignature2019.sign({ const verified = await verify({ data: signedData, + signatureAttribute: "proof", publicKey: fkeypair.publicKey }); @@ -102,11 +103,11 @@ const signedData = await sign({ ## GitHub DID Example -Here is an example of it being used in a web app. +Here is an example of it being used in a [web app](https://github-did.com). -https://github-did.com/verify/eyJoZWxsbyI6IndvcmxkIiwicHJvb2YiOnsidHlwZSI6Ik9wZW5QZ3BTaWduYXR1cmUyMDE5IiwiY3JlYXRvciI6ImRpZDpnaGRpZDp0cmFuc211dGUtaW5kdXN0cmllc35naXRodWItZGlkfjFiZWQxMTE0MDU0N2I4NDA3NDc4YmRmMjY1MGRiNTBhNWEwYzE4ZWYyYWU0Y2FmMjBlODE4YTk0MzM5MjNjMmEja2lkPTFiZWQxMTE0MDU0N2I4NDA3NDc4YmRmMjY1MGRiNTBhNWEwYzE4ZWYyYWU0Y2FmMjBlODE4YTk0MzM5MjNjMmEiLCJkb21haW4iOiJnaXRodWItZGlkIiwibm9uY2UiOiI1NmQ2M2U4NWQwYjg3MmVhNjJkOTBlMWJkZmE5NzcxNSIsImNyZWF0ZWQiOiIyMDE5LTA1LTExVDA0OjI1OjAxLjk2M1oiLCJzaWduYXR1cmVWYWx1ZSI6Ii0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXHJcblZlcnNpb246IE9wZW5QR1AuanMgdjQuNC4xMFxyXG5Db21tZW50OiBodHRwczovL29wZW5wZ3Bqcy5vcmdcclxuXHJcbndsNEVBUk1JQUFZRkFseldUcVVBQ2drUS9ERk11aHh2WUdiOFN3RUEwYkVSa0N6UnE2eUMwcnlIZ1VPQ1xyXG5CeDlTNUluRmM2RmNOS3M5cGRMNzhTa0EvaVVxZkNCNGJjR0g4RERXY0lGM0xQaFdzYld6RmFaVVJySS9cclxuRFRzMHNDLytcclxuPUo4VS9cclxuLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tXHJcbiJ9fQ +https://github-did.com/verify/eyJAY29udGV4dCI6Imh0dHBzOi8vdzNpZC5vcmcvaWRlbnRpdHkvdjEiLCJnaXZlbk5hbWUiOiJBbGljZSIsInByb29mIjp7InR5cGUiOiJPcGVuUGdwU2lnbmF0dXJlMjAxOSIsImNyZWF0b3IiOiJkaWQ6Z2l0aHViOk9SMTMja2lkPXVYOWtQUy1MSVBaY0pTNWFTMDdkSktMeVd5Ny1UVi1QZTA5YnpIN0hpa1UiLCJkb21haW4iOiJHaXRIdWJESUQiLCJub25jZSI6ImZjNzM2M2RkNWVkYjNlZDM5YmYwMGIwOGNkNTJkMDhlIiwiY3JlYXRlZCI6IjIwMTktMDUtMTVUMDQ6MzY6MTguMzE4WiIsInNpZ25hdHVyZVZhbHVlIjoiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS1cclxuVmVyc2lvbjogT3BlblBHUC5qcyB2NC41LjFcclxuQ29tbWVudDogaHR0cHM6Ly9vcGVucGdwanMub3JnXHJcblxyXG53bDRFQVJNSUFBWUZBbHpibDBJQUNna1E5dDlWMzRLR1R6ZmNNd0VBbnJqSGVtdFl5WG1VVXRWV21aN1pcclxueUpBeEtUc3BJSEVtMmlaWDB6eGpjUVlBLzE2UDI0S1BmUFZxWFdXTmZONWhSK2poM3dXSGFkVWxmSzZoXHJcbmczTDhVTExxXHJcbj12Sy9BXHJcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxyXG4ifX0 -You can import the wallet file containing the keys used [here](https://github-did.com/wallet), and use the sign demo [here](https://github-did.com/sign/new) +You can verify this claim I signed. ## Commercial Support diff --git a/src/__tests__/SignAndVerify.spec.js b/src/__tests__/SignAndVerify.spec.js new file mode 100644 index 0000000..5a5ef66 --- /dev/null +++ b/src/__tests__/SignAndVerify.spec.js @@ -0,0 +1,42 @@ +const openpgp = require("openpgp"); + +const { sign, verify } = require("../index"); + +jest.setTimeout(20 * 1000); + +describe("SignAndVerify", () => { + const key = { + publicKey: + "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\n\r\nxk8EXNcLSxMFK4EEAAoCAwQ22JuKLOw0REjgH3KPldvpQLyPbevO6nd/vs/h\r\nUyBgRDFhB66eam0Kg0K/bFspd7EqBQf5sg4MjtW2g+UlMNuAzRdhbm9uIDxh\r\nbm9uQGV4YW1wbGUuY29tPsJ3BBATCAAfBQJc1wtLBgsJBwgDAgQVCAoCAxYC\r\nAQIZAQIbAwIeAQAKCRDOC06kQzKHaZlqAQDY2zqfCiJH2Akcv0lo+1fGP5V+\r\nI2YVSbWmUuqnCtsXdgEA0nhvtNghJSDrq+3Qzu05cN2/r6H+Hn4KgDqtxz0P\r\n49fOUwRc1wtLEgUrgQQACgIDBDbYm4os7DRESOAfco+V2+lAvI9t687qd3++\r\nz+FTIGBEMWEHrp5qbQqDQr9sWyl3sSoFB/myDgyO1baD5SUw24ADAQgHwmEE\r\nGBMIAAkFAlzXC0sCGwwACgkQzgtOpEMyh2lNvQD+IFYq+gKQB7d9CNjEqvOQ\r\nZnn1nPhuMaydpxmv5+s/m5YBAMlQmgQ5ulfPSD5OBrJVbiF2TSBmlcWVAD6R\r\no41Q/H1Y\r\n=PfgI\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n", + privateKey: + "-----BEGIN PGP PRIVATE KEY BLOCK-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\n\r\nxXQEXNcLSxMFK4EEAAoCAwQ22JuKLOw0REjgH3KPldvpQLyPbevO6nd/vs/h\r\nUyBgRDFhB66eam0Kg0K/bFspd7EqBQf5sg4MjtW2g+UlMNuAAAEAtt9uYl73\r\noEnh1lAB1SqGxc1o1c6C4lx4myXH3P+WRD4SgM0XYW5vbiA8YW5vbkBleGFt\r\ncGxlLmNvbT7CdwQQEwgAHwUCXNcLSwYLCQcIAwIEFQgKAgMWAgECGQECGwMC\r\nHgEACgkQzgtOpEMyh2mZagEA2Ns6nwoiR9gJHL9JaPtXxj+VfiNmFUm1plLq\r\npwrbF3YBANJ4b7TYISUg66vt0M7tOXDdv6+h/h5+CoA6rcc9D+PXx3gEXNcL\r\nSxIFK4EEAAoCAwQ22JuKLOw0REjgH3KPldvpQLyPbevO6nd/vs/hUyBgRDFh\r\nB66eam0Kg0K/bFspd7EqBQf5sg4MjtW2g+UlMNuAAwEIBwABALbfbmJe96BJ\r\n4dZQAdUqhsXNaNXOguJceJslx9z/lkQ+EoDCYQQYEwgACQUCXNcLSwIbDAAK\r\nCRDOC06kQzKHaU29AP4gVir6ApAHt30I2MSq85BmefWc+G4xrJ2nGa/n6z+b\r\nlgEAyVCaBDm6V89IPk4GslVuIXZNIGaVxZUAPpGjjVD8fVg=\r\n=1jGv\r\n-----END PGP PRIVATE KEY BLOCK-----\r\n", + revocationCertificate: + "-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v4.4.7\r\nComment: https://openpgpjs.org\r\nComment: This is a revocation certificate\r\n\r\nwmEEIBMIAAkFAlzXC0sCHQAACgkQzgtOpEMyh2l39AEAqpcJQ2N5heHruMki\r\nBOwoXLLLd+UdbxqlVBG7Th5L/dQBAKBIcPgOk/Zv4PYVQpJr2VuG0eXZsjmZ\r\na3m/lC4l8Bj3\r\n=9bjx\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n" + }; + + const data = { + "@context": "https://w3id.org/identity/v1", + givenName: "Alice" + }; + + it("should support sign and verify of linked data", async () => { + expect.assertions(3); + const signed = await sign({ + data, + privateKey: (await openpgp.key.readArmored(key.privateKey)).keys[0], + signatureOptions: { + creator: "did:example:123", + domain: "example.com" + } + }); + + // console.log(JSON.stringify(signed, null, 2)); + expect(signed.proof.creator).toBe("did:example:123"); + expect(signed.proof.domain).toBe("example.com"); + const verified = await verify({ + data: signed, + publicKey: key.publicKey + }); + expect(verified).toBe(true); + }); +});