Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support json payload #32

Merged
merged 4 commits into from
May 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,11 @@
"@typescript-eslint/eslint-plugin": "^5.18.0",
"@typescript-eslint/parser": "^5.18.0",
"babel-jest": "^29.2.0",
"blockcodec-to-ipld-format": "^2.0.0",
"did-jwt": "^6.0.0",
"eslint": "^8.12.0",
"eslint-config-3box": "^0.4.1",
"eslint-plugin-jest": "^27.1.2",
"fast-json-stable-stringify": "^2.1.0",
"ipld": "^0.30.0",
"ipld-in-memory": "^8.0.0",
"jest": "^29.2.0",
"prettier": "^2.3.0",
"typescript": "^4.3.2",
Expand Down
45 changes: 38 additions & 7 deletions src/signing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface DagJWS {
payload: string
signatures: Array<JWSSignature>
link?: CID
pld?: Record<string, any>
}

export interface EncodedSignature {
Expand Down Expand Up @@ -52,11 +53,6 @@ function encodeSignature(signature: JWSSignature): EncodedSignature {

export function encode(jws: DagJWS): EncodedJWS {
const payload = fromBase64url(jws.payload)
try {
CID.decode(payload)
} catch (e) {
throw new Error('Not a valid DagJWS')
}
return {
payload,
signatures: jws.signatures.map(encodeSignature),
Expand All @@ -77,6 +73,41 @@ export function decode(encoded: EncodedJWS): DagJWS {
payload: toBase64url(encoded.payload),
signatures: encoded.signatures.map(decodeSignature),
}
decoded.link = CID.decode(new Uint8Array(encoded.payload))
return decoded
try {
decoded.pld = replaceCIDs(payloadToJSON(encoded.payload)) as Record<string, any>
return decoded
} catch (e) {
try {
decoded.link = CID.decode(new Uint8Array(encoded.payload))
return decoded
} catch (e) {
throw new Error('Invalid payload, must be either JSON or CID')
}
}
}

function replaceCIDs(data: any): any {
if (typeof data === 'string') {
if (data.startsWith('ipfs://')) {
return CID.parse(data.slice(7))
}
} else if (Array.isArray(data)) {
return data.map(replaceCIDs) as any
} else if (isObject(data)) {
const newObj = {} as Record<string, any>
for (const key in data) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
newObj[key] = replaceCIDs(data[key])
}
return newObj
}
return data
}

function isObject(data: any): data is Record<string, any> {
return typeof data === 'object' && data !== null
}

function payloadToJSON(data: Uint8Array): any {
return JSON.parse(new TextDecoder().decode(data))
}
5 changes: 5 additions & 0 deletions test/__fixtures__/encryption.fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,5 +139,10 @@ export const fixtures = {
oneRecip: bytes.fromHex('a5626976581851f600419a8d3f70ccaee5aec5ae140800db167d0f28f8ff6374616750961d1d6a0a53ed277b6f6329a62337bf6970726f7465637465644f7b22656e63223a225843323050227d6a6369706865727465787458244a12a86f8ea14ae9a91349a877adddc875221b9062c52c175191276aced6fd0c1f71ecb66a726563697069656e747381a266686561646572a4626976782057587a76414e595f7466736f3765764861764f66372d627858556b2d786e4f5063616c676f454344482d45532b58433230504b576365706ba36178782b6b6d614b427478426c4566477056527044305a4d6b316266774e335667466359556b505a49396f5544456f6363727666583235353139636b7479634f4b5063746167763371595348304f374a5a4b5764355f3734436d2d5a676d656e637279707465645f6b65795820c27c58cc7f55108f13720fd46836fe8d534b91fa5a837c5e63f6b5a7b00c1f67'),
multipleRecip: bytes.fromHex('a56269765818f3f3c92467c191b2a33f703edc72bf09f6538392160737746374616750803e4b5f3e3f87518fe1776ff52feef96970726f7465637465644f7b22656e63223a225843323050227d6a6369706865727465787458246dfdc48e4b46a6b77ba5443c9b3538ba47bcff8283c0de99f8f1c15fae56d0994da891bd6a726563697069656e747382a266686561646572a4626976782041674c795961746c4a6e4771586f39466159356173794e4d6a694b664d64745a63616c676f454344482d45532b58433230504b576365706ba36178782b45707255565a424b7a644b575766644a6437724a672d2d5f385a686b414e65356e7a686c653056704179676363727666583235353139636b7479634f4b506374616776365f7532354f747055425756587a76765064707053416d656e637279707465645f6b657958200c5cd81201eb63af7b2dcecc4f29f3bce66f00fc39646085e5c9b0d69ae414daa266686561646572a462697678206c7244625738456c63385330675437695f794a52684c4e516b576c41516a4a3363616c676f454344482d45532b58433230504b576365706ba36178782b7a426475443459577068372d4f5349703346674646325656417a55443778684766792d6a327061347a51416363727666583235353139636b7479634f4b5063746167764b334b396b593331505137476d50625f4741496f76516d656e637279707465645f6b65795820987d496475ef5e759153c355d2493edb6a7007b2e8a188a01026fa6636f77be0')
},
cids: {
dir: 'bagcqcerakjv2mmdlbai3urym22bw5kaw7nqov73yaxf6xjnp7e56sclsrooa',
oneRecip: 'bagcqcera7azagcqlpu4ivvh4xp4iv6psmb5d7eki6ln3fnfnsnbb2hzv4nxq',
multipleRecip: 'bagcqcera5uvz2qai6l4vmqjigwpowluilxngz3dyjnva2s3uwbfb5u4ao4fa'
}
}
/*eslint-enable */
40 changes: 37 additions & 3 deletions test/__fixtures__/signing.fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,38 @@ export const fixtures = {
dagJws: {
oneSig: [{
payload: 'AXASIN69ets85WVE0ipva5M5b2mAqAZ8LME08PeAG2MxCSuV', // signed by key 0
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
signatures: [ { protected: 'eyJhbGciOiJFUzI1NksifQ', signature: 'SiYGXW7Yi-KxbpIlLNmu0lEhrayV7ypaAC49GAcQ_qpTstZW89Mz6Cp8VlUEX-qVsgYjc-9-1zvLcDYlxOsr1g' } ]
}, {
payload: 'AXASIN69ets85WVE0ipva5M5b2mAqAZ8LME08PeAG2MxCSuV', // signed by key 1
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
signatures: [ { protected: 'eyJhbGciOiJFUzI1NksifQ', signature: 'Q8PdTE5A5N3a0ktO2wNdUymumHlSxNF9Si38IvzsMaSZC63yQw-bJNpKf-UeJFPH7cDzY7jLg2G_viejp7NqXg' } ]
}],
multipleSig: {
payload: 'AXASIN69ets85WVE0ipva5M5b2mAqAZ8LME08PeAG2MxCSuV',
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
link: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
signatures: [{
protected: 'eyJhbGciOiJFUzI1NksifQ', signature: 'SiYGXW7Yi-KxbpIlLNmu0lEhrayV7ypaAC49GAcQ_qpTstZW89Mz6Cp8VlUEX-qVsgYjc-9-1zvLcDYlxOsr1g'
}, {
protected: 'eyJhbGciOiJFUzI1NksifQ', signature: 'Q8PdTE5A5N3a0ktO2wNdUymumHlSxNF9Si38IvzsMaSZC63yQw-bJNpKf-UeJFPH7cDzY7jLg2G_viejp7NqXg'
}]
},
withPayload: {
payload: 'eyJ0ZXN0IjoicGF5bG9hZCIsImFMaW5rIjoiaXBmczovL2JhZnliZWlnNnh2NW53cGhmbXZjbmVrdHBub2p0czMzanFjdWFtN2JteWUycGI1NGFkbnJ0Y2NqbHN1IiwiYXJyIjpbImlwZnM6Ly9iYWZ5YmVpZzZ4djVud3BoZm12Y25la3Rwbm9qdHMzM2pxY3VhbTdibXllMnBiNTRhZG5ydGNjamxzdSIsIml0ZW0xIiwiaXRlbTIiXSwibmVzdGVkIjp7ImFMaW5rIjoiaXBmczovL2JhZnliZWlnNnh2NW53cGhmbXZjbmVrdHBub2p0czMzanFjdWFtN2JteWUycGI1NGFkbnJ0Y2NqbHN1IiwiYXJyIjpbImlwZnM6Ly9iYWZ5YmVpZzZ4djVud3BoZm12Y25la3Rwbm9qdHMzM2pxY3VhbTdibXllMnBiNTRhZG5ydGNjamxzdSIsIml0ZW0xIiwiaXRlbTIiXX19',
signatures: [{
protected: 'eyJhbGciOiJFUzI1NksifQ',
signature: 'IY8AHhQB0n5QpO1opse83d6HrXWfofPjW6if5vVB7Dky3wj2-daT8I1xHX5s4PbuC3owZo2rr8C-nGQsftHE-w'
}],
pld: {
test: 'payload',
aLink: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
arr: [ CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'), 'item1', 'item2' ],
nested: {
aLink: CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'),
arr: [ CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu'), 'item1', 'item2' ],
}
}
},
},
encodedJws: {
oneSig: [{
Expand All @@ -59,13 +75,31 @@ export const fixtures = {
protected: bytes.fromHex('7b22616c67223a2245533235364b227d'),
}]
},
withPayload: {
payload: bytes.fromHex('7b2274657374223a227061796c6f6164222c22614c696e6b223a22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c22617272223a5b22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c226974656d31222c226974656d32225d2c226e6573746564223a7b22614c696e6b223a22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c22617272223a5b22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c226974656d31222c226974656d32225d7d7d'),
signatures: [
{
protected: bytes.fromHex('7b22616c67223a2245533235364b227d'),
signature: bytes.fromHex('218f001e1401d27e50a4ed68a6c7bcddde87ad759fa1f3e35ba89fe6f541ec3932df08f6f9d693f08d711d7e6ce0f6ee0b7a30668dabafc0be9c642c7ed1c4fb')
}
]
}
},
blockEncoded: {
oneSig: [
bytes.fromHex('a2677061796c6f6164582401701220debd7adb3ce56544d22a6f6b93396f6980a8067c2cc134f0f7801b6331092b956a7369676e61747572657381a26970726f746563746564507b22616c67223a2245533235364b227d697369676e617475726558404a26065d6ed88be2b16e92252cd9aed25121adac95ef2a5a002e3d180710feaa53b2d656f3d333e82a7c5655045fea95b2062373ef7ed73bcb703625c4eb2bd6'),
bytes.fromHex('a2677061796c6f6164582401701220debd7adb3ce56544d22a6f6b93396f6980a8067c2cc134f0f7801b6331092b956a7369676e61747572657381a26970726f746563746564507b22616c67223a2245533235364b227d697369676e6174757265584043c3dd4c4e40e4dddad24b4edb035d5329ae987952c4d17d4a2dfc22fcec31a4990badf2430f9b24da4a7fe51e2453c7edc0f363b8cb8361bfbe27a3a7b36a5e'),
],
multipleSig: bytes.fromHex('a2677061796c6f6164582401701220debd7adb3ce56544d22a6f6b93396f6980a8067c2cc134f0f7801b6331092b956a7369676e61747572657382a26970726f746563746564507b22616c67223a2245533235364b227d697369676e617475726558404a26065d6ed88be2b16e92252cd9aed25121adac95ef2a5a002e3d180710feaa53b2d656f3d333e82a7c5655045fea95b2062373ef7ed73bcb703625c4eb2bd6a26970726f746563746564507b22616c67223a2245533235364b227d697369676e6174757265584043c3dd4c4e40e4dddad24b4edb035d5329ae987952c4d17d4a2dfc22fcec31a4990badf2430f9b24da4a7fe51e2453c7edc0f363b8cb8361bfbe27a3a7b36a5e'),
withPayload: bytes.fromHex('a2677061796c6f61645901717b2274657374223a227061796c6f6164222c22614c696e6b223a22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c22617272223a5b22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c226974656d31222c226974656d32225d2c226e6573746564223a7b22614c696e6b223a22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c22617272223a5b22697066733a2f2f6261667962656967367876356e777068666d76636e656b74706e6f6a747333336a716375616d37626d7965327062353461646e727463636a6c7375222c226974656d31222c226974656d32225d7d7d6a7369676e61747572657381a26970726f746563746564507b22616c67223a2245533235364b227d697369676e61747572655840218f001e1401d27e50a4ed68a6c7bcddde87ad759fa1f3e35ba89fe6f541ec3932df08f6f9d693f08d711d7e6ce0f6ee0b7a30668dabafc0be9c642c7ed1c4fb'),
},
cids: {
oneSig: [
'bagcqcerauben4l6ee2wjf2fnkj7vaels4p7lnytenk35j3gl2lzcbtbgyoea',
'bagcqceravvw4bx7jgkxxjwfuqo2yoja6w4cmvmu3gkew3s7yu3vt2ce7riwa'
],
multipleSig: 'bagcqcera542h3xc57nudkgjcceexyzyxrkwi4ikbn773ag6dqdcyjt6z6rga',
withPayload: 'bagcqceras6vcqjafsrhwfsgxmzd6g5c2vm3mfolbbubg5rfuhhnobay4m2vq',
}
}
/*eslint-enable */
117 changes: 63 additions & 54 deletions test/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,85 +1,94 @@
/* eslint-env jest */

import * as dagJose from '../src/index.js'
import { createDagJWS } from './signing.test.js'
import { fixtures as sFixtures } from './__fixtures__/signing.fixtures'
import { fixtures as eFixtures } from './__fixtures__/encryption.fixtures'
import { convert as toLegacyIpld } from 'blockcodec-to-ipld-format'
import IPLD from 'ipld'
import ipldInMem from 'ipld-in-memory'
import { CID } from 'multiformats/cid'
import { ES256KSigner } from 'did-jwt'

import * as Block from 'multiformats/block'
import { sha256 as hasher } from 'multiformats/hashes/sha2'

async function encodeBlock(value) {
return Block.encode({ value, hasher, codec: dagJose })
}

async function decodeBlock(bytes) {
return Block.decode({ bytes, hasher, codec: dagJose })
}

describe('dag-jose codec', () => {
describe('DagJWS', () => {
it('Encode compact jws', () => {
const encoded = dagJose.encode(sFixtures.compact)
expect(encoded).toEqual(sFixtures.blockEncoded.oneSig[0])
it('Encode compact jws', async () => {
const block = await encodeBlock(sFixtures.compact)
expect(block.bytes).toEqual(sFixtures.blockEncoded.oneSig[0])
expect(block.cid.toString()).toEqual(sFixtures.cids.oneSig[0])
})

it('Encode general jws', () => {
let encoded = dagJose.encode(sFixtures.dagJws.oneSig[0])
expect(encoded).toEqual(sFixtures.blockEncoded.oneSig[0])
it('Encode general jws', async () => {
let block = await encodeBlock(sFixtures.dagJws.oneSig[0])
expect(block.bytes).toEqual(sFixtures.blockEncoded.oneSig[0])
expect(block.cid.toString()).toEqual(sFixtures.cids.oneSig[0])

encoded = dagJose.encode(sFixtures.dagJws.oneSig[1])
expect(encoded).toEqual(sFixtures.blockEncoded.oneSig[1])
block = await encodeBlock(sFixtures.dagJws.oneSig[1])
expect(block.bytes).toEqual(sFixtures.blockEncoded.oneSig[1])
expect(block.cid.toString()).toEqual(sFixtures.cids.oneSig[1])

encoded = dagJose.encode(sFixtures.dagJws.multipleSig)
expect(encoded).toEqual(sFixtures.blockEncoded.multipleSig)
block = await encodeBlock(sFixtures.dagJws.multipleSig)
expect(block.bytes).toEqual(sFixtures.blockEncoded.multipleSig)
expect(block.cid.toString()).toEqual(sFixtures.cids.multipleSig)

block = await encodeBlock(sFixtures.dagJws.withPayload)
expect(block.bytes).toEqual(sFixtures.blockEncoded.withPayload)
expect(block.cid.toString()).toEqual(sFixtures.cids.withPayload)
})

it('Decode bytes', () => {
let decoded
decoded = dagJose.decode(sFixtures.blockEncoded.oneSig[0])
expect(decoded).toEqual(sFixtures.dagJws.oneSig[0])
it('Decode bytes', async () => {
let block = await decodeBlock(sFixtures.blockEncoded.oneSig[0])
expect(block.value).toEqual(sFixtures.dagJws.oneSig[0])
expect(block.cid.toString()).toEqual(sFixtures.cids.oneSig[0])

decoded = dagJose.decode(sFixtures.blockEncoded.multipleSig)
expect(decoded).toEqual(sFixtures.dagJws.multipleSig)
})
block = await decodeBlock(sFixtures.blockEncoded.multipleSig)
expect(block.value).toEqual(sFixtures.dagJws.multipleSig)
expect(block.cid.toString()).toEqual(sFixtures.cids.multipleSig)

it.skip('IPLD integration', async () => {
const ipld = await ipldInMem(IPLD)
const format = toLegacyIpld(dagJose)
ipld.addFormat(format)
const signer = ES256KSigner(sFixtures.keys[0].priv)
const cidPayload = CID.parse('bagcqcera73rupyla6bauseyk75rslfys3st25spm75ykhvgusqvv2zfqtucq')
const dagJws = await createDagJWS(cidPayload, signer)
const cid = await ipld.put(dagJws, format.codec)
expect(cid.toString()).toEqual(
'bagcqcera5p4hvkei322lg3hp3dvrmndlojwcst3gvq2nhledmv4plt2ore2q'
)
const data = await ipld.get(cid)
expect(data).toEqual(sFixtures.dagJws.oneSig[0])
block = await decodeBlock(sFixtures.blockEncoded.withPayload)
expect(block.value).toEqual(sFixtures.dagJws.withPayload)
expect(block.cid.toString()).toEqual(sFixtures.cids.withPayload)
})
})

describe('DagJWE', () => {
it('Encode compact jwe', () => {
const encoded = dagJose.encode(eFixtures.compact)
expect(encoded).toEqual(eFixtures.blockEncoded.dir)
it('Encode compact jwe', async () => {
const block = await encodeBlock(eFixtures.compact)
expect(block.bytes).toEqual(eFixtures.blockEncoded.dir)
expect(block.cid.toString()).toEqual(eFixtures.cids.dir)
})

it('Encode general jwe', () => {
let encoded = dagJose.encode(eFixtures.dagJwe.dir)
expect(encoded).toEqual(eFixtures.blockEncoded.dir)
it('Encode general jwe', async () => {
let block = await encodeBlock(eFixtures.dagJwe.dir)
expect(block.bytes).toEqual(eFixtures.blockEncoded.dir)
expect(block.cid.toString()).toEqual(eFixtures.cids.dir)

encoded = dagJose.encode(eFixtures.dagJwe.oneRecip)
expect(encoded).toEqual(eFixtures.blockEncoded.oneRecip)
block = await encodeBlock(eFixtures.dagJwe.oneRecip)
expect(block.bytes).toEqual(eFixtures.blockEncoded.oneRecip)
expect(block.cid.toString()).toEqual(eFixtures.cids.oneRecip)

encoded = dagJose.encode(eFixtures.dagJwe.multipleRecip)
expect(encoded).toEqual(eFixtures.blockEncoded.multipleRecip)
block = await encodeBlock(eFixtures.dagJwe.multipleRecip)
expect(block.bytes).toEqual(eFixtures.blockEncoded.multipleRecip)
expect(block.cid.toString()).toEqual(eFixtures.cids.multipleRecip)
})

it('Decode bytes', () => {
let decoded
decoded = dagJose.decode(eFixtures.blockEncoded.dir)
expect(decoded).toEqual(eFixtures.dagJwe.dir)
it('Decode bytes', async () => {
let block = await decodeBlock(eFixtures.blockEncoded.dir)
expect(block.value).toEqual(eFixtures.dagJwe.dir)
expect(block.cid.toString()).toEqual(eFixtures.cids.dir)

decoded = dagJose.decode(eFixtures.blockEncoded.oneRecip)
expect(decoded).toEqual(eFixtures.dagJwe.oneRecip)
block = await decodeBlock(eFixtures.blockEncoded.oneRecip)
expect(block.value).toEqual(eFixtures.dagJwe.oneRecip)
expect(block.cid.toString()).toEqual(eFixtures.cids.oneRecip)

decoded = dagJose.decode(eFixtures.blockEncoded.multipleRecip)
expect(decoded).toEqual(eFixtures.dagJwe.multipleRecip)
block = await decodeBlock(eFixtures.blockEncoded.multipleRecip)
expect(block.value).toEqual(eFixtures.dagJwe.multipleRecip)
expect(block.cid.toString()).toEqual(eFixtures.cids.multipleRecip)
})
})

Expand Down
20 changes: 12 additions & 8 deletions test/signing.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ describe('Signing support', () => {
})

describe('decode', () => {
it('Decodes general encoding, one signature', () => {
it('CID, Decodes general encoding, one signature', () => {
let decoded
decoded = signing.decode(fixtures.encodedJws.oneSig[0])
expect(decoded).toEqual(fixtures.dagJws.oneSig[0])
Expand All @@ -60,14 +60,19 @@ describe('Signing support', () => {
expect(decoded).toEqual(fixtures.dagJws.oneSig[1])
})

it('Decodes general encoding, multiple signatures', () => {
it('CID, Decodes general encoding, multiple signatures', () => {
const decoded = signing.decode(fixtures.encodedJws.multipleSig)
expect(decoded).toEqual(fixtures.dagJws.multipleSig)
})

it('JSON, Decodes jws with payload', () => {
const decoded = signing.decode(fixtures.encodedJws.withPayload)
expect(decoded).toEqual(fixtures.dagJws.withPayload)
})
})

describe('encode', () => {
it('Encodes dag encoding, one signature', () => {
it('CID, Encodes dag encoding, one signature', () => {
let encoded
encoded = signing.encode(fixtures.dagJws.oneSig[0])
expect(encoded).toEqual(fixtures.encodedJws.oneSig[0])
Expand All @@ -76,15 +81,14 @@ describe('Signing support', () => {
expect(encoded).toEqual(fixtures.encodedJws.oneSig[1])
})

it('Encodes dag encoding, multiple signatures', () => {
it('CID, Encodes dag encoding, multiple signatures', () => {
const encoded = signing.encode(fixtures.dagJws.multipleSig)
expect(encoded).toEqual(fixtures.encodedJws.multipleSig)
})

it('Throws if payload is not a CID', async () => {
const payload = toBase64url(bytes.fromString(JSON.stringify({ json: 'payload' })))
const notDagJws = Object.assign({}, fixtures.dagJws.oneSig[0], { payload })
expect(() => signing.encode(notDagJws)).toThrow('Not a valid DagJWS')
it('JSON, Encodes jws with payload', () => {
const encoded = signing.encode(fixtures.dagJws.withPayload)
expect(encoded).toEqual(fixtures.encodedJws.withPayload)
})
})

Expand Down