| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /* LibTomCrypt, modular cryptographic library -- Tom St Denis
- *
- * LibTomCrypt is a library that provides various cryptographic
- * algorithms in a highly modular and flexible manner.
- *
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, [email protected], http://libtomcrypt.org
- */
- #include "mycrypt.h"
- #ifdef OFB
- int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb)
- {
- int err;
- _ARGCHK(pt != NULL);
- _ARGCHK(ct != NULL);
- _ARGCHK(ofb != NULL);
- if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) {
- return err;
- }
-
- /* is blocklen/padlen valid? */
- if (ofb->blocklen < 0 || ofb->blocklen > (int)sizeof(ofb->IV) ||
- ofb->padlen < 0 || ofb->padlen > (int)sizeof(ofb->IV)) {
- return CRYPT_INVALID_ARG;
- }
-
- while (len-- > 0) {
- if (ofb->padlen == ofb->blocklen) {
- cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key);
- ofb->padlen = 0;
- }
- *ct++ = *pt++ ^ ofb->IV[ofb->padlen++];
- }
- return CRYPT_OK;
- }
- #endif
|