aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--package.json1
-rw-r--r--server/helpers/custom-jsonld-signature.ts5
-rw-r--r--server/helpers/peertube-crypto.ts121
-rw-r--r--server/middlewares/activitypub.ts2
-rw-r--r--server/tests/api/activitypub/helpers.ts13
-rw-r--r--yarn.lock124
6 files changed, 61 insertions, 205 deletions
diff --git a/package.json b/package.json
index ce689a4b3..0c1ec93d1 100644
--- a/package.json
+++ b/package.json
@@ -128,7 +128,6 @@
128 "iso-639-3": "^1.0.1", 128 "iso-639-3": "^1.0.1",
129 "js-yaml": "^3.5.4", 129 "js-yaml": "^3.5.4",
130 "jsonld": "~1.1.0", 130 "jsonld": "~1.1.0",
131 "jsonld-signatures": "https://github.com/Chocobozzz/jsonld-signatures#rsa2017",
132 "lodash": "^4.17.10", 131 "lodash": "^4.17.10",
133 "lru-cache": "^5.1.1", 132 "lru-cache": "^5.1.1",
134 "magnet-uri": "^5.1.4", 133 "magnet-uri": "^5.1.4",
diff --git a/server/helpers/custom-jsonld-signature.ts b/server/helpers/custom-jsonld-signature.ts
index a3bceb047..cb07fa3b2 100644
--- a/server/helpers/custom-jsonld-signature.ts
+++ b/server/helpers/custom-jsonld-signature.ts
@@ -1,6 +1,5 @@
1import * as AsyncLRU from 'async-lru' 1import * as AsyncLRU from 'async-lru'
2import * as jsonld from 'jsonld' 2import * as jsonld from 'jsonld'
3import * as jsig from 'jsonld-signatures'
4import { logger } from './logger' 3import { logger } from './logger'
5 4
6const CACHE = { 5const CACHE = {
@@ -79,6 +78,4 @@ jsonld.documentLoader = (url, cb) => {
79 lru.get(url, cb) 78 lru.get(url, cb)
80} 79}
81 80
82jsig.use('jsonld', jsonld) 81export { jsonld }
83
84export { jsig, jsonld }
diff --git a/server/helpers/peertube-crypto.ts b/server/helpers/peertube-crypto.ts
index 085cd62c9..9eb782302 100644
--- a/server/helpers/peertube-crypto.ts
+++ b/server/helpers/peertube-crypto.ts
@@ -1,11 +1,10 @@
1import { Request } from 'express' 1import { Request } from 'express'
2import { BCRYPT_SALT_SIZE, HTTP_SIGNATURE, PRIVATE_RSA_KEY_SIZE } from '../initializers/constants' 2import { BCRYPT_SALT_SIZE, HTTP_SIGNATURE, PRIVATE_RSA_KEY_SIZE } from '../initializers/constants'
3import { ActorModel } from '../models/activitypub/actor'
4import { createPrivateKey, getPublicKey, promisify1, promisify2, sha256 } from './core-utils' 3import { createPrivateKey, getPublicKey, promisify1, promisify2, sha256 } from './core-utils'
5import { jsig, jsonld } from './custom-jsonld-signature' 4import { jsonld } from './custom-jsonld-signature'
6import { logger } from './logger' 5import { logger } from './logger'
7import { cloneDeep } from 'lodash' 6import { cloneDeep } from 'lodash'
8import { createVerify } from 'crypto' 7import { createSign, createVerify } from 'crypto'
9import { buildDigest } from '../lib/job-queue/handlers/utils/activitypub-http-utils' 8import { buildDigest } from '../lib/job-queue/handlers/utils/activitypub-http-utils'
10import * as bcrypt from 'bcrypt' 9import * as bcrypt from 'bcrypt'
11import { MActor } from '../typings/models' 10import { MActor } from '../typings/models'
@@ -57,70 +56,21 @@ function parseHTTPSignature (req: Request, clockSkew?: number) {
57 56
58// JSONLD 57// JSONLD
59 58
60async function isJsonLDSignatureVerified (fromActor: MActor, signedDocument: any): Promise<boolean> { 59function isJsonLDSignatureVerified (fromActor: MActor, signedDocument: any): Promise<boolean> {
61 if (signedDocument.signature.type === 'RsaSignature2017') { 60 if (signedDocument.signature.type === 'RsaSignature2017') {
62 // Mastodon algorithm 61 return isJsonLDRSA2017Verified(fromActor, signedDocument)
63 const res = await isJsonLDRSA2017Verified(fromActor, signedDocument)
64 // Success? If no, try with our library
65 if (res === true) return true
66 } 62 }
67 63
68 const publicKeyObject = { 64 logger.warn('Unknown JSON LD signature %s.', signedDocument.signature.type, signedDocument)
69 '@context': jsig.SECURITY_CONTEXT_URL,
70 id: fromActor.url,
71 type: 'CryptographicKey',
72 owner: fromActor.url,
73 publicKeyPem: fromActor.publicKey
74 }
75
76 const publicKeyOwnerObject = {
77 '@context': jsig.SECURITY_CONTEXT_URL,
78 id: fromActor.url,
79 publicKey: [ publicKeyObject ]
80 }
81 65
82 const options = { 66 return Promise.resolve(false)
83 publicKey: publicKeyObject,
84 publicKeyOwner: publicKeyOwnerObject
85 }
86
87 return jsig.promises
88 .verify(signedDocument, options)
89 .then((result: { verified: boolean }) => result.verified)
90 .catch(err => {
91 logger.error('Cannot check signature.', { err })
92 return false
93 })
94} 67}
95 68
96// Backward compatibility with "other" implementations 69// Backward compatibility with "other" implementations
97async function isJsonLDRSA2017Verified (fromActor: MActor, signedDocument: any) { 70async function isJsonLDRSA2017Verified (fromActor: MActor, signedDocument: any) {
98 function hash (obj: any): Promise<any> {
99 return jsonld.promises
100 .normalize(obj, {
101 algorithm: 'URDNA2015',
102 format: 'application/n-quads'
103 })
104 .then(res => sha256(res))
105 }
106
107 const signatureCopy = cloneDeep(signedDocument.signature)
108 Object.assign(signatureCopy, {
109 '@context': [
110 'https://w3id.org/security/v1',
111 { RsaSignature2017: 'https://w3id.org/security#RsaSignature2017' }
112 ]
113 })
114 delete signatureCopy.type
115 delete signatureCopy.id
116 delete signatureCopy.signatureValue
117
118 const docWithoutSignature = cloneDeep(signedDocument)
119 delete docWithoutSignature.signature
120
121 const [ documentHash, optionsHash ] = await Promise.all([ 71 const [ documentHash, optionsHash ] = await Promise.all([
122 hash(docWithoutSignature), 72 createDocWithoutSignatureHash(signedDocument),
123 hash(signatureCopy) 73 createSignatureHash(signedDocument.signature)
124 ]) 74 ])
125 75
126 const toVerify = optionsHash + documentHash 76 const toVerify = optionsHash + documentHash
@@ -131,14 +81,27 @@ async function isJsonLDRSA2017Verified (fromActor: MActor, signedDocument: any)
131 return verify.verify(fromActor.publicKey, signedDocument.signature.signatureValue, 'base64') 81 return verify.verify(fromActor.publicKey, signedDocument.signature.signatureValue, 'base64')
132} 82}
133 83
134function signJsonLDObject (byActor: MActor, data: any) { 84async function signJsonLDObject (byActor: MActor, data: any) {
135 const options = { 85 const signature = {
136 privateKeyPem: byActor.privateKey, 86 type: 'RsaSignature2017',
137 creator: byActor.url, 87 creator: byActor.url,
138 algorithm: 'RsaSignature2017' 88 created: new Date().toISOString()
139 } 89 }
140 90
141 return jsig.promises.sign(data, options) 91 const [ documentHash, optionsHash ] = await Promise.all([
92 createDocWithoutSignatureHash(data),
93 createSignatureHash(signature)
94 ])
95
96 const toSign = optionsHash + documentHash
97
98 const sign = createSign('RSA-SHA256')
99 sign.update(toSign, 'utf8')
100
101 const signatureValue = sign.sign(byActor.privateKey, 'base64')
102 Object.assign(signature, { signatureValue })
103
104 return Object.assign(data, { signature })
142} 105}
143 106
144// --------------------------------------------------------------------------- 107// ---------------------------------------------------------------------------
@@ -155,3 +118,35 @@ export {
155} 118}
156 119
157// --------------------------------------------------------------------------- 120// ---------------------------------------------------------------------------
121
122function hash (obj: any): Promise<any> {
123 return jsonld.promises
124 .normalize(obj, {
125 algorithm: 'URDNA2015',
126 format: 'application/n-quads'
127 })
128 .then(res => sha256(res))
129}
130
131function createSignatureHash (signature: any) {
132 const signatureCopy = cloneDeep(signature)
133 Object.assign(signatureCopy, {
134 '@context': [
135 'https://w3id.org/security/v1',
136 { RsaSignature2017: 'https://w3id.org/security#RsaSignature2017' }
137 ]
138 })
139
140 delete signatureCopy.type
141 delete signatureCopy.id
142 delete signatureCopy.signatureValue
143
144 return hash(signatureCopy)
145}
146
147function createDocWithoutSignatureHash (doc: any) {
148 const docWithoutSignature = cloneDeep(doc)
149 delete docWithoutSignature.signature
150
151 return hash(docWithoutSignature)
152}
diff --git a/server/middlewares/activitypub.ts b/server/middlewares/activitypub.ts
index b1e5b5236..bea213d27 100644
--- a/server/middlewares/activitypub.ts
+++ b/server/middlewares/activitypub.ts
@@ -101,6 +101,8 @@ async function checkJsonLDSignature (req: Request, res: Response) {
101 const verified = await isJsonLDSignatureVerified(actor, req.body) 101 const verified = await isJsonLDSignatureVerified(actor, req.body)
102 102
103 if (verified !== true) { 103 if (verified !== true) {
104 logger.warn('Signature not verified.', req.body)
105
104 res.sendStatus(403) 106 res.sendStatus(403)
105 return false 107 return false
106 } 108 }
diff --git a/server/tests/api/activitypub/helpers.ts b/server/tests/api/activitypub/helpers.ts
index 365d0e1ae..0d1f154fe 100644
--- a/server/tests/api/activitypub/helpers.ts
+++ b/server/tests/api/activitypub/helpers.ts
@@ -53,19 +53,6 @@ describe('Test activity pub helpers', function () {
53 expect(result).to.be.false 53 expect(result).to.be.false
54 }) 54 })
55 55
56 it('Should fail with an invalid PeerTube URL', async function () {
57 const keys = require('./json/peertube/keys.json')
58 const body = require('./json/peertube/announce-without-context.json')
59
60 const actorSignature = { url: 'http://localhost:9002/accounts/peertube', privateKey: keys.privateKey }
61 const signedBody = await buildSignedActivity(actorSignature as any, body)
62
63 const fromActor = { publicKey: keys.publicKey, url: 'http://localhost:9003/accounts/peertube' }
64 const result = await isJsonLDSignatureVerified(fromActor as any, signedBody)
65
66 expect(result).to.be.false
67 })
68
69 it('Should succeed with a valid PeerTube signature', async function () { 56 it('Should succeed with a valid PeerTube signature', async function () {
70 const keys = require('./json/peertube/keys.json') 57 const keys = require('./json/peertube/keys.json')
71 const body = require('./json/peertube/announce-without-context.json') 58 const body = require('./json/peertube/announce-without-context.json')
diff --git a/yarn.lock b/yarn.lock
index f26763845..b5a3a3f47 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -828,24 +828,6 @@ bindings@~1.3.0:
828 resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5" 828 resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"
829 integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew== 829 integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
830 830
831bitcore-lib@^0.13.7:
832 version "0.13.19"
833 resolved "https://registry.yarnpkg.com/bitcore-lib/-/bitcore-lib-0.13.19.tgz#48af1e9bda10067c1ab16263472b5add2000f3dc"
834 integrity sha1-SK8em9oQBnwasWJjRyta3SAA89w=
835 dependencies:
836 bn.js "=2.0.4"
837 bs58 "=2.0.0"
838 buffer-compare "=1.0.0"
839 elliptic "=3.0.3"
840 inherits "=2.0.1"
841 lodash "=3.10.1"
842
843"bitcore-message@github:CoMakery/bitcore-message#dist":
844 version "1.0.2"
845 resolved "https://codeload.github.com/CoMakery/bitcore-message/tar.gz/8799cc327029c3d34fc725f05b2cf981363f6ebf"
846 dependencies:
847 bitcore-lib "^0.13.7"
848
849bitfield@^2.0.0: 831bitfield@^2.0.0:
850 version "2.0.0" 832 version "2.0.0"
851 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-2.0.0.tgz#fbe6767592fe5b4c87ecf1d04126294cc1bfa837" 833 resolved "https://registry.yarnpkg.com/bitfield/-/bitfield-2.0.0.tgz#fbe6767592fe5b4c87ecf1d04126294cc1bfa837"
@@ -968,16 +950,6 @@ bluebird@^3.0.5, bluebird@^3.5.0:
968 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" 950 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
969 integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== 951 integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
970 952
971bn.js@=2.0.4:
972 version "2.0.4"
973 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.0.4.tgz#220a7cd677f7f1bfa93627ff4193776fe7819480"
974 integrity sha1-Igp81nf38b+pNif/QZN3b+eBlIA=
975
976bn.js@^2.0.0:
977 version "2.2.0"
978 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz#12162bc2ae71fc40a5626c33438f3a875cd37625"
979 integrity sha1-EhYrwq5x/EClYmwzQ486h1zTdiU=
980
981bn.js@^4.4.0: 953bn.js@^4.4.0:
982 version "4.11.8" 954 version "4.11.8"
983 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 955 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
@@ -1043,11 +1015,6 @@ braces@^3.0.1:
1043 dependencies: 1015 dependencies:
1044 fill-range "^7.0.1" 1016 fill-range "^7.0.1"
1045 1017
1046brorand@^1.0.1:
1047 version "1.1.0"
1048 resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
1049 integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
1050
1051browser-stdout@1.3.1: 1018browser-stdout@1.3.1:
1052 version "1.3.1" 1019 version "1.3.1"
1053 resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 1020 resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
@@ -1058,11 +1025,6 @@ browserify-package-json@^1.0.0:
1058 resolved "https://registry.yarnpkg.com/browserify-package-json/-/browserify-package-json-1.0.1.tgz#98dde8aa5c561fd6d3fe49bbaa102b74b396fdea" 1025 resolved "https://registry.yarnpkg.com/browserify-package-json/-/browserify-package-json-1.0.1.tgz#98dde8aa5c561fd6d3fe49bbaa102b74b396fdea"
1059 integrity sha1-mN3oqlxWH9bT/km7qhArdLOW/eo= 1026 integrity sha1-mN3oqlxWH9bT/km7qhArdLOW/eo=
1060 1027
1061bs58@=2.0.0:
1062 version "2.0.0"
1063 resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.0.tgz#72b713bed223a0ac518bbda0e3ce3f4817f39eb5"
1064 integrity sha1-crcTvtIjoKxRi72g484/SBfznrU=
1065
1066buffer-alloc-unsafe@^1.1.0: 1028buffer-alloc-unsafe@^1.1.0:
1067 version "1.1.0" 1029 version "1.1.0"
1068 resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 1030 resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
@@ -1076,16 +1038,6 @@ buffer-alloc@^1.1.0, buffer-alloc@^1.2.0:
1076 buffer-alloc-unsafe "^1.1.0" 1038 buffer-alloc-unsafe "^1.1.0"
1077 buffer-fill "^1.0.0" 1039 buffer-fill "^1.0.0"
1078 1040
1079buffer-compare@=1.0.0:
1080 version "1.0.0"
1081 resolved "https://registry.yarnpkg.com/buffer-compare/-/buffer-compare-1.0.0.tgz#acaa7a966e98eee9fae14b31c39a5f158fb3c4a2"
1082 integrity sha1-rKp6lm6Y7un64Usxw5pfFY+zxKI=
1083
1084buffer-equal-constant-time@1.0.1:
1085 version "1.0.1"
1086 resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
1087 integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
1088
1089buffer-equals@^1.0.3, buffer-equals@^1.0.4: 1041buffer-equals@^1.0.3, buffer-equals@^1.0.4:
1090 version "1.0.4" 1042 version "1.0.4"
1091 resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5" 1043 resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5"
@@ -2096,13 +2048,6 @@ ecc-jsbn@~0.1.1:
2096 jsbn "~0.1.0" 2048 jsbn "~0.1.0"
2097 safer-buffer "^2.1.0" 2049 safer-buffer "^2.1.0"
2098 2050
2099ecdsa-sig-formatter@1.0.11:
2100 version "1.0.11"
2101 resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
2102 integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
2103 dependencies:
2104 safe-buffer "^5.0.1"
2105
2106ee-first@1.1.1: 2051ee-first@1.1.1:
2107 version "1.1.1" 2052 version "1.1.1"
2108 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 2053 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -2113,16 +2058,6 @@ elegant-spinner@^1.0.1:
2113 resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 2058 resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
2114 integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= 2059 integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
2115 2060
2116elliptic@=3.0.3:
2117 version "3.0.3"
2118 resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-3.0.3.tgz#865c9b420bfbe55006b9f969f97a0d2c44966595"
2119 integrity sha1-hlybQgv75VAGuflp+XoNLESWZZU=
2120 dependencies:
2121 bn.js "^2.0.0"
2122 brorand "^1.0.1"
2123 hash.js "^1.0.0"
2124 inherits "^2.0.1"
2125
2126emoji-regex@^7.0.1: 2061emoji-regex@^7.0.1:
2127 version "7.0.3" 2062 version "7.0.3"
2128 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 2063 resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -3250,14 +3185,6 @@ has@^1.0.1, has@^1.0.3:
3250 dependencies: 3185 dependencies:
3251 function-bind "^1.1.1" 3186 function-bind "^1.1.1"
3252 3187
3253hash.js@^1.0.0:
3254 version "1.1.7"
3255 resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
3256 integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
3257 dependencies:
3258 inherits "^2.0.3"
3259 minimalistic-assert "^1.0.1"
3260
3261hashish@~0.0.4: 3188hashish@~0.0.4:
3262 version "0.0.4" 3189 version "0.0.4"
3263 resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554" 3190 resolved "https://registry.yarnpkg.com/hashish/-/hashish-0.0.4.tgz#6d60bc6ffaf711b6afd60e426d077988014e6554"
@@ -3481,11 +3408,6 @@ inherits@2.0.3:
3481 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 3408 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
3482 integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 3409 integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
3483 3410
3484inherits@=2.0.1:
3485 version "2.0.1"
3486 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
3487 integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
3488
3489ini@^1.3.4, ini@~1.3.0: 3411ini@^1.3.4, ini@~1.3.0:
3490 version "1.3.5" 3412 version "1.3.5"
3491 resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 3413 resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
@@ -4028,25 +3950,6 @@ jsonify@~0.0.0:
4028 resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 3950 resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
4029 integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 3951 integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
4030 3952
4031"jsonld-signatures@https://github.com/Chocobozzz/jsonld-signatures#rsa2017":
4032 version "1.2.2-2"
4033 resolved "https://github.com/Chocobozzz/jsonld-signatures#77660963e722eb4541d2d255f9d9d4216329665f"
4034 dependencies:
4035 bitcore-message "github:CoMakery/bitcore-message#dist"
4036 jsonld "^0.5.12"
4037 jws "^3.1.4"
4038 node-forge "^0.7.1"
4039
4040jsonld@^0.5.12:
4041 version "0.5.21"
4042 resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.5.21.tgz#4d5b78d717eb92bcd1ac9d88e34efad95370c0bf"
4043 integrity sha512-1dQhaw1Eb3p7Cz5ECE2DNPwLvTmK+f6D45hACBdonJaFKP1bN9zlKLZWbPZQeZtduAc/LNv10J4ML0IiTBVahw==
4044 dependencies:
4045 rdf-canonize "^0.2.1"
4046 request "^2.83.0"
4047 semver "^5.5.0"
4048 xmldom "0.1.19"
4049
4050jsonld@~1.1.0: 3953jsonld@~1.1.0:
4051 version "1.1.0" 3954 version "1.1.0"
4052 resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-1.1.0.tgz#afcb168c44557a7bddead4d4513c3cbcae3bc5b9" 3955 resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-1.1.0.tgz#afcb168c44557a7bddead4d4513c3cbcae3bc5b9"
@@ -4082,23 +3985,6 @@ junk@^3.1.0:
4082 resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" 3985 resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1"
4083 integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== 3986 integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==
4084 3987
4085jwa@^1.4.1:
4086 version "1.4.1"
4087 resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
4088 integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
4089 dependencies:
4090 buffer-equal-constant-time "1.0.1"
4091 ecdsa-sig-formatter "1.0.11"
4092 safe-buffer "^5.0.1"
4093
4094jws@^3.1.4:
4095 version "3.2.2"
4096 resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
4097 integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
4098 dependencies:
4099 jwa "^1.4.1"
4100 safe-buffer "^5.0.1"
4101
4102k-bucket@^4.0.0: 3988k-bucket@^4.0.0:
4103 version "4.0.1" 3989 version "4.0.1"
4104 resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-4.0.1.tgz#3fc2e5693f0b7bff90d7b6b476edd6087955d542" 3990 resolved "https://registry.yarnpkg.com/k-bucket/-/k-bucket-4.0.1.tgz#3fc2e5693f0b7bff90d7b6b476edd6087955d542"
@@ -4335,11 +4221,6 @@ lodash@4.17.4:
4335 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 4221 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
4336 integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= 4222 integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
4337 4223
4338lodash@=3.10.1:
4339 version "3.10.1"
4340 resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
4341 integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
4342
4343lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.3.0, lodash@~4.17.10: 4224lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.3.0, lodash@~4.17.10:
4344 version "4.17.15" 4225 version "4.17.15"
4345 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 4226 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
@@ -4638,11 +4519,6 @@ mimic-response@^1.0.0:
4638 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 4519 resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
4639 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 4520 integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
4640 4521
4641minimalistic-assert@^1.0.1:
4642 version "1.0.1"
4643 resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
4644 integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
4645
4646minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: 4522minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2:
4647 version "3.0.4" 4523 version "3.0.4"
4648 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 4524 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"