Projects STRLCPY dnstt Commits 79bda514
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    noise/noise_test.go
    skipped 2 lines
    3 3  import (
    4 4   "bytes"
    5 5   "io"
     6 + "net"
    6 7   "testing"
     8 + 
     9 + "github.com/flynn/noise"
    7 10  )
    8 11   
    9 12  func allMessages(buf []byte) ([][]byte, error) {
    skipped 91 lines
    101 104   }
    102 105  }
    103 106   
     107 +func TestUnexpectedPayload(t *testing.T) {
     108 + privkey, pubkey, err := GenerateKeypair()
     109 + if err != nil {
     110 + panic(err)
     111 + }
     112 + 
     113 + // Test the client sending an unexpected payload.
     114 + clientWithPayload := func(rwc io.ReadWriteCloser) error {
     115 + config := newConfig(true)
     116 + config.PeerStatic = pubkey
     117 + handshakeState, err := noise.NewHandshakeState(config)
     118 + if err != nil {
     119 + return err
     120 + }
     121 + 
     122 + // -> e, es
     123 + msg, _, _, err := handshakeState.WriteMessage(nil, []byte("payload"))
     124 + if err != nil {
     125 + return err
     126 + }
     127 + err = writeMessage(rwc, msg)
     128 + if err != nil {
     129 + return err
     130 + }
     131 + 
     132 + // <- e, es
     133 + // Return nil for all errors after this point, because we expect
     134 + // the server to have failed, but we want to keep up the game
     135 + // just in case the server did not fail.
     136 + msg, err = readMessage(rwc)
     137 + if err != nil {
     138 + return nil
     139 + }
     140 + _, _, _, err = handshakeState.ReadMessage(nil, msg)
     141 + if err != nil {
     142 + return nil
     143 + }
     144 + 
     145 + return nil
     146 + }
     147 + func() {
     148 + c, s := net.Pipe()
     149 + defer s.Close()
     150 + 
     151 + // Fake a client side that sends a payload.
     152 + go func() {
     153 + defer c.Close()
     154 + err := clientWithPayload(c)
     155 + if err != nil {
     156 + t.Fatal(err)
     157 + }
     158 + }()
     159 + 
     160 + server, err := NewServer(s, privkey, pubkey)
     161 + if err == nil || err.Error() != "unexpected client payload" || server != nil {
     162 + t.Errorf("NewServer got (%T, %v)", server, err)
     163 + }
     164 + }()
     165 + 
     166 + // Test the server sending an unexpected payload.
     167 + serverWithPayload := func(rwc io.ReadWriteCloser) error {
     168 + config := newConfig(false)
     169 + config.StaticKeypair = noise.DHKey{Private: privkey, Public: pubkey}
     170 + handshakeState, err := noise.NewHandshakeState(config)
     171 + if err != nil {
     172 + return err
     173 + }
     174 + 
     175 + // -> e, es
     176 + msg, err := readMessage(rwc)
     177 + if err != nil {
     178 + return err
     179 + }
     180 + _, _, _, err = handshakeState.ReadMessage(nil, msg)
     181 + if err != nil {
     182 + return err
     183 + }
     184 + 
     185 + // <- e, es
     186 + msg, _, _, err = handshakeState.WriteMessage(nil, []byte("payload"))
     187 + if err != nil {
     188 + return err
     189 + }
     190 + err = writeMessage(rwc, msg)
     191 + if err != nil {
     192 + return err
     193 + }
     194 + 
     195 + return nil
     196 + }
     197 + func() {
     198 + c, s := net.Pipe()
     199 + defer c.Close()
     200 + 
     201 + // Fake a server side that sends a payload.
     202 + go func() {
     203 + defer s.Close()
     204 + err := serverWithPayload(s)
     205 + if err != nil {
     206 + t.Fatal(err)
     207 + }
     208 + }()
     209 + 
     210 + client, err := NewClient(c, pubkey)
     211 + if err == nil || err.Error() != "unexpected server payload" || client != nil {
     212 + t.Errorf("NewClient got (%T, %v)", client, err)
     213 + }
     214 + }()
     215 +}
     216 + 
Please wait...
Page is in error, reload to recover