Skip to content

Commit

Permalink
scratch
Browse files Browse the repository at this point in the history
  • Loading branch information
Crypt-iQ committed Jul 24, 2024
1 parent a7e45bb commit 7982199
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 38 deletions.
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
3 changes: 0 additions & 3 deletions peer/peer.go
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion v2transport/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
52 changes: 20 additions & 32 deletions v2transport/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -427,23 +417,19 @@ 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
}
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
}
Expand Down Expand Up @@ -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)
Expand All @@ -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?
Expand All @@ -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
}
}

0 comments on commit 7982199

Please sign in to comment.