aboutsummaryrefslogtreecommitdiff
path: root/nitrokey-sys
diff options
context:
space:
mode:
Diffstat (limited to 'nitrokey-sys')
-rw-r--r--nitrokey-sys/Cargo.toml16
-rw-r--r--nitrokey-sys/build.rs17
-rw-r--r--nitrokey-sys/src/lib.rs29
-rw-r--r--nitrokey-sys/wrapper.h2
4 files changed, 64 insertions, 0 deletions
diff --git a/nitrokey-sys/Cargo.toml b/nitrokey-sys/Cargo.toml
new file mode 100644
index 0000000..e8ff489
--- /dev/null
+++ b/nitrokey-sys/Cargo.toml
@@ -0,0 +1,16 @@
+[package]
+name = "nitrokey-sys"
+version = "0.1.0"
+authors = ["Robin Krahl <robin.krahl@ireas.org>"]
+homepage = "https://code.ireas.org/nitrokey-rs/"
+repository = "https://git.ireas.org/nitrokey-rs/"
+description = "Bindings to libnitrokey for communication with Nitrokey devices"
+categories = ["external-ffi-bindings"]
+license = "MIT"
+links = "nitrokey"
+build = "build.rs"
+
+[dependencies]
+
+[build-dependencies]
+bindgen = "0.26.3"
diff --git a/nitrokey-sys/build.rs b/nitrokey-sys/build.rs
new file mode 100644
index 0000000..7b3325c
--- /dev/null
+++ b/nitrokey-sys/build.rs
@@ -0,0 +1,17 @@
+extern crate bindgen;
+
+use std::env;
+use std::path::PathBuf;
+
+fn main() {
+ println!("cargo:rustc-link-lib=nitrokey");
+
+ let bindings = bindgen::Builder::default()
+ .header("wrapper.h")
+ .generate()
+ .expect("Unable to generate bindings");
+ let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
+ bindings
+ .write_to_file(out_path.join("bindings.rs"))
+ .expect("Could not write bindings");
+}
diff --git a/nitrokey-sys/src/lib.rs b/nitrokey-sys/src/lib.rs
new file mode 100644
index 0000000..0641e13
--- /dev/null
+++ b/nitrokey-sys/src/lib.rs
@@ -0,0 +1,29 @@
+#![allow(non_upper_case_globals)]
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use std::ffi::CString;
+
+ #[test]
+ fn login_auto() {
+ unsafe {
+ assert_eq!(0, NK_login_auto());
+ }
+ }
+
+ #[test]
+ fn login() {
+ unsafe {
+ // Unconnected
+ assert_eq!(0, NK_login(CString::new("S").unwrap().as_ptr()));
+ assert_eq!(0, NK_login(CString::new("P").unwrap().as_ptr()));
+ // Unsupported model
+ assert_eq!(0, NK_login(CString::new("T").unwrap().as_ptr()));
+ }
+ }
+}
diff --git a/nitrokey-sys/wrapper.h b/nitrokey-sys/wrapper.h
new file mode 100644
index 0000000..3c8d7cf
--- /dev/null
+++ b/nitrokey-sys/wrapper.h
@@ -0,0 +1,2 @@
+#include <stdbool.h>
+#include <libnitrokey/NK_C_API.h>