aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Make code conforming to rustfmt's expectationsDaniel Mueller2018-12-17
| | | | | | | | | | | | | | An automated code formatter can help tremendously in reducing the amount of cognitive energy wasted on thinking about the "best" formatting of code as well as the number of nitpicks reviews typically get -- the format is machine checked (and enforced) and there is usually little to no discussion about the validity. To reach the goal of having such automated enforcement, we want to run the rustfmt tool as part of the CI pipeline. With rustfmt having reached 1.0 recently, the believe is that by now the formatting is reasonably stable and usable for this purpose. In that light, this change formats the code using rustfmt and prepares for such an automated style check.
* Add clippy target to CI/CD pipelineDaniel Mueller2018-12-17
| | | | | This patch adds a new target to the pipeline that installs clippy and then uses it to check for various potential problems in the crate.
* Fix two clippy warningsDaniel Mueller2018-12-17
| | | | | | | After the switch to using the nitrokey crate for communication with the device, we have to warnings standing in the way of enabling clippy unconditionally for the nitrocli crate. This change fixes those two warnings.
* Add badges for crates.io and minimum rustc versionDaniel Mueller2018-12-16
| | | | | | | | | | | This change adds another two badges to the repository. The first one simply lists the most recent version of the crate as published on crates.io. The second one states the minimum version of rustc that is required for building. We have recently switched to using Rust 2018 and with that we have a requirement for version 1.31 of the toolchain. In the future the hope is that now that we have a proper CI/CD pipeline based off of Docker images we should be able to build on past versions of Rust, even if they are not used during development.
* Add gitlab-ci.yml configuration fileDaniel Mueller2018-12-16
| | | | | | | | | | | | | | | | | | This change adds a configuration file for the Gitlab CI/CD pipeline to the repository. This file (directly or indirectly) controls the environment in which to build, what exactly to build, and ultimately would also be used to define what tests to run. With the pipeline in place the change also adds a badge indicating the status of the build on the project's front page. The following other CI services have been evaluated or tested and found to be insufficient for the needs at hand: - Travis CI: Does not support configuration in a directory other than the repository root - Cirrus CI: Has the same problem - Semaphore: Does not support Rust - Circle CI: Does not support Rust - Google Cloud Build: Pretty much strictly a paid service
* Rename libnitrokey to nitrokeyRobin Krahl2018-12-17
| | | | | | | Currently, the nitrokey crate is renamed to libnitrokey in Cargo.toml as there used to exist a nitrokey module in this crate. As this module does no longer exist and is not likely to return, this patch removes the customized name for the nitrokey crate.
* Remove unused dependenciesRobin Krahl2018-12-17
| | | | | | | | | This patch removes all dependencies that are no longer required since the hidapi communication is replaced by libnitrokey. Delete subrepo hid/:hid Delete subrepo hidapi-sys/:hidapi-sys Delete subrepo pkg-config/:pkg-config
* Port the status command to libnitrokeyRobin Krahl2018-12-17
| | | | | | This patch removes the raw hidapi implementation of the status command and all utility methods that are no longer needed. With this patch, all device communication is performed using libnitrokey.
* Port the open and close commands to libnitrokeyRobin Krahl2018-12-17
| | | | | | | | | | | | | | This patch removes the raw hidapi implementations of the Enable Encrypted Volume and Disable Encrypted Volume commands and replaces them with the methods enable_encrypted_volume and disable_encrypted_volume of the Storage struct provided by the nitrokey trait. To provide some context to the error messages, the errors are wrapped using the map_err method of the Result enum and the get_error function that combines a nitrokey error code and a string into a nitrocli error. It would be more idiomatic to define a conversion from a nitrokey error to a nitrocli error, but then we would lose information about the context of the error.
* Add nitrokey as a dependency to nitrocliRobin Krahl2018-12-17
| | | | | | | | | | | | | | | The nitrokey crate provides a simple interface to the Nitrokey Storage and the Nitrokey Pro based on the libnitrokey library developed by Nitrokey UG. The low-level bindings to this library are available in the nitrokey-sys crate. This patch adds version v0.2.1 of the nitrokey crate as a dependency for nitrocli. It includes the indirect dependencies nitrokey-sys (version 3.4.1) and rand (version 0.4.3). Import subrepo nitrokey/:nitrokey at 2eccc96ceec2282b868891befe9cda7f941fbe7b Import subrepo nitrokey-sys/:nitrokey-sys at f1a11ebf72610fb9cf80ac7f9f147b4ba1a5336f Import subrepo rand/:rand at d7d5da49daf7ceb3e5940072940d495cced3a1b3
* Link Arch package in READMERobin Krahl2018-12-17
| | | | | | This change adds a link to the nitrocli package for Arch Linux to the README. The package is currently available in the Arch User Repository (AUR).
* Bump version to 0.1.3Daniel Mueller2018-12-11
| | | | | | | | | | | | | | | | This change bumps the version of the crate to 0.1.3. The following notable changes have been made since 0.1.2: - Show PIN related errors through pinentry native reporting mechanism instead of emitting them to stdout - Added a man page (nitrocli(1)) for the program to the repository - Adjusted program to use Rust Edition 2018 - Applied a couple of clippy reported suggestions - Added categories to Cargo.toml - Changed dependency version requirements to be less strict (only up to the minor version and not the patch level) - Bumped pkg-config dependency to 0.3.14 - Bumped libc dependency to 0.2.45 - Bumped cc dependency to 1.0.25
* Enable more lintsDaniel Mueller2018-12-11
| | | | | | | | Given that development is picking up speed again we should accept all the help we get from the compiler to catch issues as early as possible. To that end, this change enables more lints for the program. As "usual", lints that are suspected to potentially change in future versions of Rust are reported as warnings and not errors.
* Add a nitrocli(1) man pageRobin Krahl2018-12-14
|
* Add a .gitignore fileRobin Krahl2018-12-13
| | | | | This patch adds a .gitignore file that ignores the target directory that is created by cargo during compilation and swap files created by vim.
* Add Cargo.toml categoriesDaniel Mueller2018-12-11
| | | | | | | | | For a while now Cargo has supported the specification of categories in the Cargo.toml file and crates.io will actually honor those categories and show case the crate in them. With this change we specify the four categories this crate is believed to fit in the best: 'command-line-utilities', 'authentication', 'cryptography', and 'hardware-support'.
* Compile program with 2018 Edition of RustDaniel Mueller2018-12-11
| | | | | | | With the 1.31 release of Rust support for Edition 2018 has reached the stable tool chain. This change enables compilation based off of this new edition for the crate. This change resolves issue #6.
* Make hidden lifetime parameters explicitDaniel Mueller2018-12-10
| | | | | | | | | | | | | With a recent Rust version upgrade hidden lifetime parameters cause a warning of the form: > warning: hidden lifetime parameters in types are deprecated > --> src/error.rs:58:25 > | > 58 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { > | ^^^^^^^^^^^^^^- help: indicate the anonymous lifetime: `<'_>` This change adjusts the code to make those lifetimes explicit (while keeping them anonymous).
* Enable rust_2018_idioms lintDaniel Mueller2018-12-10
| | | | | | | | This change enables the rust_2018_idioms lint which helps enforce the usage of Rust 2018 code idioms. A while back the "impl trait" feature stabilized and along with it trait objects are supposed to be prefixed with "dyn". This change adjusts the code accordingly.
* Enable rust_2018_compatibility lintDaniel Mueller2018-12-10
| | | | | | | | In preparation for the switch to using Rust 2018, this change enables the rust_2018_compatibility lint. Along with that enablement we fix the warnings emitted by it, which evolve around the module system changes Rust has gone through and that require us to prefix initial uses of crate local modules with "crate".
* Add change log detailing the changes between releasesDaniel Mueller2018-12-11
| | | | | | | | | | In order for users to decide whether an update of the program is justified (or, to potentially help in identifying changes that resulted in a regression), it is often a good idea to provide a brief summary of all the changes that went into a particular release. With this change we add a change log for the program to the repository. Through a bit of code archeology the log stretches back to the initial release.
* Add doc comment to pinentry::inquire_passphraseRobin Krahl2018-12-11
|
* Add support for multiple PIN typesRobin Krahl2018-12-11
| | | | | | | | Currently, the pinentry module only supports querying the user PIN. The Nitrokey devices also have an admin PIN. This patch adds support for querying multiple PIN types to the pinentry module. While this is currently not used, it will be needed to add support for administrative commands like unlocking the device or changeing the user PIN.
* Show error in pinentry dialog instead of printing to stdoutRobin Krahl2018-12-11
| | | | | | | | | Currently, the error message for a wrong password is printed to the standard output. Yet the standard output might not be visible to the user if they are using the curses frontend for pinentry. Pinentry already supports displaying an error message in the passphrase prompt. This patch moves the error message from the standard output to the pinentry prompt.
* Rename pinentry constants to match the documented namesRobin Krahl2018-12-11
| | | | | | | | The GnuPG documentation [0] refers to the GET_PASSPHRASE arguments as “error message”, “prompt” and “description”. This patch changes the names of the constants for these arguments to match the documented names. [0] https://www.gnupg.org/documentation/manuals/gnupg/Agent-GET_005fPASSPHRASE.html#Agent-GET_005fPASSPHRASE
* Add application name and PIN type to the pinentry cache IDRobin Krahl2018-12-11
| | | | | | | | | | | | This patch adds the application name (nitrocli) and the type of the requested PIN (user PIN) to the cache ID user with pinentry to conform with the GnuPG documentation [0]: > By convention either the hexified fingerprint of the key shall be used > for cache_id or an arbitrary string prefixed with the name of the > calling application and a colon: Like gpg:somestring. [0] https://www.gnupg.org/documentation/manuals/gnupg/Agent-GET_005fPASSPHRASE.html#Agent-GET_005fPASSPHRASE
* Add rustfmt configurationRobin Krahl2018-12-11
| | | | | rustfmt uses four-space indentation per default. This patch adds a configuration file that sets the indentation with to two spaces.
* Update cc crate to 1.0.25Daniel Mueller2018-12-10
| | | | | | This change updates the cc crate to version 1.0.25. Import subrepo cc/:cc at fe0a7acb6d3e22e03bf83bcbf89367be888b5448
* Update libc crate to 0.2.45Daniel Mueller2018-12-10
| | | | | | This change updates the libc crate to version 0.2.45. Import subrepo libc/:libc at f5636fc618f8e16968b3178196d73c94ad9f7b05
* Update pkg-config crate to 0.3.14Daniel Mueller2018-12-10
| | | | | | This change updates the pkg-config crate to version 0.3.14. Import subrepo pkg-config/:pkg-config at f867f8be1babca4d6d9cddc92a817519ae845193
* Specify version requirements in a less strict mannerDaniel Mueller2018-12-10
| | | | | | | | | We try to adhere to the Semantic Versioning convention and expect dependent crates to do the same. So far we have been fairly strict in terms of the specific versions we consume, specifying the full version triple (x.y.z). This change loosens that stance by only specifying the minor version requirement of dependencies, not the patch level (i.e., x.y).
* Fix issues reported by clippyDaniel Mueller2018-02-18
| | | | | The clippy tool has a couple of suggestions on how to improve the code. This change applies them to the project's code base.
* Bump version to 0.1.2Daniel Mueller2018-01-15
|
* Delete subrepo gcc/:gccDaniel Mueller2018-01-15
|
* Update hidapi-sys crate to 0.1.4Daniel Mueller2018-01-15
| | | | | | | | | This change updates the hidapi-sys crate to version 0.1.4. In this version the cc crate (the stable and renamed version of the gcc crate) is used. Import subrepo hidapi-sys/:hidapi-sys at c01043da72c0cac898660017e4c4115278c14369 Import subrepo cc/:cc at 500c65b03775cecf55bd358e616963bc3222acca
* Update libc crate to 0.2.36Daniel Mueller2018-01-15
| | | | Import subrepo libc/:libc at 16a0f4a3d6c836f88f50c58f5d0a74a32cbf0193
* Update hid crate to 0.4.1Daniel Mueller2017-11-10
| | | | Import subrepo hid/:hid at 6dc63c8682bd2f027c0d3b4a004b097ca9ac49fa
* Import subrepo hidapi-sys/:hidapi-sys at ↵Daniel Mueller2017-09-16
| | | | aa6e4728e8b87ee3d6580f65826b5803801885c5
* Update libc crate to 0.2.30Daniel Mueller2017-09-16
| | | | Import subrepo libc/:libc at 3520512a8c9cb55661910318a6fb169a75c02a59
* Update gcc crate to 0.3.54Daniel Mueller2017-09-16
| | | | Import subrepo gcc/:gcc at dc329205d54b53a45ab66368aed265b68fe7f261
* Bump version to 0.1.1Daniel Mueller2017-08-17
|
* Remove workaround for incorrect CRC reportingDaniel Mueller2017-08-17
| | | | | | | | | | | In the past the Nitrokey Storage device reported wrong CRC values for certain commands, e.g., the closing of an encrypted volume. This problem was tracked by issue 32: Nitrokey/nitrokey-storage-firmware#32 Firmware version 0.47 includes a fix for the problem. With this change we remove the workaround for the incorrect CRC from nitrocli. By doing so, we require the Nitrokey Storage to be running firmware 0.47 or higher to be properly usable.
* Fix display of firmware versionDaniel Mueller2017-08-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The nitrokey-storage-firmware package defines an array of four byte values to hold information about the firmware version. libnitrokey uses a similar definition but overlays it with some more semantically meaningful information by putting it into a union: union { uint8_t VersionInfo_au8[4]; struct { uint8_t __unused; uint8_t major; uint8_t __unused2; uint8_t minor; } versionInfo; }; In order to derive the firmware version representation for nitrocli we used the same major/minor version definition as libnitrokey. This definition, however, is wrong or at least not in line with how the firmware is versioned officially. This change reworks the way we interpret the version information reported by the Nitrokey Storage device. Like the firmware, we treat the first byte as the major version and the second one as the minor version. The remaining two bytes seem to represent the build number and an internal version according to usage of those fields in nitrokey-storage-firmware but we ignore both to keep the reported string similar to that of the nitrokey-app.
* Explicitly mention versions for local dependenciesDaniel Mueller2017-05-29
| | | | | | | | Although the version information for all the local dependencies can be inferred from various locations, cargo requires an explicit mentioning of the version of each dependency for the 'package' command to be successful. This change adds explicit versions.
* Update libc crate to 0.2.23Daniel Mueller2017-05-29
| | | | | | | The 'libc' create got a couple of updates. This change imports the new code and bumps the version to use. Import subrepo libc/:libc at 7db3fd570dfb41a38fb17116e93679307178103a
* Update gcc crate to 0.3.48Daniel Mueller2017-05-29
| | | | | | | The 'gcc' create got a couple of updates. This change imports the new code and bumps the version to use. Import subrepo gcc/:gcc at 6b41873be3172415efcadbff1187a3ff42428943
* Flush filesystem caches before closing encrypted volumeDaniel Mueller2017-04-09
| | | | | | | | When closing the encrypted volume we could potentially cause the volume to be in an inconsistent state if writes to it were cached by the operating system. To mitigate this case this patch causes an invocation to the sync(2) system call to flush outstanding writes to disk.
* Wait until encrypted volume is opened/closedDaniel Mueller2017-04-09
| | | | | | | | | Until now we treated any response but "ok" and "idle" to the encrypted volume opening command as an error and reported it. However, the opening process is a potentially long running and it is very likely that the nitrokey reports a couple of "busy" messages. This change implements the logic to wait until the nitrokey either reports an error or a successful open.
* Add 'clear' commandDaniel Mueller2017-04-09
| | | | | | | | | | We currently unconditionally use gpg-agent to enter the PIN to use when opening the encrypted volume. The agent has the advantage of caching the password for us so that subsequent invocations against the same cache entry can be served without user interaction. For various reasons, however, it can be desirable to have the ability to remove this entry from the cache. This change introduces a new command 'clear' that achieves precisely this task.
* Detect wrong password during 'open' commandDaniel Mueller2017-04-09
| | | | | | | | | | When a wrong password is entered when attempting to open the encrypted volume the nitrokey will report that in the form of an error. In such a case we should retry the operation after asking the user for the corrected password. This change implements this logic. Note that because we use gpg-agent for the PIN inquiry and because it caches passwords by default we must make sure to clear the cache before retrying.