tightened up some const types

This commit is contained in:
Russ Magee 2018-09-17 23:07:04 -07:00
parent 8b0b833d6e
commit b810fa7f4a
5 changed files with 39 additions and 36 deletions

View file

@ -13,9 +13,10 @@ const (
//KEX_DH //KEX_DH
//KEX_ETC //KEX_ETC
) )
// Sent from client to server in order to specify which
// algo shall be used (eg., HerraduraKEx, [TODO: others...])
type KEXAlg uint8
// const CSExtendedCode - extended (>255 UNIX exit status) codes
// This indicate channel-related or internal errors
const ( const (
CSENone = 32 + iota CSENone = 32 + iota
CSEBadAuth // Failed login password CSEBadAuth // Failed login password
@ -24,6 +25,9 @@ const (
CSEExecFail // cmd.Start() (exec) failed CSEExecFail // cmd.Start() (exec) failed
CSEPtyExecFail // pty.Start() (exec w/pty) failed CSEPtyExecFail // pty.Start() (exec w/pty) failed
) )
// Extended (>255 UNIX exit status) codes
// This indicate channel-related or internal errors
type CSExtendedCode uint32
const ( const (
CSONone = iota // No error, normal packet CSONone = iota // No error, normal packet
@ -32,6 +36,23 @@ const (
CSOExitStatus // Remote cmd exit status CSOExitStatus // Remote cmd exit status
CSOChaff // Dummy packet, do not pass beyond decryption CSOChaff // Dummy packet, do not pass beyond decryption
) )
// Channel status type
type CSOType uint32
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1 const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
const (
CAlgAES256 = iota
CAlgTwofish128 // golang.org/x/crypto/twofish
CAlgBlowfish64 // golang.org/x/crypto/blowfish
CAlgNoneDisallowed
)
// Available ciphers for hkex.Conn
type CSCipherAlg uint32
const (
HmacSHA256 = iota
HmacNoneDisallowed
)
// Available HMACs for hkex.Conn (TODO: not currently used)
type CSHmacAlg uint32

View file

@ -29,20 +29,6 @@ import (
_ "crypto/sha256" _ "crypto/sha256"
) )
// Available ciphers for hkex.Conn
const (
CAlgAES256 = iota
CAlgTwofish128 // golang.org/x/crypto/twofish
CAlgBlowfish64 // golang.org/x/crypto/blowfish
CAlgNoneDisallowed
)
// Available HMACs for hkex.Conn (TODO: not currently used)
const (
HmacSHA256 = iota
HmacNoneDisallowed
)
/* Support functionality to set up encryption after a channel has /* Support functionality to set up encryption after a channel has
been negotiated via hkexnet.go been negotiated via hkexnet.go
*/ */

View file

@ -48,10 +48,6 @@ import (
"blitter.com/go/hkexsh/herradurakex" "blitter.com/go/hkexsh/herradurakex"
) )
// KEx type - sent from client to server in order to specify which
// algo shall be used (eg., HerraduraKEx, [TODO: others...])
type KEX uint8
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
type ( type (
@ -74,7 +70,7 @@ type (
// Conn is a HKex connection - a superset of net.Conn // Conn is a HKex connection - a superset of net.Conn
Conn struct { Conn struct {
kex KEX // KEX alg (typedef uint8) kex KEXAlg
m *sync.Mutex m *sync.Mutex
c net.Conn // which also implements io.Reader, io.Writer, ... c net.Conn // which also implements io.Reader, io.Writer, ...
h *hkex.HerraduraKEx // TODO: make an interface? h *hkex.HerraduraKEx // TODO: make an interface?
@ -86,7 +82,7 @@ type (
chaff ChaffConfig chaff ChaffConfig
closeStat *uint32 // close status (CSOExitStatus) closeStat *CSOType // close status (CSOExitStatus)
r cipher.Stream //read cipherStream r cipher.Stream //read cipherStream
rm hash.Hash rm hash.Hash
w cipher.Stream //write cipherStream w cipher.Stream //write cipherStream
@ -95,11 +91,11 @@ type (
} }
) )
func (hc Conn) GetStatus() uint32 { func (hc Conn) GetStatus() CSOType {
return *hc.closeStat return *hc.closeStat
} }
func (hc *Conn) SetStatus(stat uint32) { func (hc *Conn) SetStatus(stat CSOType) {
*hc.closeStat = stat *hc.closeStat = stat
log.Println("closeStat:", *hc.closeStat) log.Println("closeStat:", *hc.closeStat)
} }
@ -263,7 +259,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc *Conn, err e
// NOTE: kex default of KEX_HERRADURA may be overridden by // NOTE: kex default of KEX_HERRADURA may be overridden by
// future extension args to applyConnExtensions(), which is // future extension args to applyConnExtensions(), which is
// called prior to Dial() // called prior to Dial()
hc = &Conn{m: &sync.Mutex{}, c: c, closeStat: new(uint32), h: hkex.New(0, 0), dBuf: new(bytes.Buffer)} hc = &Conn{m: &sync.Mutex{}, c: c, closeStat: new(CSOType), h: hkex.New(0, 0), dBuf: new(bytes.Buffer)}
hc.applyConnExtensions(extensions...) hc.applyConnExtensions(extensions...)
// TODO: Factor out ALL params following this to helpers for // TODO: Factor out ALL params following this to helpers for
@ -297,7 +293,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc *Conn, err e
func (hc *Conn) Close() (err error) { func (hc *Conn) Close() (err error) {
hc.DisableChaff() hc.DisableChaff()
s := make([]byte, 4) s := make([]byte, 4)
binary.BigEndian.PutUint32(s, *hc.closeStat) binary.BigEndian.PutUint32(s, uint32(*hc.closeStat))
log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat) log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat)
hc.WritePacket(s, CSOExitStatus) hc.WritePacket(s, CSOExitStatus)
err = hc.c.Close() err = hc.c.Close()
@ -395,13 +391,13 @@ func (hl *HKExListener) Accept() (hc Conn, err error) {
// Open raw Conn c // Open raw Conn c
c, err := hl.l.Accept() c, err := hl.l.Accept()
if err != nil { if err != nil {
hc := Conn{m: &sync.Mutex{}, c: nil, h: nil, closeStat: new(uint32), cipheropts: 0, opts: 0, hc := Conn{m: &sync.Mutex{}, c: nil, h: nil, closeStat: new(CSOType), cipheropts: 0, opts: 0,
r: nil, w: nil} r: nil, w: nil}
return hc, err return hc, err
} }
log.Println("[Accepted]") log.Println("[Accepted]")
hc = Conn{ /*kex: from client,*/ m: &sync.Mutex{}, c: c, h: hkex.New(0, 0), closeStat: new(uint32), WinCh: make(chan WinSize, 1), hc = Conn{ /*kex: from client,*/ m: &sync.Mutex{}, c: c, h: hkex.New(0, 0), closeStat: new(CSOType), WinCh: make(chan WinSize, 1),
dBuf: new(bytes.Buffer)} dBuf: new(bytes.Buffer)}
// TODO: Factor out ALL params following this to helpers for // TODO: Factor out ALL params following this to helpers for
@ -517,7 +513,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
hc.WinCh <- WinSize{hc.Rows, hc.Cols} hc.WinCh <- WinSize{hc.Rows, hc.Cols}
} else if ctrlStatOp == CSOExitStatus { } else if ctrlStatOp == CSOExitStatus {
if len(payloadBytes) > 0 { if len(payloadBytes) > 0 {
hc.SetStatus(binary.BigEndian.Uint32(payloadBytes)) hc.SetStatus(CSOType(binary.BigEndian.Uint32(payloadBytes)))
} else { } else {
log.Println("[truncated payload, cannot determine CSOExitStatus]") log.Println("[truncated payload, cannot determine CSOExitStatus]")
hc.SetStatus(CSETruncCSO) hc.SetStatus(CSETruncCSO)

View file

@ -191,7 +191,7 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
// If local side status was OK, use remote side's status // If local side status was OK, use remote side's status
if exitStatus == 0 { if exitStatus == 0 {
exitStatus = conn.GetStatus() exitStatus = uint32(conn.GetStatus())
log.Println("Received remote exitStatus:", exitStatus) log.Println("Received remote exitStatus:", exitStatus)
} }
log.Printf("*** client->server cp finished , status %d ***\n", conn.GetStatus()) log.Printf("*** client->server cp finished , status %d ***\n", conn.GetStatus())

View file

@ -327,7 +327,7 @@ func runShellAs(who, ttype string, cmd string, interactive bool, conn hkexnet.Co
log.Printf("Exit Status: %d", exitStatus) log.Printf("Exit Status: %d", exitStatus)
} }
} }
conn.SetStatus(exitStatus) conn.SetStatus(hkexnet.CSOType(exitStatus))
} }
wg.Wait() // Wait on pty->stdout completion to client wg.Wait() // Wait on pty->stdout completion to client
} }
@ -522,7 +522,7 @@ func main() {
log.Printf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname) log.Printf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)
} else { } else {
log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
hc.SetStatus(cmdStatus) hc.SetStatus(hkexnet.CSOType(cmdStatus))
} }
} else if rec.Op()[0] == 'c' { } else if rec.Op()[0] == 'c' {
// Non-interactive command // Non-interactive command
@ -539,7 +539,7 @@ func main() {
log.Printf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname) log.Printf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)
} else { } else {
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
hc.SetStatus(cmdStatus) hc.SetStatus(hkexnet.CSOType(cmdStatus))
} }
} else if rec.Op()[0] == 's' { } else if rec.Op()[0] == 's' {
// Interactive session // Interactive session
@ -559,7 +559,7 @@ func main() {
log.Printf("[Error spawning shell for %s@%s]\n", rec.Who(), hname) log.Printf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)
} else { } else {
log.Printf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) log.Printf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
hc.SetStatus(cmdStatus) hc.SetStatus(hkexnet.CSOType(cmdStatus))
} }
} else if rec.Op()[0] == 'D' { } else if rec.Op()[0] == 'D' {
// File copy (destination) operation - client copy to server // File copy (destination) operation - client copy to server
@ -576,7 +576,7 @@ func main() {
} else { } else {
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
} }
hc.SetStatus(cmdStatus) hc.SetStatus(hkexnet.CSOType(cmdStatus))
// Send CSOExitStatus *before* client closes channel // Send CSOExitStatus *before* client closes channel
s := make([]byte, 4) s := make([]byte, 4)
@ -598,7 +598,7 @@ func main() {
} else { } else {
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus) log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
} }
hc.SetStatus(cmdStatus) hc.SetStatus(hkexnet.CSOType(cmdStatus))
//fmt.Println("Waiting for EOF from other end.") //fmt.Println("Waiting for EOF from other end.")
//_, _ = hc.Read(nil /*ackByte*/) //_, _ = hc.Read(nil /*ackByte*/)
//fmt.Println("Got remote end ack.") //fmt.Println("Got remote end ack.")