From a5d11eab6003a6ed0f7c78ecb7136b28ee938a23 Mon Sep 17 00:00:00 2001 From: Szczepan Zalega Date: Mon, 18 Jul 2016 18:04:34 +0200 Subject: Initial version of C/Python bindings Signed-off-by: Szczepan Zalega --- python_bindings/api.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ python_bindings/pybind11 | 1 + 2 files changed, 78 insertions(+) create mode 100644 python_bindings/api.cpp create mode 160000 python_bindings/pybind11 (limited to 'python_bindings') diff --git a/python_bindings/api.cpp b/python_bindings/api.cpp new file mode 100644 index 0000000..57344c9 --- /dev/null +++ b/python_bindings/api.cpp @@ -0,0 +1,77 @@ + +#include +//#include "toplevel.h" +#include "../include/device.h" +#include "../include/stick10_commands.h" +#include "../include/log.h" +#include "../include/device_proto.h" +#include +#include + +using namespace std; +using namespace nitrokey::device; +using namespace nitrokey::proto::stick10; +using namespace nitrokey::proto; +using namespace nitrokey::log; + +/* +- manage (=create, change, delete, list, read) OTP entries +- use/generate OTPs +- Change PINs (so that the user doesn't need any other tool other than +his Python application) +* */ + + +bool writeHOTPSlot(Device &stick, int slotNumber, const char *slotName, const char *temporary_password, + const char *secret); +bool authenticate(Device &stick, const char *card_password, const char *temporary_password); + +int NK_login(char *user_type, char *pin); +int NK_logout(); + +//some_struct +void NK_list_slots(); +int NK_erase_slot(int slot_num); +int NK_erase_totp_slot(int slot_num); +int NK_erase_hotp_slot(int slot_num); +int NK_write_hotp_slot(char *secret, int hotp_counter); +int NK_write_totp_slot(char *secret, int time_window); +int NK_change_PIN(); + +void initHotp(const char *card_password, int slot, const char *slot_name, const char *secret) { + //Log::instance().set_loglevel(Loglevel::DEBUG); + Stick10 stick; + bool connected = stick.connect(); + auto response = GetStatus::CommandTransaction::run(stick); + const char *temporary_password = "123456789012345678901234"; + bool success = authenticate(stick, card_password, temporary_password); +// hexStringToByte(hwrite.slot_secret, hexSecret); + success = writeHOTPSlot(stick, slot, slot_name, temporary_password, secret); + stick.disconnect(); +} + +bool writeHOTPSlot(Device &stick, int slotNumber, const char *slotName, const char *temporary_password, + const char *secret) { + Transaction::CommandPayload hwrite; + hwrite.slot_number = slotNumber; + strcpy(reinterpret_cast(hwrite.slot_name), slotName); + strcpy(reinterpret_cast(hwrite.slot_secret), secret); + + //authorize writehotp first + Transaction::CommandPayload auth; + strcpy((char *) (auth.temporary_password), temporary_password); + auth.crc_to_authorize = auth.crc_to_authorize = WriteToHOTPSlot::CommandTransaction::getCRC(hwrite); + Authorize::CommandTransaction::run(stick, auth); + + //run hotp command + WriteToHOTPSlot::CommandTransaction::run(stick, hwrite); + return true; +} + +bool authenticate(Device &stick, const char *card_password, const char *temporary_password) { + Transaction::CommandPayload authreq; + strcpy((char *) (authreq.card_password), card_password); + strcpy((char *) (authreq.temporary_password), temporary_password); + FirstAuthenticate::CommandTransaction::run(stick, authreq); + return true; +} diff --git a/python_bindings/pybind11 b/python_bindings/pybind11 new file mode 160000 index 0000000..1f66a58 --- /dev/null +++ b/python_bindings/pybind11 @@ -0,0 +1 @@ +Subproject commit 1f66a584278dfd1ad88be19d5e4996302793a191 -- cgit v1.2.1