aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-05-02crypto: Key struct for secure buffersJoe Richey
This commit adds in the crypto package, which will hold all of the security primitives for fscrypt. This first component deals with securely handling keys in memory. To do this in a consistent way across fscrypt, we introduce the Key struct. Any sensitive memory (like keys, passwords, or recovery tokens) in fscrypt will be held in a Key. No code outside of the crypto package should access the Key's data directly. Convenience functions and methods are provided to construct keys from io.Readers (either with fixed length or with variable length) and to access information about the Keys. The most important property of Keys is that the data is locked in memory on construction, and the data is unlocked and wiped when Wipe is called. This happens either by something like "defer key.Wipe()" or through the finalizer. Change-Id: Ice76335f3975efb439b3f1ab605ef34cb7fcb4d6
2017-05-02metadata: get and set policies from goJoe Richey
This commit adds in the ability to get and set policy data from go using the GetPolicy and SetPolicy functions. This is done via a patch of the x/sys/unix package that exposes the filesystem encryption structures. Note that not all the fields of the PolicyData protocol buffer are needed to get and set policies. The wrapped_policy_keys are not used and will be written and read by other components of fscrypt. To run the policy tests, the environment variable BASE_TEST_DIR must be set to a directory for testing on a filesystem that supports encryption. Change-Id: I13b1d983356845f3ffc1945cedf53234218f32e5
2017-05-02vendor: adding in golang.org/x/sys/unix packageJoe Richey joerichey@google.com
This commit adds in the golang.org/x/sys/unix package. This package provides a low-level interface to unix syscalls. We will uses this package instead of the built-in "syscall" package because the syscall package is locked down (https://golang.org/pkg/syscall) and is not exposing any new kernel functionality. In fact, this is actually a patched version of the x/sys/unix package pending review (first part: https://go-review.googlesource.com/c/37943). The version included in this commit exposes all of the filesystem encryption kernel interfaces to Go code. Change-Id: Ic5f9c98b858ccb00db97502c9a60e9249aa8ba38
2017-05-02metadata: introduce protobuf structuresJoe Richey
This commit adds in the metadata package. The primary purpose of this package is to provide the on-disk metadata structures in the form of protocol buffers. This includes: - Policy metadata structure - Protector metadata structure - Config file structure - All necessary sub-structures (wrapped keys, parameters, etc) This commit also adds in an example usage of the Config structure, which represents the structure of the global config file. All the package does at this point is convert between the Config structure and a JSON representation. Here we introduce govendor, which is described more in the README. This means we will have all of our Go dependencies in the vendor subdirectory. This means we will have no Go source dependencies, only dependencies on the build tools (Go and govendor). The README describes this in detail. Note that we commit the generated files. see: https://blog.golang.org/generate Change-Id: Iaacd46666b5d3e4e865a0f4045dd63ed7e3d6f96
2017-05-02vendor: adding in golang/protobuf librariesJoe Richey joerichey@google.com
This commit adds in the two protocol buffer libraries for Go. The github.com/golang/protobuf/proto package will let Go code read and write protocol buffers. The github.com/golang/protobuf/jsonpb package lets Go code output a JSON representation of protocol buffers. These packages are stored in the vendor directory, meaning that they will be imported instead of any installed system packages. Change-Id: I8da8d15864f03a9b3f767a6af18795c8eca64844
2017-05-02util: convenience utilities for fscryptJoe Richey
This commit adds in the util package. This package provides two functions for creating errors. These functions are: - InvalidInputErrorF - bad input from user or caller - SystemErrorF - low level failure It also adds in a small function for converting Go byte slices into C void pointers. This will be very useful for interoperating with C. Change-Id: I87ad7946dd5fa26e28927590aff4bcc9fd5ce4f7
2017-05-02cmd/fscrypt: Initial stub program and docsJoe Richey
This commit adds in a stub fscrypt program. The binary just tells the time and the tests do nothing, but the Makefile will build them! This commit also adds documentation to the README that explains how to get, build, run, test, format, lint, and install the code. Also note that the executable is now in the cmd/fscrypt directory. The library implementing the core functionality will be at the root. This is essentially point 2 of https://medium.com/@benbjohnson/structuring-applications-in-go-3b04be4ff091 Change-Id: Ib7bd782e458bdf3db456beb978be4c75b4734561
2017-04-27Initial Documentation for fscryptJoe Richey
This commit includes the Apache 2.0 License and a README with documentation on how to checkout the code, some context about Linux filesystem encryption, and documentation stubs for fscrypt and fscryptctl. Also adds in a simple .gitignore so we don't commit build files. Change-Id: I99d5f936c9d65516119dd58c81cfa95c1e6243c1
2016-10-26First commit, adding READMEJoe Richey
Change-Id: I32cc74f278b4a19d91106a5cb20d8a9e96fb1351