diff options
Diffstat (limited to 'packages/backend/test/tests/ap-request.ts')
| -rw-r--r-- | packages/backend/test/tests/ap-request.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/backend/test/tests/ap-request.ts b/packages/backend/test/tests/ap-request.ts new file mode 100644 index 0000000000..2499b86e83 --- /dev/null +++ b/packages/backend/test/tests/ap-request.ts @@ -0,0 +1,55 @@ +import * as assert from 'assert'; +import httpSignature from 'http-signature'; +import { genRsaKeyPair } from '../../src/misc/gen-key-pair.js'; +import { createSignedPost, createSignedGet } from '../../src/remote/activitypub/ap-request.js'; + +export const buildParsedSignature = (signingString: string, signature: string, algorithm: string) => { + return { + scheme: 'Signature', + params: { + keyId: 'KeyID', // dummy, not used for verify + algorithm: algorithm, + headers: [ '(request-target)', 'date', 'host', 'digest' ], // dummy, not used for verify + signature: signature, + }, + signingString: signingString, + algorithm: algorithm.toUpperCase(), + keyId: 'KeyID', // dummy, not used for verify + }; +}; + +describe('ap-request', () => { + it('createSignedPost with verify', async () => { + const keypair = await genRsaKeyPair(); + const key = { keyId: 'x', 'privateKeyPem': keypair.privateKey }; + const url = 'https://example.com/inbox'; + const activity = { a: 1 }; + const body = JSON.stringify(activity); + const headers = { + 'User-Agent': 'UA', + }; + + const req = createSignedPost({ key, url, body, additionalHeaders: headers }); + + const parsed = buildParsedSignature(req.signingString, req.signature, 'rsa-sha256'); + + const result = httpSignature.verifySignature(parsed, keypair.publicKey); + assert.deepStrictEqual(result, true); + }); + + it('createSignedGet with verify', async () => { + const keypair = await genRsaKeyPair(); + const key = { keyId: 'x', 'privateKeyPem': keypair.privateKey }; + const url = 'https://example.com/outbox'; + const headers = { + 'User-Agent': 'UA', + }; + + const req = createSignedGet({ key, url, additionalHeaders: headers }); + + const parsed = buildParsedSignature(req.signingString, req.signature, 'rsa-sha256'); + + const result = httpSignature.verifySignature(parsed, keypair.publicKey); + assert.deepStrictEqual(result, true); + }); +}); |