hypercore-signing-request 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/index.js +42 -17
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -16,7 +16,7 @@ const { generate, decode, signable } = require('hypercore-signing-request')
16
16
 
17
17
  ## API
18
18
 
19
- #### `requestBuffer = generate(core)`
19
+ #### `requestBuffer = await generate(core, { length = core.length })`
20
20
 
21
21
  Generate a signing request, returned as a buffer so it can be shared.
22
22
  Only works for non-compat cores (ie manifest backed)
package/index.js CHANGED
@@ -4,32 +4,34 @@ const caps = require('hypercore/lib/caps')
4
4
  const m = require('hypercore/lib/messages')
5
5
  const c = require('compact-encoding')
6
6
 
7
- module.exports = {
8
- generate (core) {
9
- if (core.core.compat) throw new Error('Cannot generate signing requests for compat cores')
7
+ const VERSION = 1
10
8
 
11
- const version = c.encode(c.uint, 0)
12
- const manifest = c.encode(c.buffer, c.encode(m.manifest, core.manifest))
13
- const treeHash = c.encode(c.fixed32, core.core.tree.hash())
14
- const length = c.encode(c.uint, core.length)
15
- const fork = c.encode(c.uint, core.fork)
9
+ const FramedManifest = c.frame(m.manifest)
16
10
 
17
- return Buffer.concat([version, manifest, treeHash, length, fork])
11
+ const Request = {
12
+ preencode (state, req) {
13
+ c.uint.preencode(state, req.version)
14
+ FramedManifest.preencode(state, req.manifest)
15
+ c.fixed32.preencode(state, req.treeHash)
16
+ c.uint.preencode(state, req.length)
17
+ c.uint.preencode(state, req.fork)
18
+ },
19
+ encode (state, req) {
20
+ c.uint.encode(state, req.version)
21
+ FramedManifest.encode(state, req.manifest)
22
+ c.fixed32.encode(state, req.treeHash)
23
+ c.uint.encode(state, req.length)
24
+ c.uint.encode(state, req.fork)
18
25
  },
19
- decode (req) {
20
- const state = { start: 0, end: req.byteLength, buffer: req }
26
+ decode (state) {
21
27
  const version = c.uint.decode(state)
28
+ if (version !== VERSION) throw new Error('Unknown signing request version: ' + version)
22
29
 
23
- if (version !== 0) throw new Error('Unknown signing request version: ' + version)
24
-
25
- const manifest = c.decode(m.manifest, c.buffer.decode(state))
30
+ const manifest = FramedManifest.decode(state)
26
31
  const treeHash = c.fixed32.decode(state)
27
32
  const length = c.uint.decode(state)
28
33
  const fork = c.uint.decode(state)
29
34
 
30
- if (length === 0) throw new Error('Refusing to sign length = 0')
31
- if (state.start < state.end) throw new Error('Unparsed padding left in request, bailing')
32
-
33
35
  const key = Verifier.manifestHash(manifest)
34
36
  const id = HypercoreID.normalize(key)
35
37
 
@@ -42,6 +44,29 @@ module.exports = {
42
44
  length,
43
45
  fork
44
46
  }
47
+ }
48
+ }
49
+
50
+ module.exports = {
51
+ async generate (core, { length = core.length, fork = core.fork } = {}) {
52
+ if (core.core.compat) throw new Error('Cannot generate signing requests for compat cores')
53
+
54
+ return c.encode(Request, {
55
+ version: VERSION,
56
+ manifest: core.manifest,
57
+ treeHash: await core.treeHash(length),
58
+ length,
59
+ fork
60
+ })
61
+ },
62
+ decode (buffer) {
63
+ const state = { start: 0, end: buffer.byteLength, buffer }
64
+ const req = Request.decode(state)
65
+
66
+ if (req.length === 0) throw new Error('Refusing to sign length = 0')
67
+ if (state.start < state.end) throw new Error('Unparsed padding left in request, bailing')
68
+
69
+ return req
45
70
  },
46
71
  signable (pub, req) {
47
72
  for (const s of req.manifest.signers) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hypercore-signing-request",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Generate shareable signing requests for Hypercore",
5
5
  "main": "index.js",
6
6
  "files": [