mirror of
https://github.com/amark/gun.git
synced 2025-06-05 21:56:51 +00:00
react native support (#5)
* WIP: use isomorphic-webcrypto for RN * WIP: expo friendly exports * WIP: buffer for RN * WIP: textencoder for RN * WIP: aeskey from jwk instead of raw for RN * fix: missing taglength for msrcrypto * add: update isomorphic-webcrypto * add: match isocrypto api * add: failing test for 4e2 as 400 * fix: remove extra atob btoa * add: sea unbuild * refactor: according to mhelander review * refactor: shorter require * fix: make bug test pass, capitlize bug test. * fix: npm ci + sea test * add: restore old browser export and add react-native friendly exports * fix: import buffer into correct global/window * fix: bad comparison * fix: only include buffer if no btoa/atob
This commit is contained in:
parent
af1590cf60
commit
29ed57e955
1
.prettierignore
Normal file
1
.prettierignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
*
|
2
browser.android.js
Normal file
2
browser.android.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
module.exports.Gun = require('./gun.js')
|
||||||
|
module.exports.SEA = require('./sea.js')
|
2
browser.ios.js
Normal file
2
browser.ios.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
module.exports.Gun = require('./gun.js')
|
||||||
|
module.exports.SEA = require('./sea.js')
|
1
browser.js
Normal file
1
browser.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require('./gun.js')
|
279
package-lock.json
generated
279
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gun",
|
"name": "gun",
|
||||||
"version": "0.2019.910",
|
"version": "0.2019.915",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -35,18 +35,6 @@
|
|||||||
"pvtsutils": "^1.0.6",
|
"pvtsutils": "^1.0.6",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"webcrypto-core": "^1.0.14"
|
"webcrypto-core": "^1.0.14"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"webcrypto-core": {
|
|
||||||
"version": "1.0.14",
|
|
||||||
"resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.0.14.tgz",
|
|
||||||
"integrity": "sha512-iGZQcH/o3Jv6mpvCbzan6uAcUcLTTnUCil6RVYakcNh5/QXIKRRC06EFxHru9lHgVKucZy3gG4OBiup0IsOr0g==",
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"pvtsutils": "^1.0.4",
|
|
||||||
"tslib": "^1.10.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
@ -54,6 +42,26 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.18.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.18.tgz",
|
||||||
"integrity": "sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ=="
|
"integrity": "sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ=="
|
||||||
},
|
},
|
||||||
|
"@unimodules/core": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@unimodules/core/-/core-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-EMZjVp+yrtoPKpDBPvj4+hyDWALl7gvpWeUsDz2Nb9MMBPLnhag1uNk3KC98StJdnjbSXKSdKrCMMidOXnyKcg==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"compare-versions": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@unimodules/react-native-adapter": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zkFFE0HQ2Flfx/aY3hBKDgMvQ1meUm3H6vMIacY1KywexCuKW8ivBobkOsHIet4jf7km0Eklt6WtB3LqQVw5yw==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"invariant": "^2.2.4",
|
||||||
|
"lodash": "^4.5.0",
|
||||||
|
"prop-types": "^15.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"addressparser": {
|
"addressparser": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.3.2.tgz",
|
||||||
@ -102,6 +110,12 @@
|
|||||||
"integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
|
"integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"asmcrypto.js": {
|
||||||
|
"version": "0.22.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz",
|
||||||
|
"integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"asn1js": {
|
"asn1js": {
|
||||||
"version": "2.0.26",
|
"version": "2.0.26",
|
||||||
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.26.tgz",
|
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.26.tgz",
|
||||||
@ -111,14 +125,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"async-limiter": {
|
"async-limiter": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
|
||||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
|
||||||
},
|
},
|
||||||
"aws-sdk": {
|
"aws-sdk": {
|
||||||
"version": "2.238.1",
|
"version": "2.528.0",
|
||||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.238.1.tgz",
|
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.528.0.tgz",
|
||||||
"integrity": "sha1-o1/ewSLtkV2kkIQOiCgzbaW+Tn8=",
|
"integrity": "sha512-WBgavPqKHvYcIhD7LhmLLYOKtG/SUdNY6hMB0N/Jxaolzx4sOa7xegiZ8sdkAUq/vUEs1frnBF9hNmeIszUWCg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"buffer": "4.9.1",
|
"buffer": "4.9.1",
|
||||||
@ -128,9 +142,38 @@
|
|||||||
"querystring": "0.2.0",
|
"querystring": "0.2.0",
|
||||||
"sax": "1.2.1",
|
"sax": "1.2.1",
|
||||||
"url": "0.10.3",
|
"url": "0.10.3",
|
||||||
"uuid": "3.1.0",
|
"uuid": "3.3.2",
|
||||||
"xml2js": "0.4.17",
|
"xml2js": "0.4.19"
|
||||||
"xmlbuilder": "4.2.1"
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": {
|
||||||
|
"version": "4.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||||
|
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-js": "^1.0.2",
|
||||||
|
"ieee754": "^1.1.4",
|
||||||
|
"isarray": "^1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"b64-lite": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-A3n/YWszeQeUeKKy+XRfsDW/s/+1cvD110HYA4uXtkNswNLd1MxrNblYt2lgKisUS3UfPPTaXhvFegD+l4YuOA==",
|
||||||
|
"requires": {
|
||||||
|
"base-64": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"b64u-lite": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-4E6rqyrCnrAdzayWUS8XwFC/vRTBbmR7fgqb/IuHXRM2z63VH/tNxtzDWZhgCXCORTiwy2mIhCtmHyc9TMBj7Q==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"b64-lite": "^1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"backo2": {
|
"backo2": {
|
||||||
@ -145,6 +188,11 @@
|
|||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"base-64": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
|
||||||
|
},
|
||||||
"base64-arraybuffer": {
|
"base64-arraybuffer": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
||||||
@ -154,8 +202,7 @@
|
|||||||
"base64-js": {
|
"base64-js": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
|
||||||
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
|
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"base64id": {
|
"base64id": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -201,14 +248,12 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"buffer": {
|
"buffer": {
|
||||||
"version": "4.9.1",
|
"version": "5.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
|
||||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
"integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-js": "^1.0.2",
|
"base64-js": "^1.0.2",
|
||||||
"ieee754": "^1.1.4",
|
"ieee754": "^1.1.4"
|
||||||
"isarray": "^1.0.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"callsite": {
|
"callsite": {
|
||||||
@ -277,6 +322,12 @@
|
|||||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"compare-versions": {
|
||||||
|
"version": "3.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz",
|
||||||
|
"integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"component-bind": {
|
"component-bind": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
|
||||||
@ -578,6 +629,15 @@
|
|||||||
"strip-eof": "^1.0.0"
|
"strip-eof": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"expo-random": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/expo-random/-/expo-random-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-nXWmopErqgwkGGfaKPG8v4BNqTXZH4oA/4aAnn6zkTVFdeWBDpWn+Ena3/jnM3raMR3pMNI39YNLqNrut81HvA==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-js": "^1.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"find-up": {
|
"find-up": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||||
@ -696,8 +756,7 @@
|
|||||||
"ieee754": {
|
"ieee754": {
|
||||||
"version": "1.1.8",
|
"version": "1.1.8",
|
||||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
|
||||||
"integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
|
"integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"indexof": {
|
"indexof": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
@ -721,6 +780,15 @@
|
|||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"invariant": {
|
||||||
|
"version": "2.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
|
||||||
|
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"loose-envify": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"invert-kv": {
|
"invert-kv": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
|
||||||
@ -799,12 +867,36 @@
|
|||||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"isomorphic-webcrypto": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-XbUC6ZwVvJfts2FYfAuNRU99tt89EzTknZcKZjxx6/6hxNeLgF6sIDbA/RdA3spbcNrXYyPOHa90khbUgZWarw==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"@peculiar/webcrypto": "^1.0.19",
|
||||||
|
"@unimodules/core": "*",
|
||||||
|
"@unimodules/react-native-adapter": "*",
|
||||||
|
"asmcrypto.js": "^0.22.0",
|
||||||
|
"b64-lite": "^1.3.1",
|
||||||
|
"b64u-lite": "^1.0.1",
|
||||||
|
"expo-random": "*",
|
||||||
|
"msrcrypto": "^1.5.6",
|
||||||
|
"react-native-securerandom": "^0.1.1",
|
||||||
|
"str2buf": "^1.3.0",
|
||||||
|
"webcrypto-shim": "^0.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"jmespath": {
|
"jmespath": {
|
||||||
"version": "0.15.0",
|
"version": "0.15.0",
|
||||||
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
|
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
|
||||||
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=",
|
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"js-tokens": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||||
|
},
|
||||||
"js-yaml": {
|
"js-yaml": {
|
||||||
"version": "3.13.1",
|
"version": "3.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
|
||||||
@ -841,10 +933,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.10",
|
"version": "4.17.15",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||||
"integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
|
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
|
||||||
"dev": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"log-symbols": {
|
"log-symbols": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
@ -855,6 +947,14 @@
|
|||||||
"chalk": "^2.0.1"
|
"chalk": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"loose-envify": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||||
|
"requires": {
|
||||||
|
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"map-age-cleaner": {
|
"map-age-cleaner": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
|
||||||
@ -957,6 +1057,12 @@
|
|||||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"msrcrypto": {
|
||||||
|
"version": "1.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.7.tgz",
|
||||||
|
"integrity": "sha512-vH/uVdMPgdtLrDCdR2gWps2fB10EYWjXYi67W9RzNSd5Jch3noWGUvNUXSIJA87VTDaE+wvjS7yRSN4gALTslg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"negotiator": {
|
"negotiator": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||||
@ -1202,6 +1308,25 @@
|
|||||||
"integrity": "sha1-SSIQiSM1vTExwKCN2i2T7DVD5CM=",
|
"integrity": "sha1-SSIQiSM1vTExwKCN2i2T7DVD5CM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"prop-types": {
|
||||||
|
"version": "15.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
|
||||||
|
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"loose-envify": "^1.4.0",
|
||||||
|
"object-assign": "^4.1.1",
|
||||||
|
"react-is": "^16.8.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"object-assign": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"pump": {
|
"pump": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||||
@ -1244,6 +1369,21 @@
|
|||||||
"integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==",
|
"integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"react-is": {
|
||||||
|
"version": "16.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
|
||||||
|
"integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-native-securerandom": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"base64-js": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"require-directory": {
|
"require-directory": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
@ -1443,6 +1583,12 @@
|
|||||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"str2buf": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||||
@ -1521,19 +1667,19 @@
|
|||||||
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
|
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
|
||||||
},
|
},
|
||||||
"uglify-js": {
|
"uglify-js": {
|
||||||
"version": "3.3.24",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.24.tgz",
|
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
|
||||||
"integrity": "sha512-hS7+TDiqIqvWScCcKRybCQzmMnEzJ4ryl9ErRmW4GFyG48p0/dKZiy/5mVLbsFzU8CCnCgQdxMiJzZythvLzCg==",
|
"integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"commander": "~2.15.0",
|
"commander": "~2.20.0",
|
||||||
"source-map": "~0.6.1"
|
"source-map": "~0.6.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"commander": {
|
"commander": {
|
||||||
"version": "2.15.1",
|
"version": "2.20.0",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
|
||||||
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
|
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1549,11 +1695,27 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "3.1.0",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||||
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
|
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"webcrypto-core": {
|
||||||
|
"version": "1.0.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.0.14.tgz",
|
||||||
|
"integrity": "sha512-iGZQcH/o3Jv6mpvCbzan6uAcUcLTTnUCil6RVYakcNh5/QXIKRRC06EFxHru9lHgVKucZy3gG4OBiup0IsOr0g==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"pvtsutils": "^1.0.4",
|
||||||
|
"tslib": "^1.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webcrypto-shim": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.4.tgz",
|
||||||
|
"integrity": "sha512-I2lnL+K2oPNE9ryVHwo42oDnt8XQ9E1KKMGCmcT7OXaAKPmUeCi/G0nUgLR6M6Ztj05ZCxLMGf5bXNaSo+wURg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||||
@ -1632,9 +1794,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "7.1.0",
|
"version": "7.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz",
|
||||||
"integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==",
|
"integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"async-limiter": "^1.0.0"
|
"async-limiter": "^1.0.0"
|
||||||
}
|
}
|
||||||
@ -1646,23 +1808,20 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"xml2js": {
|
"xml2js": {
|
||||||
"version": "0.4.17",
|
"version": "0.4.19",
|
||||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
|
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
|
||||||
"integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
|
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"sax": ">=0.6.0",
|
"sax": ">=0.6.0",
|
||||||
"xmlbuilder": "^4.1.0"
|
"xmlbuilder": "~9.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"xmlbuilder": {
|
"xmlbuilder": {
|
||||||
"version": "4.2.1",
|
"version": "9.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
|
||||||
"integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
|
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {
|
|
||||||
"lodash": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"xmlhttprequest-ssl": {
|
"xmlhttprequest-ssl": {
|
||||||
"version": "1.5.3",
|
"version": "1.5.3",
|
||||||
|
17
package.json
17
package.json
@ -3,7 +3,9 @@
|
|||||||
"version": "0.2019.1120",
|
"version": "0.2019.1120",
|
||||||
"description": "A realtime, decentralized, offline-first, graph data synchronization engine.",
|
"description": "A realtime, decentralized, offline-first, graph data synchronization engine.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"browser": "gun.js",
|
"browser": "browser.js",
|
||||||
|
"ios": "browser.ios.js",
|
||||||
|
"android": "browser.android.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node examples/http.js",
|
"start": "node examples/http.js",
|
||||||
"https": "HTTPS_KEY=test/https/server.key HTTPS_CERT=test/https/server.crt npm start",
|
"https": "HTTPS_KEY=test/https/server.key HTTPS_CERT=test/https/server.crt npm start",
|
||||||
@ -52,19 +54,20 @@
|
|||||||
"node": ">=0.8.4"
|
"node": ">=0.8.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ws": "~>7.1.0"
|
"buffer": "^5.4.3",
|
||||||
|
"ws": "^7.1.2"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@peculiar/webcrypto": "^1.0.19",
|
"text-encoding": "^0.7.0",
|
||||||
"emailjs": "^2.2.0",
|
"isomorphic-webcrypto": "^2.3.2",
|
||||||
"text-encoding": "^0.7.0"
|
"emailjs": "^2.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aws-sdk": ">=2.153.0",
|
"aws-sdk": "^2.528.0",
|
||||||
"ip": "^1.1.5",
|
"ip": "^1.1.5",
|
||||||
"mocha": "^6.2.0",
|
"mocha": "^6.2.0",
|
||||||
"panic-manager": "^1.2.0",
|
"panic-manager": "^1.2.0",
|
||||||
"panic-server": "^1.1.1",
|
"panic-server": "^1.1.1",
|
||||||
"uglify-js": ">=2.8.22"
|
"uglify-js": "^3.6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
60
sea.js
60
sea.js
@ -3,6 +3,7 @@
|
|||||||
/* UNBUILD */
|
/* UNBUILD */
|
||||||
var root;
|
var root;
|
||||||
if(typeof window !== "undefined"){ root = window }
|
if(typeof window !== "undefined"){ root = window }
|
||||||
|
|
||||||
if(typeof global !== "undefined"){ root = global }
|
if(typeof global !== "undefined"){ root = global }
|
||||||
root = root || {};
|
root = root || {};
|
||||||
var console = root.console || {log: function(){}};
|
var console = root.console || {log: function(){}};
|
||||||
@ -47,10 +48,12 @@
|
|||||||
})(USE, './https');
|
})(USE, './https');
|
||||||
|
|
||||||
;USE(function(module){
|
;USE(function(module){
|
||||||
if(typeof global !== "undefined"){
|
if(typeof btoa === "undefined"){
|
||||||
var g = global;
|
if(typeof Buffer === "undefined") {
|
||||||
g.btoa = function (data) { return Buffer.from(data, "binary").toString("base64"); };
|
root.Buffer = require("buffer").Buffer
|
||||||
g.atob = function (data) { return Buffer.from(data, "base64").toString("binary"); };
|
}
|
||||||
|
root.btoa = function (data) { return Buffer.from(data, "binary").toString("base64"); };
|
||||||
|
root.atob = function (data) { return Buffer.from(data, "base64").toString("binary"); };
|
||||||
}
|
}
|
||||||
})(USE, './base64');
|
})(USE, './base64');
|
||||||
|
|
||||||
@ -96,7 +99,7 @@
|
|||||||
Object.assign(SafeBuffer, {
|
Object.assign(SafeBuffer, {
|
||||||
// (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'
|
// (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'
|
||||||
from() {
|
from() {
|
||||||
if (!Object.keys(arguments).length) {
|
if (!Object.keys(arguments).length || arguments[0]==null) {
|
||||||
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
||||||
}
|
}
|
||||||
const input = arguments[0]
|
const input = arguments[0]
|
||||||
@ -167,28 +170,26 @@
|
|||||||
var o = {};
|
var o = {};
|
||||||
|
|
||||||
if(SEA.window){
|
if(SEA.window){
|
||||||
api.crypto = window.crypto || window.msCrypto;
|
api.crypto = window.crypto || window.msCrypto || require('isomorphic-webcrypto');
|
||||||
api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
|
api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
|
||||||
api.TextEncoder = window.TextEncoder;
|
api.TextEncoder = window.TextEncoder;
|
||||||
api.TextDecoder = window.TextDecoder;
|
api.TextDecoder = window.TextDecoder;
|
||||||
api.random = (len) => Buffer.from(api.crypto.getRandomValues(new Uint8Array(Buffer.alloc(len))))
|
api.random = (len) => Buffer.from(api.crypto.getRandomValues(new Uint8Array(Buffer.alloc(len))));
|
||||||
|
}
|
||||||
|
if(!api.TextDecoder)
|
||||||
|
{
|
||||||
|
const { TextEncoder, TextDecoder } = require('text-encoding');
|
||||||
|
api.TextDecoder = TextDecoder;
|
||||||
|
api.TextEncoder = TextEncoder;
|
||||||
}
|
}
|
||||||
if(!api.crypto){try{
|
if(!api.crypto){try{
|
||||||
var crypto = USE('crypto', 1);
|
var crypto = USE('crypto', 1);
|
||||||
const { TextEncoder, TextDecoder } = USE('text-encoding', 1)
|
|
||||||
Object.assign(api, {
|
Object.assign(api, {
|
||||||
crypto,
|
crypto,
|
||||||
//subtle,
|
|
||||||
TextEncoder,
|
|
||||||
TextDecoder,
|
|
||||||
random: (len) => Buffer.from(crypto.randomBytes(len))
|
random: (len) => Buffer.from(crypto.randomBytes(len))
|
||||||
});
|
});
|
||||||
//try{
|
const isocrypto = require('isomorphic-webcrypto');
|
||||||
const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);
|
api.ossl = api.subtle = isocrypto.subtle;
|
||||||
api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH
|
|
||||||
//}catch(e){
|
|
||||||
//console.log("node-webcrypto-ossl is optionally needed for ECDH, please install if needed.");
|
|
||||||
//}
|
|
||||||
}catch(e){
|
}catch(e){
|
||||||
console.log("node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!");
|
console.log("node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!");
|
||||||
OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED;
|
OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED;
|
||||||
@ -201,7 +202,7 @@
|
|||||||
var SEA = USE('./root');
|
var SEA = USE('./root');
|
||||||
var Buffer = USE('./buffer');
|
var Buffer = USE('./buffer');
|
||||||
var s = {};
|
var s = {};
|
||||||
s.pbkdf2 = {hash: 'SHA-256', iter: 100000, ks: 64};
|
s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};
|
||||||
s.ecdsa = {
|
s.ecdsa = {
|
||||||
pair: {name: 'ECDSA', namedCurve: 'P-256'},
|
pair: {name: 'ECDSA', namedCurve: 'P-256'},
|
||||||
sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}
|
sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}
|
||||||
@ -217,6 +218,13 @@
|
|||||||
if(d){ jwk.d = d }
|
if(d){ jwk.d = d }
|
||||||
return jwk;
|
return jwk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
s.keyToJwk = function(keyBytes) {
|
||||||
|
const keyB64 = keyBytes.toString('base64');
|
||||||
|
const k = keyB64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
|
||||||
|
return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };
|
||||||
|
}
|
||||||
|
|
||||||
s.recall = {
|
s.recall = {
|
||||||
validity: 12 * 60 * 60, // internally in seconds : 12 hours
|
validity: 12 * 60 * 60, // internally in seconds : 12 hours
|
||||||
hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)
|
hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)
|
||||||
@ -492,6 +500,7 @@
|
|||||||
|
|
||||||
;USE(function(module){
|
;USE(function(module){
|
||||||
var shim = USE('./shim');
|
var shim = USE('./shim');
|
||||||
|
var S = USE('./settings');
|
||||||
var sha256hash = USE('./sha256');
|
var sha256hash = USE('./sha256');
|
||||||
|
|
||||||
const importGen = async (key, salt, opt) => {
|
const importGen = async (key, salt, opt) => {
|
||||||
@ -499,7 +508,9 @@
|
|||||||
var opt = opt || {};
|
var opt = opt || {};
|
||||||
const combo = key + (salt || shim.random(8)).toString('utf8'); // new
|
const combo = key + (salt || shim.random(8)).toString('utf8'); // new
|
||||||
const hash = shim.Buffer.from(await sha256hash(combo), 'binary')
|
const hash = shim.Buffer.from(await sha256hash(combo), 'binary')
|
||||||
return await shim.subtle.importKey('raw', new Uint8Array(hash), opt.name || 'AES-GCM', false, ['encrypt', 'decrypt'])
|
|
||||||
|
const jwkKey = S.keyToJwk(hash)
|
||||||
|
return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])
|
||||||
}
|
}
|
||||||
module.exports = importGen;
|
module.exports = importGen;
|
||||||
})(USE, './aeskey');
|
})(USE, './aeskey');
|
||||||
@ -563,7 +574,7 @@
|
|||||||
bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');
|
bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');
|
||||||
bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');
|
bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');
|
||||||
var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...
|
var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...
|
||||||
name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv)
|
name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128
|
||||||
}, aes, new Uint8Array(bufct)));
|
}, aes, new Uint8Array(bufct)));
|
||||||
}catch(e){
|
}catch(e){
|
||||||
if('utf8' === opt.encode){ throw "Could not decrypt" }
|
if('utf8' === opt.encode){ throw "Could not decrypt" }
|
||||||
@ -603,9 +614,11 @@
|
|||||||
var pubKeyData = keysToEcdhJwk(pub);
|
var pubKeyData = keysToEcdhJwk(pub);
|
||||||
var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },S.ecdh); // Thanks to @sirpy !
|
var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },S.ecdh); // Thanks to @sirpy !
|
||||||
var privKeyData = keysToEcdhJwk(epub, epriv);
|
var privKeyData = keysToEcdhJwk(epub, epriv);
|
||||||
var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveKey']).then(async (privKey) => {
|
var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {
|
||||||
// privateKey scope doesn't leak out from here!
|
// privateKey scope doesn't leak out from here!
|
||||||
var derivedKey = await ecdhSubtle.deriveKey(props, privKey, { name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);
|
var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);
|
||||||
|
var rawBits = new Uint8Array(derivedBits);
|
||||||
|
var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);
|
||||||
return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);
|
return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);
|
||||||
})
|
})
|
||||||
var r = derived;
|
var r = derived;
|
||||||
@ -646,6 +659,7 @@
|
|||||||
SEA.verify = USE('./verify');
|
SEA.verify = USE('./verify');
|
||||||
SEA.encrypt = USE('./encrypt');
|
SEA.encrypt = USE('./encrypt');
|
||||||
SEA.decrypt = USE('./decrypt');
|
SEA.decrypt = USE('./decrypt');
|
||||||
|
SEA.aeskey = USE('./aeskey');
|
||||||
|
|
||||||
SEA.random = SEA.random || shim.random;
|
SEA.random = SEA.random || shim.random;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
var shim = require('./shim');
|
var shim = require('./shim');
|
||||||
|
var S = require('./settings');
|
||||||
var sha256hash = require('./sha256');
|
var sha256hash = require('./sha256');
|
||||||
|
|
||||||
const importGen = async (key, salt, opt) => {
|
const importGen = async (key, salt, opt) => {
|
||||||
@ -7,7 +8,9 @@
|
|||||||
var opt = opt || {};
|
var opt = opt || {};
|
||||||
const combo = key + (salt || shim.random(8)).toString('utf8'); // new
|
const combo = key + (salt || shim.random(8)).toString('utf8'); // new
|
||||||
const hash = shim.Buffer.from(await sha256hash(combo), 'binary')
|
const hash = shim.Buffer.from(await sha256hash(combo), 'binary')
|
||||||
return await shim.subtle.importKey('raw', new Uint8Array(hash), opt.name || 'AES-GCM', false, ['encrypt', 'decrypt'])
|
|
||||||
|
const jwkKey = S.keyToJwk(hash)
|
||||||
|
return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])
|
||||||
}
|
}
|
||||||
module.exports = importGen;
|
module.exports = importGen;
|
||||||
|
|
@ -1,7 +1,9 @@
|
|||||||
|
|
||||||
if(typeof global !== "undefined"){
|
if(typeof btoa === "undefined"){
|
||||||
var g = global;
|
if(typeof Buffer === "undefined") {
|
||||||
g.btoa = function (data) { return Buffer.from(data, "binary").toString("base64"); };
|
root.Buffer = require("buffer").Buffer
|
||||||
g.atob = function (data) { return Buffer.from(data, "base64").toString("binary"); };
|
}
|
||||||
|
root.btoa = function (data) { return Buffer.from(data, "binary").toString("base64"); };
|
||||||
|
root.atob = function (data) { return Buffer.from(data, "base64").toString("binary"); };
|
||||||
}
|
}
|
||||||
|
|
@ -14,7 +14,7 @@
|
|||||||
Object.assign(SafeBuffer, {
|
Object.assign(SafeBuffer, {
|
||||||
// (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'
|
// (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'
|
||||||
from() {
|
from() {
|
||||||
if (!Object.keys(arguments).length) {
|
if (!Object.keys(arguments).length || arguments[0]==null) {
|
||||||
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
||||||
}
|
}
|
||||||
const input = arguments[0]
|
const input = arguments[0]
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');
|
bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');
|
||||||
bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');
|
bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');
|
||||||
var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...
|
var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...
|
||||||
name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv)
|
name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128
|
||||||
}, aes, new Uint8Array(bufct)));
|
}, aes, new Uint8Array(bufct)));
|
||||||
}catch(e){
|
}catch(e){
|
||||||
if('utf8' === opt.encode){ throw "Could not decrypt" }
|
if('utf8' === opt.encode){ throw "Could not decrypt" }
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
SEA.verify = require('./verify');
|
SEA.verify = require('./verify');
|
||||||
SEA.encrypt = require('./encrypt');
|
SEA.encrypt = require('./encrypt');
|
||||||
SEA.decrypt = require('./decrypt');
|
SEA.decrypt = require('./decrypt');
|
||||||
|
SEA.aeskey = require('./aeskey');
|
||||||
|
|
||||||
SEA.random = SEA.random || shim.random;
|
SEA.random = SEA.random || shim.random;
|
||||||
|
|
||||||
|
@ -15,9 +15,11 @@
|
|||||||
var pubKeyData = keysToEcdhJwk(pub);
|
var pubKeyData = keysToEcdhJwk(pub);
|
||||||
var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },S.ecdh); // Thanks to @sirpy !
|
var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },S.ecdh); // Thanks to @sirpy !
|
||||||
var privKeyData = keysToEcdhJwk(epub, epriv);
|
var privKeyData = keysToEcdhJwk(epub, epriv);
|
||||||
var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveKey']).then(async (privKey) => {
|
var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {
|
||||||
// privateKey scope doesn't leak out from here!
|
// privateKey scope doesn't leak out from here!
|
||||||
var derivedKey = await ecdhSubtle.deriveKey(props, privKey, { name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);
|
var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);
|
||||||
|
var rawBits = new Uint8Array(derivedBits);
|
||||||
|
var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);
|
||||||
return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);
|
return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);
|
||||||
})
|
})
|
||||||
var r = derived;
|
var r = derived;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
var SEA = require('./root');
|
var SEA = require('./root');
|
||||||
var Buffer = require('./buffer');
|
var Buffer = require('./buffer');
|
||||||
var s = {};
|
var s = {};
|
||||||
s.pbkdf2 = {hash: 'SHA-256', iter: 100000, ks: 64};
|
s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};
|
||||||
s.ecdsa = {
|
s.ecdsa = {
|
||||||
pair: {name: 'ECDSA', namedCurve: 'P-256'},
|
pair: {name: 'ECDSA', namedCurve: 'P-256'},
|
||||||
sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}
|
sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}
|
||||||
@ -18,6 +18,13 @@
|
|||||||
if(d){ jwk.d = d }
|
if(d){ jwk.d = d }
|
||||||
return jwk;
|
return jwk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
s.keyToJwk = function(keyBytes) {
|
||||||
|
const keyB64 = keyBytes.toString('base64');
|
||||||
|
const k = keyB64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
|
||||||
|
return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };
|
||||||
|
}
|
||||||
|
|
||||||
s.recall = {
|
s.recall = {
|
||||||
validity: 12 * 60 * 60, // internally in seconds : 12 hours
|
validity: 12 * 60 * 60, // internally in seconds : 12 hours
|
||||||
hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)
|
hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)
|
||||||
|
24
sea/shim.js
24
sea/shim.js
@ -5,28 +5,26 @@
|
|||||||
var o = {};
|
var o = {};
|
||||||
|
|
||||||
if(SEA.window){
|
if(SEA.window){
|
||||||
api.crypto = window.crypto || window.msCrypto;
|
api.crypto = window.crypto || window.msCrypto || require('isomorphic-webcrypto');
|
||||||
api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
|
api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;
|
||||||
api.TextEncoder = window.TextEncoder;
|
api.TextEncoder = window.TextEncoder;
|
||||||
api.TextDecoder = window.TextDecoder;
|
api.TextDecoder = window.TextDecoder;
|
||||||
api.random = (len) => Buffer.from(api.crypto.getRandomValues(new Uint8Array(Buffer.alloc(len))))
|
api.random = (len) => Buffer.from(api.crypto.getRandomValues(new Uint8Array(Buffer.alloc(len))));
|
||||||
|
}
|
||||||
|
if(!api.TextDecoder)
|
||||||
|
{
|
||||||
|
const { TextEncoder, TextDecoder } = require('text-encoding');
|
||||||
|
api.TextDecoder = TextDecoder;
|
||||||
|
api.TextEncoder = TextEncoder;
|
||||||
}
|
}
|
||||||
if(!api.crypto){try{
|
if(!api.crypto){try{
|
||||||
var crypto = require('crypto', 1);
|
var crypto = require('crypto', 1);
|
||||||
const { TextEncoder, TextDecoder } = require('text-encoding', 1)
|
|
||||||
Object.assign(api, {
|
Object.assign(api, {
|
||||||
crypto,
|
crypto,
|
||||||
//subtle,
|
|
||||||
TextEncoder,
|
|
||||||
TextDecoder,
|
|
||||||
random: (len) => Buffer.from(crypto.randomBytes(len))
|
random: (len) => Buffer.from(crypto.randomBytes(len))
|
||||||
});
|
});
|
||||||
//try{
|
const isocrypto = require('isomorphic-webcrypto');
|
||||||
const { Crypto: WebCrypto } = require('@peculiar/webcrypto', 1);
|
api.ossl = api.subtle = isocrypto.subtle;
|
||||||
api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH
|
|
||||||
//}catch(e){
|
|
||||||
//console.log("node-webcrypto-ossl is optionally needed for ECDH, please install if needed.");
|
|
||||||
//}
|
|
||||||
}catch(e){
|
}catch(e){
|
||||||
console.log("node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!");
|
console.log("node-webcrypto-ossl and text-encoding may not be included by default, please add it to your package.json!");
|
||||||
OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED;
|
OSSL_WEBCRYPTO_OR_TEXT_ENCODING_NOT_INSTALLED;
|
||||||
|
@ -37,7 +37,12 @@ describe('SEA', function(){
|
|||||||
var gun;
|
var gun;
|
||||||
var pub;
|
var pub;
|
||||||
describe('Utility', function(){
|
describe('Utility', function(){
|
||||||
|
it('generates aeskey from jwk', function(done) {
|
||||||
|
SEA.aeskey('x','x').then(k => {
|
||||||
|
expect(k.data.toString('base64')).to.be('Xd6JaIf2dUybFb/jpEGuSAbfL96UABMR4IvxEGIuC74=')
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
it('quickstart', function(done){
|
it('quickstart', function(done){
|
||||||
SEA.pair(function(pair){
|
SEA.pair(function(pair){
|
||||||
SEA.encrypt('hello self', pair, function(enc){
|
SEA.encrypt('hello self', pair, function(enc){
|
||||||
@ -123,50 +128,15 @@ describe('SEA', function(){
|
|||||||
});});});});});});});});});});});});});});});});});});});});});});});});});});});
|
});});});});});});});});});});});});});});});});});});});});});});});});});});});
|
||||||
})
|
})
|
||||||
|
|
||||||
it('atypes', function(done){
|
|
||||||
|
it('DOESNT DECRYPT SCIENTIFIC NOTATION', function(done){
|
||||||
var pair, s, v;
|
var pair, s, v;
|
||||||
SEA.pair(function(pair){
|
SEA.pair(function(pair){
|
||||||
SEA.encrypt(null, pair, function(s){
|
SEA.encrypt('4e2', pair, function(s){
|
||||||
SEA.decrypt(s, pair, function(v){
|
SEA.decrypt(s, pair, function(v){
|
||||||
expect(null).to.be(v);
|
expect(400).to.be(v);
|
||||||
SEA.encrypt(true, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect(true).to.be(v);
|
|
||||||
SEA.encrypt(false, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect(false).to.be(v);
|
|
||||||
SEA.encrypt(0, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect(0).to.be(v);
|
|
||||||
SEA.encrypt(1, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect(1).to.be(v);
|
|
||||||
SEA.encrypt(1.01, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect(1.01).to.be(v);
|
|
||||||
SEA.encrypt('', pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect('').to.be(v);
|
|
||||||
SEA.encrypt('a', pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect('a').to.be(v);
|
|
||||||
SEA.encrypt([], pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect([]).to.eql(v);
|
|
||||||
SEA.encrypt([1], pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect([1]).to.eql(v);
|
|
||||||
SEA.encrypt({}, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect({}).to.eql(v);
|
|
||||||
SEA.encrypt({a:1}, pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect({a:1}).to.eql(v);
|
|
||||||
SEA.encrypt(JSON.stringify({a:1}), pair, function(s){
|
|
||||||
SEA.decrypt(s, pair, function(v){
|
|
||||||
expect({a:1}).to.eql(v);
|
|
||||||
done();
|
done();
|
||||||
});});});});});});});});});});});});});});});});});});});});});});});});});});});
|
});});});
|
||||||
})
|
})
|
||||||
|
|
||||||
it('legacy', function(done){ (async function(){
|
it('legacy', function(done){ (async function(){
|
||||||
@ -364,4 +334,4 @@ describe('SEA', function(){
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user