1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis 2 * 3 * LibTomCrypt is a library that provides various cryptographic 4 * algorithms in a highly modular and flexible manner. 5 * 6 * The library is free for all purposes without any express 7 * guarantee it works. 8 * 9 * Tom St Denis, tomstdenis (at) gmail.com, http://libtomcrypt.com 10 */ 11 #include "tomcrypt.h" 12 13 /** 14 @file ofb_encrypt.c 15 OFB implementation, encrypt data, Tom St Denis 16 */ 17 18 #ifdef LTC_OFB_MODE 19 20 /** 21 OFB encrypt 22 @param pt Plaintext 23 @param ct [out] Ciphertext 24 @param len Length of plaintext (octets) 25 @param ofb OFB state 26 @return CRYPT_OK if successful 27 */ 28 int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb) 29 { 30 int err; 31 LTC_ARGCHK(pt != NULL); 32 LTC_ARGCHK(ct != NULL); 33 LTC_ARGCHK(ofb != NULL); 34 if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { 35 return err; 36 } 37 38 /* is blocklen/padlen valid? */ 39 if (ofb->blocklen < 0 || ofb->blocklen > (int)sizeof(ofb->IV) || 40 ofb->padlen < 0 || ofb->padlen > (int)sizeof(ofb->IV)) { 41 return CRYPT_INVALID_ARG; 42 } 43 44 while (len-- > 0) { 45 if (ofb->padlen == ofb->blocklen) { 46 if ((err = cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key)) != CRYPT_OK) { 47 return err; 48 } 49 ofb->padlen = 0; 50 } 51 *ct++ = *pt++ ^ ofb->IV[(ofb->padlen)++]; 52 } 53 return CRYPT_OK; 54 } 55 56 #endif 57 58 /* $Source: /cvs/libtom/libtomcrypt/src/modes/ofb/ofb_encrypt.c,v $ */ 59 /* $Revision: 1.7 $ */ 60 /* $Date: 2006/11/26 01:45:14 $ */ 61