Skip to content

Commit

Permalink
* run prettier
Browse files Browse the repository at this point in the history
  • Loading branch information
da-tychinin committed Mar 11, 2024
1 parent 342f6c3 commit 4bd7b7d
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 46 deletions.
15 changes: 11 additions & 4 deletions src/keri/core/authing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export class Authenticater {
headers: Headers,
method: string,
path: string,
authority?: string,
authority?: string
): boolean {
const siginputHeader = headers.get('Signature-Input');
if (siginputHeader == null) {
Expand All @@ -47,7 +47,7 @@ export class Authenticater {
headers,
method,
path,
authority,
authority
);
const signage = designature(signature);
const cig = signage[0].markers.get('signify');
Expand All @@ -74,8 +74,15 @@ export class Authenticater {
keyid: this._csig.verfer.qb64,
};
const signatureParams = siginput(input);
const signatureBase = sigbase(fields, signatureParams, headers, method, path, authority);
const sid = `signify=${ signatureParams }`;
const signatureBase = sigbase(
fields,
signatureParams,
headers,
method,
path,
authority
);
const sid = `signify=${signatureParams}`;
headers.append('Signature-Input', sid);

const sig = this._csig.sign(b(signatureBase));
Expand Down
14 changes: 9 additions & 5 deletions src/keri/core/httping.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { Item, Parameters, parseDictionary, serializeInnerList } from 'structured-headers';
import {
Item,
Parameters,
parseDictionary,
serializeInnerList,
} from 'structured-headers';
import { b } from './core';
import Base64 from 'urlsafe-base64';
import { Buffer } from 'buffer';
Expand Down Expand Up @@ -30,7 +35,7 @@ export function sigbase(
headers: Headers,
method: string,
path: string,
authority?: string,
authority?: string
): string {
const items = new Array<string>();
fields.forEach((field: string) => {
Expand All @@ -43,15 +48,15 @@ export function sigbase(
items.push(`"${field}": ${path}`);
break;
case '@authority':
items.push(`"${ field }": ${ authority }`);
items.push(`"${field}": ${authority}`);
break;
}
} else if (headers.has(field)) {
const value = normalize(headers.get(field) as string);
items.push(`"${field}": ${value}`);
}
});
items.push(`"@signature-params": ${ signatureParams }`);
items.push(`"@signature-params": ${signatureParams}`);
return items.join('\n');
}

Expand Down Expand Up @@ -110,7 +115,6 @@ export class Inputage {
public context?: any;
}


/**
* Parse a Signature-Input value into an {@link Inputage} by label map
* @param value - Signature-Input string
Expand Down
69 changes: 44 additions & 25 deletions test/core/authing.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
import { strict as assert } from 'assert';
import libsodium from 'libsodium-wrappers-sumo';
import { Authenticater, b, Inputage, Matter, MtrDex, Salter, Signer, Verfer } from '../../src';
import {
Authenticater,
b,
Inputage,
Matter,
MtrDex,
Salter,
Signer,
Verfer,
} from '../../src';
import * as utilApi from '../../src/keri/core/utils';
import * as httping from '../../src/keri/core/httping';
import { mock } from 'ts-mockito';
Expand Down Expand Up @@ -48,13 +57,15 @@ describe('Authenticater.verify', () => {
const sigbaseMock = jest.fn();
sigbaseMock.mockReturnValue(
'"signify-resource": EEXekkGu9IAzav6pZVJhkLnjtjM5v3AcyA-pdKUcaGei\n' +
'"@method": GET\n' +
'"@path": /identifiers/aid1\n' +
'"signify-timestamp": 2023-05-22T00:37:00.248708+00:00\n' +
'"@signature-params": ("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"',
'"@method": GET\n' +
'"@path": /identifiers/aid1\n' +
'"signify-timestamp": 2023-05-22T00:37:00.248708+00:00\n' +
'"@signature-params": ("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
const siginputMock = jest.fn();
siginputMock.mockReturnValue('("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"');
siginputMock.mockReturnValue(
'("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
jest.spyOn(httping, 'sigbase').mockImplementation(sigbaseMock);
jest.spyOn(httping, 'siginput').mockImplementation(siginputMock);
jest.spyOn(httping, 'desiginput').mockImplementation(desiginputMock);
Expand All @@ -63,7 +74,9 @@ describe('Authenticater.verify', () => {
assert.notEqual(authn, undefined);
assert.equal(authn.verify(headers, 'GET', '/identifiers/aid1'), true);
expect(desiginputMock).toHaveBeenCalledTimes(1);
expect(desiginputMock).toHaveBeenCalledWith('signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"');
expect(desiginputMock).toHaveBeenCalledWith(
'signify=("signify-resource" "@method" "@path" "signify-timestamp");created=1684715820;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
expect(siginputMock).toHaveBeenCalledTimes(1);
expect(siginputMock).toHaveBeenCalledWith(input);
expect(sigbaseMock).toHaveBeenCalledTimes(1);
Expand All @@ -73,7 +86,7 @@ describe('Authenticater.verify', () => {
headers,
'GET',
'/identifiers/aid1',
undefined,
undefined
);
});
it('verify test request https://datatracker.ietf.org/doc/html/rfc9421#appendix-B.2.6', async () => {
Expand All @@ -89,7 +102,7 @@ describe('Authenticater.verify', () => {
const expectedSignatureB64 =
'wqcAqbmYJ2ji2glfAMaRy4gruYYnx2nEFN2HN6jrnDnQCK1u02Gb04v9EDgwUPiu4A0w6vuQv5lIp5WPpBKRCw==';
const expectedSignatureRaw = new Uint8Array(
Base64.decode(expectedSignatureB64),
Base64.decode(expectedSignatureB64)
);
const expectedSignatureCESR = new Matter({
raw: expectedSignatureRaw,
Expand All @@ -106,7 +119,7 @@ describe('Authenticater.verify', () => {
['date', 'Tue, 20 Apr 2021 02:07:55 GMT'],
[
'Signature',
`indexed="?0";signify="${ expectedSignatureCESR.qb64 }"`,
`indexed="?0";signify="${expectedSignatureCESR.qb64}"`,
],
[
'Signature-Input',
Expand All @@ -130,15 +143,17 @@ describe('Authenticater.verify', () => {
const sigbaseMock = jest.fn();
sigbaseMock.mockReturnValue(
'"date": Tue, 20 Apr 2021 02:07:55 GMT\n' +
'"@method": POST\n' +
'"@path": /foo\n' +
'"@authority": example.com\n' +
'"content-type": application/json\n' +
'"content-length": 18\n' +
'"@signature-params": ("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"',
'"@method": POST\n' +
'"@path": /foo\n' +
'"@authority": example.com\n' +
'"content-type": application/json\n' +
'"content-length": 18\n' +
'"@signature-params": ("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"'
);
const siginputMock = jest.fn();
siginputMock.mockReturnValue('("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"');
siginputMock.mockReturnValue(
'("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"'
);
jest.spyOn(httping, 'sigbase').mockImplementation(sigbaseMock);
jest.spyOn(httping, 'siginput').mockImplementation(siginputMock);
jest.spyOn(httping, 'desiginput').mockImplementation(desiginputMock);
Expand All @@ -151,7 +166,9 @@ describe('Authenticater.verify', () => {
true
);
expect(desiginputMock).toHaveBeenCalledTimes(1);
expect(desiginputMock).toHaveBeenCalledWith('signify=("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"');
expect(desiginputMock).toHaveBeenCalledWith(
'signify=("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"'
);
expect(siginputMock).toHaveBeenCalledTimes(1);
expect(siginputMock).toHaveBeenCalledWith(input);
expect(sigbaseMock).toHaveBeenCalledTimes(1);
Expand All @@ -161,7 +178,7 @@ describe('Authenticater.verify', () => {
headers,
'POST',
'/foo',
'example.com',
'example.com'
);
});
});
Expand Down Expand Up @@ -192,13 +209,15 @@ describe('Authenticater.sign', () => {
const sigbaseMock = jest.fn();
sigbaseMock.mockReturnValue(
'"@method": POST\n' +
'"@path": /boot\n' +
'"signify-resource": EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs\n' +
'"signify-timestamp": 2022-09-24T00:05:48.196795+00:00\n' +
'"@signature-params": ("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"',
'"@path": /boot\n' +
'"signify-resource": EWJkQCFvKuyxZi582yJPb0wcwuW3VXmFNuvbQuBpgmIs\n' +
'"signify-timestamp": 2022-09-24T00:05:48.196795+00:00\n' +
'"@signature-params": ("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
const siginputMock = jest.fn();
siginputMock.mockReturnValue('("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"');
siginputMock.mockReturnValue(
'("@method" "@path" "signify-resource" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
jest.spyOn(httping, 'sigbase').mockImplementation(sigbaseMock);
jest.spyOn(httping, 'siginput').mockImplementation(siginputMock);

Expand All @@ -213,7 +232,7 @@ describe('Authenticater.sign', () => {
);
assert.equal(
headers.get('Signature'),
'indexed="?0";signify="0BDcjKTbpvmcF9oIeCI-95enQRd3_PfAgzOWi9vVf811lWGlTTOsKtFzpdkwr90ksvpvB_GhvsbV2l29wFN_QW0K"',
'indexed="?0";signify="0BDcjKTbpvmcF9oIeCI-95enQRd3_PfAgzOWi9vVf811lWGlTTOsKtFzpdkwr90ksvpvB_GhvsbV2l29wFN_QW0K"'
);

const expectedInput = {
Expand Down
48 changes: 37 additions & 11 deletions test/core/httping.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@ describe('siginput', () => {
const signiputString = siginput(input);
assert.equal(
signiputString,
'("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"',
'("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"'
);
});
it('RFC Test https://datatracker.ietf.org/doc/html/rfc9421#section-2.5', async () => {
const expectedParameters = '("@method" "@authority" "@path" "content-digest" "content-length" "content-type");created=1618884473;keyid="test-key-rsa-pss"';
const expectedParameters =
'("@method" "@authority" "@path" "content-digest" "content-length" "content-type");created=1618884473;keyid="test-key-rsa-pss"';
const input = {
fields: [
'@method',
Expand All @@ -38,7 +39,8 @@ describe('siginput', () => {
assert.equal(result, expectedParameters);
});
it('RFC Test https://datatracker.ietf.org/doc/html/rfc9421#appendix-B.2.6', async () => {
const expectedParameters = '("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const expectedParameters =
'("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const input = {
fields: [
'date',
Expand Down Expand Up @@ -91,14 +93,15 @@ describe('desiginput', () => {
assert.equal(sig1Input.alg, 'ed25519');
assert.equal(
sig1Input.keyid,
'DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt',
'DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt'
);
assert.equal(sig1Input.expires, 1609459210);
assert.equal(sig1Input.nonce, undefined);
assert.equal(sig1Input.context, undefined);
});
it('RFC Test https://datatracker.ietf.org/doc/html/rfc9421#appendix-B.2.6', async () => {
const siginputString = 'sig-b26=("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const siginputString =
'sig-b26=("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const inputs = desiginput(siginputString);
assert.equal(inputs.size, 1);
const input = inputs.get('sig-b26')!;
Expand Down Expand Up @@ -129,7 +132,8 @@ describe('sigbase', () => {
'"content-length": 18\n' +
'"content-type": application/json\n' +
'"@signature-params": ("@method" "@authority" "@path" "content-digest" "content-length" "content-type");created=1618884473;keyid="test-key-rsa-pss"';
const signatureParams = '("@method" "@authority" "@path" "content-digest" "content-length" "content-type");created=1618884473;keyid="test-key-rsa-pss"';
const signatureParams =
'("@method" "@authority" "@path" "content-digest" "content-length" "content-type");created=1618884473;keyid="test-key-rsa-pss"';
const fields = [
'@method',
'@authority',
Expand All @@ -146,7 +150,14 @@ describe('sigbase', () => {
['content-length', '18'],
['content-type', 'application/json'],
]);
const result = sigbase(fields, signatureParams, inputHeaders, 'POST', '/foo', 'example.com');
const result = sigbase(
fields,
signatureParams,
inputHeaders,
'POST',
'/foo',
'example.com'
);
assert.equal(result, expectedSigbase);
});
it('RFC Test https://datatracker.ietf.org/doc/html/rfc9421#appendix-B.2.6', async () => {
Expand All @@ -158,7 +169,8 @@ describe('sigbase', () => {
'"content-type": application/json\n' +
'"content-length": 18\n' +
'"@signature-params": ("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const signatureParams = '("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const signatureParams =
'("date" "@method" "@path" "@authority" "content-type" "content-length");created=1618884473;keyid="test-key-ed25519"';
const fields = [
'date',
'@method',
Expand All @@ -172,7 +184,14 @@ describe('sigbase', () => {
['date', 'Tue, 20 Apr 2021 02:07:55 GMT'],
['content-type', 'application/json'],
]);
const result = sigbase(fields, signatureParams, inputHeaders, 'POST', '/foo', 'example.com');
const result = sigbase(
fields,
signatureParams,
inputHeaders,
'POST',
'/foo',
'example.com'
);
assert.equal(result, expectedSigbase);
});
it('signify valid', async () => {
Expand All @@ -182,7 +201,8 @@ describe('sigbase', () => {
'"@path": /signify\n' +
'"signify-timestamp": 2022-09-24T00:05:48.196795+00:00\n' +
'"@signature-params": ("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"';
const signatureParams = '("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"';
const signatureParams =
'("signify-resource" "@method" "@path" "signify-timestamp");created=1609459200;keyid="DN54yRad_BTqgZYUSi_NthRBQrxSnqQdJXWI5UHcGOQt";alg="ed25519"';
const fields = [
'signify-resource',
'@method',
Expand All @@ -199,7 +219,13 @@ describe('sigbase', () => {
],
['Signify-Timestamp', '2022-09-24T00:05:48.196795+00:00'],
]);
const result = sigbase(fields, signatureParams, inputHeaders, 'POST', '/signify');
const result = sigbase(
fields,
signatureParams,
inputHeaders,
'POST',
'/signify'
);
assert.equal(result, expectedSigbase);
});
});
2 changes: 1 addition & 1 deletion test/core/signer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ describe('Signer', () => {
const signer = new Signer({ raw: privateKey });
const result = signer.sign(b(content));
const expectedSignatureBytes = new Uint8Array(
Base64.decode(expectedSignature),
Base64.decode(expectedSignature)
);
assert.deepStrictEqual(result.raw, expectedSignatureBytes);
});
Expand Down

0 comments on commit 4bd7b7d

Please sign in to comment.