MCPcopy Create free account
hub / github.com/Mister-leo/fssh / SignWithFlags

Method SignWithFlags

internal/agent/secure_agent.go:145–207  ·  view source on GitHub ↗

Support RSA-SHA2 algorithms when requested by the client.

(pubkey ssh.PublicKey, data []byte, flags xagent.SignatureFlags)

Source from the content-addressed store, hash-verified

143
144// Support RSA-SHA2 algorithms when requested by the client.
145func (a *secureAgent) SignWithFlags(pubkey ssh.PublicKey, data []byte, flags xagent.SignatureFlags) (*ssh.Signature, error) {
146 fp := ssh.FingerprintSHA256(pubkey)
147
148 // 动态加载最新的密钥列表
149 metas, err := a.loadMetas()
150 if err != nil {
151 return nil, err
152 }
153
154 var alias string
155 for _, m := range metas {
156 if m.Fingerprint == fp {
157 alias = m.Alias
158 break
159 }
160 }
161 if alias == "" {
162 return nil, errors.New("key not found")
163 }
164
165 // 使用 AuthProvider 解锁 master key
166 mk, err := a.authProvider.UnlockMasterKey()
167 if err != nil {
168 return nil, fmt.Errorf("认证失败: %w", err)
169 }
170
171 rec, err := store.LoadDecryptedRecord(alias, mk)
172 if err != nil {
173 return nil, err
174 }
175 priv, err := x509.ParsePKCS8PrivateKey(rec.PKCS8DER)
176 if err != nil {
177 return nil, err
178 }
179 signer, err := ssh.NewSignerFromKey(priv)
180 if err != nil {
181 return nil, err
182 }
183
184 if algSigner, ok := signer.(ssh.AlgorithmSigner); ok {
185 algo := ""
186 if (flags & xagent.SignatureFlagRsaSha512) != 0 {
187 algo = "rsa-sha2-512"
188 } else if (flags & xagent.SignatureFlagRsaSha256) != 0 {
189 algo = "rsa-sha2-256"
190 }
191 if algo != "" {
192 log.Debug("SSH 签名 (RSA-SHA2)", map[string]interface{}{
193 "fingerprint": fp,
194 "algorithm": algo,
195 "flags": flags,
196 })
197 return algSigner.SignWithAlgorithm(rand.Reader, data, algo)
198 }
199 }
200
201 log.Debug("SSH 签名 (fallback)", map[string]interface{}{
202 "fingerprint": fp,

Callers

nothing calls this directly

Calls 5

loadMetasMethod · 0.95
LoadDecryptedRecordFunction · 0.92
DebugFunction · 0.92
SignMethod · 0.80
UnlockMasterKeyMethod · 0.65

Tested by

no test coverage detected