|
@@ -31,7 +31,6 @@ import (
|
|
|
"sync/atomic"
|
|
"sync/atomic"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
|
- "github.com/Jigsaw-Code/outline-sdk/transport"
|
|
|
|
|
"github.com/Jigsaw-Code/outline-sdk/transport/shadowsocks"
|
|
"github.com/Jigsaw-Code/outline-sdk/transport/shadowsocks"
|
|
|
tls "github.com/Psiphon-Labs/psiphon-tls"
|
|
tls "github.com/Psiphon-Labs/psiphon-tls"
|
|
|
"github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common"
|
|
"github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/common"
|
|
@@ -119,6 +118,8 @@ type DialParameters struct {
|
|
|
TLSOSSHSNIServerName string
|
|
TLSOSSHSNIServerName string
|
|
|
TLSOSSHObfuscatorPaddingSeed *prng.Seed
|
|
TLSOSSHObfuscatorPaddingSeed *prng.Seed
|
|
|
|
|
|
|
|
|
|
+ ShadowsocksEncryptionKey *shadowsocks.EncryptionKey
|
|
|
|
|
+
|
|
|
SelectedUserAgent bool
|
|
SelectedUserAgent bool
|
|
|
UserAgent string
|
|
UserAgent string
|
|
|
|
|
|
|
@@ -628,6 +629,14 @@ func MakeDialParameters(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if !isReplay && protocol.TunnelProtocolUsesShadowsocks(dialParams.TunnelProtocol) {
|
|
|
|
|
+ // TODO: will ShadowsocksEncryptionKey work with replay?
|
|
|
|
|
+ dialParams.ShadowsocksEncryptionKey, err = shadowsocks.NewEncryptionKey(shadowsocks.CHACHA20IETFPOLY1305, dialParams.ServerEntry.SshShadowsocksKey)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, errors.Trace(err)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if !isReplay || !replayFragmentor {
|
|
if !isReplay || !replayFragmentor {
|
|
|
dialParams.FragmentorSeed, err = prng.NewSeed()
|
|
dialParams.FragmentorSeed, err = prng.NewSeed()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -1711,19 +1720,9 @@ func (dialParams *DialParameters) GetTLSOSSHConfig(config *Config) *TLSTunnelCon
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (dialParams *DialParameters) GetShadowsocksConfig() *ShadowsockConfig {
|
|
func (dialParams *DialParameters) GetShadowsocksConfig() *ShadowsockConfig {
|
|
|
-
|
|
|
|
|
- key, err := shadowsocks.NewEncryptionKey(shadowsocks.CHACHA20IETFPOLY1305, dialParams.ServerEntry.SshShadowsocksKey)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- // TODO: parse key in MakeDialParameters
|
|
|
|
|
- panic(err)
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
return &ShadowsockConfig{
|
|
return &ShadowsockConfig{
|
|
|
- endpoint: &transport.TCPEndpoint{
|
|
|
|
|
- Address: dialParams.DirectDialAddress,
|
|
|
|
|
- // Dialer: net.Dialer{}, // TODO: pass in custom TLS dialer?
|
|
|
|
|
- },
|
|
|
|
|
- key: key,
|
|
|
|
|
|
|
+ dialAddr: dialParams.DirectDialAddress,
|
|
|
|
|
+ key: dialParams.ShadowsocksEncryptionKey,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|