57 lines
1.7 KiB
C
57 lines
1.7 KiB
C
/* LibTomCrypt, modular cryptographic library -- Tom St Denis */
|
|
/* SPDX-License-Identifier: Unlicense */
|
|
#include "tomcrypt_private.h"
|
|
|
|
/**
|
|
@file ecb_encrypt.c
|
|
ECB implementation, encrypt a block, Tom St Denis
|
|
*/
|
|
|
|
#ifdef LTC_ECB_MODE
|
|
int ecb_encrypt_block(const unsigned char *pt, unsigned char *ct, const symmetric_ECB *ecb)
|
|
{
|
|
/* check for accel */
|
|
if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) {
|
|
return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, 1, &ecb->key);
|
|
}
|
|
return cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key);
|
|
}
|
|
|
|
/**
|
|
ECB encrypt
|
|
@param pt Plaintext
|
|
@param ct [out] Ciphertext
|
|
@param len The number of octets to process (must be multiple of the cipher block size)
|
|
@param ecb ECB state
|
|
@return CRYPT_OK if successful
|
|
*/
|
|
int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, const symmetric_ECB *ecb)
|
|
{
|
|
int err;
|
|
LTC_ARGCHK(pt != NULL);
|
|
LTC_ARGCHK(ct != NULL);
|
|
LTC_ARGCHK(ecb != NULL);
|
|
if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) {
|
|
return err;
|
|
}
|
|
if (len % cipher_descriptor[ecb->cipher].block_length) {
|
|
return CRYPT_INVALID_ARG;
|
|
}
|
|
|
|
/* check for accel */
|
|
if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) {
|
|
return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
|
|
}
|
|
while (len) {
|
|
if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) {
|
|
return err;
|
|
}
|
|
pt += cipher_descriptor[ecb->cipher].block_length;
|
|
ct += cipher_descriptor[ecb->cipher].block_length;
|
|
len -= cipher_descriptor[ecb->cipher].block_length;
|
|
}
|
|
return CRYPT_OK;
|
|
}
|
|
|
|
#endif
|