Skip to content
Merged
2,372 changes: 2,372 additions & 0 deletions Doxyfile

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions README → README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Please see the full documentation at http://spaniakos.github.io/Cryptosuite

Cryptosuite is a cryptographic library for Arduino (including SHA and HMAC-SHA)

It currently supports secure hashing and hashed message authentication using SHA-1, SHA-256, HMAC-SHA-1 and HMAC-SHA-256.
Expand Down Expand Up @@ -54,3 +56,41 @@ Verification:
HMAC-SHA-1: FIPS 198a compliant
SHA-256: FIPS 180-2, RFC4231 compliant
HMAC-SHA-256: RFC4231 compliant

*UPDATE** Added Intel Galileo Support
Added printf.h so galileo can redirect to serial all the printf requests.

*UPDATE** Raspberry pi support added
### Raspberry pi
install
```
sudo make install
cd examples_Rpi
make
```

What to do after changes to the library
```
sudo make clean
sudo make install
cd examples_Rpi
make clean
make
```

What to do after changes to a sketch
```
cd examples_Rpi
make <sketch>

or
make clean
make
```

How to start a sketch
```
cd examples_Rpi
sudo ./<sketch>
```

78 changes: 78 additions & 0 deletions Sha/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#############################################################################
#
# Makefile for SHA on Raspberry Pi
#
# License: GPL (General Public License)
# Author: Charles-Henri Hallard
# Date: 2013/03/13
#
# Description:
# ------------
# use make all and mak install to install the library
# You can change the install directory by editing the LIBDIR line
#
PREFIX=/usr/local

# Library parameters
# where to put the lib
LIBDIR=$(PREFIX)/lib
# lib name
LIB=libSHA1
LIB2=libSHA256
# shared library name
LIBNAME=$(LIB).so.1.0
LIBNAME2=$(LIB2).so.1.0

# Where to put the header files
HEADER_DIR=${PREFIX}/include/SHA1
HEADER_DIR2=${PREFIX}/include/SHA256

# The recommended compiler flags for the Raspberry Pi
CCFLAGS=-Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s

# make all
# reinstall the library after each recompilation
all: libSHA1 libSHA256

# Make the library
libSHA1: sha1.o
g++ -shared -Wl,-soname,$@.so.1 ${CCFLAGS} -o ${LIBNAME} $^

# Library parts
sha1.o: sha1.cpp
g++ -Wall -fPIC ${CCFLAGS} -c $^

# Make the library
libSHA256: sha256.o
g++ -shared -Wl,-soname,$@.so.1 ${CCFLAGS} -o ${LIBNAME2} $^

# Library parts
sha256.o: sha256.cpp
g++ -Wall -fPIC ${CCFLAGS} -c $^

# clear build files
clean:
rm -rf *.o ${LIB}.* ${LIB2}.*
rm -rf ${LIBDIR}/${LIB}.*
rm -rf ${HEADER_DIR}

install: all install-libs install-headers

# Install the library to LIBPATH
install-libs:
@echo "[Installing Libs]"
@if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi
@install -m 0755 ${LIBNAME} ${LIBDIR}
@ln -sf ${LIBDIR}/${LIBNAME} ${LIBDIR}/${LIB}.so.1
@ln -sf ${LIBDIR}/${LIBNAME} ${LIBDIR}/${LIB}.so
@install -m 0755 ${LIBNAME2} ${LIBDIR}
@ln -sf ${LIBDIR}/${LIBNAME2} ${LIBDIR}/${LIB2}.so.1
@ln -sf ${LIBDIR}/${LIBNAME2} ${LIBDIR}/${LIB2}.so
@ldconfig

install-headers:
@echo "[Installing Headers]"
@if ( test ! -d ${HEADER_DIR} ) ; then mkdir -p ${HEADER_DIR} ; fi
@install -m 0644 *1.h ${HEADER_DIR}
@if ( test ! -d ${HEADER_DIR2} ) ; then mkdir -p ${HEADER_DIR2} ; fi
@install -m 0644 *256.h ${HEADER_DIR2}
35 changes: 33 additions & 2 deletions Sha/examples/hmacsha256test/hmacsha256test.pde
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#include "sha256.h"
#include <Arduino.h>
#include "./printf.h"

uint8_t hmacKey1[]={
0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b
Expand Down Expand Up @@ -33,70 +35,99 @@ void printHash(uint8_t* hash) {
}

void setup() {
printf_begin();
uint8_t* hash;
uint32_t a;

unsigned long ms;
Serial.begin(9600);

// HMAC tests
Serial.println("Test: RFC4231 4.2");
Serial.println("Expect:b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey1,20);
Sha256.print("Hi There");
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.3");
Serial.println("Expect:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843");
Serial.print("Result:");
ms = micros();
Sha256.initHmac((uint8_t*)"Jefe",4);
Sha256.print("what do ya want for nothing?");
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.4");
Serial.println("Expect:773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey3,20);
for (a=0; a<50; a++) Sha256.write(0xdd);
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.5");
Serial.println("Expect:82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey2,25);
for (a=0; a<50; a++) Sha256.write(0xcd);
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.6");
Serial.println("Expect:a3b6167473100ee06e0c796c2955552b-------------------------------");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey4,20);
Sha256.print("Test With Truncation");
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.7");
Serial.println("Expect:60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey5,131);
Sha256.print("Test Using Larger Than Block-Size Key - Hash Key First");
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC4231 4.8");
Serial.println("Expect:9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2");
Serial.print("Result:");
ms = micros();
Sha256.initHmac(hmacKey5,131);
Sha256.print("This is a test using a larger than block-size key and a larger than "
"block-size data. The key needs to be hashed before being used by the HMAC algorithm.");
printHash(Sha256.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

}

void loop() {
}
}
46 changes: 39 additions & 7 deletions Sha/examples/sha1test/sha1test.pde
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#include "sha1.h"
#include <Arduino.h>
#include "./printf.h"

void printHash(uint8_t* hash) {
int i;
Expand All @@ -15,10 +17,8 @@ uint8_t hmacKey1[]={
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
};
uint8_t hmacKey2[]={
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43
};
uint8_t *hmacKey2= (unsigned char*)"0123456789:;<=>?@ABC";

uint8_t hmacKey3[]={
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
Expand All @@ -37,77 +37,109 @@ uint8_t hmacKey4[]={


void setup() {
printf_begin();
uint8_t* hash;
uint32_t a;

unsigned long ms;
Serial.begin(9600);

// SHA tests
Serial.println("Test: FIPS 180-2 C.1 and RFC3174 7.3 TEST1");
Serial.println("Expect:a9993e364706816aba3e25717850c26c9cd0d89d");
Serial.print("Result:");
ms = micros();
Sha1.init();
Sha1.print("abc");
printHash(Sha1.result());
Serial.println();
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");

Serial.println("Test: FIPS 180-2 C.2 and RFC3174 7.3 TEST2");
Serial.println("Expect:84983e441c3bd26ebaae4aa1f95129e5e54670f1");
Serial.print("Result:");
ms = micros();
Sha1.init();
Sha1.print("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
printHash(Sha1.result());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: RFC3174 7.3 TEST4");
Serial.println("Expect:dea356a2cddd90c7a7ecedc5ebb563934f460452");
Serial.print("Result:");
ms = micros();
Sha1.init();
for (a=0; a<80; a++) Sha1.print("01234567");
printHash(Sha1.result());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

// HMAC tests
Serial.println("Test: FIPS 198a A.1");
Serial.println("Expect:4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a");
Serial.print("Result:");
ms = micros();
Sha1.initHmac(hmacKey1,64);
Sha1.print("Sample #1");
printHash(Sha1.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: FIPS 198a A.2");
Serial.println("Expect:0922d3405faa3d194f82a45830737d5cc6c75d24");
Serial.print("Result:");
ms = micros();
Sha1.initHmac(hmacKey2,20);
Sha1.print("Sample #2");
printHash(Sha1.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: FIPS 198a A.3");
Serial.println("Expect:bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa");
Serial.print("Result:");
ms = micros();
Sha1.initHmac(hmacKey3,100);
Sha1.print("Sample #3");
printHash(Sha1.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

Serial.println("Test: FIPS 198a A.4");
Serial.println("Expect:9ea886efe268dbecce420c7524df32e0751a2a26");
Serial.print("Result:");
ms = micros();
Sha1.initHmac(hmacKey4,49);
Sha1.print("Sample #4");
printHash(Sha1.resultHmac());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
Serial.println();

// Long tests
Serial.println("Test: FIPS 180-2 C.3 and RFC3174 7.3 TEST3 (Processing 1000000 characters. This will take a while.)");
Serial.println("Expect:34aa973cd4c4daa4f61eeb2bdbad27316534016f");
Serial.print("Result:");
ms = micros();
Sha1.init();
for (a=0; a<1000000; a++) Sha1.write('a');
printHash(Sha1.result());
Serial.print(" Hash took : ");
Serial.print((micros() - ms));
Serial.println(" micros");
}

void loop() {
}
}
Loading