mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-08-24 02:26:48 +08:00
@@ -16,6 +16,7 @@ import (
|
|||||||
|
|
||||||
var MaxNonce = bytes.Repeat([]byte{255}, 12)
|
var MaxNonce = bytes.Repeat([]byte{255}, 12)
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func EncodeHeader(h []byte, t byte, l int) {
|
func EncodeHeader(h []byte, t byte, l int) {
|
||||||
switch t {
|
switch t {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -35,6 +36,7 @@ func EncodeHeader(h []byte, t byte, l int) {
|
|||||||
h[4] = byte(l)
|
h[4] = byte(l)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func DecodeHeader(h []byte) (t byte, l int, err error) {
|
func DecodeHeader(h []byte) (t byte, l int, err error) {
|
||||||
l = int(h[3])<<8 | int(h[4])
|
l = int(h[3])<<8 | int(h[4])
|
||||||
if h[0] == 23 && h[1] == 3 && h[2] == 3 {
|
if h[0] == 23 && h[1] == 3 && h[2] == 3 {
|
||||||
@@ -52,6 +54,7 @@ func DecodeHeader(h []byte) (t byte, l int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func ReadAndDecodeHeader(conn net.Conn) (h []byte, t byte, l int, err error) {
|
func ReadAndDecodeHeader(conn net.Conn) (h []byte, t byte, l int, err error) {
|
||||||
h = make([]byte, 5)
|
h = make([]byte, 5)
|
||||||
if _, err = io.ReadFull(conn, h); err != nil {
|
if _, err = io.ReadFull(conn, h); err != nil {
|
||||||
@@ -61,6 +64,7 @@ func ReadAndDecodeHeader(conn net.Conn) (h []byte, t byte, l int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func ReadAndDiscardPaddings(conn net.Conn) (h []byte, t byte, l int, err error) {
|
func ReadAndDiscardPaddings(conn net.Conn) (h []byte, t byte, l int, err error) {
|
||||||
for {
|
for {
|
||||||
if h, t, l, err = ReadAndDecodeHeader(conn); err != nil || t != 23 {
|
if h, t, l, err = ReadAndDecodeHeader(conn); err != nil || t != 23 {
|
||||||
@@ -72,6 +76,7 @@ func ReadAndDiscardPaddings(conn net.Conn) (h []byte, t byte, l int, err error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func NewAead(c byte, secret, salt, info []byte) (aead cipher.AEAD) {
|
func NewAead(c byte, secret, salt, info []byte) (aead cipher.AEAD) {
|
||||||
key := make([]byte, 32)
|
key := make([]byte, 32)
|
||||||
hkdf.New(sha256.New, secret, salt, info).Read(key)
|
hkdf.New(sha256.New, secret, salt, info).Read(key)
|
||||||
@@ -84,6 +89,7 @@ func NewAead(c byte, secret, salt, info []byte) (aead cipher.AEAD) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:inline
|
||||||
func IncreaseNonce(nonce []byte) {
|
func IncreaseNonce(nonce []byte) {
|
||||||
for i := range 12 {
|
for i := range 12 {
|
||||||
nonce[11-i]++
|
nonce[11-i]++
|
||||||
|
Reference in New Issue
Block a user