Skip to content

Commit 42d1e34

Browse files
committed
wip: using generated certs
* Related #8 [ci skip]
1 parent 7ef5960 commit 42d1e34

File tree

2 files changed

+43
-124
lines changed

2 files changed

+43
-124
lines changed

tests/QUICClient.test.ts

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,56 +9,10 @@ import * as utils from '@/utils';
99
import * as testsUtils from './utils';
1010
import * as tls from 'tls';
1111
import * as errors from '@/errors';
12+
import { fc } from '@fast-check/jest';
13+
import * as tlsUtils from './tlsUtils';
1214

1315

14-
const certChain = `
15-
-----BEGIN CERTIFICATE-----
16-
MIIC0TCCAoOgAwIBAgIQBkNidOqLcACYmcuYTfBvfzAFBgMrZXAwQDE+MDwGA1UE
17-
AxM1dmxzanBiamQ3MDN2MXVlYnU5ZDFxZWs1ZTE5ZDYxMDBkOG44cXBjMWdraG9q
18-
dXRsc2ExNjAwHhcNMjMwNDEyMDMzNjQ2WhcNMjMwNDEyMDM1MzI2WjBAMT4wPAYD
19-
VQQDEzV2ZjlrZ2w5MTJ0MmxkaGNsaG1vbmo4ajE5MWU4NzBrNzJjM2Qxb2Zrc2Vl
20-
ZGNuaDduYTRsZzAqMAUGAytlcAMhAHppCqQi6KrYsrG2LzRMKQuQcFDiYNocPpxz
21-
msvE91Ero4IBkTCCAY0wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAf4wRQYDVR0l
22-
BD4wPAYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsG
23-
AQUFBwMIBggrBgEFBQcDCTCBlgYDVR0RBIGOMIGLgjV2ZjlrZ2w5MTJ0MmxkaGNs
24-
aG1vbmo4ajE5MWU4NzBrNzJjM2Qxb2Zrc2VlZGNuaDduYTRsZ4cEfwAAAYcQAAAA
25-
AAAAAAAAAAAAAAAAAYY6cGs6Ly92ZjlrZ2w5MTJ0MmxkaGNsaG1vbmo4ajE5MWU4
26-
NzBrNzJjM2Qxb2Zrc2VlZGNuaDduYTRsZzAdBgNVHQ4EFgQUw/bBoGFsa35sm6vr
27-
tUP2DFb4rvUwHgYLKwYBBAGDvk8CAgEEDxYNMS4wLjEtYWxwaGEuMDBRBgsrBgEE
28-
AYO+TwICAgRCBEBBhLfXUK22guEGmVaeOydwKJTpkC/EqXPrPiKAwnMcOqwmaADJ
29-
Tf3qeF8jCUTNkSzfSosSiZVQZTd7hZ+3aXsLMAUGAytlcANBAFOzcMmuaar9ddXr
30-
Klgb0rFviTYrBJcJ8B9ZfGa55NZm/IP0tlZEfg1IHzae/ca6aDc4S9Tq+6QzaEqt
31-
QNWLTAw=
32-
-----END CERTIFICATE-----
33-
-----BEGIN CERTIFICATE-----
34-
MIIC0TCCAoOgAwIBAgIQBkNidOiwcACGVfU86PK1vTAFBgMrZXAwQDE+MDwGA1UE
35-
AxM1dmxzanBiamQ3MDN2MXVlYnU5ZDFxZWs1ZTE5ZDYxMDBkOG44cXBjMWdraG9q
36-
dXRsc2ExNjAwHhcNMjMwNDEyMDMzNjQ2WhcNMjQwNDExMDMzNjQ2WjBAMT4wPAYD
37-
VQQDEzV2bHNqcGJqZDcwM3YxdWVidTlkMXFlazVlMTlkNjEwMGQ4bjhxcGMxZ2to
38-
b2p1dGxzYTE2MDAqMAUGAytlcAMhAK8nlc2nAP4fOX5LQ6dQrgpaYIANRdGssDCk
39-
cT92vFBMo4IBkTCCAY0wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAf4wRQYDVR0l
40-
BD4wPAYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsG
41-
AQUFBwMIBggrBgEFBQcDCTCBlgYDVR0RBIGOMIGLgjV2bHNqcGJqZDcwM3YxdWVi
42-
dTlkMXFlazVlMTlkNjEwMGQ4bjhxcGMxZ2tob2p1dGxzYTE2MIcEfwAAAYcQAAAA
43-
AAAAAAAAAAAAAAAAAYY6cGs6Ly92bHNqcGJqZDcwM3YxdWVidTlkMXFlazVlMTlk
44-
NjEwMGQ4bjhxcGMxZ2tob2p1dGxzYTE2MDAdBgNVHQ4EFgQUa4ZvvTwywvz85bcu
45-
4iizM9fViB8wHgYLKwYBBAGDvk8CAgEEDxYNMS4wLjEtYWxwaGEuMDBRBgsrBgEE
46-
AYO+TwICAgRCBEBOYl4h6T/dslmDGM0nXMagUJisoVu3TRrbfPkvlBCdc4KUTree
47-
jedorMB3d8+L1WV1mCr5BzUChESFZ8NOPHkBMAUGAytlcANBAPyIki/6vOsIz/T6
48-
i2J07zvMs9omg7Kjn1HS4M4MSzwljBvMF3VY7Q2fbGWz1IAZAWwmO9JvQv3boejZ
49-
mw7iaQw=
50-
-----END CERTIFICATE-----
51-
`
52-
const privateKey = `
53-
-----BEGIN PRIVATE KEY-----
54-
MC4CAQAwBQYDK2VwBCIEIPX4FqPs5hDcshMDvEQGFsWyrySEGY3G3eSzTXBEFkrG
55-
-----END PRIVATE KEY-----
56-
`
57-
const tlsConfig = {
58-
certChainPem: certChain,
59-
privKeyPem: privateKey,
60-
}
61-
6216
describe(QUICClient.name, () => {
6317
const logger = new Logger(`${QUICClient.name} Test`, LogLevel.WARN, [
6418
new StreamHandler(),
@@ -129,9 +83,14 @@ describe(QUICClient.name, () => {
12983
resolveStreamEventP = resolveP;
13084
};
13185

132-
// We need to test the stream making
86+
let tlsConfig: {
87+
certChainPem: string,
88+
privKeyPem: string,
89+
};
13390

91+
// We need to test the stream making
13492
beforeEach(async () => {
93+
tlsConfig = await fc.sample(tlsUtils.tlsConfigArb(), 1)[0]
13594
crypto = {
13695
key: await testsUtils.generateKey(),
13796
ops: {

tests/playground.test.ts renamed to tests/tlsUtils.ts

Lines changed: 35 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,11 @@
1-
import { quiche } from '@/native';
21
import * as x509 from '@peculiar/x509';
32
import * as asn1 from '@peculiar/asn1-schema';
43
import * as asn1X509 from '@peculiar/asn1-x509';
54
import * as asn1Pkcs8 from '@peculiar/asn1-pkcs8';
6-
import { testProp, fc } from '@fast-check/jest';
5+
import { fc } from '@fast-check/jest';
76
import { X509Certificate } from '@peculiar/x509';
87
import { Crypto } from '@peculiar/webcrypto';
98

10-
const certChain = `
11-
-----BEGIN CERTIFICATE-----
12-
MIIC0TCCAoOgAwIBAgIQBkNidOqLcACYmcuYTfBvfzAFBgMrZXAwQDE+MDwGA1UE
13-
AxM1dmxzanBiamQ3MDN2MXVlYnU5ZDFxZWs1ZTE5ZDYxMDBkOG44cXBjMWdraG9q
14-
dXRsc2ExNjAwHhcNMjMwNDEyMDMzNjQ2WhcNMjMwNDEyMDM1MzI2WjBAMT4wPAYD
15-
VQQDEzV2ZjlrZ2w5MTJ0MmxkaGNsaG1vbmo4ajE5MWU4NzBrNzJjM2Qxb2Zrc2Vl
16-
ZGNuaDduYTRsZzAqMAUGAytlcAMhAHppCqQi6KrYsrG2LzRMKQuQcFDiYNocPpxz
17-
msvE91Ero4IBkTCCAY0wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAf4wRQYDVR0l
18-
BD4wPAYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsG
19-
AQUFBwMIBggrBgEFBQcDCTCBlgYDVR0RBIGOMIGLgjV2ZjlrZ2w5MTJ0MmxkaGNs
20-
aG1vbmo4ajE5MWU4NzBrNzJjM2Qxb2Zrc2VlZGNuaDduYTRsZ4cEfwAAAYcQAAAA
21-
AAAAAAAAAAAAAAAAAYY6cGs6Ly92ZjlrZ2w5MTJ0MmxkaGNsaG1vbmo4ajE5MWU4
22-
NzBrNzJjM2Qxb2Zrc2VlZGNuaDduYTRsZzAdBgNVHQ4EFgQUw/bBoGFsa35sm6vr
23-
tUP2DFb4rvUwHgYLKwYBBAGDvk8CAgEEDxYNMS4wLjEtYWxwaGEuMDBRBgsrBgEE
24-
AYO+TwICAgRCBEBBhLfXUK22guEGmVaeOydwKJTpkC/EqXPrPiKAwnMcOqwmaADJ
25-
Tf3qeF8jCUTNkSzfSosSiZVQZTd7hZ+3aXsLMAUGAytlcANBAFOzcMmuaar9ddXr
26-
Klgb0rFviTYrBJcJ8B9ZfGa55NZm/IP0tlZEfg1IHzae/ca6aDc4S9Tq+6QzaEqt
27-
QNWLTAw=
28-
-----END CERTIFICATE-----
29-
-----BEGIN CERTIFICATE-----
30-
MIIC0TCCAoOgAwIBAgIQBkNidOiwcACGVfU86PK1vTAFBgMrZXAwQDE+MDwGA1UE
31-
AxM1dmxzanBiamQ3MDN2MXVlYnU5ZDFxZWs1ZTE5ZDYxMDBkOG44cXBjMWdraG9q
32-
dXRsc2ExNjAwHhcNMjMwNDEyMDMzNjQ2WhcNMjQwNDExMDMzNjQ2WjBAMT4wPAYD
33-
VQQDEzV2bHNqcGJqZDcwM3YxdWVidTlkMXFlazVlMTlkNjEwMGQ4bjhxcGMxZ2to
34-
b2p1dGxzYTE2MDAqMAUGAytlcAMhAK8nlc2nAP4fOX5LQ6dQrgpaYIANRdGssDCk
35-
cT92vFBMo4IBkTCCAY0wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAf4wRQYDVR0l
36-
BD4wPAYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsG
37-
AQUFBwMIBggrBgEFBQcDCTCBlgYDVR0RBIGOMIGLgjV2bHNqcGJqZDcwM3YxdWVi
38-
dTlkMXFlazVlMTlkNjEwMGQ4bjhxcGMxZ2tob2p1dGxzYTE2MIcEfwAAAYcQAAAA
39-
AAAAAAAAAAAAAAAAAYY6cGs6Ly92bHNqcGJqZDcwM3YxdWVidTlkMXFlazVlMTlk
40-
NjEwMGQ4bjhxcGMxZ2tob2p1dGxzYTE2MDAdBgNVHQ4EFgQUa4ZvvTwywvz85bcu
41-
4iizM9fViB8wHgYLKwYBBAGDvk8CAgEEDxYNMS4wLjEtYWxwaGEuMDBRBgsrBgEE
42-
AYO+TwICAgRCBEBOYl4h6T/dslmDGM0nXMagUJisoVu3TRrbfPkvlBCdc4KUTree
43-
jedorMB3d8+L1WV1mCr5BzUChESFZ8NOPHkBMAUGAytlcANBAPyIki/6vOsIz/T6
44-
i2J07zvMs9omg7Kjn1HS4M4MSzwljBvMF3VY7Q2fbGWz1IAZAWwmO9JvQv3boejZ
45-
mw7iaQw=
46-
-----END CERTIFICATE-----
47-
`
48-
49-
const privateKey = `
50-
-----BEGIN PRIVATE KEY-----
51-
MC4CAQAwBQYDK2VwBCIEIPX4FqPs5hDcshMDvEQGFsWyrySEGY3G3eSzTXBEFkrG
52-
-----END PRIVATE KEY-----
53-
`
54-
559
/**
5610
* WebCrypto polyfill from @peculiar/webcrypto
5711
* This behaves differently with respect to Ed25519 keys
@@ -282,8 +236,8 @@ async function createTLSConfigWithChain(
282236
keyPairs: Array<KeyPair>,
283237
generateCertId?: () => string,
284238
): Promise<{
285-
keyPrivatePem: string;
286239
certChainPem: string;
240+
privKeyPem: string;
287241
}> {
288242
if (keyPairs.length === 0) throw Error('Must have at least 1 keypair');
289243
let num = 0;
@@ -313,38 +267,44 @@ async function createTLSConfigWithChain(
313267
}
314268

315269
return {
316-
keyPrivatePem: privateKeyToPEM(previousKeyPair!.privateKey),
270+
privKeyPem: privateKeyToPEM(previousKeyPair!.privateKey),
317271
certChainPem: certChainPEM,
318272
};
319273
}
320274

321-
describe('Playground tests', () => {
322-
test('someTest', async () => {
323-
// console.log(quiche.Config.withBoringSslCtx);
324-
const config = quiche.Config.withBoringSslCtx(
325-
null, //Buffer.from(certChain),
326-
null, //Buffer.from(privateKey),
327-
);
328-
config.grease(true);
329-
config.verifyPeer(true);
275+
const privateKeyArb = fc.uint8Array({
276+
minLength: 32,
277+
maxLength: 32,
278+
}).map(v => Buffer.from(v))
330279

331-
console.log(config);
332-
})
280+
// FIXME: Public key should be derived from private key
281+
const publicKeyArb = (
282+
privateKey: fc.Arbitrary<Buffer> = privateKeyArb,
283+
) => privateKey.map(privateKey => {
284+
const publicKey = Buffer.from(privateKey);
285+
publicKey.reverse();
286+
publicKey[0] = publicKey[0] += 1;
287+
return publicKey;
288+
})
333289

334-
test('generate a certificate', async () => {
290+
const keyPairArb = (
291+
privateKey: fc.Arbitrary<Buffer> = privateKeyArb,
292+
): fc.Arbitrary<KeyPair> => privateKey.chain( privateKey => fc.record({
293+
privateKey: fc.constant(privateKey),
294+
publicKey: publicKeyArb(fc.constant(privateKey)),
295+
}));
335296

336-
const tlsConfig = await createTLSConfigWithChain(
337-
[
338-
{
339-
privateKey: Buffer.alloc(32, 0x01),
340-
publicKey: Buffer.alloc(32, 0x02),
341-
},
342-
],
343-
);
344-
console.log(tlsConfig);
345-
})
297+
const keyPairsArb = fc.array(keyPairArb(), {minLength: 1, size: 'xsmall'});
346298

347-
testProp.skip('asd', [fc.integer()], async (int) => {
348-
console.log(int);
349-
})
350-
});
299+
const tlsConfigArb = (keyPairs: fc.Arbitrary<Array<KeyPair>> = keyPairsArb) =>
300+
keyPairs.map(async keyPairs => await createTLSConfigWithChain(keyPairs))
301+
302+
303+
export {
304+
generateCertificate,
305+
privateKeyArb,
306+
publicKeyArb,
307+
keyPairArb,
308+
keyPairsArb,
309+
tlsConfigArb,
310+
}

0 commit comments

Comments
 (0)