@@ -12,59 +12,7 @@ import * as errors from '@/errors';
12
12
import { fc } from '@fast-check/jest' ;
13
13
import * as tlsUtils from './tlsUtils' ;
14
14
import * as certFixtures from './fixtures/certFixtures' ;
15
-
16
-
17
- const privKeyPem = `
18
- -----BEGIN RSA PRIVATE KEY-----
19
- MIIEogIBAAKCAQEAovJl4noV+8myMOOhG+/1kpsAvmGaiz3o3+gnAINpFiUvANWU
20
- LUhoyyeQAzCom2yOl6WEH1574Hz6jsnwB3BFDj1wcBtbjMlwYpqfkJYsRQGIrOGD
21
- VGI3PSpcBWGOdfPnREAQrp5cL1TKRSuFtyjZR2lZY4DxUAr6JEmC2aOObv7gcr1W
22
- nhdO9PnY9aXhF2aVXsThkp8izP2ET9C7OmpMdajnVVbTW4PFU5YLnKFZFY5CmnaR
23
- 08QWFByxGVKDkt5c3sPvBnI0Dfc1LvfCKFJZ4CtJs7+i+O2Y2ticLwur678wvXO9
24
- OGN6CIIC2A9c4H8I8qpE+N/frYfTg/E7/j0dbQIDAQABAoIBAB99SpU21LLA6q+p
25
- /cOBXurDC6S/Bfessik7GvZtbsx5yRiXLbiGisHf1mPXbm4Cz5ecw+iwAK6EWINp
26
- oPo/BwlWdDkmAE43y4Eysm1lqA552mjWd+PByz0Fx5y+mqJOzT2SR+cG8XewIhq1
27
- 63RW745uXHjvPTMju+1xS1k101u9lL0VCo5cfPpS12fLYiVtR721CayWydfABuc9
28
- Xbj38G6lw5QGipjS+r7t588dKa9APMffKZPB3q0g65TZrOd0hjvZMQMvPe5aY3SP
29
- UpLD3GhmO/0Khsl31WkZSDPkogPBq6BqvJZa/qrSQHIh9pUX6FFOTCw3ANWQutMH
30
- 681LRsECgYEAz5pLp5BrMfg/ToPMaLKcpYiY//UhI+ZjUJ8aL51D8Jl4DOAUN1ge
31
- tpBKDRm0ayLOdFeok9S8CQItrAvkFyHBiRK6R1CgyXqSCdBRPsqdN74+K0DsEloU
32
- nNdXejGGijSSezBcvNYVlJC+7yKLgpC2wK36oLFEPHdNJPIC3wZBtFECgYEAyO8L
33
- /6KfVOaUJCc02vUAU8Ap6bVA5xlXD4sxI5w6FCwcHCzlAoHGsjA2aWsnxi43z41p
34
- pRR9IySUEPZxmh76Tzs9+Dthshkjrrx8CuTIky37BIzFDioqH2Ncj5+DCAly3IU4
35
- NjCMQOp+Yx5u9UZfkdcJj31+JUCBn1BdW22Z3F0CgYB9ftdW/t1eAqQ6UUAC1l4N
36
- Tuq2Z7dV3VKSDOumdtn4Gr3QgrCV2CYQ1F5/VteSoCLPf6H/Y20bwP5c7389YIF+
37
- 3BxROfNIeFjJp+1FGPQ7Gzy3pvJOEbg+K4rM6h1bdHZME6sr1/qJqYpSQr60+cgP
38
- 59wGwcHvD2tJ9yY3LbAQUQKBgDefZPTpMa4w/kVbzRfnxqVohrG5iTPwIdedsoan
39
- ErTO2SE7lFGzVyuwiP95uFL2LGD6Rop6N4Ho+EwRzLTbanNQdQEofwzsRKJ0buod
40
- FyEXE2vZBBu9tFdoDBF+GKm6498DyeHGYqz9vOr3W8PuLTqUCoN8O9VYHAncF1vd
41
- 5T/JAoGAeWb5iqhDhkrZDSi5GreFh2zVlDanZJqQn4UpUhotO4gtKDzMqM/rxV95
42
- RZ7zsFD22yY06cXePpMOfw4qAUDZuwoZgVH5MLW3IWJPkg++nG6GfTBaHmYmXK/M
43
- uPSJlPjTsCL+dUX+7VbrfntypnVALhtX3bZo3rsQQmUci/NjDhU=
44
- -----END RSA PRIVATE KEY-----
45
- `
46
-
47
- const certChainPem = `
48
- -----BEGIN CERTIFICATE-----
49
- MIIDJjCCAg6gAwIBAgIRAImdTwINUpu7qX/uYWmVT44wDQYJKoZIhvcNAQELBQAw
50
- FDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTIzMDQxMDA1MDk1OVoXDTI0MDQwOTA1
51
- MDk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
52
- AQ8AMIIBCgKCAQEAovJl4noV+8myMOOhG+/1kpsAvmGaiz3o3+gnAINpFiUvANWU
53
- LUhoyyeQAzCom2yOl6WEH1574Hz6jsnwB3BFDj1wcBtbjMlwYpqfkJYsRQGIrOGD
54
- VGI3PSpcBWGOdfPnREAQrp5cL1TKRSuFtyjZR2lZY4DxUAr6JEmC2aOObv7gcr1W
55
- nhdO9PnY9aXhF2aVXsThkp8izP2ET9C7OmpMdajnVVbTW4PFU5YLnKFZFY5CmnaR
56
- 08QWFByxGVKDkt5c3sPvBnI0Dfc1LvfCKFJZ4CtJs7+i+O2Y2ticLwur678wvXO9
57
- OGN6CIIC2A9c4H8I8qpE+N/frYfTg/E7/j0dbQIDAQABo3MwcTAOBgNVHQ8BAf8E
58
- BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBR0
59
- zbkYQmSgopJsbuNKOQV9qjYu7TAhBgNVHREEGjAYhwR/AAABhxAAAAAAAAAAAAAA
60
- AAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQAWLolrv0NuKqhZndYLPCT3C013Qo6y
61
- QeQPbyZbJgHhRZd2feP8sEQ1U4f48OKL5ejWEKOaUvH/sVI9Jume4ve2xOxqz+ST
62
- csZqUqinnUT/12jwGOys2IIEPBnlMxBFon54G336+LGgl9CX+rXKeJZgIbmZpcCa
63
- J948KRJwJ4E4UgnNIY/e4J5nCpScA0b5GlmcvpoV5yBoIf6vvnrWeyyl4rotPx9Q
64
- jm/r7v5BQrwMjbcrLCA9Nob5tSMEHDjlvt4cNzOnMWdsjB735QaMsA8qZX8m2NpX
65
- jti9iwz2QT6q1s+PjS/gbflIO3j4FP4XOEQGtWm9iqPbVhoUIB9PBED3
66
- -----END CERTIFICATE-----
67
- `
15
+ import { promise } from "@/utils" ;
68
16
69
17
const tlsArb = fc . constant ( certFixtures . tlsConfigFileRSA1 ) ;
70
18
// const tlsArb = tlsUtils.tlsConfigArb(tlsUtils.keyPairsArb(1));
@@ -301,6 +249,43 @@ describe(QUICClient.name, () => {
301
249
await server . stop ( ) ;
302
250
} ) ;
303
251
} )
252
+ describe ( 'graceful tls handshake' , ( ) => {
253
+ test ( 'handshake succeeds' , async ( ) => {
254
+ const server = new QUICServer ( {
255
+ crypto,
256
+ logger : logger . getChild ( QUICServer . name ) ,
257
+ config : {
258
+ tlsConfig : certFixtures . tlsConfigFileRSA1 ,
259
+ verifyPeer : true ,
260
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile
261
+ }
262
+ } ) ;
263
+ const handleConnectionEventProm = promise < any > ( )
264
+ server . addEventListener ( 'connection' , handleConnectionEventProm . resolveP ) ;
265
+ await server . start ( {
266
+ host : '127.0.0.1' as Host ,
267
+ } ) ;
268
+ // Connection should succeed
269
+ const client = await QUICClient . createQUICClient ( {
270
+ host : '::ffff:127.0.0.1' as Host ,
271
+ port : server . port ,
272
+ localHost : '::' as Host ,
273
+ crypto,
274
+ logger : logger . getChild ( QUICClient . name ) ,
275
+ config : {
276
+ verifyPeer : false ,
277
+ tlsConfig : certFixtures . tlsConfigFileRSA2 ,
278
+ verifyFromPemFile : certFixtures . tlsConfigFileRSA2 . certChainFromPemFile
279
+ }
280
+ } ) ;
281
+ await handleConnectionEventProm . p
282
+ await client . destroy ( ) ;
283
+ await server . stop ( ) ;
284
+ } )
285
+ test . todo ( 'handshake fails validation for server' )
286
+ test . todo ( 'handshake fails validation for client' )
287
+ test . todo ( 'handshake fails validation for both' )
288
+ } )
304
289
305
290
// test('dual stack to dual stack', async () => {
306
291
0 commit comments