diff --git a/go.mod b/go.mod index e6cf0d7eb55..44eced72f32 100644 --- a/go.mod +++ b/go.mod @@ -31,8 +31,9 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace github.com/btcsuite/btcd/btcec/v2 => /Users/eugenesiegel/Documents/btcd/btcec -replace github.com/btcsuite/btcd/v2transport => /Users/eugenesiegel/Documents/btcd/v2transport +replace github.com/btcsuite/btcd/btcec/v2 => /Users/nsa/go/src/github.com/btcsuite/btcd/btcec + +replace github.com/btcsuite/btcd/v2transport => /Users/nsa/go/src/github.com/btcsuite/btcd/v2transport // The retract statements below fixes an accidental push of the tags of a btcd // fork. diff --git a/peer/peer.go b/peer/peer.go index cbf14efde58..d9a5f71faec 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -1150,8 +1150,6 @@ func (p *Peer) writeMessage(msg wire.Message, enc wire.MessageEncoding) error { return err } - fmt.Printf("writing message: %v bytes: %v\n\n", msg.Command(), buf.Bytes()) - _, n, err = p.V2Transport.V2EncPacket(buf.Bytes(), nil, false) } else { n, err = wire.WriteMessageWithEncodingN( @@ -2481,7 +2479,6 @@ func newPeerBase(origCfg *Config, inbound bool) *Peer { if p.cfg.UsingV2Conn && p.Services()&wire.SFNodeP2PV2 == wire.SFNodeP2PV2 { p.V2Transport = v2transport.NewPeer() - fmt.Println(p.Services() & wire.SFNodeP2PV2) } else { // TODO: Hack, change. p.cfg.UsingV2Conn = false diff --git a/v2transport/go.mod b/v2transport/go.mod index 38c2fa61bdf..f863dd31dbf 100644 --- a/v2transport/go.mod +++ b/v2transport/go.mod @@ -14,4 +14,4 @@ require ( golang.org/x/sys v0.22.0 // indirect ) -replace github.com/btcsuite/btcd/btcec/v2 => /Users/eugenesiegel/Documents/btcd/btcec +replace github.com/btcsuite/btcd/btcec/v2 => /Users/nsa/go/src/github.com/btcsuite/btcd/btcec diff --git a/v2transport/transport.go b/v2transport/transport.go index 90a5587384f..a7bd4637f9e 100644 --- a/v2transport/transport.go +++ b/v2transport/transport.go @@ -124,10 +124,6 @@ type Peer struct { // NewPeer returns a new instance of Peer. func NewPeer() *Peer { - - // TODO: Delete - fmt.Printf("new v2 peer created\n\n\n") - // The keys (initiatorL, initiatorP, responderL, responderP) as well as the // sessionID must have space for the hkdf Expand-derived Reader to work. return &Peer{ @@ -307,8 +303,6 @@ func (p *Peer) RespondV2Handshake(garbageLen int, net wire.BitcoinNet) error { var err error - fmt.Printf("Respond v2 handshake\n\n") - // Check and see if the received bytes match the v1 protocol's message // prefix. If it does, we'll revert to the v1 protocol. If it doesn't, // we'll treat this as a v2 peer. @@ -360,15 +354,11 @@ func (p *Peer) CompleteHandshake(initiating bool, decoyContentLens []int, receivedPrefix = p.receivedPrefix } - fmt.Printf("CompleteHandshake\n\n") - recvData, err := p.Receive(64 - len(receivedPrefix)) if err != nil { return err } - fmt.Println("CompleteHandshake - post first Receive") - var ellswiftTheirs [64]byte copy(ellswiftTheirs[:], recvData) @@ -427,15 +417,12 @@ func (p *Peer) CompleteHandshake(initiating bool, decoyContentLens []int, } // Send version packet. - encPacket, _, err := p.V2EncPacket(transportVersion, aad, false) + _, _, err = p.V2EncPacket(transportVersion, aad, false) if err != nil { return err } - p.Send(encPacket) - // Skip garbage until encountering garbage terminator. - fmt.Println("RecvGarbageTerm") recvGarbage, err := p.Receive(16) if err != nil { return err @@ -443,7 +430,6 @@ func (p *Peer) CompleteHandshake(initiating bool, decoyContentLens []int, for i := 0; i < 4096; i++ { recvGarbageLen := len(recvGarbage) if bytes.Equal(recvGarbage[recvGarbageLen-16:], p.recvGarbageTerm) { - fmt.Printf("Received peer garbage term %v\n", p.recvGarbageTerm) _, err = p.V2ReceivePacket(recvGarbage[:recvGarbageLen-16]) return err } @@ -508,7 +494,6 @@ func (p *Peer) V2EncPacket(contents []byte, aad []byte, ignore bool) ([]byte, // V2ReceivePacket takes the aad and decrypts a received packet. func (p *Peer) V2ReceivePacket(aad []byte) ([]byte, error) { - fmt.Println("V2ReceivePacket") for { // Decrypt the length field so we know how many more bytes to receive. encContentsLen, err := p.Receive(lengthFieldLen) @@ -528,24 +513,17 @@ func (p *Peer) V2ReceivePacket(aad []byte) ([]byte, error) { // Decrypt the remainder of the packet. numBytes := headerLen + int(contentsLen) + chachapoly1305Expansion - - fmt.Println("V2ReceivePacket - post length receive") - aeadCiphertext, err := p.Receive(numBytes) if err != nil { return nil, err } - fmt.Printf("V2ReceivePacket - post content receive %v %d %v\n", aeadCiphertext, contentsLen, aad) - plaintext, err := p.recvP.Decrypt(aad, aeadCiphertext) if err != nil { fmt.Printf("V2ReceivePacket - Decrypt err: %v\n", err) return nil, err } - fmt.Printf("plaintext: %v\n", plaintext) - // Only the first packet is expected to have non-empty AAD. If the // ignore bit is set, ignore the packet. // TODO: will this cause anything to leak? @@ -571,16 +549,26 @@ func (p *Peer) Send(data []byte) (int, error) { // Receive receives numBytes bytes from the underlying connection. func (p *Peer) Receive(numBytes int) ([]byte, error) { b := make([]byte, numBytes) - n, err := p.rw.Read(b) - if err != nil { - return nil, err - } + index := 0 + total := 0 + for { + fmt.Printf("Received %d and expected %d\n", total, numBytes) - fmt.Printf("Received %d and expected %d\n", n, numBytes) + // TODO: Use something that inherently prevents going over? + if total > numBytes { + return nil, errFailedToRecv + } - if n != numBytes { - return nil, errFailedToRecv - } + if total == numBytes { + return b, nil + } - return b, nil + n, err := p.rw.Read(b[index:]) + if err != nil { + return nil, err + } + + total += n + index += n + } }