func decrypt(c *cli.Context, file string, fileBytes []byte, output io.Writer) error { store := store(file) tree, err := decryptFile(store, fileBytes, c.Bool("ignore-mac")) if err != nil { return err } if c.String("extract") != "" { v, err := tree.Branch.Truncate(c.String("extract")) if err != nil { return cli.NewExitError(err.Error(), exitInvalidTreePathFormat) } if newBranch, ok := v.(sops.TreeBranch); ok { tree.Branch = newBranch } else { bytes, err := sops.ToBytes(v) if err != nil { return cli.NewExitError(fmt.Sprintf("Error dumping tree: %s", err), exitErrorDumpingTree) } output.Write(bytes) return nil } } out, err := store.Marshal(tree.Branch) if err != nil { return cli.NewExitError(fmt.Sprintf("Error dumping file: %s", err), exitErrorDumpingTree) } _, err = output.Write([]byte(out)) if err != nil { return cli.NewExitError(fmt.Sprintf("Could not write to output stream: %s", err), exitCouldNotWriteOutputFile) } return nil }
func decrypt(c *cli.Context, tree sops.Tree, outputStore sops.Store) ([]byte, error) { tree, _, err := decryptTree(tree, c.Bool("ignore-mac")) if c.String("extract") != "" { v, err := tree.Branch.Truncate(c.String("extract")) if err != nil { return nil, cli.NewExitError(err.Error(), exitInvalidTreePathFormat) } if newBranch, ok := v.(sops.TreeBranch); ok { tree.Branch = newBranch } else { bytes, err := sops.ToBytes(v) if err != nil { return nil, cli.NewExitError(fmt.Sprintf("Error dumping tree: %s", err), exitErrorDumpingTree) } return bytes, nil } } out, err := outputStore.Marshal(tree.Branch) if err != nil { return nil, cli.NewExitError(fmt.Sprintf("Error dumping file: %s", err), exitErrorDumpingTree) } return out, nil }