Help us shape the future of Go! Take the 2026 Go Developer Survey

encoding

package
v1.8.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2023 License: MPL-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Version = byte(1)
)

Variables

View Source
var (
	ErrCommandTooLarge     = newError("Command too large.")
	ErrCommandTypeMismatch = newError("Command type mismatch.")
	ErrInvalidAuth         = newError("Invalid auth.")
	ErrInsufficientLength  = newError("Insufficient length.")
	ErrUnknownCommand      = newError("Unknown command.")
)

Functions

func Authenticate

func Authenticate(b []byte) uint32

Authenticate authenticates a byte array using Fnv hash.

func GenerateChacha20Poly1305Key

func GenerateChacha20Poly1305Key(b []byte) []byte

GenerateChacha20Poly1305Key generates a 32-byte key from a given 16-byte array.

func GenerateChunkNonce

func GenerateChunkNonce(nonce []byte, size uint32) crypto.BytesGenerator

func MarshalCommand

func MarshalCommand(command interface{}, writer io.Writer) error

func UnmarshalCommand

func UnmarshalCommand(cmdID byte, data []byte) (protocol.ResponseCommand, error)

Types

type AEADSizeParser

type AEADSizeParser struct {
	crypto.AEADChunkSizeParser
}

func NewAEADSizeParser

func NewAEADSizeParser(auth *crypto.AEADAuthenticator) *AEADSizeParser

type ClientSession

type ClientSession struct {
	// contains filtered or unexported fields
}

ClientSession stores connection session info for VMess client.

func NewClientSession

func NewClientSession(ctx context.Context, behaviorSeed int64) *ClientSession

NewClientSession creates a new ClientSession.

func (*ClientSession) DecodeResponseBody

func (c *ClientSession) DecodeResponseBody(request *protocol.RequestHeader, reader io.Reader) (buf.Reader, error)

func (*ClientSession) DecodeResponseHeader

func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.ResponseHeader, error)

func (*ClientSession) EncodeRequestBody

func (c *ClientSession) EncodeRequestBody(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)

func (*ClientSession) EncodeRequestHeader

func (c *ClientSession) EncodeRequestHeader(header *protocol.RequestHeader, writer io.Writer) error

type CommandFactory

type CommandFactory interface {
	Marshal(command interface{}, writer io.Writer) error
	Unmarshal(data []byte) (interface{}, error)
}

type CommandSwitchAccountFactory

type CommandSwitchAccountFactory struct{}

func (*CommandSwitchAccountFactory) Marshal

func (f *CommandSwitchAccountFactory) Marshal(command interface{}, writer io.Writer) error

func (*CommandSwitchAccountFactory) Unmarshal

func (f *CommandSwitchAccountFactory) Unmarshal(data []byte) (interface{}, error)

type NoOpAuthenticator

type NoOpAuthenticator struct{}

[DEPRECATED 2023-06]

func (NoOpAuthenticator) NonceSize

func (NoOpAuthenticator) NonceSize() int

func (NoOpAuthenticator) Open

func (NoOpAuthenticator) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error)

Open implements AEAD.Open().

func (NoOpAuthenticator) Overhead

func (NoOpAuthenticator) Overhead() int

func (NoOpAuthenticator) Seal

func (NoOpAuthenticator) Seal(dst, nonce, plaintext, additionalData []byte) []byte

Seal implements AEAD.Seal().

type ServerSession

type ServerSession struct {
	// contains filtered or unexported fields
}

ServerSession keeps information for a session in VMess server.

func NewServerSession

func NewServerSession(validator *vmess.TimedUserValidator, sessionHistory *SessionHistory) *ServerSession

NewServerSession creates a new ServerSession, using the given UserValidator. The ServerSession instance doesn't take ownership of the validator.

func (*ServerSession) DecodeRequestBody

func (s *ServerSession) DecodeRequestBody(request *protocol.RequestHeader, reader io.Reader) (buf.Reader, error)

DecodeRequestBody returns Reader from which caller can fetch decrypted body.

func (*ServerSession) DecodeRequestHeader

func (s *ServerSession) DecodeRequestHeader(reader io.Reader, isDrain bool) (*protocol.RequestHeader, error)

DecodeRequestHeader decodes and returns (if successful) a RequestHeader from an input stream.

func (*ServerSession) EncodeResponseBody

func (s *ServerSession) EncodeResponseBody(request *protocol.RequestHeader, writer io.Writer) (buf.Writer, error)

EncodeResponseBody returns a Writer that auto-encrypt content written by caller.

func (*ServerSession) EncodeResponseHeader

func (s *ServerSession) EncodeResponseHeader(header *protocol.ResponseHeader, writer io.Writer)

EncodeResponseHeader writes encoded response header into the given writer.

type SessionHistory

type SessionHistory struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

SessionHistory keeps track of historical session ids, to prevent replay attacks.

func NewSessionHistory

func NewSessionHistory() *SessionHistory

NewSessionHistory creates a new SessionHistory object.

func (*SessionHistory) Close

func (h *SessionHistory) Close() error

Close implements common.Closable.

type ShakeSizeParser

type ShakeSizeParser struct {
	// contains filtered or unexported fields
}

func NewShakeSizeParser

func NewShakeSizeParser(nonce []byte) *ShakeSizeParser

func (*ShakeSizeParser) Decode

func (s *ShakeSizeParser) Decode(b []byte) (uint16, error)

func (*ShakeSizeParser) Encode

func (s *ShakeSizeParser) Encode(size uint16, b []byte) []byte

func (*ShakeSizeParser) MaxPaddingLen

func (s *ShakeSizeParser) MaxPaddingLen() uint16

func (*ShakeSizeParser) NextPaddingLen

func (s *ShakeSizeParser) NextPaddingLen() uint16

func (*ShakeSizeParser) SizeBytes

func (*ShakeSizeParser) SizeBytes() int32

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL