1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# nitrokey-rs
A libnitrokey wrapper for Rust providing access to Nitrokey devices.
[Documentation][]
## Compatibility
The required [`libnitrokey`][] version is built from source. The host system
must provide `libhidapi-libusb0` (Linux) or `libhidapi` (non-Linux) in the
default library search path. Depending on your system, you might also have to
install the [Nitrokey udev rules][].
Currently, this crate provides access to the common features of the Nitrokey
Pro and the Nitrokey Storage: general configuration, OTP generation and the
password safe. Basic support for the secure storage on the Nitrokey Storage is
available but still under development.
### Unsupported Functions
The following functions provided by `libnitrokey` are deliberately not
supported by `nitrokey-rs`:
- `NK_get_device_model`. We know which model we connected to, so we can
provide this information without calling `libnitrokey`.
- `NK_get_time`. This method is useless as it will always cause a timestamp
error on the device (see [pull request #114][] for `libnitrokey` for details).
- `NK_get_status`. This method only provides a string representation of
data that can be accessed by other methods (firmware version, serial number,
configuration).
- `NK_get_status_storage_as_string`. This method only provides an incomplete
string representation of the data returned by `NK_get_status_storage`.
- `NK_set_unencrypted_volume_rorw_pin_type_user`,
`NK_set_unencrypted_read_only`, `NK_set_unencrypted_read_write`,
`NK_set_encrypted_read_only` and `NK_set_encrypted_read_write`. These
methods are only relevant for older firmware versions (pre-v0.51). As the
Nitrokey Storage firmware can be updated easily, we do not support these
outdated versions.
## Tests
This crate has tests for different scenarios: Some tests require that no
Nitrokey device is connected, others require a Nitrokey Storage or a Nitrokey
Pro. We use the [`nitrokey-test`][] crate to select the test cases. You can
just run `cargo test` to auto-detect connected Nitrokey devices and to run the
appropriate tests. If you want to manually select the tests, set the
`NITROKEY_TEST_GROUP` environment variable to `nodev` (no device connected),
`pro` (Nitrokey Pro connected) or `storage` (Nitrokey Storage connected).
Note that the tests assume that the device’s passwords are the factory defaults
(admin PIN `12345678`, user PIN `123456`, update password `12345678`) and that
an AES key has been built. Some tests will overwrite the data stored on the
Nitrokey device or perform a factory reset. Never execute the tests if you
unless yout want to destroy all data on all connected Nitrokey devices!
The `totp_no_pin` and `totp_pin` tests can occasionally fail due to bad timing.
## Acknowledgments
Thanks to Nitrokey UG for providing a Nitrokey Storage to support the
development of this crate. Thanks to Daniel Mueller for contributions to
`nitrokey-rs` and for the `nitrokey-test` crate.
## Contact
For bug reports, patches, feature requests or other messages, please send a
mail to [nitrokey-rs-dev@ireas.org][].
## License
This project is licensed under the [MIT License][]. `libnitrokey` is licensed
under the [LGPL-3.0][].
[Documentation]: https://docs.rs/nitrokey
[Nitrokey udev rules]: https://www.nitrokey.com/documentation/frequently-asked-questions-faq#openpgp-card-not-available
[`libnitrokey`]: https://github.com/nitrokey/libnitrokey
[`nitrokey-test`]: https://github.com/d-e-s-o/nitrokey-test
[nitrokey-rs-dev@ireas.org]: mailto:nitrokey-rs-dev@ireas.org
[pull request #114]: https://github.com/Nitrokey/libnitrokey/pull/114
[MIT license]: https://opensource.org/licenses/MIT
[LGPL-3.0]: https://opensource.org/licenses/lgpl-3.0.html
|