mirror of
				https://github.com/taigrr/arduinolibs
				synced 2025-01-18 04:33:12 -08:00 
			
		
		
		
	API for authenticated ciphers
This commit is contained in:
		
							parent
							
								
									35064ebfe9
								
							
						
					
					
						commit
						a8e7932130
					
				
							
								
								
									
										129
									
								
								libraries/Crypto/AuthenticatedCipher.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								libraries/Crypto/AuthenticatedCipher.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,129 @@ | ||||
| /*
 | ||||
|  * Copyright (C) 2015 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. | ||||
|  */ | ||||
| 
 | ||||
| #include "AuthenticatedCipher.h" | ||||
| 
 | ||||
| /**
 | ||||
|  * \class AuthenticatedCipher AuthenticatedCipher.h <AuthenticatedCipher.h> | ||||
|  * \brief Abstract base class for authenticated ciphers. | ||||
|  * | ||||
|  * This class abstracts the details of algorithms that provide Authenticated | ||||
|  * Encryption with Associated Data (AEAD).  Such algorithms combine | ||||
|  * encryption with message authentication to provide a single primitive. | ||||
|  * | ||||
|  * Authenticated ciphers have four parameters: the secret key, an | ||||
|  * initialization vector (called a "nonce" in the literature), the | ||||
|  * plaintext, and some associated data which is to be authenticated | ||||
|  * with the plaintext but not encrypted.  Associated data might be | ||||
|  * sequence numbers, IP addresses, protocol versions, or other information | ||||
|  * that is not secret but is important and unique to the session. | ||||
|  * | ||||
|  * Subclasses encrypt the plaintext content and output the ciphertext. | ||||
|  * Once all plaintext has been processed, the caller should invoke | ||||
|  * computeTag() to obtain the authentication tag to transmit with | ||||
|  * the ciphertext.  When the ciphertext is later decrypted, the checkTag() | ||||
|  * function can be used to check that the data is authentic. | ||||
|  * | ||||
|  * Reference: <a href="http://tools.ietf.org/html/rfc5116">RFC 5116</a> | ||||
|  * | ||||
|  * \sa Cipher | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief Constructs a new authenticated cipher. | ||||
|  */ | ||||
| AuthenticatedCipher::AuthenticatedCipher() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief Destroys this authenticated cipher. | ||||
|  */ | ||||
| AuthenticatedCipher::~AuthenticatedCipher() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn size_t AuthenticatedCipher::tagSize() const | ||||
|  * \brief Returns the size of the authentication tag. | ||||
|  * | ||||
|  * \return The size of the authentication tag in bytes. | ||||
|  * | ||||
|  * By default this function should return the largest tag size supported | ||||
|  * by the authenticated cipher. | ||||
|  * | ||||
|  * \sa computeTag() | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void AuthenticatedCipher::addAuthData(const void *data, size_t len) | ||||
|  * \brief Adds extra data that will be authenticated but not encrypted. | ||||
|  * | ||||
|  * \param data The extra data to be authenticated. | ||||
|  * | ||||
|  * This function must be called before the first call to encrypt() or | ||||
|  * decrypt().  That is, it is assumed that all extra data for authentication | ||||
|  * is available before the first payload data block and that it will be | ||||
|  * prepended to the payload for authentication.  If the subclass needs to | ||||
|  * process the extra data after the payload, then it is responsible for saving | ||||
|  * \a data away until it is needed during computeTag() or checkTag(). | ||||
|  * | ||||
|  * This function can be called multiple times with separate extra data | ||||
|  * blocks for authentication.  All such data will be concatenated into a | ||||
|  * single block for authentication purposes. | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void AuthenticatedCipher::AuthenticatedCipher::computeTag(void *tag, size_t len) | ||||
|  * \brief Finalizes the encryption process and computes the authentication tag. | ||||
|  * | ||||
|  * \param tag Points to the buffer to write the tag to. | ||||
|  * \param len The length of the tag, which may be less than tagSize() to | ||||
|  * truncate the tag to the first \a len bytes. | ||||
|  * | ||||
|  * \sa checkTag() | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn bool AuthenticatedCipher::AuthenticatedCipher::checkTag(const void *tag, size_t len) | ||||
|  * \brief Finalizes the decryption process and checks the authentication tag. | ||||
|  * | ||||
|  * \param tag The tag value from the incoming ciphertext to be checked. | ||||
|  * \param len The length of the tag value in bytes, which may be less | ||||
|  * than tagSize(). | ||||
|  * | ||||
|  * \return Returns true if the \a tag is identical to the first \a len | ||||
|  * bytes of the authentication tag that was calculated during the | ||||
|  * decryption process.  Returns false otherwise. | ||||
|  * | ||||
|  * This function must be called after the final block of ciphertext is | ||||
|  * passed to decrypt() to determine if the data could be authenticated. | ||||
|  * | ||||
|  * \note Authenticated cipher modes usually require that if the tag could | ||||
|  * not be verified, then all of the data that was previously decrypted | ||||
|  * <i>must</i> be discarded.  It is unwise to use the decrypted data for | ||||
|  * any purpose before it can be verified.  Callers are responsible for | ||||
|  * ensuring that any data returned via previous calls to decrypt() is | ||||
|  * discarded if checkTag() returns false. | ||||
|  * | ||||
|  * \sa computeTag() | ||||
|  */ | ||||
							
								
								
									
										42
									
								
								libraries/Crypto/AuthenticatedCipher.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								libraries/Crypto/AuthenticatedCipher.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| /*
 | ||||
|  * Copyright (C) 2015 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_AUTHENTICATEDCIPHER_h | ||||
| #define CRYPTO_AUTHENTICATEDCIPHER_h | ||||
| 
 | ||||
| #include "Cipher.h" | ||||
| 
 | ||||
| class AuthenticatedCipher : public Cipher | ||||
| { | ||||
| public: | ||||
|     AuthenticatedCipher(); | ||||
|     virtual ~AuthenticatedCipher(); | ||||
| 
 | ||||
|     virtual size_t tagSize() const = 0; | ||||
| 
 | ||||
|     virtual void addAuthData(const void *data, size_t len) = 0; | ||||
| 
 | ||||
|     virtual void computeTag(void *tag, size_t len) = 0; | ||||
|     virtual bool checkTag(const void *tag, size_t len) = 0; | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user