Skip to content

Commit 6584838

Browse files
committed
Add support for ecdsa-p384-sha384 signatures
1 parent 89e8703 commit 6584838

File tree

5 files changed

+64
-85
lines changed

5 files changed

+64
-85
lines changed

src/algorithm/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ export function createSigner(key: BinaryLike | KeyLike | SignKeyObjectInput | Si
5151
case 'ecdsa-p256-sha256':
5252
signer.sign = async (data: Buffer) => createSign('sha256').update(data).sign(key as KeyLike);
5353
break;
54+
case 'ecdsa-p384-sha384':
55+
signer.sign = async (data: Buffer) => createSign('sha384').update(data).sign(key as KeyLike);
56+
break;
5457
case 'ed25519':
5558
signer.sign = async (data: Buffer) => sign(null, data, key as KeyLike);
5659
// signer.sign = async (data: Buffer) => createSign('ed25519').update(data).sign(key as KeyLike);
@@ -106,6 +109,9 @@ export function createVerifier(key: BinaryLike | KeyLike | VerifyKeyObjectInput
106109
case 'ecdsa-p256-sha256':
107110
verifier = async (data: Buffer, signature: Buffer) => createVerify('sha256').update(data).verify(key as KeyLike, signature);
108111
break;
112+
case 'ecdsa-p384-sha384':
113+
verifier = async (data: Buffer, signature: Buffer) => createVerify('sha384').update(data).verify(key as KeyLike, signature);
114+
break;
109115
case 'ed25519':
110116
verifier = async (data: Buffer, signature: Buffer) => verify(null, data, key as KeyLike, signature) as unknown as boolean;
111117
break;

test/algorithm/ecdsa-p256-sha256.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('ecdsa-p256-sha256', () => {
3434
it('verifies a signature', async () => {
3535
const verifier = createVerifier(ecdsaKeyPair.publicKey, 'ecdsa-p256-sha256');
3636
const data = Buffer.from('some random data');
37-
const sig = sign('sha512', data, ecdsaKeyPair.privateKey);
37+
const sig = sign('sha256', data, ecdsaKeyPair.privateKey);
3838
expect(sig).to.satisfy((arg: Buffer) => verifier(data, arg));
3939
});
4040
});

test/algorithm/ecdsa-p384-sha384.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { generateKeyPair, sign, verify } from 'crypto';
2+
import { promisify } from 'util';
3+
import { createSigner, createVerifier } from '../../src';
4+
import { expect } from 'chai';
5+
6+
describe('ecdsa-p384-sha384', () => {
7+
describe('internal tests', () => {
8+
let ecdsaKeyPair: { publicKey: string, privateKey: string };
9+
before('generate key pair', async () => {
10+
ecdsaKeyPair = await promisify(generateKeyPair)('ec', {
11+
namedCurve: 'P-384',
12+
publicKeyEncoding: {
13+
type: 'spki',
14+
format: 'pem',
15+
},
16+
privateKeyEncoding: {
17+
type: 'pkcs8',
18+
format: 'pem',
19+
},
20+
});
21+
});
22+
describe('signing', () => {
23+
it('signs a payload', async () => {
24+
const signer = createSigner(ecdsaKeyPair.privateKey, 'ecdsa-p384-sha384');
25+
const data = Buffer.from('some random data');
26+
const sig = await signer.sign(data);
27+
expect(signer.alg).to.equal('ecdsa-p384-sha384');
28+
expect(sig).to.satisfy((arg: Buffer) => verify('sha384', data, ecdsaKeyPair.publicKey, arg));
29+
});
30+
});
31+
describe('verifying', () => {
32+
it('verifies a signature', async () => {
33+
const verifier = createVerifier(ecdsaKeyPair.publicKey, 'ecdsa-p384-sha384');
34+
const data = Buffer.from('some random data');
35+
const sig = sign('sha384', data, ecdsaKeyPair.privateKey);
36+
expect(sig).to.satisfy((arg: Buffer) => verifier(data, arg));
37+
});
38+
});
39+
});
40+
});

test/httpbis/new.spec.ts renamed to test/httpbis/httpbis.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,23 @@ describe('httpbis', () => {
320320
});
321321
});
322322
describe('.extractHeader', () => {
323+
describe('general header extraction', () => {
324+
const headers = {
325+
'testheader': 'test',
326+
'test-header-1': 'test1',
327+
'Test-Header-2': 'test2',
328+
'test-Header-3': 'test3',
329+
'TEST-HEADER-4': 'test4',
330+
};
331+
Object.entries(headers).forEach(([headerName, expectedValue]) => {
332+
it(`successfully extracts a matching header (${headerName})`, () => {
333+
expect(httpbis.extractHeader(headerName.toLowerCase(), new Map(), { headers } as unknown as Request)).to.deep.equal([expectedValue]);
334+
});
335+
});
336+
it('throws on missing headers', () => {
337+
expect(() => httpbis.extractHeader('missing', new Map(), { headers } as unknown as Request)).to.throw(Error, 'No header "missing" found in headers');
338+
});
339+
});
323340
describe('raw headers', () => {
324341
const request: Request = {
325342
method: 'POST',

test/httpbis/httpbis.ts

Lines changed: 0 additions & 84 deletions
This file was deleted.

0 commit comments

Comments
 (0)