func (s *cipherTestSuite) TestPacketEncryption() { var ( assert = s.Assertions c = s.cipher ) var ( ka cipherset.Key kb cipherset.Key sa cipherset.State sb cipherset.State ha cipherset.Handshake hb cipherset.Handshake pkt *lob.Packet box []byte err error ok bool ) ka, err = c.GenerateKey() assert.NoError(err) kb, err = c.GenerateKey() assert.NoError(err) sa, err = c.NewState(ka) assert.NoError(err) sb, err = c.NewState(kb) assert.NoError(err) err = sa.SetRemoteKey(kb) assert.NoError(err) box, err = sa.EncryptHandshake(1, nil) assert.NoError(err) hb, err = c.DecryptHandshake(kb, box) assert.NoError(err) ok = sb.ApplyHandshake(hb) assert.True(ok) box, err = sb.EncryptHandshake(1, nil) assert.NoError(err) ha, err = c.DecryptHandshake(ka, box) assert.NoError(err) ok = sa.ApplyHandshake(ha) assert.True(ok) pkt = lob.New([]byte("Hello world!")) pkt.Header().SetInt("foo", 0xbeaf) pkt, err = sa.EncryptPacket(pkt) assert.NoError(err) assert.NotNil(pkt) assert.Nil(pkt.Header().Bytes) assert.True(pkt.Header().IsZero()) assert.NotEmpty(pkt.Body) pkt, err = sb.DecryptPacket(pkt) assert.NoError(err) assert.NotNil(pkt) assert.Nil(pkt.Header().Bytes) assert.Equal(&lob.Header{Extra: map[string]interface{}{"foo": 0xbeaf}}, pkt.Header()) assert.Equal([]byte("Hello world!"), pkt.Body(nil)) pkt = lob.New([]byte("Bye world!")) pkt.Header().SetInt("bar", 0xdead) pkt, err = sb.EncryptPacket(pkt) assert.NoError(err) assert.NotNil(pkt) assert.Nil(pkt.Header().Bytes) assert.True(pkt.Header().IsZero()) assert.NotEmpty(pkt.Body) pkt, err = sa.DecryptPacket(pkt) assert.NoError(err) assert.NotNil(pkt) assert.Nil(pkt.Header().Bytes) assert.Equal(&lob.Header{Extra: map[string]interface{}{"bar": 0xdead}}, pkt.Header()) assert.Equal([]byte("Bye world!"), pkt.Body(nil)) }