Annotation of truecrypt/crypto/c_enc.c, revision 1.1.1.4

1.1.1.4 ! root        1: /* Deprecated/legacy */
        !             2: 
1.1       root        3: /* crypto/cast/c_enc.c */
                      4: /* Copyright (C) 1995-1997 Eric Young ([email protected])
                      5:  * All rights reserved.
                      6:  *
                      7:  * This package is an SSL implementation written
                      8:  * by Eric Young ([email protected]).
                      9:  * The implementation was written so as to conform with Netscapes SSL.
                     10:  * 
                     11:  * This library is free for commercial and non-commercial use as long as
                     12:  * the following conditions are aheared to.  The following conditions
                     13:  * apply to all code found in this distribution, be it the RC4, RSA,
                     14:  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
                     15:  * included with this distribution is covered by the same copyright terms
                     16:  * except that the holder is Tim Hudson ([email protected]).
                     17:  * 
                     18:  * Copyright remains Eric Young's, and as such any Copyright notices in
                     19:  * the code are not to be removed.
                     20:  * If this package is used in a product, Eric Young should be given attribution
                     21:  * as the author of the parts of the library used.
                     22:  * This can be in the form of a textual message at program startup or
                     23:  * in documentation (online or textual) provided with the package.
                     24:  * 
                     25:  * Redistribution and use in source and binary forms, with or without
                     26:  * modification, are permitted provided that the following conditions
                     27:  * are met:
                     28:  * 1. Redistributions of source code must retain the copyright
                     29:  *    notice, this list of conditions and the following disclaimer.
                     30:  * 2. Redistributions in binary form must reproduce the above copyright
                     31:  *    notice, this list of conditions and the following disclaimer in the
                     32:  *    documentation and/or other materials provided with the distribution.
                     33:  * 3. All advertising materials mentioning features or use of this software
                     34:  *    must display the following acknowledgement:
                     35:  *    "This product includes cryptographic software written by
                     36:  *     Eric Young ([email protected])"
                     37:  *    The word 'cryptographic' can be left out if the rouines from the library
                     38:  *    being used are not cryptographic related :-).
                     39:  * 4. If you include any Windows specific code (or a derivative thereof) from 
                     40:  *    the apps directory (application code) you must include an acknowledgement:
                     41:  *    "This product includes software written by Tim Hudson ([email protected])"
                     42:  * 
                     43:  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
                     44:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     45:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     46:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     47:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     48:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     49:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     50:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     51:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     52:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     53:  * SUCH DAMAGE.
                     54:  * 
                     55:  * The licence and distribution terms for any publically available version or
                     56:  * derivative of this code cannot be changed.  i.e. this code cannot simply be
                     57:  * copied and put under another distribution licence
                     58:  * [including the GNU Public Licence.]
                     59:  */
                     60: 
1.1.1.2   root       61: #include "Cast.h"
                     62: #include "Cast_lcl.h"
1.1       root       63: 
                     64: void CAST_encrypt(data,key)
                     65: CAST_LONG *data;
                     66: CAST_KEY *key;
                     67:        {
                     68:        register CAST_LONG l,r,*k,t;
                     69: 
                     70:        k= &(key->data[0]);
                     71:        l=data[0];
                     72:        r=data[1];
                     73: 
                     74:        E_CAST( 0,k,l,r,+,^,-);
                     75:        E_CAST( 1,k,r,l,^,-,+);
                     76:        E_CAST( 2,k,l,r,-,+,^);
                     77:        E_CAST( 3,k,r,l,+,^,-);
                     78:        E_CAST( 4,k,l,r,^,-,+);
                     79:        E_CAST( 5,k,r,l,-,+,^);
                     80:        E_CAST( 6,k,l,r,+,^,-);
                     81:        E_CAST( 7,k,r,l,^,-,+);
                     82:        E_CAST( 8,k,l,r,-,+,^);
                     83:        E_CAST( 9,k,r,l,+,^,-);
                     84:        E_CAST(10,k,l,r,^,-,+);
                     85:        E_CAST(11,k,r,l,-,+,^);
                     86:        E_CAST(12,k,l,r,+,^,-);
                     87:        E_CAST(13,k,r,l,^,-,+);
                     88:        E_CAST(14,k,l,r,-,+,^);
                     89:        E_CAST(15,k,r,l,+,^,-);
                     90: 
                     91:        data[1]=l&0xffffffffL;
                     92:        data[0]=r&0xffffffffL;
                     93:        }
                     94: 
                     95: void CAST_decrypt(data,key)
                     96: CAST_LONG *data;
                     97: CAST_KEY *key;
                     98:        {
                     99:        register CAST_LONG l,r,*k,t;
                    100: 
                    101:        k= &(key->data[0]);
                    102:        l=data[0];
                    103:        r=data[1];
                    104: 
                    105:        E_CAST(15,k,l,r,+,^,-);
                    106:        E_CAST(14,k,r,l,-,+,^);
                    107:        E_CAST(13,k,l,r,^,-,+);
                    108:        E_CAST(12,k,r,l,+,^,-);
                    109:        E_CAST(11,k,l,r,-,+,^);
                    110:        E_CAST(10,k,r,l,^,-,+);
                    111:        E_CAST( 9,k,l,r,+,^,-);
                    112:        E_CAST( 8,k,r,l,-,+,^);
                    113:        E_CAST( 7,k,l,r,^,-,+);
                    114:        E_CAST( 6,k,r,l,+,^,-);
                    115:        E_CAST( 5,k,l,r,-,+,^);
                    116:        E_CAST( 4,k,r,l,^,-,+);
                    117:        E_CAST( 3,k,l,r,+,^,-);
                    118:        E_CAST( 2,k,r,l,-,+,^);
                    119:        E_CAST( 1,k,l,r,^,-,+);
                    120:        E_CAST( 0,k,r,l,+,^,-);
                    121: 
                    122:        data[1]=l&0xffffffffL;
                    123:        data[0]=r&0xffffffffL;
                    124:        }
                    125: 
                    126: void CAST_cbc_encrypt(in, out, length, ks, iv, encrypt)
                    127: unsigned char *in;
                    128: unsigned char *out;
                    129: long length;
                    130: CAST_KEY *ks;
                    131: unsigned char *iv;
                    132: int encrypt;
                    133:        {
                    134:        register CAST_LONG tin0,tin1;
                    135:        register CAST_LONG tout0,tout1,xor0,xor1;
                    136:        register long l=length;
                    137:        CAST_LONG tin[2];
                    138: 
                    139:        if (encrypt)
                    140:                {
                    141:                n2l(iv,tout0);
                    142:                n2l(iv,tout1);
                    143:                iv-=8;
                    144:                for (l-=8; l>=0; l-=8)
                    145:                        {
                    146:                        n2l(in,tin0);
                    147:                        n2l(in,tin1);
                    148:                        tin0^=tout0;
                    149:                        tin1^=tout1;
                    150:                        tin[0]=tin0;
                    151:                        tin[1]=tin1;
                    152:                        CAST_encrypt(tin,ks);
                    153:                        tout0=tin[0];
                    154:                        tout1=tin[1];
                    155:                        l2n(tout0,out);
                    156:                        l2n(tout1,out);
                    157:                        }
                    158:                if (l != -8)
                    159:                        {
                    160:                        n2ln(in,tin0,tin1,l+8);
                    161:                        tin0^=tout0;
                    162:                        tin1^=tout1;
                    163:                        tin[0]=tin0;
                    164:                        tin[1]=tin1;
                    165:                        CAST_encrypt(tin,ks);
                    166:                        tout0=tin[0];
                    167:                        tout1=tin[1];
                    168:                        l2n(tout0,out);
                    169:                        l2n(tout1,out);
                    170:                        }
                    171:                l2n(tout0,iv);
                    172:                l2n(tout1,iv);
                    173:                }
                    174:        else
                    175:                {
                    176:                n2l(iv,xor0);
                    177:                n2l(iv,xor1);
                    178:                iv-=8;
                    179:                for (l-=8; l>=0; l-=8)
                    180:                        {
                    181:                        n2l(in,tin0);
                    182:                        n2l(in,tin1);
                    183:                        tin[0]=tin0;
                    184:                        tin[1]=tin1;
                    185:                        CAST_decrypt(tin,ks);
                    186:                        tout0=tin[0]^xor0;
                    187:                        tout1=tin[1]^xor1;
                    188:                        l2n(tout0,out);
                    189:                        l2n(tout1,out);
                    190:                        xor0=tin0;
                    191:                        xor1=tin1;
                    192:                        }
                    193:                if (l != -8)
                    194:                        {
                    195:                        n2l(in,tin0);
                    196:                        n2l(in,tin1);
                    197:                        tin[0]=tin0;
                    198:                        tin[1]=tin1;
                    199:                        CAST_decrypt(tin,ks);
                    200:                        tout0=tin[0]^xor0;
                    201:                        tout1=tin[1]^xor1;
                    202:                        l2nn(tout0,tout1,out,l+8);
                    203:                        xor0=tin0;
                    204:                        xor1=tin1;
                    205:                        }
                    206:                l2n(xor0,iv);
                    207:                l2n(xor1,iv);
                    208:                }
                    209:        tin0=tin1=tout0=tout1=xor0=xor1=0;
                    210:        tin[0]=tin[1]=0;
                    211:        }
                    212: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.