working
This commit is contained in:
56
pkg/protocol/crypto_test.go
Normal file
56
pkg/protocol/crypto_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package protocol
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGenerateKeyNonce(t *testing.T) {
|
||||
// Vectors from ts3j EncryptionTest.java
|
||||
ivStructBase64 := "/rn6nR71hV8eFl+15WO68fRU8pOCBw3t0FmcG5c7WNxIkeZ1NtaWTVMBde0cdU5tTKwOl8sE6gpHjnCEF4hhDw=="
|
||||
expectedKeyBase64 := "BF+lO776+e45u+qYAOHihg=="
|
||||
expectedNonceBase64 := "1IVcTMuizpDHjQgn2yGCgg=="
|
||||
|
||||
ivStruct, _ := base64.StdEncoding.DecodeString(ivStructBase64)
|
||||
expectedKey, _ := base64.StdEncoding.DecodeString(expectedKeyBase64)
|
||||
expectedNonce, _ := base64.StdEncoding.DecodeString(expectedNonceBase64)
|
||||
|
||||
// CryptoState setup
|
||||
crypto := &CryptoState{
|
||||
SharedIV: ivStruct,
|
||||
GenerationID: 0,
|
||||
}
|
||||
|
||||
// Packet Header setup
|
||||
// Packet ID = 1
|
||||
// Type = COMMAND (2)
|
||||
// Flags = NEW_PROTOCOL (0x20)
|
||||
// Type in Header struct contains (Type | Flags)
|
||||
// byte(2) | byte(0x20) = 0x22
|
||||
|
||||
header := &PacketHeader{
|
||||
PacketID: 1,
|
||||
Type: uint8(PacketTypeCommand) | PacketFlagNewProtocol,
|
||||
}
|
||||
// Note: PacketTypeCommand is 0x02. PacketFlagNewProtocol is 0x20.
|
||||
// Header.Type is uint8.
|
||||
|
||||
// Generate (Client -> Server = true)
|
||||
// ts3j test uses ProtocolRole.CLIENT which maps to 0x31 for temporaryByteBuffer?
|
||||
// PacketTransformation.java: (header.getRole() == ProtocolRole.SERVER ? 0x30 : 0x31)
|
||||
// If EncryptionTest creates Packet(ProtocolRole.CLIENT), then header role is CLIENT.
|
||||
// So byte is 0x31.
|
||||
// In my crypto.go, GenerateKeyNonce(..., isClientToServer bool).
|
||||
// If client sends, isClientToServer should be true. (maps to 0x31).
|
||||
|
||||
key, nonce := crypto.GenerateKeyNonce(header, true)
|
||||
|
||||
if !reflect.DeepEqual(key, expectedKey) {
|
||||
t.Errorf("Key mismatch.\nGot: %x\nWant: %x", key, expectedKey)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(nonce, expectedNonce) {
|
||||
t.Errorf("Nonce mismatch.\nGot: %x\nWant: %x", nonce, expectedNonce)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user