mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2025-01-15 11:05:18 +00:00
117 lines
3.3 KiB
C
117 lines
3.3 KiB
C
/**
|
|
* @file ecb.c
|
|
* @brief Electronic Codebook (ECB) mode
|
|
*
|
|
* @section License
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*
|
|
* Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.
|
|
*
|
|
* This file is part of CycloneCRYPTO Open.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* @section Description
|
|
*
|
|
* The Electronic Codebook (ECB) mode is a confidentiality mode that features,
|
|
* for a given key, the assignment of a fixed ciphertext block to each
|
|
* plaintext block, analogous to the assignment of code words in a codebook.
|
|
* Refer to SP 800-38A for more details
|
|
*
|
|
* @author Oryx Embedded SARL (www.oryx-embedded.com)
|
|
* @version 2.4.4
|
|
**/
|
|
|
|
//Switch to the appropriate trace level
|
|
#define TRACE_LEVEL CRYPTO_TRACE_LEVEL
|
|
|
|
//Dependencies
|
|
#include "core/crypto.h"
|
|
#include "cipher_modes/ecb.h"
|
|
|
|
//Check crypto library configuration
|
|
#if (ECB_SUPPORT == ENABLED)
|
|
|
|
|
|
/**
|
|
* @brief ECB encryption
|
|
* @param[in] cipher Cipher algorithm
|
|
* @param[in] context Cipher algorithm context
|
|
* @param[in] p Plaintext to be encrypted
|
|
* @param[out] c Ciphertext resulting from the encryption
|
|
* @param[in] length Total number of data bytes to be encrypted
|
|
* @return Error code
|
|
**/
|
|
|
|
__weak_func error_t ecbEncrypt(const CipherAlgo *cipher, void *context,
|
|
const uint8_t *p, uint8_t *c, size_t length)
|
|
{
|
|
//ECB mode operates in a block-by-block fashion
|
|
while(length >= cipher->blockSize)
|
|
{
|
|
//Encrypt current block
|
|
cipher->encryptBlock(context, p, c);
|
|
|
|
//Next block
|
|
p += cipher->blockSize;
|
|
c += cipher->blockSize;
|
|
length -= cipher->blockSize;
|
|
}
|
|
|
|
//The plaintext must be a multiple of the block size
|
|
if(length != 0)
|
|
return ERROR_INVALID_LENGTH;
|
|
|
|
//Successful encryption
|
|
return NO_ERROR;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief ECB decryption
|
|
* @param[in] cipher Cipher algorithm
|
|
* @param[in] context Cipher algorithm context
|
|
* @param[in] c Ciphertext to be decrypted
|
|
* @param[out] p Plaintext resulting from the decryption
|
|
* @param[in] length Total number of data bytes to be decrypted
|
|
* @return Error code
|
|
**/
|
|
|
|
__weak_func error_t ecbDecrypt(const CipherAlgo *cipher, void *context,
|
|
const uint8_t *c, uint8_t *p, size_t length)
|
|
{
|
|
//ECB mode operates in a block-by-block fashion
|
|
while(length >= cipher->blockSize)
|
|
{
|
|
//Decrypt current block
|
|
cipher->decryptBlock(context, c, p);
|
|
|
|
//Next block
|
|
c += cipher->blockSize;
|
|
p += cipher->blockSize;
|
|
length -= cipher->blockSize;
|
|
}
|
|
|
|
//The ciphertext must be a multiple of the block size
|
|
if(length != 0)
|
|
return ERROR_INVALID_LENGTH;
|
|
|
|
//Successful encryption
|
|
return NO_ERROR;
|
|
}
|
|
|
|
#endif
|