code: func (x *XC) decryptPrivateKey(ctx context.Context, recp *keyring.PrivateKey) error {
  	fp := recp.Fingerprint()
  
  	for i := 0; i < maxUnlockAttempts; i++ {
  		// retry asking for key in case it's wrong
  		passphrase, err := x.client.Passphrase(ctx, fp, fmt.Sprintf("Unlock private key %s", recp.Fingerprint()))
  		if err != nil {
  			return errors.Wrapf(err, "failed to get passphrase from agent: %s", err)
  		}
  
  		if err = recp.Decrypt(passphrase); err == nil {
  			// passphrase is correct, the key should now be decrypted
  			return nil
  		}
  
  		// decryption failed, clear cache and wait a moment before trying again
  		if err := x.client.Remove(ctx, fp); err != nil {
  			return errors.Wrapf(err, "failed to clear cache")
  		}
  		time.Sleep(10 * time.Millisecond)
  	}
  
  	return fmt.Errorf("failed to unlock private key '%s' after %d retries", fp, maxUnlockAttempts)
  }
docs: // decryptPrivateKey will ask the agent to unlock the private key