30 lines
		
	
	
		
			622 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			622 B
		
	
	
	
		
			Go
		
	
	
	
| package ntlmssp
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"encoding/binary"
 | |
| 	"errors"
 | |
| 	"unicode/utf16"
 | |
| )
 | |
| 
 | |
| // helper func's for dealing with Windows Unicode (UTF16LE)
 | |
| 
 | |
| func fromUnicode(d []byte) (string, error) {
 | |
| 	if len(d)%2 > 0 {
 | |
| 		return "", errors.New("Unicode (UTF 16 LE) specified, but uneven data length")
 | |
| 	}
 | |
| 	s := make([]uint16, len(d)/2)
 | |
| 	err := binary.Read(bytes.NewReader(d), binary.LittleEndian, &s)
 | |
| 	if err != nil {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	return string(utf16.Decode(s)), nil
 | |
| }
 | |
| 
 | |
| func toUnicode(s string) []byte {
 | |
| 	uints := utf16.Encode([]rune(s))
 | |
| 	b := bytes.Buffer{}
 | |
| 	binary.Write(&b, binary.LittleEndian, &uints)
 | |
| 	return b.Bytes()
 | |
| }
 |