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