Russ Cox c5fd2d4d2b go-ntlm: add go.mod
This file is used by vgo (go get -u golang.org/x/vgo)
and will be understood by Go 1.11 and later too.

Normally a go.mod file lists required dependencies
of a module (think repository), but this module has
no required dependencies, so the file only gives the
module path.

Defining the module path ensures that clients import
the package under its canonical name, not under
alternate casings such as

	import "github.com/thomsonREUTERSeIkOn/go-ntlm"

which would otherwise work (since GitHub answers to that path).

Having a go.mod file also makes it possible to work on
this repository outside GOPATH when using vgo or Go 1.11.
That is, the go.mod file makes it possible to

	git clone https://github.com/ThomsonReutersEikon/go-ntlm
	cd go-ntlm
	vgo build ./...
	vgo test ./...

from anywhere, not just inside GOPATH.
2018-05-24 23:04:54 -04:00
2018-05-24 23:04:54 -04:00
2018-05-24 23:04:54 -04:00
2013-07-26 12:44:48 -04:00
2014-08-22 10:37:12 -07:00

NTLM Implementation for Go

This is a native implementation of NTLM for Go that was implemented using the Microsoft MS-NLMP documentation available at http://msdn.microsoft.com/en-us/library/cc236621.aspx. The library is currently in use and has been tested with connectionless NTLMv1 and v2 with and without extended session security.

Usage Notes

Currently the implementation only supports connectionless (datagram) oriented NTLM. We did not need connection oriented NTLM for our usage and so it is not implemented. However it should be extremely straightforward to implement connection oriented NTLM as all the operations required are present in the library. The major missing piece is the negotiation of capabilities between the client and the server, for our use we hardcoded a supported set of negotiation flags.

Sample Usage as NTLM Client

import "github.com/ThomsonReutersEikon/go-ntlm/ntlm"

session, err = ntlm.CreateClientSession(ntlm.Version2, ntlm.ConnectionlessMode)
session.SetUserInfo("someuser","somepassword","somedomain")

negotiate := session.GenerateNegotiateMessage()

<send negotiate to server>

challenge, err := ntlm.ParseChallengeMessage(challengeBytes)
session.ProcessChallengeMessage(challenge)

authenticate := session.GenerateAuthenticateMessage()

<send authenticate message to server>

Sample Usage as NTLM Server

session, err := ntlm.CreateServerSession(ntlm.Version1, ntlm.ConnectionlessMode)
session.SetUserInfo("someuser","somepassword","somedomain")

challenge := session.GenerateChallengeMessage()

<send challenge to client>

<receive authentication bytes>

auth, err := ntlm.ParseAuthenticateMessage(authenticateBytes)
session.ProcessAuthenticateMessage(auth)

Generating a message MAC

Once a session is created you can generate the Mac for a message using:

message := "this is some message to sign"
sequenceNumber := 100
signature, err := session.Mac([]byte(message), sequenceNumber)

License

Copyright Thomson Reuters Global Resources 2013 Apache License

Description
No description provided
Readme 212 KiB
Languages
Go 100%