code: func EncryptFile(ctx context.Context, c *cli.Context) error {
  	if err := initCrypto(); err != nil {
  		return action.ExitError(ctx, action.ExitUnknown, err, "failed to init XC")
  	}
  
  	if c.Bool("stream") {
  		return EncryptFileStream(ctx, c)
  	}
  
  	inFile := c.String("file")
  	if inFile == "" {
  		return action.ExitError(ctx, action.ExitUsage, nil, "need file")
  	}
  
  	recipients := c.StringSlice("recipients")
  	outFile := inFile + ".xc"
  
  	if !fsutil.IsFile(inFile) {
  		return action.ExitError(ctx, action.ExitNotFound, nil, "input file not found")
  	}
  	if fsutil.IsFile(outFile) {
  		return action.ExitError(ctx, action.ExitIO, nil, "output file already exists")
  	}
  
  	plaintext, err := ioutil.ReadFile(inFile)
  	if err != nil {
  		return action.ExitError(ctx, action.ExitIO, err, "failed to read file")
  	}
  	ciphertext, err := crypto.Encrypt(ctx, plaintext, recipients)
  	if err != nil {
  		return action.ExitError(ctx, action.ExitUnknown, err, "failed to encrypt file: %s", err)
  	}
  	if err := ioutil.WriteFile(outFile, ciphertext, 0600); err != nil {
  		return action.ExitError(ctx, action.ExitUnknown, err, "failed to write ciphertext")
  	}
  	return nil
  }
docs: // EncryptFile encrypts a single file