OpenCoverage

ede_cbcm_enc.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/des/ede_cbcm_enc.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: ede_cbcm_enc.c,v 1.6 2014/10/28 07:35:58 jsg Exp $ */-
2/* Written by Ben Laurie <ben@algroup.co.uk> for the OpenSSL-
3 * project 13 Feb 1999.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer. -
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58-
59/*-
60-
61This is an implementation of Triple DES Cipher Block Chaining with Output-
62Feedback Masking, by Coppersmith, Johnson and Matyas, (IBM and Certicom).-
63-
64Note that there is a known attack on this by Biham and Knudsen but it takes-
65a lot of work:-
66-
67http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1998/CS/CS0928.ps.gz-
68-
69*/-
70-
71#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_DESCBCM is defined */-
72-
73#ifndef OPENSSL_NO_DESCBCM-
74#include "des_locl.h"-
75-
76void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,-
77 long length, DES_key_schedule *ks1, DES_key_schedule *ks2,-
78 DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2,-
79 int enc)-
80 {-
81 DES_LONG tin0,tin1;-
82 DES_LONG tout0,tout1,xor0,xor1,m0,m1;-
83 long l=length;-
84 DES_LONG tin[2];-
85 unsigned char *iv1,*iv2;-
86-
87 iv1 = &(*ivec1)[0];-
88 iv2 = &(*ivec2)[0];-
89-
90 if (enc)
encDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • destest
FALSEevaluated 1 time by 1 test
Evaluated by:
  • destest
1-2
91 {-
92 c2l(iv1,m0);-
93 c2l(iv1,m1);-
94 c2l(iv2,tout0);-
95 c2l(iv2,tout1);-
96 for (l-=8; l>=-7; l-=8)
l>=-7Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • destest
FALSEevaluated 2 times by 1 test
Evaluated by:
  • destest
2-4
97 {-
98 tin[0]=m0;-
99 tin[1]=m1;-
100 DES_encrypt1(tin,ks3,1);-
101 m0=tin[0];-
102 m1=tin[1];-
103-
104 if(l < 0)
l < 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • destest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • destest
1-3
105 {-
106 c2ln(in,tin0,tin1,l+8);
executed 1 time by 1 test: end of block
Executed by:
  • destest
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 executed 1 time by 1 test: case 4:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 3:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 2:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 1:
Executed by:
  • destest
never executed: case 8:
never executed: case 7:
never executed: case 6:
executed 1 time by 1 test: case 5:
Executed by:
  • destest
never executed: case 4:
never executed: case 3:
never executed: case 2:
executed 1 time by 1 test: case 1:
Executed by:
  • destest
0-1
107 }
executed 1 time by 1 test: end of block
Executed by:
  • destest
1
108 else-
109 {-
110 c2l(in,tin0);-
111 c2l(in,tin1);-
112 }
executed 3 times by 1 test: end of block
Executed by:
  • destest
3
113 tin0^=tout0;-
114 tin1^=tout1;-
115-
116 tin[0]=tin0;-
117 tin[1]=tin1;-
118 DES_encrypt1(tin,ks1,1);-
119 tin[0]^=m0;-
120 tin[1]^=m1;-
121 DES_encrypt1(tin,ks2,0);-
122 tin[0]^=m0;-
123 tin[1]^=m1;-
124 DES_encrypt1(tin,ks1,1);-
125 tout0=tin[0];-
126 tout1=tin[1];-
127-
128 l2c(tout0,out);-
129 l2c(tout1,out);-
130 }
executed 4 times by 1 test: end of block
Executed by:
  • destest
4
131 iv1=&(*ivec1)[0];-
132 l2c(m0,iv1);-
133 l2c(m1,iv1);-
134-
135 iv2=&(*ivec2)[0];-
136 l2c(tout0,iv2);-
137 l2c(tout1,iv2);-
138 }
executed 2 times by 1 test: end of block
Executed by:
  • destest
2
139 else-
140 {-
141 DES_LONG t0,t1;-
142-
143 c2l(iv1,m0);-
144 c2l(iv1,m1);-
145 c2l(iv2,xor0);-
146 c2l(iv2,xor1);-
147 for (l-=8; l>=-7; l-=8)
l>=-7Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • destest
FALSEevaluated 1 time by 1 test
Evaluated by:
  • destest
1-4
148 {-
149 tin[0]=m0;-
150 tin[1]=m1;-
151 DES_encrypt1(tin,ks3,1);-
152 m0=tin[0];-
153 m1=tin[1];-
154-
155 c2l(in,tin0);-
156 c2l(in,tin1);-
157-
158 t0=tin0;-
159 t1=tin1;-
160-
161 tin[0]=tin0;-
162 tin[1]=tin1;-
163 DES_encrypt1(tin,ks1,0);-
164 tin[0]^=m0;-
165 tin[1]^=m1;-
166 DES_encrypt1(tin,ks2,1);-
167 tin[0]^=m0;-
168 tin[1]^=m1;-
169 DES_encrypt1(tin,ks1,0);-
170 tout0=tin[0];-
171 tout1=tin[1];-
172-
173 tout0^=xor0;-
174 tout1^=xor1;-
175 if(l < 0)
l < 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • destest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • destest
1-3
176 {-
177 l2cn(tout0,tout1,out,l+8);
executed 1 time by 1 test: end of block
Executed by:
  • destest
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 executed 1 time by 1 test: case 4:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 3:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 2:
Executed by:
  • destest
code before this statement executed 1 time by 1 test: case 1:
Executed by:
  • destest
never executed: case 8:
never executed: case 7:
never executed: case 6:
executed 1 time by 1 test: case 5:
Executed by:
  • destest
never executed: case 4:
never executed: case 3:
never executed: case 2:
executed 1 time by 1 test: case 1:
Executed by:
  • destest
0-1
178 }
executed 1 time by 1 test: end of block
Executed by:
  • destest
1
179 else-
180 {-
181 l2c(tout0,out);-
182 l2c(tout1,out);-
183 }
executed 3 times by 1 test: end of block
Executed by:
  • destest
3
184 xor0=t0;-
185 xor1=t1;-
186 }
executed 4 times by 1 test: end of block
Executed by:
  • destest
4
187-
188 iv1=&(*ivec1)[0];-
189 l2c(m0,iv1);-
190 l2c(m1,iv1);-
191-
192 iv2=&(*ivec2)[0];-
193 l2c(xor0,iv2);-
194 l2c(xor1,iv2);-
195 }
executed 1 time by 1 test: end of block
Executed by:
  • destest
1
196 tin0=tin1=tout0=tout1=xor0=xor1=0;-
197 tin[0]=tin[1]=0;-
198 }
executed 3 times by 1 test: end of block
Executed by:
  • destest
3
199#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2