@@ -727,8 +727,6 @@ func TestPeerCertificateExchange(t *testing.T) {
727727
728728// TestPeerMultiDeviceAuthentication tests Alice talking to Bob across two devices
729729func TestPeerMultiDeviceAuthentication (t * testing.T ) {
730- t .Skip ("Skipping multi-device test until transport issues are resolved" )
731-
732730 // Create wallets and transports
733731 alicePk , err := ec .NewPrivateKey ()
734732 require .NoError (t , err )
@@ -780,21 +778,37 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
780778 return & wallet.DecryptResult {Plaintext : []byte ("decrypted" )}, nil
781779 }
782780
781+ // Create Bob's key and wallets (separate instances for each connection)
783782 bobPk , err := ec .NewPrivateKey ()
784783 require .NoError (t , err )
785- bobWallet := wallet .NewMockWallet (t )
786- bobWallet .MockGetPublicKey = func (ctx context.Context , args wallet.GetPublicKeyArgs , originator string ) (* wallet.GetPublicKeyResult , error ) {
784+
785+ // Bob wallet for first device connection
786+ bobWallet1 := wallet .NewMockWallet (t )
787+ bobWallet1 .MockGetPublicKey = func (ctx context.Context , args wallet.GetPublicKeyArgs , originator string ) (* wallet.GetPublicKeyResult , error ) {
788+ return & wallet.GetPublicKeyResult {PublicKey : bobPk .PubKey ()}, nil
789+ }
790+
791+ // Bob wallet for second device connection
792+ bobWallet2 := wallet .NewMockWallet (t )
793+ bobWallet2 .MockGetPublicKey = func (ctx context.Context , args wallet.GetPublicKeyArgs , originator string ) (* wallet.GetPublicKeyResult , error ) {
787794 return & wallet.GetPublicKeyResult {PublicKey : bobPk .PubKey ()}, nil
788795 }
789796
790797 // Setup Bob's crypto operations
791798 dummyBobSig , err := bobPk .Sign ([]byte ("test" ))
792799 require .NoError (t , err )
793800
794- bobWallet .MockCreateSignature = func (ctx context.Context , args wallet.CreateSignatureArgs , originator string ) (* wallet.CreateSignatureResult , error ) {
801+ bobWallet1 .MockCreateSignature = func (ctx context.Context , args wallet.CreateSignatureArgs , originator string ) (* wallet.CreateSignatureResult , error ) {
795802 return & wallet.CreateSignatureResult {Signature : * dummyBobSig }, nil
796803 }
797- bobWallet .MockVerifySignature = func (ctx context.Context , args wallet.VerifySignatureArgs , originator string ) (* wallet.VerifySignatureResult , error ) {
804+ bobWallet1 .MockVerifySignature = func (ctx context.Context , args wallet.VerifySignatureArgs , originator string ) (* wallet.VerifySignatureResult , error ) {
805+ return & wallet.VerifySignatureResult {Valid : true }, nil
806+ }
807+
808+ bobWallet2 .MockCreateSignature = func (ctx context.Context , args wallet.CreateSignatureArgs , originator string ) (* wallet.CreateSignatureResult , error ) {
809+ return & wallet.CreateSignatureResult {Signature : * dummyBobSig }, nil
810+ }
811+ bobWallet2 .MockVerifySignature = func (ctx context.Context , args wallet.VerifySignatureArgs , originator string ) (* wallet.VerifySignatureResult , error ) {
798812 return & wallet.VerifySignatureResult {Valid : true }, nil
799813 }
800814
@@ -803,19 +817,29 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
803817 hmacBytes2 [i ] = byte (i )
804818 }
805819
806- bobWallet .MockCreateHMAC = func (ctx context.Context , args wallet.CreateHMACArgs , originator string ) (* wallet.CreateHMACResult , error ) {
820+ bobWallet1 .MockCreateHMAC = func (ctx context.Context , args wallet.CreateHMACArgs , originator string ) (* wallet.CreateHMACResult , error ) {
807821 return & wallet.CreateHMACResult {HMAC : hmacBytes2 }, nil
808822 }
809- bobWallet .MockDecrypt = func (ctx context.Context , args wallet.DecryptArgs , originator string ) (* wallet.DecryptResult , error ) {
823+ bobWallet1 .MockDecrypt = func (ctx context.Context , args wallet.DecryptArgs , originator string ) (* wallet.DecryptResult , error ) {
824+ return & wallet.DecryptResult {Plaintext : []byte ("decrypted" )}, nil
825+ }
826+
827+ bobWallet2 .MockCreateHMAC = func (ctx context.Context , args wallet.CreateHMACArgs , originator string ) (* wallet.CreateHMACResult , error ) {
828+ return & wallet.CreateHMACResult {HMAC : hmacBytes2 }, nil
829+ }
830+ bobWallet2 .MockDecrypt = func (ctx context.Context , args wallet.DecryptArgs , originator string ) (* wallet.DecryptResult , error ) {
810831 return & wallet.DecryptResult {Plaintext : []byte ("decrypted" )}, nil
811832 }
812833
834+ // Create separate transport pairs for each connection
813835 aliceTransport1 := NewMockTransport ()
814836 aliceTransport2 := NewMockTransport ()
815- bobTransport := NewMockTransport ()
837+ bobTransport1 := NewMockTransport ()
838+ bobTransport2 := NewMockTransport ()
816839
817- // Connect transports
818- PairTransports (aliceTransport1 , bobTransport )
840+ // Connect transports: Alice device 1 <-> Bob instance 1, Alice device 2 <-> Bob instance 2
841+ PairTransports (aliceTransport1 , bobTransport1 )
842+ PairTransports (aliceTransport2 , bobTransport2 )
819843
820844 // Create peers
821845 aliceFirstDevice := NewPeer (& PeerOptions {
@@ -828,15 +852,21 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
828852 Transport : aliceTransport2 ,
829853 })
830854
831- bob := NewPeer (& PeerOptions {
832- Wallet : bobWallet ,
833- Transport : bobTransport ,
855+ bob1 := NewPeer (& PeerOptions {
856+ Wallet : bobWallet1 ,
857+ Transport : bobTransport1 ,
858+ })
859+
860+ bob2 := NewPeer (& PeerOptions {
861+ Wallet : bobWallet2 ,
862+ Transport : bobTransport2 ,
834863 })
835864
836865 // Setup message tracking
837866 aliceDevice1Received := make (chan bool , 2 ) // May receive multiple messages
838867 aliceDevice2Received := make (chan bool , 1 )
839- bobReceived := make (chan bool , 3 ) // Will receive multiple messages
868+ bob1Received := make (chan bool , 3 ) // Will receive multiple messages
869+ bob2Received := make (chan bool , 3 ) // Will receive multiple messages
840870 ctx := t .Context ()
841871
842872 aliceFirstDevice .ListenForGeneralMessages (func (senderPublicKey * ec.PublicKey , payload []byte ) error {
@@ -849,27 +879,37 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
849879 return nil
850880 })
851881
852- bob .ListenForGeneralMessages (func (senderPublicKey * ec.PublicKey , payload []byte ) error {
853- bobReceived <- true
882+ bob1 .ListenForGeneralMessages (func (senderPublicKey * ec.PublicKey , payload []byte ) error {
883+ bob1Received <- true
884+ // Bob will respond to all messages
885+ go func () {
886+ err := bob1 .ToPeer (ctx , []byte ("Hello Alice from Bob1!" ), senderPublicKey , 5000 )
887+ require .NoError (t , err )
888+ }()
889+ return nil
890+ })
891+
892+ bob2 .ListenForGeneralMessages (func (senderPublicKey * ec.PublicKey , payload []byte ) error {
893+ bob2Received <- true
854894 // Bob will respond to all messages
855895 go func () {
856- err := bob .ToPeer (ctx , []byte ("Hello Alice!" ), senderPublicKey , 5000 )
896+ err := bob2 .ToPeer (ctx , []byte ("Hello Alice from Bob2 !" ), senderPublicKey , 5000 )
857897 require .NoError (t , err )
858898 }()
859899 return nil
860900 })
861901
862902 // Alice's first device sends a message to Bob
863- bobPubKey , _ := bobWallet .GetPublicKey (ctx , wallet.GetPublicKeyArgs {IdentityKey : true }, "" )
903+ bobPubKey , _ := bobWallet1 .GetPublicKey (ctx , wallet.GetPublicKeyArgs {IdentityKey : true }, "" )
864904 err = aliceFirstDevice .ToPeer (ctx , []byte ("Hello Bob from first device!" ), bobPubKey .PublicKey , 5000 )
865905 require .NoError (t , err )
866906
867- // Wait for Bob to receive and respond
907+ // Wait for Bob1 to receive and respond
868908 select {
869- case <- bobReceived :
909+ case <- bob1Received :
870910 // Bob received message
871911 case <- time .After (2 * time .Second ):
872- require .Fail (t , "Timed out waiting for Bob to receive message from Alice's first device" )
912+ require .Fail (t , "Timed out waiting for Bob1 to receive message from Alice's first device" )
873913 }
874914
875915 // Wait for Alice's first device to get response
@@ -880,19 +920,17 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
880920 require .Fail (t , "Timed out waiting for Alice's first device to receive response" )
881921 }
882922
883- // Now connect Alice's second device to Bob
884- PairTransports (aliceTransport2 , bobTransport )
885-
886- // Alice's second device sends a message to Bob
887- err = aliceOtherDevice .ToPeer (ctx , []byte ("Hello Bob from other device!" ), bobPubKey .PublicKey , 5000 )
923+ // Alice's second device sends a message to Bob (different Bob instance)
924+ bobPubKey2 , _ := bobWallet2 .GetPublicKey (ctx , wallet.GetPublicKeyArgs {IdentityKey : true }, "" )
925+ err = aliceOtherDevice .ToPeer (ctx , []byte ("Hello Bob from other device!" ), bobPubKey2 .PublicKey , 5000 )
888926 require .NoError (t , err )
889927
890- // Wait for Bob to receive and respond
928+ // Wait for Bob2 to receive and respond
891929 select {
892- case <- bobReceived :
930+ case <- bob2Received :
893931 // Bob received message
894932 case <- time .After (2 * time .Second ):
895- require .Fail (t , "Timed out waiting for Bob to receive message from Alice's second device" )
933+ require .Fail (t , "Timed out waiting for Bob2 to receive message from Alice's second device" )
896934 }
897935
898936 // Wait for Alice's second device to get response
@@ -1219,9 +1257,6 @@ func TestPartialCertificateAcceptance(t *testing.T) {
12191257// TestLibraryCardVerification tests the scenario where Alice asks for
12201258// Bob's library card number before lending him a book.
12211259func TestLibraryCardVerification (t * testing.T ) {
1222- // Skip test temporarily until we fix the certificate signature verification issue
1223- t .Skip ("Temporarily skipping until we fix signature verification issue" )
1224-
12251260 // Create a mock function to intercept certificate requests
12261261 var certType [32 ]byte
12271262 copy (certType [:], "libraryCard" )
@@ -1255,7 +1290,7 @@ func TestLibraryCardVerification(t *testing.T) {
12551290 return & wallet.VerifySignatureResult {Valid : true }, nil
12561291 }
12571292
1258- // Bob has a library card - first create raw
1293+ // Bob has a library card - create with proper base64 encoding
12591294 bobCertRaw := wallet.Certificate {
12601295 Type : certType ,
12611296 SerialNumber : tu .GetByte32FromString ("lib-123456" ),
@@ -1327,20 +1362,22 @@ func TestLibraryCardVerification(t *testing.T) {
13271362 return & wallet.CreateHMACResult {HMAC : hmacBytes }, nil
13281363 }
13291364
1330- // Create mocked transports
1331- aliceTransport := NewMockTransport ( )
1332- bobTransport := NewMockTransport ( )
1333- PairTransports (aliceTransport , bobTransport )
1365+ // Create mocked transports with debugging
1366+ aliceTransport := NewLoggingMockTransport ( "ALICE" , log . New ( os . Stdout , "[ALICE] " , log . LstdFlags ) )
1367+ bobTransport := NewLoggingMockTransport ( "BOB" , log . New ( os . Stdout , "[BOB] " , log . LstdFlags ) )
1368+ PairTransports (aliceTransport . MockTransport , bobTransport . MockTransport )
13341369
1335- // Create peers
1370+ // Create peers with debugging
13361371 alice := NewPeer (& PeerOptions {
13371372 Wallet : aliceWallet ,
13381373 Transport : aliceTransport ,
1374+ Logger : log .New (os .Stdout , "[ALICE PEER] " , log .LstdFlags ),
13391375 })
13401376
13411377 bob := NewPeer (& PeerOptions {
13421378 Wallet : bobWallet ,
13431379 Transport : bobTransport ,
1380+ Logger : log .New (os .Stdout , "[BOB PEER] " , log .LstdFlags ),
13441381 })
13451382
13461383 // Setup certificate tracking
@@ -1356,7 +1393,7 @@ func TestLibraryCardVerification(t *testing.T) {
13561393 return nil
13571394 })
13581395
1359- // Bob listens for certificate requests
1396+ // Bob listens for certificate requests with debugging
13601397 bob .ListenForCertificatesRequested (func (senderPublicKey * ec.PublicKey , req utils.RequestedCertificateSet ) error {
13611398 t .Logf ("Bob received certificate request from %s with %d types" ,
13621399 senderPublicKey .ToDERHex (), len (req .CertificateTypes ))
@@ -1394,44 +1431,64 @@ func TestLibraryCardVerification(t *testing.T) {
13941431 // Alice sends an initial message to Bob to trigger the certificate exchange
13951432 bobPubKey , _ := bobWallet .GetPublicKey (ctx , wallet.GetPublicKeyArgs {IdentityKey : true }, "" )
13961433
1397- go func () {
1398- err := alice .ToPeer (ctx , []byte ("Can I see your library card?" ), bobPubKey .PublicKey , 5000 )
1399- require .NoError (t , err )
1434+ // First establish a session between Alice and Bob
1435+ t .Logf ("Alice sending initial message to Bob to establish session" )
1436+ err = alice .ToPeer (ctx , []byte ("Can I see your library card?" ), bobPubKey .PublicKey , 5000 )
1437+ require .NoError (t , err )
14001438
1401- // Add a small delay before explicitly requesting certificates
1402- time .Sleep (500 * time .Millisecond )
1439+ // Wait for session to be established
1440+ time .Sleep (1 * time .Second )
14031441
1404- // Alice explicitly requests Bob's certificate
1405- err = alice .RequestCertificates (ctx , bobPubKey .PublicKey , utils.RequestedCertificateSet {
1406- Certifiers : []wallet.HexBytes33 {tu .GetByte33FromString ("any" )},
1407- CertificateTypes : utils.RequestedCertificateTypeIDAndFieldList {
1408- certType : []string {"cardNumber" },
1409- },
1410- }, 5000 )
1411- if err != nil {
1412- t .Logf ("Error when Alice requested Bob's library card: %v" , err )
1413- } else {
1414- t .Logf ("Alice explicitly requested Bob's library card" )
1415- }
1416- }()
1442+ // Alice explicitly requests Bob's certificate
1443+ err = alice .RequestCertificates (ctx , bobPubKey .PublicKey , utils.RequestedCertificateSet {
1444+ Certifiers : []wallet.HexBytes33 {tu .GetByte33FromString ("any" )},
1445+ CertificateTypes : utils.RequestedCertificateTypeIDAndFieldList {
1446+ certType : []string {"cardNumber" },
1447+ },
1448+ }, 5000 )
1449+ if err != nil {
1450+ t .Logf ("Error when Alice requested Bob's library card: %v" , err )
1451+ } else {
1452+ t .Logf ("Alice explicitly requested Bob's library card" )
1453+ }
1454+ // }()
14171455
14181456 // Wait for certificate exchange
14191457 select {
14201458 case <- aliceCertReceived :
1459+ t .Logf ("SUCCESS: Alice received Bob's certificate" )
14211460 // Alice received Bob's certificate, now she'll verify the card number and lend him the book
14221461 go func () {
14231462 err := alice .ToPeer (ctx , []byte ("Here's your book" ), bobPubKey .PublicKey , 5000 )
14241463 require .NoError (t , err )
14251464 }()
1426- case <- time .After (5 * time .Second ):
1465+ case <- time .After (10 * time .Second ):
1466+ // Debug session state
1467+ t .Logf ("=== DEBUG SESSION INFO ===" )
1468+ alicePubKey , _ := aliceWallet .GetPublicKey (ctx , wallet.GetPublicKeyArgs {IdentityKey : true }, "" )
1469+
1470+ if bobSession , err := bob .sessionManager .GetSession (alicePubKey .PublicKey .ToDERHex ()); err == nil && bobSession != nil {
1471+ t .Logf ("Bob's session for Alice - Authenticated: %v, Session Nonce: %s, Peer Nonce: %s" ,
1472+ bobSession .IsAuthenticated , bobSession .SessionNonce , bobSession .PeerNonce )
1473+ } else {
1474+ t .Logf ("Bob has no session for Alice" )
1475+ }
1476+
1477+ if aliceSession , err := alice .sessionManager .GetSession (bobPubKey .PublicKey .ToDERHex ()); err == nil && aliceSession != nil {
1478+ t .Logf ("Alice's session for Bob - Authenticated: %v, Session Nonce: %s, Peer Nonce: %s" ,
1479+ aliceSession .IsAuthenticated , aliceSession .SessionNonce , aliceSession .PeerNonce )
1480+ } else {
1481+ t .Logf ("Alice has no session for Bob" )
1482+ }
1483+
14271484 require .Fail (t , "Timed out waiting for Alice to receive Bob's library card" )
14281485 return
14291486 }
14301487
14311488 // Wait for Bob to receive the book
14321489 select {
14331490 case <- bobMessageReceived :
1434- // Success! Bob got his book
1491+ t . Logf ( "SUCCESS: Bob received the book from Alice" )
14351492 case <- time .After (5 * time .Second ):
14361493 require .Fail (t , "Timed out waiting for Bob to receive a message from Alice" )
14371494 }
@@ -1480,9 +1537,6 @@ func TestPeerSessionManagement(t *testing.T) {
14801537
14811538// TestPeerErrorHandling tests error handling in various scenarios
14821539func TestPeerErrorHandling (t * testing.T ) {
1483- // Skip for now and add a more targeted test
1484- t .Skip ("Skip error handling tests until we have proper mock implementations" )
1485-
14861540 alice , _ , aliceWallet , bobWallet := CreatePeerPair (t )
14871541
14881542 // Use all variables to avoid linter errors
0 commit comments