@@ -3363,3 +3363,76 @@ func TestApplicationDataQueueLimited(t *testing.T) {
33633363 ca .Close () // nolint
33643364 <- done
33653365}
3366+
3367+ func TestHelloRandom (t * testing.T ) {
3368+ report := test .CheckRoutines (t )
3369+ defer report ()
3370+ ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
3371+ defer cancel ()
3372+
3373+ ca , cb := dpipe .Pipe ()
3374+ certificate , err := selfsign .GenerateSelfSigned ()
3375+ if err != nil {
3376+ t .Fatal (err )
3377+ }
3378+ gotHello := make (chan struct {})
3379+
3380+ chRandom := [handshake .RandomBytesLength ]byte {}
3381+ _ , err = rand .Read (chRandom [:])
3382+ if err != nil {
3383+ t .Fatal (err )
3384+ }
3385+
3386+ go func () {
3387+ server , sErr := testServer (ctx , dtlsnet .PacketConnFromConn (cb ), cb .RemoteAddr (), & Config {
3388+ GetCertificate : func (chi * ClientHelloInfo ) (* tls.Certificate , error ) {
3389+ if len (chi .CipherSuites ) == 0 {
3390+ return & certificate , nil
3391+ }
3392+
3393+ if ! bytes .Equal (chi .RandomBytes [:], chRandom [:]) {
3394+ t .Error ("client hello random differs" )
3395+ }
3396+
3397+ return & certificate , nil
3398+ },
3399+ LoggerFactory : logging .NewDefaultLoggerFactory (),
3400+ }, false )
3401+ if sErr != nil {
3402+ t .Error (sErr )
3403+ return
3404+ }
3405+ buf := make ([]byte , 1024 )
3406+ if _ , sErr = server .Read (buf ); sErr != nil {
3407+ t .Error (sErr )
3408+ }
3409+ gotHello <- struct {}{}
3410+ if sErr = server .Close (); sErr != nil { //nolint:contextcheck
3411+ t .Error (sErr )
3412+ }
3413+ }()
3414+
3415+ client , err := testClient (ctx , dtlsnet .PacketConnFromConn (ca ), ca .RemoteAddr (), & Config {
3416+ LoggerFactory : logging .NewDefaultLoggerFactory (),
3417+ HelloRandomBytesGenerator : func () [handshake .RandomBytesLength ]byte {
3418+ return chRandom
3419+ },
3420+ InsecureSkipVerify : true ,
3421+ }, false )
3422+ if err != nil {
3423+ t .Fatal (err )
3424+ }
3425+ if _ , err = client .Write ([]byte ("hello" )); err != nil {
3426+ t .Error (err )
3427+ }
3428+ select {
3429+ case <- gotHello :
3430+ // OK
3431+ case <- time .After (time .Second * 5 ):
3432+ t .Error ("timeout" )
3433+ }
3434+
3435+ if err = client .Close (); err != nil {
3436+ t .Error (err )
3437+ }
3438+ }
0 commit comments