mirror of
				https://github.com/taigrr/arduinolibs
				synced 2025-01-18 04:33:12 -08:00 
			
		
		
		
	Move CBC, CFB, and OFB to the CryptoLegacy library
This commit is contained in:
		
							parent
							
								
									a03d95e7b4
								
							
						
					
					
						commit
						d9ebc63878
					
				@ -25,6 +25,8 @@ Recent significant changes to the library
 | 
				
			|||||||
Apr 2018:
 | 
					Apr 2018:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Acorn128 authenticated cipher (finalist in the CAESAR AEAD competition).
 | 
					* Acorn128 authenticated cipher (finalist in the CAESAR AEAD competition).
 | 
				
			||||||
 | 
					* Split the library into Crypto (core), CryptoLW (light-weight), and
 | 
				
			||||||
 | 
					  CryptoLegacy (deprecated algorithms).
 | 
				
			||||||
* Tiny and small versions of AES for reducing memory requirements.
 | 
					* Tiny and small versions of AES for reducing memory requirements.
 | 
				
			||||||
* Port the library to ESP8266 and ESP32.
 | 
					* Port the library to ESP8266 and ESP32.
 | 
				
			||||||
* Make the RNG class more robust if the app doesn't call begin() or loop().
 | 
					* Make the RNG class more robust if the app doesn't call begin() or loop().
 | 
				
			||||||
 | 
				
			|||||||
@ -657,6 +657,7 @@ WARN_LOGFILE           =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
INPUT                  = ../libraries/Crypto \
 | 
					INPUT                  = ../libraries/Crypto \
 | 
				
			||||||
                         ../libraries/CryptoLW/src \
 | 
					                         ../libraries/CryptoLW/src \
 | 
				
			||||||
 | 
					                         ../libraries/CryptoLegacy/src \
 | 
				
			||||||
                         ../libraries/NewHope \
 | 
					                         ../libraries/NewHope \
 | 
				
			||||||
                         ../libraries/RingOscillatorNoiseSource \
 | 
					                         ../libraries/RingOscillatorNoiseSource \
 | 
				
			||||||
                         ../libraries/TransistorNoiseSource \
 | 
					                         ../libraries/TransistorNoiseSource \
 | 
				
			||||||
 | 
				
			|||||||
@ -24,28 +24,73 @@
 | 
				
			|||||||
\file crypto.dox
 | 
					\file crypto.dox
 | 
				
			||||||
\page crypto Arduino Cryptography Library
 | 
					\page crypto Arduino Cryptography Library
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\section crypto_algorithms Supported Algorithms
 | 
					\section crypto_algorithms Supported algorithms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\li Block ciphers: AES128, AES192, AES256, Speck
 | 
					The library is split into four main sections: core, light-weight, legacy,
 | 
				
			||||||
\li Block cipher modes: CTR, CFB, CBC, OFB, EAX, GCM, XTS
 | 
					and other.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\subsection crypto_core_algorithms Core algorithms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Core algorithms are found within the "libraries/Crypto" directory
 | 
				
			||||||
 | 
					in the repository:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\li Authenticated encryption with associated data (AEAD): ChaChaPoly, EAX, GCM
 | 
				
			||||||
 | 
					\li Block ciphers: AES128, AES192, AES256
 | 
				
			||||||
 | 
					\li Block cipher modes: CTR, EAX, GCM, XTS
 | 
				
			||||||
\li Stream ciphers: ChaCha
 | 
					\li Stream ciphers: ChaCha
 | 
				
			||||||
\li Authenticated encryption with associated data (AEAD): ChaChaPoly, EAX, GCM, Acorn128
 | 
					 | 
				
			||||||
\li Hash algorithms: SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b (regular and HMAC modes)
 | 
					\li Hash algorithms: SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b (regular and HMAC modes)
 | 
				
			||||||
\li Extendable output functions (XOF's): SHAKE128, SHAKE256
 | 
					\li Extendable output functions (XOF's): SHAKE128, SHAKE256
 | 
				
			||||||
\li Message authenticators: Poly1305, GHASH, OMAC
 | 
					\li Message authenticators: Poly1305, GHASH, OMAC
 | 
				
			||||||
\li Public key algorithms: Curve25519, Ed25519, P521
 | 
					\li Public key algorithms: Curve25519, Ed25519, P521
 | 
				
			||||||
\li Post-quantum algorithms: NewHope
 | 
					\li Random number generation: \link RNGClass RNG\endlink
 | 
				
			||||||
\li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource, RingOscillatorNoiseSource
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Reduced memory versions of some algorithms (encryption is slower, but the
 | 
					Reduced memory versions of some algorithms (encryption is slower, but the
 | 
				
			||||||
RAM required for the key schedule is less):
 | 
					RAM required for the key schedule is less):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\li AESTiny128, AESSmall128, AESTiny256, AESSmall256
 | 
					\li AESTiny128, AESSmall128, AESTiny256, AESSmall256
 | 
				
			||||||
\li SpeckTiny, SpeckSmall
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
The "tiny" versions only support encryption which makes them suitable for
 | 
					The "tiny" versions only support encryption which makes them suitable for
 | 
				
			||||||
the CTR, CFB, OFB, EAX, and GCM block cipher modes but not CBC.  The "small"
 | 
					the CTR, CFB, OFB, EAX, and GCM block cipher modes but not CBC.  The "small"
 | 
				
			||||||
versions use a little more memory but support both encryptionm and decryption.
 | 
					versions use a little more memory but support both encryption and decryption.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\subsection crpto_lw_algorithms Light-weight algorithms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The algorithms in the "libraries/CryptoLW" directory are new algorithms
 | 
				
			||||||
 | 
					that have been designed for "light-weight" environments where memory and
 | 
				
			||||||
 | 
					CPU resources are constrained:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\li Authenticated encryption with associated data (AEAD): Acorn128
 | 
				
			||||||
 | 
					\li Block ciphers: Speck, SpeckSmall, SpeckTiny
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These algorithms are fairly new, but they are ideal for Arduino devices.
 | 
				
			||||||
 | 
					They don't yet appear in any internationally adopted standards yet but any
 | 
				
			||||||
 | 
					algorithms that are adopted into standards later will be moved to the
 | 
				
			||||||
 | 
					core library.  Maybe you'll be the one to create that new standard!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\subsection crypto_legacy_algorithms Legacy algorithms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Legacy algorithms in the "libraries/CryptoLegacy" are those that should
 | 
				
			||||||
 | 
					probably not be used in new protocol designs, but may be required for
 | 
				
			||||||
 | 
					backwards-compatibility with older protocols:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\li Block cipher modes: CFB, CBC, OFB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CBC is included in the legacy list because cryptography experts no longer
 | 
				
			||||||
 | 
					recommend it for use in newer designs.  It was an important mode in the past
 | 
				
			||||||
 | 
					but newer designs should be using authenticated encryption with associated
 | 
				
			||||||
 | 
					data (AEAD) instead.  If you were looking to use CBC in your project,
 | 
				
			||||||
 | 
					then please consider transitioning to one of the AEAD schemes listed above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Over time, other algorithms may be moved from the core library to legacy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\subsection crypto_other_algorithms Other algorithms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Other algorithms are provided in the remaining directories under "libraries",
 | 
				
			||||||
 | 
					and consist of algorithms that are either too big for the main library,
 | 
				
			||||||
 | 
					or are dedicated to a special purpose that only some applications will need:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\li Post-quantum algorithms: NewHope
 | 
				
			||||||
 | 
					\li Random number generation: TransistorNoiseSource, RingOscillatorNoiseSource
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\section crypto_optimizations Optimizations
 | 
					\section crypto_optimizations Optimizations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,15 +5,18 @@ TOPDIR = ../..
 | 
				
			|||||||
SRCDIR = $(TOPDIR)/libraries/Crypto
 | 
					SRCDIR = $(TOPDIR)/libraries/Crypto
 | 
				
			||||||
SRCDIR2 = $(TOPDIR)/libraries/NewHope
 | 
					SRCDIR2 = $(TOPDIR)/libraries/NewHope
 | 
				
			||||||
SRCDIR3 = $(TOPDIR)/libraries/CryptoLW
 | 
					SRCDIR3 = $(TOPDIR)/libraries/CryptoLW
 | 
				
			||||||
 | 
					SRCDIR4 = $(TOPDIR)/libraries/CryptoLegacy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#VPATH = $(SRCDIR)
 | 
					#VPATH = $(SRCDIR)
 | 
				
			||||||
vpath %.cpp $(SRCDIR)
 | 
					vpath %.cpp $(SRCDIR)
 | 
				
			||||||
vpath %.cpp $(SRCDIR2)
 | 
					vpath %.cpp $(SRCDIR2)
 | 
				
			||||||
vpath %.cpp $(SRCDIR3)/src
 | 
					vpath %.cpp $(SRCDIR3)/src
 | 
				
			||||||
 | 
					vpath %.cpp $(SRCDIR4)/src
 | 
				
			||||||
vpath %.o .
 | 
					vpath %.o .
 | 
				
			||||||
vpath %.ino $(SRCDIR)/examples
 | 
					vpath %.ino $(SRCDIR)/examples
 | 
				
			||||||
vpath %.ino $(SRCDIR2)/examples
 | 
					vpath %.ino $(SRCDIR2)/examples
 | 
				
			||||||
vpath %.ino $(SRCDIR3)/examples
 | 
					vpath %.ino $(SRCDIR3)/examples
 | 
				
			||||||
 | 
					vpath %.ino $(SRCDIR4)/examples
 | 
				
			||||||
vpath %.sketch .
 | 
					vpath %.sketch .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBRARY = libCrypto.a
 | 
					LIBRARY = libCrypto.a
 | 
				
			||||||
@ -22,6 +25,7 @@ CPPFLAGS = \
 | 
				
			|||||||
	-I$(TOPDIR)/host/emulation \
 | 
						-I$(TOPDIR)/host/emulation \
 | 
				
			||||||
	-I$(TOPDIR)/libraries/Crypto \
 | 
						-I$(TOPDIR)/libraries/Crypto \
 | 
				
			||||||
	-I$(TOPDIR)/libraries/CryptoLW/src \
 | 
						-I$(TOPDIR)/libraries/CryptoLW/src \
 | 
				
			||||||
 | 
						-I$(TOPDIR)/libraries/CryptoLegacy/src \
 | 
				
			||||||
	-I$(TOPDIR)/libraries/NewHope \
 | 
						-I$(TOPDIR)/libraries/NewHope \
 | 
				
			||||||
	-DHOST_BUILD
 | 
						-DHOST_BUILD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -25,6 +25,7 @@ This example runs tests on the CBC implementation to verify correct behaviour.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <Crypto.h>
 | 
					#include <Crypto.h>
 | 
				
			||||||
 | 
					#include <CryptoLegacy.h>
 | 
				
			||||||
#include <AES.h>
 | 
					#include <AES.h>
 | 
				
			||||||
#include <CBC.h>
 | 
					#include <CBC.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@ -25,6 +25,7 @@ This example runs tests on the CFB implementation to verify correct behaviour.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <Crypto.h>
 | 
					#include <Crypto.h>
 | 
				
			||||||
 | 
					#include <CryptoLegacy.h>
 | 
				
			||||||
#include <AES.h>
 | 
					#include <AES.h>
 | 
				
			||||||
#include <CFB.h>
 | 
					#include <CFB.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@ -25,6 +25,7 @@ This example runs tests on the OFB implementation to verify correct behaviour.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <Crypto.h>
 | 
					#include <Crypto.h>
 | 
				
			||||||
 | 
					#include <CryptoLegacy.h>
 | 
				
			||||||
#include <AES.h>
 | 
					#include <AES.h>
 | 
				
			||||||
#include <OFB.h>
 | 
					#include <OFB.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
							
								
								
									
										3
									
								
								libraries/CryptoLegacy/keywords.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								libraries/CryptoLegacy/keywords.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					CBC	KEYWORD1
 | 
				
			||||||
 | 
					CFB	KEYWORD1
 | 
				
			||||||
 | 
					OFB	KEYWORD1
 | 
				
			||||||
							
								
								
									
										22
									
								
								libraries/CryptoLegacy/library.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								libraries/CryptoLegacy/library.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "CryptoLegacy",
 | 
				
			||||||
 | 
					    "version": "0.1.6",
 | 
				
			||||||
 | 
					    "keywords": "CBC,CFB,OFB",
 | 
				
			||||||
 | 
					    "description": "Legacy ciphers for the Arduino Cryptography Library",
 | 
				
			||||||
 | 
					    "authors":
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "name": "Rhys Weatherley",
 | 
				
			||||||
 | 
					        "email": "rhys.weatherley@gmail.com",
 | 
				
			||||||
 | 
					        "url": "https://rweather.github.io/arduinolibs/crypto.html"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "export": {
 | 
				
			||||||
 | 
					      "include": "libraries/CryptoLegacy"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "repository":
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "type": "git",
 | 
				
			||||||
 | 
					        "url": "https://github.com/rweather/arduinolibs.git"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "frameworks": "arduino",
 | 
				
			||||||
 | 
					    "platforms": "*"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								libraries/CryptoLegacy/library.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								libraries/CryptoLegacy/library.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					name=CryptoLegacy
 | 
				
			||||||
 | 
					version=1.0.0
 | 
				
			||||||
 | 
					author=Rhys Weatherley <rhys.weatherley@gmail.com>
 | 
				
			||||||
 | 
					maintainer=Rhys Weatherley <rhys.weatherley@gmail.com>
 | 
				
			||||||
 | 
					sentence=Legacy algorithms in the Arduino Cryptography Library
 | 
				
			||||||
 | 
					paragraph=This library provides implementations of various legacy cryptography algorithms which should not be used for new protocols but which may be needed when implementing older protocols.
 | 
				
			||||||
 | 
					category=Communication
 | 
				
			||||||
 | 
					url=https://github.com/rweather/arduinolibs
 | 
				
			||||||
 | 
					architectures=*
 | 
				
			||||||
 | 
					includes=CryptoLegacy.h
 | 
				
			||||||
							
								
								
									
										29
									
								
								libraries/CryptoLegacy/src/CryptoLegacy.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								libraries/CryptoLegacy/src/CryptoLegacy.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2018 Southern Storm Software, Pty Ltd.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
				
			||||||
 | 
					 * copy of this software and associated documentation files (the "Software"),
 | 
				
			||||||
 | 
					 * to deal in the Software without restriction, including without limitation
 | 
				
			||||||
 | 
					 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
				
			||||||
 | 
					 * and/or sell copies of the Software, and to permit persons to whom the
 | 
				
			||||||
 | 
					 * Software is furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The above copyright notice and this permission notice shall be included
 | 
				
			||||||
 | 
					 * in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 | 
				
			||||||
 | 
					 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
				
			||||||
 | 
					 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
				
			||||||
 | 
					 * DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CRYPTO_LEGACY_H
 | 
				
			||||||
 | 
					#define CRYPTO_LEGACY_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This header exists to make the Arudino IDE add the library to the
 | 
				
			||||||
 | 
					// include and link paths when the sketch includes <CryptoLegacy.h>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user