Basic TOTP implementation in C for Arduino
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



This is a basic Open-Source implementation of a TOTP (compliant with OATH*) code in Arduino.
Basicaly it generates 6 digits OTP based in a EPOCH time stored in a variable called birthTime
There is no time drift. The OTP is updated each 30 seconds.

For HMAC-SHA1 hash this implementation uses the code from Cathedrow / Cryptosuite ( 
However a small change was added to sha1.h and sha1.c: The method size_t Sha1Class::writebytes(const uint8_t* data, int length)

For debug purposes the main important functions are printed to serial output.

A picture of a working prototype can be found at:


For compilation purposes, make sure that you have the following directory structure:

---> ---> arduino_oath_token/
---> ---> ---> arduino_oath_token.ino
---> ---> Sha/
---> ---> ---> sha1.cpp  
---> ---> ---> sha1.h 

Also, check you libraries directory inside arduino installation folder. It must contain the Sha folder inside it (the arduino installation folder may have different locations and versions, depending of OS).

---> arduino-1.0.1/
---> ---> libraries/
---> ---> ---> Sha
---> ---> ---> ---> sha1.cpp  
---> ---> ---> ---> sha1.h 

The Sha library folder can be found at as mentioned before but change the sha1.cpp and sha1.h by the ones found at repository.

author: Jose (Ricardo de Oliveira) Damico (jd dot comment at gmail dot com)