Encrypt or decrypt a block of data using the encryption context.
void mco_crypt_block(mco_crypt_ctx_t const* crypt_ctx, uint1* block, uint4 block_size, uint8 block_offs);
| crypt_ctx | The address of the initialized encryption context (see mco_crypt_init_ctx()) |
| block | The address of the data array to be encrypted and receive the encrypted result |
| block_size | The size of the block |
| block_offs | The offset into the data array where the block will be read or written |
This function encrypts or decrypts a block of data using the specified pre-initialized encryption context crypt_cts. Where block and block_size are features of the block itself while block_offs is an offset of current block in whole array of data (see usage in the example below). This function is useful for block-based operations like disk drive storage.
(Note that instead of block-based operations the functions mco_crypt_stream() and mco_crypt_init_state() provide stream-based encryption or decryption.)
| void | No value returned |
The following code snippet demonstrates encrypting / decrypting an external file:
/* Code sample for block-based encryption */
FILE *fin, *fout;
char block[512];
const int block_size = sizeof(block);
const char *cipher = "my cipher key";
mco_crypt_ctx_t crypt_ctx;
size_t n;
uint8 pos = 0;
mco_crypt_init_ctx(&crypt_ctx, cipher);
fin = fopen("unencrypted.file", "rb");
fout = fopen("encrypted.file", "wb");
do
{
n = fread(block, block_size, 1, fin);
mco_crypt_block(&crypt_ctx, block, n, pos);
fwrite(block, n, 1, fout);
pos += block_size;
} while (n == block_size);
fclose(fin);
fclose(fout);