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:
|
||||
|
||||
* 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.
|
||||
* Port the library to ESP8266 and ESP32.
|
||||
* Make the RNG class more robust if the app doesn't call begin() or loop().
|
||||
|
@ -657,6 +657,7 @@ WARN_LOGFILE =
|
||||
|
||||
INPUT = ../libraries/Crypto \
|
||||
../libraries/CryptoLW/src \
|
||||
../libraries/CryptoLegacy/src \
|
||||
../libraries/NewHope \
|
||||
../libraries/RingOscillatorNoiseSource \
|
||||
../libraries/TransistorNoiseSource \
|
||||
|
@ -24,28 +24,73 @@
|
||||
\file crypto.dox
|
||||
\page crypto Arduino Cryptography Library
|
||||
|
||||
\section crypto_algorithms Supported Algorithms
|
||||
\section crypto_algorithms Supported algorithms
|
||||
|
||||
\li Block ciphers: AES128, AES192, AES256, Speck
|
||||
\li Block cipher modes: CTR, CFB, CBC, OFB, EAX, GCM, XTS
|
||||
The library is split into four main sections: core, light-weight, legacy,
|
||||
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 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 Extendable output functions (XOF's): SHAKE128, SHAKE256
|
||||
\li Message authenticators: Poly1305, GHASH, OMAC
|
||||
\li Public key algorithms: Curve25519, Ed25519, P521
|
||||
\li Post-quantum algorithms: NewHope
|
||||
\li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource, RingOscillatorNoiseSource
|
||||
\li Random number generation: \link RNGClass RNG\endlink
|
||||
|
||||
Reduced memory versions of some algorithms (encryption is slower, but the
|
||||
RAM required for the key schedule is less):
|
||||
|
||||
\li AESTiny128, AESSmall128, AESTiny256, AESSmall256
|
||||
\li SpeckTiny, SpeckSmall
|
||||
|
||||
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"
|
||||
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
|
||||
|
||||
|
@ -5,15 +5,18 @@ TOPDIR = ../..
|
||||
SRCDIR = $(TOPDIR)/libraries/Crypto
|
||||
SRCDIR2 = $(TOPDIR)/libraries/NewHope
|
||||
SRCDIR3 = $(TOPDIR)/libraries/CryptoLW
|
||||
SRCDIR4 = $(TOPDIR)/libraries/CryptoLegacy
|
||||
|
||||
#VPATH = $(SRCDIR)
|
||||
vpath %.cpp $(SRCDIR)
|
||||
vpath %.cpp $(SRCDIR2)
|
||||
vpath %.cpp $(SRCDIR3)/src
|
||||
vpath %.cpp $(SRCDIR4)/src
|
||||
vpath %.o .
|
||||
vpath %.ino $(SRCDIR)/examples
|
||||
vpath %.ino $(SRCDIR2)/examples
|
||||
vpath %.ino $(SRCDIR3)/examples
|
||||
vpath %.ino $(SRCDIR4)/examples
|
||||
vpath %.sketch .
|
||||
|
||||
LIBRARY = libCrypto.a
|
||||
@ -22,6 +25,7 @@ CPPFLAGS = \
|
||||
-I$(TOPDIR)/host/emulation \
|
||||
-I$(TOPDIR)/libraries/Crypto \
|
||||
-I$(TOPDIR)/libraries/CryptoLW/src \
|
||||
-I$(TOPDIR)/libraries/CryptoLegacy/src \
|
||||
-I$(TOPDIR)/libraries/NewHope \
|
||||
-DHOST_BUILD
|
||||
|
||||
|
@ -25,6 +25,7 @@ This example runs tests on the CBC implementation to verify correct behaviour.
|
||||
*/
|
||||
|
||||
#include <Crypto.h>
|
||||
#include <CryptoLegacy.h>
|
||||
#include <AES.h>
|
||||
#include <CBC.h>
|
||||
#include <string.h>
|
@ -25,6 +25,7 @@ This example runs tests on the CFB implementation to verify correct behaviour.
|
||||
*/
|
||||
|
||||
#include <Crypto.h>
|
||||
#include <CryptoLegacy.h>
|
||||
#include <AES.h>
|
||||
#include <CFB.h>
|
||||
#include <string.h>
|
@ -25,6 +25,7 @@ This example runs tests on the OFB implementation to verify correct behaviour.
|
||||
*/
|
||||
|
||||
#include <Crypto.h>
|
||||
#include <CryptoLegacy.h>
|
||||
#include <AES.h>
|
||||
#include <OFB.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