From 21da2d9b3282cf83f186cf4e8e2f72b0e334c91f Mon Sep 17 00:00:00 2001 From: lordwelch Date: Mon, 4 May 2020 03:53:25 -0700 Subject: [PATCH] Implement the ExtendedAgent interface This allows ssh to request sha256 and sha512 signatures --- internal/sshrimpagent/sshrimpagent.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/internal/sshrimpagent/sshrimpagent.go b/internal/sshrimpagent/sshrimpagent.go index 592d836..17c0ba5 100644 --- a/internal/sshrimpagent/sshrimpagent.go +++ b/internal/sshrimpagent/sshrimpagent.go @@ -107,3 +107,25 @@ func (r *sshrimpAgent) Signers() ([]ssh.Signer, error) { r.signer, }, nil } + +func (r *sshrimpAgent) SignWithFlags(key ssh.PublicKey, data []byte, flags agent.SignatureFlags) (*ssh.Signature, error) { + sign, ok := r.signer.(ssh.AlgorithmSigner) + if ok { + if flags&agent.SignatureFlagRsaSha512 == agent.SignatureFlagRsaSha512 { + s, err := sign.SignWithAlgorithm(rand.Reader, data, ssh.SigAlgoRSASHA2512) + if err == nil { + return s, err + } + } + if flags&agent.SignatureFlagRsaSha256 == agent.SignatureFlagRsaSha256 { + s, err := sign.SignWithAlgorithm(rand.Reader, data, ssh.SigAlgoRSASHA2256) + if err == nil { + return s, err + } + } + } + return r.Sign(key, data) +} +func (r *sshrimpAgent) Extension(extensionType string, contents []byte) ([]byte, error) { + return nil, agent.ErrExtensionUnsupported +}