Encryption wrapper for BasicStream. More...
#include <EncryptedStream.h>
Public Types | |
enum | Error { None, InvalidFormat, UnsupportedData, DecryptionFailed, NoRomFound, RomTooLarge, DowngradeNotAllowed, VerificationFailed, FlashWriteFailed, RomActivationFailed, OutOfMemory, Internal } |
Error code values. More... | |
Public Member Functions | |||||||
EncryptedStream ()=default | |||||||
~EncryptedStream () | |||||||
size_t | write (const uint8_t *data, size_t size) override | ||||||
Process an arbitrarily sized chunk of an encrypted OTA upgrade file. More... | |||||||
size_t | write (uint8_t charToWrite) override | ||||||
Write a single character to the stream. More... | |||||||
size_t | write (const char *str) | ||||||
Writes a c-string to output stream. More... | |||||||
size_t | write (const char *buffer, size_t size) | ||||||
Writes characters from a buffer to output stream. More... | |||||||
bool | hasError () const | ||||||
Returns true if an error happened during the upgrade process. More... | |||||||
uint16_t | readMemoryBlock (char *data, int bufSize) override | ||||||
Read a block of memory. More... | |||||||
virtual int | available () override | ||||||
Return the total length of the stream. More... | |||||||
bool | isFinished () override | ||||||
Check if all data has been read. More... | |||||||
virtual size_t | copyFrom (IDataSourceStream *source, size_t size) | ||||||
Copy data from a source stream. More... | |||||||
virtual StreamType | getStreamType () const | ||||||
Get the stream type. More... | |||||||
virtual bool | isValid () const | ||||||
Determine if the stream object contains valid data. More... | |||||||
int | read () override | ||||||
Read one character and moves the stream pointer. More... | |||||||
int | peek () override | ||||||
Read a character without advancing the stream pointer. More... | |||||||
virtual int | seekFrom (int offset, unsigned origin) | ||||||
Change position in stream. More... | |||||||
virtual bool | seek (int len) | ||||||
Move read cursor. More... | |||||||
int | length () | ||||||
Return the total length of the stream. More... | |||||||
void | flush () override | ||||||
virtual String | id () const | ||||||
Returns unique id of the resource. More... | |||||||
virtual String | getName () const | ||||||
Returns name of the resource. More... | |||||||
String | readString (size_t maxLen=UINT16_MAX) | ||||||
Overrides Stream method for more efficient reading. More... | |||||||
String | readString () | ||||||
void | setTimeout (unsigned long timeout) | ||||||
bool | find (char *target) | ||||||
bool | find (char *target, size_t length) | ||||||
bool | findUntil (char *target, char *terminator) | ||||||
bool | findUntil (char *target, size_t targetLen, char *terminate, size_t termLen) | ||||||
long | parseInt () | ||||||
float | parseFloat () | ||||||
size_t | readBytes (char *buffer, size_t length) | ||||||
size_t | readBytesUntil (char terminator, char *buffer, size_t length) | ||||||
String | readStringUntil (char terminator) | ||||||
virtual int | indexOf (char c) | ||||||
int | getWriteError () | ||||||
Gets last error. More... | |||||||
void | clearWriteError () | ||||||
Clears the last write error. More... | |||||||
size_t | print (char c) | ||||||
Prints a single character to output stream. More... | |||||||
size_t | print (const char str[]) | ||||||
Prints a c-string to output stream. More... | |||||||
size_t | print (double num, int digits=2) | ||||||
Print a floating-point number to output stream. More... | |||||||
size_t | print (const Printable &p) | ||||||
Prints a Printable object to output stream. More... | |||||||
size_t | print (const String &s) | ||||||
Prints a String to output stream. More... | |||||||
size_t | println () | ||||||
Prints a newline to output stream. More... | |||||||
size_t | println (const char str[]) | ||||||
Prints a c-string to output stream, appending newline. More... | |||||||
size_t | println (char c) | ||||||
Prints a single character to output stream, appending newline. More... | |||||||
size_t | println (double num, int digits=2) | ||||||
Print a floating-point number to output stream, appending newline. More... | |||||||
size_t | println (const Printable &p) | ||||||
Prints a Printable object to output stream, appending newline. More... | |||||||
size_t | println (const String &s) | ||||||
Prints a String to output stream, appending newline. More... | |||||||
size_t | printf (const char *fmt,...) __attribute__((format(printf | ||||||
Prints a formatted c-string to output stream. More... | |||||||
Print an integral number to output stream | |||||||
| |||||||
size_t | print (unsigned long num, int base=DEC) | ||||||
size_t | print (const unsigned long long &num, int base=DEC) | ||||||
size_t | print (long, int base=DEC) | ||||||
size_t | print (const long long &, int base=DEC) | ||||||
size_t | print (unsigned int num, int base=DEC) | ||||||
size_t | print (unsigned char num, int base=DEC) | ||||||
size_t | print (int num, int base=DEC) | ||||||
Print an integral number to output stream, appending newline | |||||||
| |||||||
size_t | println (unsigned char num, int base=DEC) | ||||||
size_t | println (unsigned int num, int base=DEC) | ||||||
size_t | println (unsigned long num, int base=DEC) | ||||||
size_t | println (const unsigned long long &num, int base=DEC) | ||||||
size_t | println (int num, int base=DEC) | ||||||
size_t | println (long num, int base=DEC) | ||||||
size_t | println (const long long &num, int base=DEC) | ||||||
Static Public Member Functions | |
static String | errorToString (Error code) |
Convert error code to string. More... | |
Public Attributes | |
Error | errorCode = Error::None |
Error code. Only relevant if hasError() returns true . More... | |
uint8_t | header [crypto_secretstream_xchacha20poly1305_HEADERBYTES] |
uint16_t | chunkSizeMinusOne |
Protected Member Functions | |
void | setError (Error ec) |
int | timedRead () |
int | timedPeek () |
int | peekNextDigit () |
long | parseInt (char skipChar) |
float | parseFloat (char skipChar) |
void | setWriteError (int err=1) |
Protected Attributes | |
unsigned long | receiveTimeout = 1000 |
unsigned long | startMillis = 0 |
Detailed Description
Encryption wrapper for BasicStream.
The class processes encrypted firmware upgrade files created by otatool.py. A buffer is allocated dynamically to fit the largest chunk of the encryption container (2kB unless otatool.py was modified). The actual processing of the decrypted data is defered to BasicStream.
Member Enumeration Documentation
◆ Error
|
inherited |
Error code values.
Enumerator | |
---|---|
None | No error occured thus far (default value of |
InvalidFormat | Invalid/unsupported upgrade file format. |
UnsupportedData | Some content of the upgrade file is not supported by this version of OtaUpgradeStream. |
DecryptionFailed | Decryption failed. Probably wrong decryption key. |
NoRomFound | The file did not contain a ROM image suitable for the start address of the slot to upgrade. |
RomTooLarge | The contained ROM image does not fit into the application firmware slot. |
DowngradeNotAllowed | Attempt to downgrade to older firmware version. |
VerificationFailed | Signature/checksum verification failed - updated ROM not activated. |
FlashWriteFailed | Error while writing to Flash memory. |
RomActivationFailed | Error while activating updated ROM slot. |
OutOfMemory | Dynamic memory allocation failed. |
Internal | An unexpected error occured. |
Constructor & Destructor Documentation
◆ EncryptedStream()
|
default |
◆ ~EncryptedStream()
|
inline |
Member Function Documentation
◆ available()
|
inlineoverridevirtualinherited |
Return the total length of the stream.
- Return values
-
int -1 is returned when the size cannot be determined
Reimplemented from IDataSourceStream.
◆ clearWriteError()
|
inlineinherited |
Clears the last write error.
◆ copyFrom()
|
virtualinherited |
Copy data from a source stream.
- Parameters
-
source Stream to read data from size Quantity of chars to write, determines size of intermediate buffer to use
- Return values
-
size_t Quantity of chars actually written, may be less than requested
◆ errorToString()
Convert error code to string.
- See also
- errorCode
◆ find() [1/2]
|
inherited |
◆ find() [2/2]
|
inherited |
◆ findUntil() [1/2]
|
inherited |
◆ findUntil() [2/2]
|
inherited |
◆ flush()
|
inlineoverridevirtualinherited |
Implements Stream.
Reimplemented in HardwareSerial.
◆ getName()
|
inlinevirtualinherited |
Returns name of the resource.
- Return values
-
String
- Note
- Commonly used to obtain name of file
Reimplemented in TemplateStream, FileStream, StreamTransformer, GdbFileStream, and HostFileStream.
◆ getStreamType()
|
inlinevirtualinherited |
Get the stream type.
- Return values
-
StreamType The stream type.
Reimplemented in FileStream, TemplateStream, StreamTransformer, HostFileStream, FSTR::Stream, CircularBuffer, JsonObjectStream, LimitedMemoryStream, MemoryDataStream, EndlessMemoryStream, UrlencodedOutputStream, and MultiStream.
◆ getWriteError()
|
inlineinherited |
Gets last error.
- Return values
-
int Error number of last write error
◆ hasError()
|
inlineinherited |
Returns true if an error happened during the upgrade process.
- See also
errorCode
◆ id()
|
inlinevirtualinherited |
Returns unique id of the resource.
- Return values
-
String the unique id of the stream.
Reimplemented in FileStream, GdbFileStream, and CircularBuffer.
◆ indexOf()
|
inlinevirtualinherited |
Reimplemented in HardwareSerial.
◆ isFinished()
|
inlineoverridevirtualinherited |
◆ isValid()
|
inlinevirtualinherited |
Determine if the stream object contains valid data.
- Return values
-
bool true if valid, false if invalid
- Note
- Where inherited classes are initialised by constructor this method indicates whether that was successful or not (e.g. FileStream)
Reimplemented in FileStream, GdbFileStream, and HostFileStream.
◆ length()
|
inlineinherited |
Return the total length of the stream.
- Return values
-
int -1 is returned when the size cannot be determined
- Deprecated:
- Use
available()
instead
◆ parseFloat() [1/2]
|
inherited |
◆ parseFloat() [2/2]
|
protectedinherited |
◆ parseInt() [1/2]
|
inherited |
◆ parseInt() [2/2]
|
protectedinherited |
◆ peek()
|
overridevirtualinherited |
Read a character without advancing the stream pointer.
- Return values
-
int The character that was read or -1 if none is available
Implements Stream.
Reimplemented in HardwareSerial.
◆ peekNextDigit()
|
protectedinherited |
◆ print() [1/12]
|
inlineinherited |
Prints a single character to output stream.
- Parameters
-
c Character to print
- Return values
-
size_t Quantity of characters written to stream
◆ print() [2/12]
|
inlineinherited |
Prints a c-string to output stream.
- Parameters
-
str c-string to print
- Return values
-
size_t Quantity of characters written to output stream
◆ print() [3/12]
◆ print() [4/12]
◆ print() [5/12]
◆ print() [6/12]
◆ print() [7/12]
◆ print() [8/12]
◆ print() [9/12]
◆ print() [10/12]
|
inlineinherited |
Print a floating-point number to output stream.
- Parameters
-
num Number to print digits The decimal places to print (Default: 2, e.g. 21.35)
- Return values
-
size_t Quantity of characters written to stream
◆ print() [11/12]
|
inlineinherited |
Prints a Printable object to output stream.
- Parameters
-
p Object to print
- Return values
-
size_t Quantity of characters written to stream
◆ print() [12/12]
|
inlineinherited |
◆ printf()
|
inherited |
Prints a formatted c-string to output stream.
- Parameters
-
fmt Pointer to formated c-string to print ... Parameters for placeholders within formated string
- Return values
-
size_t Quantity of characters written to stream
- Note
- Use standard printf placeholders, e.g. d for integer, s for c-string, etc.
◆ println() [1/13]
|
inlineinherited |
Prints a newline to output stream.
- Return values
-
size_t Quantity of characters written to stream
◆ println() [2/13]
|
inlineinherited |
Prints a c-string to output stream, appending newline.
- Parameters
-
str c-string to print
- Return values
-
size_t Quantity of characters written to stream
◆ println() [3/13]
|
inlineinherited |
Prints a single character to output stream, appending newline.
- Parameters
-
c Character to print
- Return values
-
size_t Quantity of characters written to stream
◆ println() [4/13]
◆ println() [5/13]
◆ println() [6/13]
◆ println() [7/13]
◆ println() [8/13]
◆ println() [9/13]
◆ println() [10/13]
◆ println() [11/13]
|
inlineinherited |
Print a floating-point number to output stream, appending newline.
- Parameters
-
num Number to print digits The decimal places to print (Default: 2, e.g. 21.35)
- Return values
-
size_t Quantity of characters written to stream
◆ println() [12/13]
|
inlineinherited |
Prints a Printable object to output stream, appending newline.
- Parameters
-
p Object to print
- Return values
-
size_t Quantity of characters written to stream
◆ println() [13/13]
|
inlineinherited |
◆ read()
|
overridevirtualinherited |
Read one character and moves the stream pointer.
- Return values
-
The character that was read or -1 if none is available
Implements Stream.
Reimplemented in HardwareSerial.
◆ readBytes()
|
inherited |
◆ readBytesUntil()
|
inherited |
◆ readMemoryBlock()
|
inlineoverridevirtualinherited |
Read a block of memory.
- Parameters
-
data Pointer to the data to be read bufSize Quantity of chars to read
- Return values
-
uint16_t Quantity of chars read
- Todo:
- Should IDataSourceStream::readMemoryBlock return same data type as its bufSize param?
Implements IDataSourceStream.
◆ readString() [1/2]
|
inherited |
◆ readString() [2/2]
|
inherited |
Overrides Stream method for more efficient reading.
- Note
- Content is read using
readMemoryBlock()
so read position (for seekable streams) is not changed
◆ readStringUntil()
|
inherited |
◆ seek()
Move read cursor.
- Parameters
-
len Relative cursor adjustment
- Return values
-
bool True on success.
Reimplemented in HardwareSerial, StreamTransformer, TemplateStream, CircularBuffer, UrlencodedOutputStream, LimitedMemoryStream, EndlessMemoryStream, and MultiStream.
◆ seekFrom()
Change position in stream.
- Parameters
-
offset origin SEEK_SET, SEEK_CUR, SEEK_END
- Return values
-
New position, < 0 on error
- Note
- This method is implemented by streams which support random seeking, such as files and memory streams.
Reimplemented in FileStream, MemoryDataStream, HostFileStream, FSTR::Stream, and GdbFileStream.
◆ setError()
|
protectedinherited |
◆ setTimeout()
|
inherited |
◆ setWriteError()
|
inlineprotectedinherited |
◆ timedPeek()
|
protectedinherited |
◆ timedRead()
|
protectedinherited |
◆ write() [1/4]
|
inlineoverridevirtualinherited |
Write a single character to the stream.
- Parameters
-
charToWrite
- Return values
-
size_t Number of chars written (1 on success, 0 on failure)
Reimplemented from IDataSourceStream.
◆ write() [2/4]
|
overridevirtual |
Process an arbitrarily sized chunk of an encrypted OTA upgrade file.
- Parameters
-
data Pointer to chunk of data. size Size of chunk pointed to by data in bytes.
- Returns
- If less than size, an error occured. Check
errorCode
for more details.
- Note
- size does not have to match the chunk size used by otatool.py
Reimplemented from OtaUpgrade::BasicStream.
◆ write() [3/4]
|
inlineinherited |
Writes a c-string to output stream.
- Parameters
-
str Pointer to c-string
- Return values
-
size_t Quantity of characters written to stream
◆ write() [4/4]
|
inlineinherited |
Writes characters from a buffer to output stream.
- Parameters
-
buffer Pointer to character buffer size Quantity of characters to write
- Return values
-
size_t Quantity of characters written to stream
Member Data Documentation
◆ chunkSizeMinusOne
uint16_t OtaUpgrade::EncryptedStream::chunkSizeMinusOne |
◆ errorCode
|
inherited |
Error code. Only relevant if hasError()
returns true
.
◆ header
uint8_t OtaUpgrade::EncryptedStream::header[crypto_secretstream_xchacha20poly1305_HEADERBYTES] |
◆ receiveTimeout
|
protectedinherited |
◆ startMillis
|
protectedinherited |
The documentation for this class was generated from the following file: