| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package shadowsocks2022
- import (
- "crypto/cipher"
- "github.com/lunixbochs/struc"
- "github.com/v2fly/v2ray-core/v5/common/net"
- "github.com/v2fly/v2ray-core/v5/common/protocol"
- "io"
- )
- //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
- type KeyDerivation interface {
- GetSessionSubKey(effectivePsk, Salt []byte, OutKey []byte) error
- GetIdentitySubKey(effectivePsk, Salt []byte, OutKey []byte) error
- }
- type Method interface {
- GetSessionSubKeyAndSaltLength() int
- GetStreamAEAD(SessionSubKey []byte) (cipher.AEAD, error)
- GenerateEIH(CurrentIdentitySubKey []byte, nextPskHash []byte, out []byte) error
- }
- type ExtensibleIdentityHeaders interface {
- struc.Custom
- }
- type DestinationAddress interface {
- net.Address
- }
- type RequestSalt interface {
- struc.Custom
- isRequestSalt()
- Bytes() []byte
- FillAllFrom(reader io.Reader) error
- }
- type TCPRequestHeader1PreSessionKey struct {
- Salt RequestSalt
- EIH ExtensibleIdentityHeaders
- }
- type TCPRequestHeader2FixedLength struct {
- Type byte
- Timestamp uint64
- HeaderLength uint16
- }
- type TCPRequestHeader3VariableLength struct {
- DestinationAddress DestinationAddress
- Contents struct {
- PaddingLength uint16 `struc:"sizeof=Padding"`
- Padding []byte
- }
- }
- type TCPRequestHeader struct {
- PreSessionKeyHeader TCPRequestHeader1PreSessionKey
- FixedLengthHeader TCPRequestHeader2FixedLength
- Header TCPRequestHeader3VariableLength
- }
- type TCPResponseHeader1PreSessionKey struct {
- Salt RequestSalt
- }
- type TCPResponseHeader2FixedLength struct {
- Type byte
- Timestamp uint64
- RequestSalt RequestSalt
- InitialPayloadLength uint16
- }
- type TCPResponseHeader struct {
- PreSessionKeyHeader TCPResponseHeader1PreSessionKey
- Header TCPResponseHeader2FixedLength
- }
- const TCPHeaderTypeClientToServerStream = byte(0x00)
- const TCPHeaderTypeServerToClientStream = byte(0x01)
- const TCPMinPaddingLength = 0
- const TCPMaxPaddingLength = 900
- var addrParser = protocol.NewAddressParser(
- protocol.AddressFamilyByte(0x01, net.AddressFamilyIPv4),
- protocol.AddressFamilyByte(0x04, net.AddressFamilyIPv6),
- protocol.AddressFamilyByte(0x03, net.AddressFamilyDomain),
- )
|