-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
104 changed files
with
21,727 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
####################################### | ||
# Syntax Coloring Map For Cryptolib | ||
####################################### | ||
|
||
####################################### | ||
# Datatypes (KEYWORD1) | ||
####################################### | ||
Sha1 KEYWORD1 | ||
Sha256 KEYWORD1 | ||
|
||
####################################### | ||
# Methods and Functions (KEYWORD2) | ||
####################################### | ||
|
||
init KEYWORD2 | ||
initHmac KEYWORD2 | ||
add KEYWORD2 | ||
result KEYWORD2 | ||
resultHmac KEYWORD2 | ||
|
||
####################################### | ||
# Constants (LITERAL1) | ||
####################################### | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
#include <string.h> | ||
#include <avr/io.h> | ||
#include <avr/pgmspace.h> | ||
#include "sha256.h" | ||
|
||
const uint32_t sha256K[] PROGMEM = { | ||
0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5, | ||
0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174, | ||
0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da, | ||
0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967, | ||
0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85, | ||
0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070, | ||
0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3, | ||
0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 | ||
}; | ||
|
||
#define BUFFER_SIZE 64 | ||
|
||
const uint8_t sha256InitState[] PROGMEM = { | ||
0x67,0xe6,0x09,0x6a, // H0 | ||
0x85,0xae,0x67,0xbb, // H1 | ||
0x72,0xf3,0x6e,0x3c, // H2 | ||
0x3a,0xf5,0x4f,0xa5, // H3 | ||
0x7f,0x52,0x0e,0x51, // H4 | ||
0x8c,0x68,0x05,0x9b, // H5 | ||
0xab,0xd9,0x83,0x1f, // H6 | ||
0x19,0xcd,0xe0,0x5b // H7 | ||
}; | ||
|
||
void Sha256Class::init(void) { | ||
memcpy_P(state.b,sha256InitState,32); | ||
byteCount = 0; | ||
bufferOffset = 0; | ||
} | ||
|
||
uint32_t Sha256Class::ror32(uint32_t number, uint8_t bits) { | ||
return ((number << (32-bits)) | (number >> bits)); | ||
} | ||
|
||
void Sha256Class::hashBlock() { | ||
uint8_t i; | ||
uint32_t a,b,c,d,e,f,g,h,t1,t2; | ||
|
||
a=state.w[0]; | ||
b=state.w[1]; | ||
c=state.w[2]; | ||
d=state.w[3]; | ||
e=state.w[4]; | ||
f=state.w[5]; | ||
g=state.w[6]; | ||
h=state.w[7]; | ||
|
||
for (i=0; i<64; i++) { | ||
if (i>=16) { | ||
t1 = buffer.w[i&15] + buffer.w[(i-7)&15]; | ||
t2 = buffer.w[(i-2)&15]; | ||
t1 += ror32(t2,17) ^ ror32(t2,19) ^ (t2>>10); | ||
t2 = buffer.w[(i-15)&15]; | ||
t1 += ror32(t2,7) ^ ror32(t2,18) ^ (t2>>3); | ||
buffer.w[i&15] = t1; | ||
} | ||
t1 = h; | ||
t1 += ror32(e,6) ^ ror32(e,11) ^ ror32(e,25); // ∑1(e) | ||
t1 += g ^ (e & (g ^ f)); // Ch(e,f,g) | ||
t1 += pgm_read_dword(sha256K+i); // Ki | ||
t1 += buffer.w[i&15]; // Wi | ||
t2 = ror32(a,2) ^ ror32(a,13) ^ ror32(a,22); // ∑0(a) | ||
t2 += ((b & c) | (a & (b | c))); // Maj(a,b,c) | ||
h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2; | ||
} | ||
state.w[0] += a; | ||
state.w[1] += b; | ||
state.w[2] += c; | ||
state.w[3] += d; | ||
state.w[4] += e; | ||
state.w[5] += f; | ||
state.w[6] += g; | ||
state.w[7] += h; | ||
} | ||
|
||
void Sha256Class::addUncounted(uint8_t data) { | ||
buffer.b[bufferOffset ^ 3] = data; | ||
bufferOffset++; | ||
if (bufferOffset == BUFFER_SIZE) { | ||
hashBlock(); | ||
bufferOffset = 0; | ||
} | ||
} | ||
|
||
size_t Sha256Class::write(uint8_t data) { | ||
++byteCount; | ||
addUncounted(data); | ||
return 1; | ||
} | ||
|
||
void Sha256Class::pad() { | ||
// Implement SHA-256 padding (fips180-2 §5.1.1) | ||
|
||
// Pad with 0x80 followed by 0x00 until the end of the block | ||
addUncounted(0x80); | ||
while (bufferOffset != 56) addUncounted(0x00); | ||
|
||
// Append length in the last 8 bytes | ||
addUncounted(0); // We're only using 32 bit lengths | ||
addUncounted(0); // But SHA-1 supports 64 bit lengths | ||
addUncounted(0); // So zero pad the top bits | ||
addUncounted(byteCount >> 29); // Shifting to multiply by 8 | ||
addUncounted(byteCount >> 21); // as SHA-1 supports bitstreams as well as | ||
addUncounted(byteCount >> 13); // byte. | ||
addUncounted(byteCount >> 5); | ||
addUncounted(byteCount << 3); | ||
} | ||
|
||
|
||
uint8_t* Sha256Class::result(void) { | ||
// Pad to complete the last block | ||
pad(); | ||
|
||
// Swap byte order back | ||
for (int i=0; i<8; i++) { | ||
uint32_t a,b; | ||
a=state.w[i]; | ||
b=a<<24; | ||
b|=(a<<8) & 0x00ff0000; | ||
b|=(a>>8) & 0x0000ff00; | ||
b|=a>>24; | ||
state.w[i]=b; | ||
} | ||
|
||
// Return pointer to hash (20 characters) | ||
return state.b; | ||
} | ||
|
||
#define HMAC_IPAD 0x36 | ||
#define HMAC_OPAD 0x5c | ||
|
||
uint8_t keyBuffer[BLOCK_LENGTH]; // K0 in FIPS-198a | ||
uint8_t innerHash[HASH_LENGTH]; | ||
|
||
void Sha256Class::initHmac(const uint8_t* key, int keyLength) { | ||
uint8_t i; | ||
memset(keyBuffer,0,BLOCK_LENGTH); | ||
if (keyLength > BLOCK_LENGTH) { | ||
// Hash long keys | ||
init(); | ||
for (;keyLength--;) write(*key++); | ||
memcpy(keyBuffer,result(),HASH_LENGTH); | ||
} else { | ||
// Block length keys are used as is | ||
memcpy(keyBuffer,key,keyLength); | ||
} | ||
// Start inner hash | ||
init(); | ||
for (i=0; i<BLOCK_LENGTH; i++) { | ||
write(keyBuffer[i] ^ HMAC_IPAD); | ||
} | ||
} | ||
|
||
uint8_t* Sha256Class::resultHmac(void) { | ||
uint8_t i; | ||
// Complete inner hash | ||
memcpy(innerHash,result(),HASH_LENGTH); | ||
// Calculate outer hash | ||
init(); | ||
for (i=0; i<BLOCK_LENGTH; i++) write(keyBuffer[i] ^ HMAC_OPAD); | ||
for (i=0; i<HASH_LENGTH; i++) write(innerHash[i]); | ||
return result(); | ||
} | ||
Sha256Class Sha256; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#ifndef Sha256_h | ||
#define Sha256_h | ||
|
||
#include <inttypes.h> | ||
#include "Print.h" | ||
|
||
#define HASH_LENGTH 32 | ||
#define BLOCK_LENGTH 64 | ||
|
||
union _buffer { | ||
uint8_t b[BLOCK_LENGTH]; | ||
uint32_t w[BLOCK_LENGTH/4]; | ||
}; | ||
union _state { | ||
uint8_t b[HASH_LENGTH]; | ||
uint32_t w[HASH_LENGTH/4]; | ||
}; | ||
|
||
class Sha256Class : public Print | ||
{ | ||
public: | ||
void init(void); | ||
void initHmac(const uint8_t* secret, int secretLength); | ||
uint8_t* result(void); | ||
uint8_t* resultHmac(void); | ||
virtual size_t write(uint8_t); | ||
using Print::write; | ||
private: | ||
void pad(); | ||
void addUncounted(uint8_t data); | ||
void hashBlock(); | ||
uint32_t ror32(uint32_t number, uint8_t bits); | ||
_buffer buffer; | ||
uint8_t bufferOffset; | ||
_state state; | ||
uint32_t byteCount; | ||
uint8_t keyBuffer[BLOCK_LENGTH]; | ||
uint8_t innerHash[HASH_LENGTH]; | ||
}; | ||
extern Sha256Class Sha256; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
This software is Copyright (C) 2008 Mike McCauley. Use is subject to license | ||
conditions. The main licensing options available are GPL V2 or Commercial: | ||
|
||
Open Source Licensing GPL V2 | ||
|
||
This is the appropriate option if you want to share the source code of your | ||
application with everyone you distribute it to, and you also want to give them | ||
the right to share who uses it. If you wish to use this software under Open | ||
Source Licensing, you must contribute all your source code to the open source | ||
community in accordance with the GPL Version 2 when your application is | ||
distributed. See http://www.gnu.org/copyleft/gpl.html | ||
|
||
Commercial Licensing | ||
|
||
This is the appropriate option if you are creating proprietary applications | ||
and you are not prepared to distribute and share the source code of your | ||
application. Contact info@open.com.au for details. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
RadioHead/LICENSE | ||
RadioHead/Makefile | ||
RadioHead/MANIFEST | ||
RadioHead/project.cfg | ||
RadioHead/RadioHead.h | ||
RadioHead/RH_ASK.cpp | ||
RadioHead/RH_ASK.h | ||
RadioHead/RHCRC.cpp | ||
RadioHead/RHCRC.h | ||
RadioHead/RHDatagram.cpp | ||
RadioHead/RHDatagram.h | ||
RadioHead/RHGenericDriver.cpp | ||
RadioHead/RHGenericDriver.h | ||
RadioHead/RHGenericSPI.cpp | ||
RadioHead/RHGenericSPI.h | ||
RadioHead/RHHardwareSPI.cpp | ||
RadioHead/RHHardwareSPI.h | ||
RadioHead/RHMesh.cpp | ||
RadioHead/RHMesh.h | ||
RadioHead/RHReliableDatagram.cpp | ||
RadioHead/RHReliableDatagram.h | ||
RadioHead/RH_NRF24.cpp | ||
RadioHead/RH_NRF24.h | ||
RadioHead/RH_NRF905.cpp | ||
RadioHead/RH_NRF905.h | ||
RadioHead/RH_RF22.cpp | ||
RadioHead/RH_RF22.h | ||
RadioHead/RH_RF24.cpp | ||
RadioHead/RH_RF24.h | ||
RadioHead/radio_config_Si4460.h | ||
RadioHead/RH_RF69.cpp | ||
RadioHead/RH_RF69.h | ||
RadioHead/RH_RF95.cpp | ||
RadioHead/RH_RF95.h | ||
RadioHead/RH_TCP.cpp | ||
RadioHead/RH_TCP.h | ||
RadioHead/RHRouter.cpp | ||
RadioHead/RHRouter.h | ||
RadioHead/RH_Serial.cpp | ||
RadioHead/RH_Serial.h | ||
RadioHead/RHSoftwareSPI.cpp | ||
RadioHead/RHSoftwareSPI.h | ||
RadioHead/RHSPIDriver.cpp | ||
RadioHead/RHSPIDriver.h | ||
RadioHead/RHTcpProtocol.h | ||
RadioHead/RHNRFSPIDriver.cpp | ||
RadioHead/RHNRFSPIDriver.h | ||
RadioHead/RHutil | ||
RadioHead/RHutil/atomic.h | ||
RadioHead/RHutil/simulator.h | ||
RadioHead/examples/ask/ask_reliable_datagram_client/ask_reliable_datagram_client.pde | ||
RadioHead/examples/ask/ask_reliable_datagram_server/ask_reliable_datagram_server.pde | ||
RadioHead/examples/ask/ask_transmitter/ask_transmitter.pde | ||
RadioHead/examples/ask/ask_receiver/ask_receiver.pde | ||
RadioHead/examples/rf95/rf95_client/rf95_client.pde | ||
RadioHead/examples/rf95/rf95_reliable_datagram_client/rf95_reliable_datagram_client.pde | ||
RadioHead/examples/rf95/rf95_reliable_datagram_server/rf95_reliable_datagram_server.pde | ||
RadioHead/examples/rf95/rf95_server/rf95_server.pde | ||
RadioHead/examples/rf22/rf22_client/rf22_client.pde | ||
RadioHead/examples/rf22/rf22_mesh_client/rf22_mesh_client.pde | ||
RadioHead/examples/rf22/rf22_mesh_server1/rf22_mesh_server1.pde | ||
RadioHead/examples/rf22/rf22_mesh_server2/rf22_mesh_server2.pde | ||
RadioHead/examples/rf22/rf22_mesh_server3/rf22_mesh_server3.pde | ||
RadioHead/examples/rf22/rf22_reliable_datagram_client/rf22_reliable_datagram_client.pde | ||
RadioHead/examples/rf22/rf22_reliable_datagram_server/rf22_reliable_datagram_server.pde | ||
RadioHead/examples/rf22/rf22_router_client/rf22_router_client.pde | ||
RadioHead/examples/rf22/rf22_router_server1/rf22_router_server1.pde | ||
RadioHead/examples/rf22/rf22_router_server2/rf22_router_server2.pde | ||
RadioHead/examples/rf22/rf22_router_server3/rf22_router_server3.pde | ||
RadioHead/examples/rf22/rf22_router_test/rf22_router_test.pde | ||
RadioHead/examples/rf22/rf22_server/rf22_server.pde | ||
RadioHead/examples/rf24/rf24_client/rf24_client.pde | ||
RadioHead/examples/rf24/rf24_reliable_datagram_client/rf24_reliable_datagram_client.pde | ||
RadioHead/examples/rf24/rf24_reliable_datagram_server/rf24_reliable_datagram_server.pde | ||
RadioHead/examples/rf24/rf24_server/rf24_server.pde | ||
RadioHead/examples/rf69/rf69_client/rf69_client.pde | ||
RadioHead/examples/rf69/rf69_reliable_datagram_client/rf69_reliable_datagram_client.pde | ||
RadioHead/examples/rf69/rf69_reliable_datagram_server/rf69_reliable_datagram_server.pde | ||
RadioHead/examples/rf69/rf69_server/rf69_server.pde | ||
RadioHead/examples/nrf24/nrf24_client/nrf24_client.pde | ||
RadioHead/examples/nrf24/nrf24_reliable_datagram_client/nrf24_reliable_datagram_client.pde | ||
RadioHead/examples/nrf24/nrf24_reliable_datagram_server/nrf24_reliable_datagram_server.pde | ||
RadioHead/examples/nrf24/nrf24_server/nrf24_server.pde | ||
RadioHead/examples/nrf905/nrf905_client/nrf905_client.pde | ||
RadioHead/examples/nrf905/nrf905_reliable_datagram_client/nrf905_reliable_datagram_client.pde | ||
RadioHead/examples/nrf905/nrf905_reliable_datagram_server/nrf905_reliable_datagram_server.pde | ||
RadioHead/examples/nrf905/nrf905_server/nrf905_server.pde | ||
RadioHead/examples/serial/serial_reliable_datagram_client/serial_reliable_datagram_client.pde | ||
RadioHead/examples/serial/serial_reliable_datagram_server/serial_reliable_datagram_server.pde | ||
RadioHead/examples/simulator/simulator_reliable_datagram_client/simulator_reliable_datagram_client.pde | ||
RadioHead/examples/simulator/simulator_reliable_datagram_server/simulator_reliable_datagram_server.pde | ||
RadioHead/tools/etherSimulator.pl | ||
RadioHead/tools/chain.conf | ||
RadioHead/tools/simMain.cpp | ||
RadioHead/tools/simBuild | ||
RadioHead/doc | ||
RadioHead/STM32ArduinoCompat/HardwareSerial.cpp | ||
RadioHead/STM32ArduinoCompat/HardwareSerial.h | ||
RadioHead/STM32ArduinoCompat/HardwareSPI.cpp | ||
RadioHead/STM32ArduinoCompat/HardwareSPI.h | ||
RadioHead/STM32ArduinoCompat/wirish.cpp | ||
RadioHead/STM32ArduinoCompat/wirish.h | ||
RadioHead/STM32ArduinoCompat/README |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Makefile | ||
# | ||
# Makefile for the RadioHead project | ||
# | ||
# Author: Mike McCauley (mikem@airspayce.com) | ||
# Copyright (C) 2014 Mike McCauley | ||
# $Id: Makefile,v 1.23 2015/01/02 21:38:24 mikem Exp mikem $ | ||
|
||
PROJNAME = RadioHead | ||
VERSION_MAJOR = 1 | ||
VERSION_MINOR = 41 | ||
|
||
DISTFILE = $(PROJNAME)-$(VERSION_MAJOR).$(VERSION_MINOR).zip | ||
|
||
all: versioning doxygen dist upload | ||
|
||
# Update version numbers in RadioHead.h | ||
versioning: | ||
sed -i.bak -e 's/RadioHead-.*\.zip/$(DISTFILE)/' RadioHead.h | ||
sed -i.bak -e 's/define RH_VERSION_MAJOR.*$$/define RH_VERSION_MAJOR $(VERSION_MAJOR)/' RadioHead.h | ||
sed -i.bak -e 's/define RH_VERSION_MINOR.*$$/define RH_VERSION_MINOR $(VERSION_MINOR)/' RadioHead.h | ||
|
||
doxygen: | ||
doxygen project.cfg | ||
|
||
ci: | ||
(cd ..;ci -l `cat $(PROJNAME)/MANIFEST`) | ||
|
||
dist: | ||
(cd ..; zip $(PROJNAME)/$(DISTFILE) `cat $(PROJNAME)/MANIFEST`) | ||
|
||
upload: | ||
rsync -avz $(DISTFILE) doc/ www.airspayce.com:public_html/mikem/arduino/$(PROJNAME) |
Oops, something went wrong.