OpenCoverage

cfb64ede.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/des/cfb64ede.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: cfb64ede.c,v 1.9 2015/02/07 13:19:15 doug Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 * -
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 * -
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 * -
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from -
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 * -
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 * -
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include "des_locl.h"-
60-
61/* The input and output encrypted as though 64bit cfb mode is being-
62 * used. The extra state information to record how much of the-
63 * 64bit block we have used is contained in *num;-
64 */-
65-
66void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,-
67 long length, DES_key_schedule *ks1,-
68 DES_key_schedule *ks2, DES_key_schedule *ks3,-
69 DES_cblock *ivec, int *num, int enc)-
70 {-
71 DES_LONG v0,v1;-
72 long l=length;-
73 int n= *num;-
74 DES_LONG ti[2];-
75 unsigned char *iv,c,cc;-
76-
77 iv=&(*ivec)[0];-
78 if (enc)
encDescription
TRUEevaluated 6 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
FALSEevaluated 6 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
6
79 {-
80 while (l--)
l--Description
TRUEevaluated 3576 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
FALSEevaluated 6 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
6-3576
81 {-
82 if (n == 0)
n == 0Description
TRUEevaluated 447 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
FALSEevaluated 3129 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
447-3129
83 {-
84 c2l(iv,v0);-
85 c2l(iv,v1);-
86-
87 ti[0]=v0;-
88 ti[1]=v1;-
89 DES_encrypt3(ti,ks1,ks2,ks3);-
90 v0=ti[0];-
91 v1=ti[1];-
92-
93 iv = &(*ivec)[0];-
94 l2c(v0,iv);-
95 l2c(v1,iv);-
96 iv = &(*ivec)[0];-
97 }
executed 447 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
447
98 c= *(in++)^iv[n];-
99 *(out++)=c;-
100 iv[n]=c;-
101 n=(n+1)&0x07;-
102 }
executed 3576 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
3576
103 }
executed 6 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
6
104 else-
105 {-
106 while (l--)
l--Description
TRUEevaluated 3576 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
FALSEevaluated 6 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
6-3576
107 {-
108 if (n == 0)
n == 0Description
TRUEevaluated 447 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
FALSEevaluated 3129 times by 2 tests
Evaluated by:
  • destest
  • libcrypto.so.44.0.1
447-3129
109 {-
110 c2l(iv,v0);-
111 c2l(iv,v1);-
112-
113 ti[0]=v0;-
114 ti[1]=v1;-
115 DES_encrypt3(ti,ks1,ks2,ks3);-
116 v0=ti[0];-
117 v1=ti[1];-
118-
119 iv = &(*ivec)[0];-
120 l2c(v0,iv);-
121 l2c(v1,iv);-
122 iv = &(*ivec)[0];-
123 }
executed 447 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
447
124 cc= *(in++);-
125 c=iv[n];-
126 iv[n]=cc;-
127 *(out++)=c^cc;-
128 n=(n+1)&0x07;-
129 }
executed 3576 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
3576
130 }
executed 6 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
6
131 v0=v1=ti[0]=ti[1]=c=cc=0;-
132 *num=n;-
133 }
executed 12 times by 2 tests: end of block
Executed by:
  • destest
  • libcrypto.so.44.0.1
12
134-
135/* This is compatible with the single key CFB-r for DES, even thought that's-
136 * not what EVP needs.-
137 */-
138-
139void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,-
140 int numbits,long length,DES_key_schedule *ks1,-
141 DES_key_schedule *ks2,DES_key_schedule *ks3,-
142 DES_cblock *ivec,int enc)-
143 {-
144 DES_LONG d0,d1,v0,v1;-
145 unsigned long l=length,n=((unsigned int)numbits+7)/8;-
146 int num=numbits,i;-
147 DES_LONG ti[2];-
148 unsigned char *iv;-
149 unsigned char ovec[16];-
150-
151 if (num > 64) return;
never executed: return;
num > 64Description
TRUEnever evaluated
FALSEnever evaluated
0
152 iv = &(*ivec)[0];-
153 c2l(iv,v0);-
154 c2l(iv,v1);-
155 if (enc)
encDescription
TRUEnever evaluated
FALSEnever evaluated
0
156 {-
157 while (l >= n)
l >= nDescription
TRUEnever evaluated
FALSEnever evaluated
0
158 {-
159 l-=n;-
160 ti[0]=v0;-
161 ti[1]=v1;-
162 DES_encrypt3(ti,ks1,ks2,ks3);-
163 c2ln(in,d0,d1,n);
never executed: end of block
code before this statement never executed: case 7:
code before this statement never executed: case 6:
code before this statement never executed: case 5:
code before this statement never executed: case 4:
code before this statement never executed: case 3:
code before this statement never executed: case 2:
code before this statement never executed: case 1:
never executed: case 8:
never executed: case 7:
never executed: case 6:
never executed: case 5:
never executed: case 4:
never executed: case 3:
never executed: case 2:
never executed: case 1:
0
164 in+=n;-
165 d0^=ti[0];-
166 d1^=ti[1];-
167 l2cn(d0,d1,out,n);
never executed: end of block
code before this statement never executed: case 7:
code before this statement never executed: case 6:
code before this statement never executed: case 5:
code before this statement never executed: case 4:
code before this statement never executed: case 3:
code before this statement never executed: case 2:
code before this statement never executed: case 1:
never executed: case 8:
never executed: case 7:
never executed: case 6:
never executed: case 5:
never executed: case 4:
never executed: case 3:
never executed: case 2:
never executed: case 1:
0
168 out+=n;-
169 /* 30-08-94 - eay - changed because l>>32 and-
170 * l<<32 are bad under gcc :-( */-
171 if (num == 32)
num == 32Description
TRUEnever evaluated
FALSEnever evaluated
0
172 { v0=v1; v1=d0; }
never executed: end of block
0
173 else if (num == 64)
num == 64Description
TRUEnever evaluated
FALSEnever evaluated
0
174 { v0=d0; v1=d1; }
never executed: end of block
0
175 else-
176 {-
177 iv=&ovec[0];-
178 l2c(v0,iv);-
179 l2c(v1,iv);-
180 l2c(d0,iv);-
181 l2c(d1,iv);-
182 /* shift ovec left most of the bits... */-
183 memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));-
184 /* now the remaining bits */-
185 if(num%8 != 0)
num%8 != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
186 for(i=0 ; i < 8 ; ++i)
i < 8Description
TRUEnever evaluated
FALSEnever evaluated
0
187 {-
188 ovec[i]<<=num%8;-
189 ovec[i]|=ovec[i+1]>>(8-num%8);-
190 }
never executed: end of block
0
191 iv=&ovec[0];-
192 c2l(iv,v0);-
193 c2l(iv,v1);-
194 }
never executed: end of block
0
195 }-
196 }
never executed: end of block
0
197 else-
198 {-
199 while (l >= n)
l >= nDescription
TRUEnever evaluated
FALSEnever evaluated
0
200 {-
201 l-=n;-
202 ti[0]=v0;-
203 ti[1]=v1;-
204 DES_encrypt3(ti,ks1,ks2,ks3);-
205 c2ln(in,d0,d1,n);
never executed: end of block
code before this statement never executed: case 7:
code before this statement never executed: case 6:
code before this statement never executed: case 5:
code before this statement never executed: case 4:
code before this statement never executed: case 3:
code before this statement never executed: case 2:
code before this statement never executed: case 1:
never executed: case 8:
never executed: case 7:
never executed: case 6:
never executed: case 5:
never executed: case 4:
never executed: case 3:
never executed: case 2:
never executed: case 1:
0
206 in+=n;-
207 /* 30-08-94 - eay - changed because l>>32 and-
208 * l<<32 are bad under gcc :-( */-
209 if (num == 32)
num == 32Description
TRUEnever evaluated
FALSEnever evaluated
0
210 { v0=v1; v1=d0; }
never executed: end of block
0
211 else if (num == 64)
num == 64Description
TRUEnever evaluated
FALSEnever evaluated
0
212 { v0=d0; v1=d1; }
never executed: end of block
0
213 else-
214 {-
215 iv=&ovec[0];-
216 l2c(v0,iv);-
217 l2c(v1,iv);-
218 l2c(d0,iv);-
219 l2c(d1,iv);-
220 /* shift ovec left most of the bits... */-
221 memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));-
222 /* now the remaining bits */-
223 if(num%8 != 0)
num%8 != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
224 for(i=0 ; i < 8 ; ++i)
i < 8Description
TRUEnever evaluated
FALSEnever evaluated
0
225 {-
226 ovec[i]<<=num%8;-
227 ovec[i]|=ovec[i+1]>>(8-num%8);-
228 }
never executed: end of block
0
229 iv=&ovec[0];-
230 c2l(iv,v0);-
231 c2l(iv,v1);-
232 }
never executed: end of block
0
233 d0^=ti[0];-
234 d1^=ti[1];-
235 l2cn(d0,d1,out,n);
never executed: end of block
code before this statement never executed: case 7:
code before this statement never executed: case 6:
code before this statement never executed: case 5:
code before this statement never executed: case 4:
code before this statement never executed: case 3:
code before this statement never executed: case 2:
code before this statement never executed: case 1:
never executed: case 8:
never executed: case 7:
never executed: case 6:
never executed: case 5:
never executed: case 4:
never executed: case 3:
never executed: case 2:
never executed: case 1:
0
236 out+=n;-
237 }
never executed: end of block
0
238 }
never executed: end of block
0
239 iv = &(*ivec)[0];-
240 l2c(v0,iv);-
241 l2c(v1,iv);-
242 v0=v1=d0=d1=ti[0]=ti[1]=0;-
243 }
never executed: end of block
0
244-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2