diff --git a/go.mod b/go.mod index 0d1e267..aaae579 100644 --- a/go.mod +++ b/go.mod @@ -7,14 +7,14 @@ require ( github.com/emirpasic/gods v1.18.1 github.com/eyedeekay/go-unzip v0.0.0-20240201194209-560d8225b50e github.com/flynn/noise v1.1.0 - github.com/go-i2p/common v0.0.0-20250709015428-90b991723618 + github.com/go-i2p/common v0.0.0-20250715213359-dfa5527ece83 + github.com/go-i2p/crypto v0.0.0-20250715205812-c9e7853bc978 github.com/go-i2p/logger v0.0.0-20241123010126-3050657e5d0c github.com/samber/oops v1.19.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.10.0 - go.step.sm/crypto v0.67.0 golang.org/x/crypto v0.39.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -23,7 +23,6 @@ require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect - github.com/go-i2p/crypto v0.0.0-20250709015313-e8c1d28892d7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/magiconair/properties v1.8.9 // indirect @@ -41,6 +40,7 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect go.opentelemetry.io/otel v1.36.0 // indirect go.opentelemetry.io/otel/trace v1.36.0 // indirect + go.step.sm/crypto v0.67.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect golang.org/x/net v0.41.0 // indirect diff --git a/go.sum b/go.sum index b21bf32..04769ac 100644 --- a/go.sum +++ b/go.sum @@ -17,20 +17,16 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/go-i2p/common v0.0.0-20250707191123-71c608f8e179 h1:7FwJStbk2BWIlrgBIdXdQ+QtN5ALCXtqcF5ZiEIRJYs= -github.com/go-i2p/common v0.0.0-20250707191123-71c608f8e179/go.mod h1:Y8egl5mxbG6DmmSjwm+D+PqKUCJqWZw7lNVsG4HrjAc= -github.com/go-i2p/common v0.0.0-20250709012327-82174f608029 h1:j0lpBHLrIVE9e3z/I9K3h0U0w5/Tm0o3DdkXdldK0vI= -github.com/go-i2p/common v0.0.0-20250709012327-82174f608029/go.mod h1:C3Ye1Lw68ePFiLAg1dFDhdC8zUcumDJkfT91QoHRVp4= github.com/go-i2p/common v0.0.0-20250709015428-90b991723618 h1:ZOvrfUmG/SIzOVsICzrqpgoLRZb/gv2i0TgURvqMgeo= github.com/go-i2p/common v0.0.0-20250709015428-90b991723618/go.mod h1:Hq9v0qoOgIWVs/cYszDqw5rhk6DjnHLHm6+75/+Y6m0= -github.com/go-i2p/crypto v0.0.0-20250708235729-da6947d69d25 h1:UJNs3WS4OBhnGw1xmA5Nw2InHqp/c2MFeag6HApzAY0= -github.com/go-i2p/crypto v0.0.0-20250708235729-da6947d69d25/go.mod h1:yUave/c7E/K5mRnJUwEzxdiB0EFL8qPM/rHQl/N7tp8= -github.com/go-i2p/crypto v0.0.0-20250709015313-e8c1d28892d7 h1:A0lMAhY2hxLtv43GkdoMsFg+hc/1wce+MAR60eIYjJU= -github.com/go-i2p/crypto v0.0.0-20250709015313-e8c1d28892d7/go.mod h1:1Y3NCpVg6OgE3c2VPRQ3QDmWPtDpJYLIyRBA1iJCd3E= +github.com/go-i2p/common v0.0.0-20250715213359-dfa5527ece83 h1:F6xM06QyqR+qMYA4SzWzUzfVmkSE1P41tHK32TmGxP8= +github.com/go-i2p/common v0.0.0-20250715213359-dfa5527ece83/go.mod h1:e6X6esQk0zaevdZPZecKY7n8+wOfOLukQfWw558DYfk= +github.com/go-i2p/crypto v0.0.0-20250715205812-c9e7853bc978 h1:YnaXZy814nG+kSpZs6z53Z4TMt1NnMIJNbBHlE4KBc0= +github.com/go-i2p/crypto v0.0.0-20250715205812-c9e7853bc978/go.mod h1:1Y3NCpVg6OgE3c2VPRQ3QDmWPtDpJYLIyRBA1iJCd3E= github.com/go-i2p/logger v0.0.0-20241123010126-3050657e5d0c h1:VTiECn3dFEmUlZjto+wOwJ7SSJTHPLyNprQMR5HzIMI= github.com/go-i2p/logger v0.0.0-20241123010126-3050657e5d0c/go.mod h1:te7Zj3g3oMeIl8uBXAgO62UKmZ6m6kHRNg1Mm+X8Hzk= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -85,37 +81,29 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= -go.step.sm/crypto v0.58.1 h1:2PpEYTbytA3el9dW0gh9uJEe/CR/J6wS+x2vWYLG83M= -go.step.sm/crypto v0.58.1/go.mod h1:yluOL5OqY7mXGGQ7JUmAv/6h8T8Ge3yXdlEESWHOqDQ= +go.step.sm/crypto v0.67.0 h1:1km9LmxMKG/p+mKa1R4luPN04vlJYnRLlLQrWv7egGU= go.step.sm/crypto v0.67.0/go.mod h1:+AoDpB0mZxbW/PmOXuwkPSpXRgaUaoIK+/Wx/HGgtAU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= -golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4= -golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/lib/i2np/database_lookup.go b/lib/i2np/database_lookup.go index c628d15..d5dc82a 100644 --- a/lib/i2np/database_lookup.go +++ b/lib/i2np/database_lookup.go @@ -389,7 +389,10 @@ func readDatabaseLookupReplyTags(length int, data []byte, tags int) (int, []sess var reply_tags []session_tag.SessionTag for i := 0; i < tags; i++ { offset := length + i*32 - tag := session_tag.SessionTag(data[offset : offset+32]) + tag, err := session_tag.NewSessionTagFromBytes(data[offset : offset+32]) + if err != nil { + return length, []session_tag.SessionTag{}, err + } reply_tags = append(reply_tags, tag) } diff --git a/lib/i2np/database_lookup_test.go b/lib/i2np/database_lookup_test.go index c6890ac..c2cace6 100644 --- a/lib/i2np/database_lookup_test.go +++ b/lib/i2np/database_lookup_test.go @@ -336,7 +336,13 @@ func TestReadDatabaseLookupReplyTagsValidData(t *testing.T) { // random data: tag[i+1] = 0x43 tag[i+5] = 0x89 - expectedReplyTags = append(expectedReplyTags, session_tag.SessionTag(tag)) + sessionTag, err := session_tag.NewSessionTagFromBytes(tag) + if err != nil { + assert.Fail("Failed to create session tag from bytes: %v", err) + return + } + expectedReplyTags = append(expectedReplyTags, sessionTag) + //expectedReplyTags = append(expectedReplyTags, session_tag.SessionTag(tag)) data = append(data, tag...) } @@ -414,7 +420,12 @@ func TestReadDatabaseLookupValidData(t *testing.T) { // random data: tag[i+3] = 0x22 tag[i+13] = 0x11 - expectedReplyTags = append(expectedReplyTags, session_tag.SessionTag(tag)) + sessionTag, err := session_tag.NewSessionTagFromBytes(tag) + if err != nil { + assert.Fail("Failed to create session tag from bytes: %v", err) + return + } + expectedReplyTags = append(expectedReplyTags, sessionTag) data = append(data, tag...) } databaseLookup, err := ReadDatabaseLookup(data) diff --git a/lib/keys/routerinfo_keystore.go b/lib/keys/routerinfo_keystore.go index ce8ce22..0ced280 100644 --- a/lib/keys/routerinfo_keystore.go +++ b/lib/keys/routerinfo_keystore.go @@ -159,7 +159,7 @@ func (ks *RouterInfoKeystore) ConstructRouterInfo(addresses []*router_address.Ro // Create RouterIdentity routerIdentity, err := router_identity.NewRouterIdentity( - types.RecievingPublicKey(nil), + types.ReceivingPublicKey(nil), publicKey.(types.SigningPublicKey), *cert, padding, diff --git a/lib/transport/ntcp/handshake/handshake.go b/lib/transport/ntcp/handshake/handshake.go index 374356d..f7e7dcc 100644 --- a/lib/transport/ntcp/handshake/handshake.go +++ b/lib/transport/ntcp/handshake/handshake.go @@ -18,11 +18,11 @@ type HandshakeState struct { // isInitiator indicates whether this side initiated the handshake IsInitiator bool // localStaticKey is this router's long-term private key - LocalStaticKey types.PrivateKey + LocalStaticKey types.PrivateEncryptionKey // remoteStaticKey is the remote router's long-term public key RemoteStaticKey types.PublicKey // localEphemeral is the temporary private key generated for this handshake - LocalEphemeral types.PrivateKey + LocalEphemeral types.PrivateEncryptionKey // remoteEphemeral is the temporary public key received from remote party RemoteEphemeral types.PublicKey // localPaddingLen is the length of padding bytes we send @@ -75,7 +75,7 @@ func (h *HandshakeState) SetPrologue(prologue []byte) error { var _ handshake.HandshakeState = &HandshakeState{} // NewHandshakeState creates a new handshake state for initiating a connection -func NewHandshakeState(localKey types.PrivateKey, remoteKey types.PublicKey, ri *router_info.RouterInfo) (*HandshakeState, error) { +func NewHandshakeState(localKey types.PrivateEncryptionKey, remoteKey types.PublicKey, ri *router_info.RouterInfo) (*HandshakeState, error) { /* NewHandshakeState creates and initializes a handshake state structure for NTCP2: 1. Initialize the state with local private key, remote public key, and router info diff --git a/lib/tunnel/message.go b/lib/tunnel/message.go index cb8b4a8..59f7dbc 100644 --- a/lib/tunnel/message.go +++ b/lib/tunnel/message.go @@ -5,7 +5,7 @@ import ( "github.com/sirupsen/logrus" - "github.com/go-i2p/crypto" + "github.com/go-i2p/crypto/tunnel" ) /* @@ -119,7 +119,7 @@ total size: 1028 Bytes type TunnelID uint32 -type EncryptedTunnelMessage crypto.TunnelData +type EncryptedTunnelMessage tunnel.TunnelData type DeliveryInstructionsWithFragment struct { DeliveryInstructions DeliveryInstructions @@ -131,11 +131,11 @@ func (tm EncryptedTunnelMessage) ID() (tid TunnelID) { return } -func (tm EncryptedTunnelMessage) IV() crypto.TunnelIV { +func (tm EncryptedTunnelMessage) IV() tunnel.TunnelIV { return tm[4:20] } -func (tm EncryptedTunnelMessage) Data() crypto.TunnelIV { +func (tm EncryptedTunnelMessage) Data() tunnel.TunnelIV { return tm[24:] } @@ -147,11 +147,11 @@ func (decrypted_tunnel_message DecryptedTunnelMessage) ID() TunnelID { )) } -func (decrypted_tunnel_message DecryptedTunnelMessage) IV() crypto.TunnelIV { +func (decrypted_tunnel_message DecryptedTunnelMessage) IV() tunnel.TunnelIV { return decrypted_tunnel_message[4 : 4+16] } -func (decrypted_tunnel_message DecryptedTunnelMessage) Checksum() crypto.TunnelIV { +func (decrypted_tunnel_message DecryptedTunnelMessage) Checksum() tunnel.TunnelIV { return decrypted_tunnel_message[4+16 : 4+4+16] } diff --git a/lib/tunnel/participant.go b/lib/tunnel/participant.go index 8cd523c..7275f21 100644 --- a/lib/tunnel/participant.go +++ b/lib/tunnel/participant.go @@ -1,9 +1,9 @@ package tunnel import ( - "github.com/go-i2p/crypto" + "github.com/go-i2p/crypto/tunnel" ) type Participant struct { - decryption *crypto.Tunnel + decryption *tunnel.Tunnel }