1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
3
* LibTomCrypt is a library that provides various cryptographic
4
* algorithms in a highly modular and flexible manner.
6
* The library is free for all purposes without any express
9
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
14
OCB implementation, encrypt data, by Tom St Denis
21
Encrypt a block of data with OCB.
22
@param ocb The OCB state
23
@param pt The plaintext (length of the block size of the block cipher)
24
@param ct [out] The ciphertext (same size as the pt)
25
@return CRYPT_OK if successful
27
int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct)
29
unsigned char Z[MAXBLOCKSIZE], tmp[MAXBLOCKSIZE];
32
LTC_ARGCHK(ocb != NULL);
33
LTC_ARGCHK(pt != NULL);
34
LTC_ARGCHK(ct != NULL);
35
if ((err = cipher_is_valid(ocb->cipher)) != CRYPT_OK) {
38
if (ocb->block_len != cipher_descriptor[ocb->cipher].block_length) {
39
return CRYPT_INVALID_ARG;
42
/* compute checksum */
43
for (x = 0; x < ocb->block_len; x++) {
44
ocb->checksum[x] ^= pt[x];
48
ocb_shift_xor(ocb, Z);
50
/* xor pt in, encrypt, xor Z out */
51
for (x = 0; x < ocb->block_len; x++) {
52
tmp[x] = pt[x] ^ Z[x];
54
cipher_descriptor[ocb->cipher].ecb_encrypt(tmp, ct, &ocb->key);
55
for (x = 0; x < ocb->block_len; x++) {
59
#ifdef LTC_CLEAN_STACK
60
zeromem(Z, sizeof(Z));
61
zeromem(tmp, sizeof(tmp));
68
/* $Source: /cvs/libtom/libtomcrypt/src/encauth/ocb/ocb_encrypt.c,v $ */
69
/* $Revision: 1.3 $ */
70
/* $Date: 2005/05/05 14:35:58 $ */