mirror of
https://github.com/yv1ing/ShotRDP.git
synced 2025-09-16 15:10:57 +08:00
100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
package nla
|
|
|
|
import (
|
|
"encoding/asn1"
|
|
|
|
"ShotRDP/grdp/glog"
|
|
)
|
|
|
|
type NegoToken struct {
|
|
Data []byte `asn1:"explicit,tag:0"`
|
|
}
|
|
|
|
type TSRequest struct {
|
|
Version int `asn1:"explicit,tag:0"`
|
|
NegoTokens []NegoToken `asn1:"optional,explicit,tag:1"`
|
|
AuthInfo []byte `asn1:"optional,explicit,tag:2"`
|
|
PubKeyAuth []byte `asn1:"optional,explicit,tag:3"`
|
|
//ErrorCode int `asn1:"optional,explicit,tag:4"`
|
|
}
|
|
|
|
type TSCredentials struct {
|
|
CredType int `asn1:"explicit,tag:0"`
|
|
Credentials []byte `asn1:"explicit,tag:1"`
|
|
}
|
|
|
|
type TSPasswordCreds struct {
|
|
DomainName []byte `asn1:"explicit,tag:0"`
|
|
UserName []byte `asn1:"explicit,tag:1"`
|
|
Password []byte `asn1:"explicit,tag:2"`
|
|
}
|
|
|
|
type TSCspDataDetail struct {
|
|
KeySpec int `asn1:"explicit,tag:0"`
|
|
CardName string `asn1:"explicit,tag:1"`
|
|
ReaderName string `asn1:"explicit,tag:2"`
|
|
ContainerName string `asn1:"explicit,tag:3"`
|
|
CspName string `asn1:"explicit,tag:4"`
|
|
}
|
|
|
|
type TSSmartCardCreds struct {
|
|
Pin string `asn1:"explicit,tag:0"`
|
|
CspData []TSCspDataDetail `asn1:"explicit,tag:1"`
|
|
UserHint string `asn1:"explicit,tag:2"`
|
|
DomainHint string `asn1:"explicit,tag:3"`
|
|
}
|
|
|
|
func EncodeDERTRequest(msgs []Message, authInfo []byte, pubKeyAuth []byte) []byte {
|
|
req := TSRequest{
|
|
Version: 2,
|
|
}
|
|
|
|
if len(msgs) > 0 {
|
|
req.NegoTokens = make([]NegoToken, 0, len(msgs))
|
|
}
|
|
|
|
for _, msg := range msgs {
|
|
token := NegoToken{msg.Serialize()}
|
|
req.NegoTokens = append(req.NegoTokens, token)
|
|
}
|
|
|
|
if len(authInfo) > 0 {
|
|
req.AuthInfo = authInfo
|
|
}
|
|
|
|
if len(pubKeyAuth) > 0 {
|
|
req.PubKeyAuth = pubKeyAuth
|
|
}
|
|
|
|
result, err := asn1.Marshal(req)
|
|
if err != nil {
|
|
glog.Error(err)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func DecodeDERTRequest(s []byte) (*TSRequest, error) {
|
|
treq := &TSRequest{}
|
|
_, err := asn1.Unmarshal(s, treq)
|
|
return treq, err
|
|
}
|
|
func EncodeDERTCredentials(domain, username, password []byte) []byte {
|
|
tpas := TSPasswordCreds{domain, username, password}
|
|
result, err := asn1.Marshal(tpas)
|
|
if err != nil {
|
|
glog.Error(err)
|
|
}
|
|
tcre := TSCredentials{1, result}
|
|
result, err = asn1.Marshal(tcre)
|
|
if err != nil {
|
|
glog.Error(err)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func DecodeDERTCredentials(s []byte) (*TSCredentials, error) {
|
|
tcre := &TSCredentials{}
|
|
_, err := asn1.Unmarshal(s, tcre)
|
|
return tcre, err
|
|
}
|