package ssh
import (
"crypto/rand"
"crypto/rsa"
"encoding/binary"
"golang.org/x/crypto/ssh"
)
func generateSigner() (ssh .Signer , error ) {
key , err := rsa .GenerateKey (rand .Reader , 2048 )
if err != nil {
return nil , err
}
return ssh .NewSignerFromKey (key )
}
func parsePtyRequest(s []byte ) (pty Pty , ok bool ) {
term , s , ok := parseString (s )
if !ok {
return
}
width32 , s , ok := parseUint32 (s )
if !ok {
return
}
height32 , _ , ok := parseUint32 (s )
if !ok {
return
}
pty = Pty {
Term : term ,
Window : Window {
Width : int (width32 ),
Height : int (height32 ),
},
}
return
}
func parseWinchRequest(s []byte ) (win Window , ok bool ) {
width32 , s , ok := parseUint32 (s )
if width32 < 1 {
ok = false
}
if !ok {
return
}
height32 , _ , ok := parseUint32 (s )
if height32 < 1 {
ok = false
}
if !ok {
return
}
win = Window {
Width : int (width32 ),
Height : int (height32 ),
}
return
}
func parseString(in []byte ) (out string , rest []byte , ok bool ) {
if len (in ) < 4 {
return
}
length := binary .BigEndian .Uint32 (in )
if uint32 (len (in )) < 4 +length {
return
}
out = string (in [4 : 4 +length ])
rest = in [4 +length :]
ok = true
return
}
func parseUint32(in []byte ) (uint32 , []byte , bool ) {
if len (in ) < 4 {
return 0 , nil , false
}
return binary .BigEndian .Uint32 (in ), in [4 :], true
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .