66 lines
2.3 KiB
Go
66 lines
2.3 KiB
Go
//Copyright 2013 Thomson Reuters Global Resources. BSD License please see License file for more information
|
|
|
|
package ntlm
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestDecodeChallenge(t *testing.T) {
|
|
challengeMessage := "TlRMTVNTUAACAAAAAAAAADgAAADzgpjiuaopAbx9ejQAAAAAAAAAAKIAogA4AAAABQLODgAAAA8CAA4AUgBFAFUAVABFAFIAUwABABwAVQBLAEIAUAAtAEMAQgBUAFIATQBGAEUAMAA2AAQAFgBSAGUAdQB0AGUAcgBzAC4AbgBlAHQAAwA0AHUAawBiAHAALQBjAGIAdAByAG0AZgBlADAANgAuAFIAZQB1AHQAZQByAHMALgBuAGUAdAAFABYAUgBlAHUAdABlAHIAcwAuAG4AZQB0AAAAAAA="
|
|
challengeData, err := base64.StdEncoding.DecodeString(challengeMessage)
|
|
|
|
if err != nil {
|
|
t.Error("Could not base64 decode message data")
|
|
}
|
|
|
|
challenge, err := ParseChallengeMessage(challengeData)
|
|
|
|
if err != nil || challenge == nil {
|
|
t.Error("Failed to parse challenge message " + err.Error())
|
|
}
|
|
|
|
if challenge.TargetName.Len != 0 || challenge.TargetName.MaxLen != 0 || challenge.TargetName.Offset != 56 {
|
|
values := fmt.Sprintf("TargetName Len:%v MaxLen:%v Offset:%v", challenge.TargetName.Len, challenge.TargetName.MaxLen, challenge.TargetName.Offset)
|
|
t.Error("Failed to parse Target Name in challenge: " + values)
|
|
}
|
|
|
|
if challenge.NegotiateFlags != uint32(3801645811) {
|
|
t.Errorf("Challenge negotiate flags not correct should be %v got %d", uint32(3801645811), challenge.NegotiateFlags)
|
|
}
|
|
|
|
serverChallenge, err := hex.DecodeString("B9AA2901BC7D7A34")
|
|
if !bytes.Equal(challenge.ServerChallenge, serverChallenge) {
|
|
hex := hex.EncodeToString(challenge.ServerChallenge)
|
|
t.Error("Server challenge is not correct '" + hex + "'")
|
|
}
|
|
|
|
if challenge.Version.ProductMajorVersion != 5 || challenge.Version.ProductMinorVersion != 2 || challenge.Version.ProductBuild != 3790 || challenge.Version.NTLMRevisionCurrent != 15 {
|
|
t.Error("Version information is not correct: '" + challenge.Version.String() + "'")
|
|
}
|
|
|
|
if len(challenge.Payload) != int(challenge.TargetInfoPayloadStruct.Len) {
|
|
t.Error("Payload length is not long enough")
|
|
}
|
|
|
|
challenge.String()
|
|
|
|
outBytes := challenge.Bytes()
|
|
|
|
if len(outBytes) > 0 {
|
|
reparsed, err := ParseChallengeMessage(outBytes)
|
|
if err != nil {
|
|
t.Error("Could not re-parse challenge message")
|
|
}
|
|
if reparsed.String() != challenge.String() {
|
|
t.Error("Reparsed message is not the same")
|
|
}
|
|
} else {
|
|
t.Error("Invalid challenge messsage bytes")
|
|
}
|
|
}
|