@@ -354,6 +354,33 @@ def test_subprotocol_downgrade_2(
354
354
assert not client .ws_client .open
355
355
assert client .ws_client .close_code == CloseCode .protocol_error
356
356
357
+ @pytest .mark .asyncio
358
+ def test_initiator_handshake_unencrypted (
359
+ self , cookie_factory , pack_nonce , server , client_factory
360
+ ):
361
+ """
362
+ Check that we cannot do a complete handshake for an initiator
363
+ when 'client-auth' is not encrypted.
364
+ """
365
+ client = yield from client_factory ()
366
+
367
+ # server-hello, already checked in another test
368
+ message , _ , sck , s , d , start_scsn = yield from client .recv ()
369
+
370
+ # client-auth
371
+ cck , ccsn = cookie_factory (), 2 ** 32 - 1
372
+ yield from client .send (pack_nonce (cck , 0x00 , 0x00 , ccsn ), {
373
+ 'type' : 'client-auth' ,
374
+ 'your_cookie' : sck ,
375
+ 'subprotocols' : pytest .saltyrtc .subprotocols ,
376
+ })
377
+ ccsn += 1
378
+
379
+ # Expect protocol error
380
+ yield from server .wait_connections_closed ()
381
+ assert not client .ws_client .open
382
+ assert client .ws_client .close_code == CloseCode .protocol_error
383
+
357
384
@pytest .mark .asyncio
358
385
def test_initiator_handshake (
359
386
self , cookie_factory , initiator_key , pack_nonce , server , client_factory ,
@@ -447,6 +474,39 @@ def test_responder_handshake(
447
474
yield from client .close ()
448
475
yield from server .wait_connections_closed ()
449
476
477
+ @pytest .mark .asyncio
478
+ def test_responder_handshake_unencrypted (
479
+ self , cookie_factory , responder_key , pack_nonce , client_factory , server
480
+ ):
481
+ """
482
+ Check that we can do a complete handshake for a responder.
483
+ """
484
+ client = yield from client_factory ()
485
+
486
+ # server-hello, already checked in another test
487
+ message , _ , sck , s , d , start_scsn = yield from client .recv ()
488
+
489
+ # client-hello
490
+ cck , ccsn = cookie_factory (), 2 ** 32 - 1
491
+ yield from client .send (pack_nonce (cck , 0x00 , 0x00 , ccsn ), {
492
+ 'type' : 'client-hello' ,
493
+ 'key' : responder_key .pk ,
494
+ })
495
+ ccsn += 1
496
+
497
+ # client-auth
498
+ yield from client .send (pack_nonce (cck , 0x00 , 0x00 , ccsn ), {
499
+ 'type' : 'client-auth' ,
500
+ 'your_cookie' : sck ,
501
+ 'subprotocols' : pytest .saltyrtc .subprotocols ,
502
+ })
503
+ ccsn += 1
504
+
505
+ # Expect protocol error
506
+ yield from server .wait_connections_closed ()
507
+ assert not client .ws_client .open
508
+ assert client .ws_client .close_code == CloseCode .protocol_error
509
+
450
510
@pytest .mark .asyncio
451
511
def test_client_factory_handshake (
452
512
self , server , client_factory , initiator_key , responder_key
@@ -633,6 +693,37 @@ def test_invalid_destination_after_handshake(
633
693
assert not responder .ws_client .open
634
694
assert responder .ws_client .close_code == CloseCode .protocol_error
635
695
696
+ @pytest .mark .asyncio
697
+ def test_unencrypted_packet_after_initiator_handshake (
698
+ self , pack_nonce , server , client_factory
699
+ ):
700
+ """
701
+ Check that the server closes with Protocol Error when an
702
+ unencrypted packet is being sent by an initiator.
703
+ """
704
+ # Initiator handshake
705
+ initiator , i = yield from client_factory (initiator_handshake = True )
706
+ assert len (i ['responders' ]) == 0
707
+
708
+ # Drop non-existing responder (encrypted)
709
+ yield from initiator .send (pack_nonce (i ['cck' ], 0x01 , 0x00 , i ['ccsn' ]), {
710
+ 'type' : 'drop-responder' ,
711
+ 'id' : 0x02 ,
712
+ })
713
+ i ['ccsn' ] += 1
714
+
715
+ # Drop non-existing responder (unencrypted)
716
+ yield from initiator .send (pack_nonce (i ['cck' ], 0x01 , 0x00 , i ['ccsn' ]), {
717
+ 'type' : 'drop-responder' ,
718
+ 'id' : 0x02 ,
719
+ }, box = None )
720
+ i ['ccsn' ] += 1
721
+
722
+ # Expect protocol error
723
+ yield from server .wait_connections_closed ()
724
+ assert not initiator .ws_client .open
725
+ assert initiator .ws_client .close_code == CloseCode .protocol_error
726
+
636
727
@pytest .mark .asyncio
637
728
def test_new_initiator (self , server , client_factory ):
638
729
"""
0 commit comments