code: func (s *Signatory) DecryptKey(fn PassphraseFetcher) error {
  	if s.Entity == nil {
  		return errors.New("private key not found")
  	} else if s.Entity.PrivateKey == nil {
  		return errors.New("provided key is not a private key")
  	}
  
  	// Nothing else to do if key is not encrypted.
  	if !s.Entity.PrivateKey.Encrypted {
  		return nil
  	}
  
  	fname := "Unknown"
  	for i := range s.Entity.Identities {
  		if i != "" {
  			fname = i
  			break
  		}
  	}
  
  	p, err := fn(fname)
  	if err != nil {
  		return err
  	}
  
  	return s.Entity.PrivateKey.Decrypt(p)
  }
docs: // DecryptKey decrypts a private key in the Signatory.
  //
  // If the key is not encrypted, this will return without error.
  //
  // If the key does not exist, this will return an error.
  //
  // If the key exists, but cannot be unlocked with the passphrase returned by
  // the PassphraseFetcher, this will return an error.
  //
  // If the key is successfully unlocked, it will return nil.