mirror of https://github.com/cbeuw/Cloak
Use ENUM constants for encryption methods
This commit is contained in:
parent
e9a3c29429
commit
c276f504b5
|
|
@ -20,6 +20,12 @@ var putU32 = binary.BigEndian.PutUint32
|
||||||
|
|
||||||
const HEADER_LEN = 12
|
const HEADER_LEN = 12
|
||||||
|
|
||||||
|
const (
|
||||||
|
E_METHOD_PLAIN = iota
|
||||||
|
E_METHOD_AES_GCM
|
||||||
|
E_METHOD_CHACHA20_POLY1305
|
||||||
|
)
|
||||||
|
|
||||||
func MakeObfs(salsaKey [32]byte, payloadCipher cipher.AEAD) Obfser {
|
func MakeObfs(salsaKey [32]byte, payloadCipher cipher.AEAD) Obfser {
|
||||||
obfs := func(f *Frame, buf []byte) (int, error) {
|
obfs := func(f *Frame, buf []byte) (int, error) {
|
||||||
var extraLen uint8
|
var extraLen uint8
|
||||||
|
|
@ -133,9 +139,9 @@ func GenerateObfs(encryptionMethod byte, sessionKey []byte) (obfuscator *Obfusca
|
||||||
|
|
||||||
var payloadCipher cipher.AEAD
|
var payloadCipher cipher.AEAD
|
||||||
switch encryptionMethod {
|
switch encryptionMethod {
|
||||||
case 0x00:
|
case E_METHOD_PLAIN:
|
||||||
payloadCipher = nil
|
payloadCipher = nil
|
||||||
case 0x01:
|
case E_METHOD_AES_GCM:
|
||||||
var c cipher.Block
|
var c cipher.Block
|
||||||
c, err = aes.NewCipher(sessionKey)
|
c, err = aes.NewCipher(sessionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -145,7 +151,7 @@ func GenerateObfs(encryptionMethod byte, sessionKey []byte) (obfuscator *Obfusca
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case 0x02:
|
case E_METHOD_CHACHA20_POLY1305:
|
||||||
payloadCipher, err = chacha20poly1305.New(sessionKey)
|
payloadCipher, err = chacha20poly1305.New(sessionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ func TestGenerateObfs(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("plain", func(t *testing.T) {
|
t.Run("plain", func(t *testing.T) {
|
||||||
obfuscator, err := GenerateObfs(0x00, sessionKey)
|
obfuscator, err := GenerateObfs(E_METHOD_PLAIN, sessionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to generate obfuscator %v", err)
|
t.Errorf("failed to generate obfuscator %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -47,7 +47,7 @@ func TestGenerateObfs(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("aes-gcm", func(t *testing.T) {
|
t.Run("aes-gcm", func(t *testing.T) {
|
||||||
obfuscator, err := GenerateObfs(0x01, sessionKey)
|
obfuscator, err := GenerateObfs(E_METHOD_AES_GCM, sessionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to generate obfuscator %v", err)
|
t.Errorf("failed to generate obfuscator %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -55,7 +55,7 @@ func TestGenerateObfs(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("chacha20-poly1305", func(t *testing.T) {
|
t.Run("chacha20-poly1305", func(t *testing.T) {
|
||||||
obfuscator, err := GenerateObfs(0x02, sessionKey)
|
obfuscator, err := GenerateObfs(E_METHOD_CHACHA20_POLY1305, sessionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to generate obfuscator %v", err)
|
t.Errorf("failed to generate obfuscator %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ func TestRecvDataFromRemote(t *testing.T) {
|
||||||
sessionKey := make([]byte, 32)
|
sessionKey := make([]byte, 32)
|
||||||
rand.Read(sessionKey)
|
rand.Read(sessionKey)
|
||||||
t.Run("plain ordered", func(t *testing.T) {
|
t.Run("plain ordered", func(t *testing.T) {
|
||||||
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_PLAIN, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -58,7 +58,7 @@ func TestRecvDataFromRemote(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("aes-gcm ordered", func(t *testing.T) {
|
t.Run("aes-gcm ordered", func(t *testing.T) {
|
||||||
obfuscator, _ := GenerateObfs(0x01, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_AES_GCM, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -81,7 +81,7 @@ func TestRecvDataFromRemote(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("chacha20-poly1305 ordered", func(t *testing.T) {
|
t.Run("chacha20-poly1305 ordered", func(t *testing.T) {
|
||||||
obfuscator, _ := GenerateObfs(0x02, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_CHACHA20_POLY1305, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -105,7 +105,7 @@ func TestRecvDataFromRemote(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("plain unordered", func(t *testing.T) {
|
t.Run("plain unordered", func(t *testing.T) {
|
||||||
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_PLAIN, sessionKey)
|
||||||
seshConfigUnordered.Obfuscator = obfuscator
|
seshConfigUnordered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -146,7 +146,7 @@ func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) {
|
||||||
rand.Read(sessionKey)
|
rand.Read(sessionKey)
|
||||||
|
|
||||||
b.Run("plain", func(b *testing.B) {
|
b.Run("plain", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x00, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_PLAIN, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -159,7 +159,7 @@ func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) {
|
||||||
})
|
})
|
||||||
|
|
||||||
b.Run("aes-gcm", func(b *testing.B) {
|
b.Run("aes-gcm", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x01, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_AES_GCM, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
@ -172,7 +172,7 @@ func BenchmarkRecvDataFromRemote_Ordered(b *testing.B) {
|
||||||
})
|
})
|
||||||
|
|
||||||
b.Run("chacha20-poly1305", func(b *testing.B) {
|
b.Run("chacha20-poly1305", func(b *testing.B) {
|
||||||
obfuscator, _ := GenerateObfs(0x02, sessionKey)
|
obfuscator, _ := GenerateObfs(E_METHOD_CHACHA20_POLY1305, sessionKey)
|
||||||
seshConfigOrdered.Obfuscator = obfuscator
|
seshConfigOrdered.Obfuscator = obfuscator
|
||||||
sesh := MakeSession(0, seshConfigOrdered)
|
sesh := MakeSession(0, seshConfigOrdered)
|
||||||
n, _ := sesh.Obfs(f, obfsBuf)
|
n, _ := sesh.Obfs(f, obfsBuf)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue