encoding

package
v1.8.7 Latest Latest
Warning

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

Go to latest
Published: Dec 27, 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