func sign(a agent.Agent, b string) { keys, err := a.List() if err != nil { fmt.Println(err) os.Exit(1) } data, err := base64.StdEncoding.DecodeString(b) if err != nil { fmt.Println(err) os.Exit(1) } w := new(tabwriter.Writer) // Format in tab-separated columns with a tab stop of 8. w.Init(os.Stdout, 0, 8, 0, '\t', 0) for i, k := range keys { sig, err := a.Sign(k, data) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Fprintf(w, "%02d: %s %s\n", i, sig.Format, base64.StdEncoding.EncodeToString(sig.Blob)) w.Flush() } }
func sshAgentConfig(userName string, a agent.Agent) (*ssh.ClientConfig, error) { signers, err := a.Signers() if err != nil { return nil, err } return &ssh.ClientConfig{ User: userName, Auth: []ssh.AuthMethod{ ssh.PublicKeys(signers...), }, }, nil }
func listKeys(a agent.Agent) { keys, err := a.List() if err != nil { fmt.Println(err) os.Exit(1) } w := new(tabwriter.Writer) // Format in tab-separated columns with a tab stop of 8. w.Init(os.Stdout, 0, 8, 0, '\t', 0) for i, k := range keys { fmt.Fprintf(w, "%02d: %s\t%s\t%s\n", i, k.Format, base64.StdEncoding.EncodeToString(k.Blob), k.Comment) w.Flush() } }
func verify(a agent.Agent, b string, sFormat string, s string) { keys, err := a.List() if err != nil { fmt.Println(err) os.Exit(1) } data, err := base64.StdEncoding.DecodeString(b) if err != nil { fmt.Println(err) os.Exit(1) } sigData, err := base64.StdEncoding.DecodeString(s) if err != nil { fmt.Println(err) os.Exit(1) } sig := &ssh.Signature{sFormat, sigData} w := new(tabwriter.Writer) // Format in tab-separated columns with a tab stop of 8. w.Init(os.Stdout, 0, 8, 0, '\t', 0) for i, k := range keys { mKey := k.Marshal() verifyKey, err := ssh.ParsePublicKey(mKey) if err != nil { fmt.Println(err.Error()) os.Exit(1) } ok := true err = verifyKey.Verify(data, sig) if err != nil { ok = false } fmt.Fprintf(w, "%02d: verified: %t\n", i, ok) w.Flush() } }