| GCC Code Coverage Report | |||||||||||||||||||||
        
  | 
    |||||||||||||||||||||
| Line | Branch | Exec | Source | 
1  | 
    /* $OpenBSD: i_cbc.c,v 1.3 2014/10/28 07:35:58 jsg 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 <openssl/idea.h>  | 
    ||
60  | 
    #include "idea_lcl.h"  | 
    ||
61  | 
    |||
62  | 
    void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,  | 
    ||
63  | 
    IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int encrypt)  | 
    ||
64  | 
    	{ | 
    ||
65  | 
    unsigned long tin0,tin1;  | 
    ||
66  | 
    unsigned long tout0,tout1,xor0,xor1;  | 
    ||
67  | 
    long l=length;  | 
    ||
68  | 
    60  | 
    unsigned long tin[2];  | 
    |
69  | 
    |||
70  | 
    ✓✓ | 30  | 
    if (encrypt)  | 
    
71  | 
    		{ | 
    ||
72  | 
    14  | 
    n2l(iv,tout0);  | 
    |
73  | 
    14  | 
    n2l(iv,tout1);  | 
    |
74  | 
    14  | 
    iv-=8;  | 
    |
75  | 
    ✓✓ | 104  | 
    for (l-=8; l>=0; l-=8)  | 
    
76  | 
    			{ | 
    ||
77  | 
    38  | 
    n2l(in,tin0);  | 
    |
78  | 
    38  | 
    n2l(in,tin1);  | 
    |
79  | 
    38  | 
    tin0^=tout0;  | 
    |
80  | 
    38  | 
    tin1^=tout1;  | 
    |
81  | 
    38  | 
    tin[0]=tin0;  | 
    |
82  | 
    38  | 
    tin[1]=tin1;  | 
    |
83  | 
    38  | 
    idea_encrypt(tin,ks);  | 
    |
84  | 
    38  | 
    tout0=tin[0]; l2n(tout0,out);  | 
    |
85  | 
    38  | 
    tout1=tin[1]; l2n(tout1,out);  | 
    |
86  | 
    }  | 
    ||
87  | 
    ✓✓ | 14  | 
    if (l != -8)  | 
    
88  | 
    			{ | 
    ||
89  | 
    ✗✗✓✓ ✓✓✓✓ ✓  | 
    78  | 
    n2ln(in,tin0,tin1,l+8);  | 
    
90  | 
    6  | 
    tin0^=tout0;  | 
    |
91  | 
    6  | 
    tin1^=tout1;  | 
    |
92  | 
    6  | 
    tin[0]=tin0;  | 
    |
93  | 
    6  | 
    tin[1]=tin1;  | 
    |
94  | 
    6  | 
    idea_encrypt(tin,ks);  | 
    |
95  | 
    6  | 
    tout0=tin[0]; l2n(tout0,out);  | 
    |
96  | 
    6  | 
    tout1=tin[1]; l2n(tout1,out);  | 
    |
97  | 
    6  | 
    }  | 
    |
98  | 
    14  | 
    l2n(tout0,iv);  | 
    |
99  | 
    14  | 
    l2n(tout1,iv);  | 
    |
100  | 
    14  | 
    }  | 
    |
101  | 
    else  | 
    ||
102  | 
    		{ | 
    ||
103  | 
    16  | 
    n2l(iv,xor0);  | 
    |
104  | 
    16  | 
    n2l(iv,xor1);  | 
    |
105  | 
    16  | 
    iv-=8;  | 
    |
106  | 
    ✓✓ | 108  | 
    for (l-=8; l>=0; l-=8)  | 
    
107  | 
    			{ | 
    ||
108  | 
    38  | 
    n2l(in,tin0); tin[0]=tin0;  | 
    |
109  | 
    38  | 
    n2l(in,tin1); tin[1]=tin1;  | 
    |
110  | 
    38  | 
    idea_encrypt(tin,ks);  | 
    |
111  | 
    38  | 
    tout0=tin[0]^xor0;  | 
    |
112  | 
    38  | 
    tout1=tin[1]^xor1;  | 
    |
113  | 
    38  | 
    l2n(tout0,out);  | 
    |
114  | 
    38  | 
    l2n(tout1,out);  | 
    |
115  | 
    xor0=tin0;  | 
    ||
116  | 
    xor1=tin1;  | 
    ||
117  | 
    }  | 
    ||
118  | 
    ✓✓ | 16  | 
    if (l != -8)  | 
    
119  | 
    			{ | 
    ||
120  | 
    42  | 
    n2l(in,tin0); tin[0]=tin0;  | 
    |
121  | 
    42  | 
    n2l(in,tin1); tin[1]=tin1;  | 
    |
122  | 
    42  | 
    idea_encrypt(tin,ks);  | 
    |
123  | 
    42  | 
    tout0=tin[0]^xor0;  | 
    |
124  | 
    42  | 
    tout1=tin[1]^xor1;  | 
    |
125  | 
    ✗✗✓✓ ✓✓✓✓ ✓  | 
    78  | 
    l2nn(tout0,tout1,out,l+8);  | 
    
126  | 
    xor0=tin0;  | 
    ||
127  | 
    xor1=tin1;  | 
    ||
128  | 
    6  | 
    }  | 
    |
129  | 
    16  | 
    l2n(xor0,iv);  | 
    |
130  | 
    16  | 
    l2n(xor1,iv);  | 
    |
131  | 
    }  | 
    ||
132  | 
    tin0=tin1=tout0=tout1=xor0=xor1=0;  | 
    ||
133  | 
    30  | 
    tin[0]=tin[1]=0;  | 
    |
134  | 
    30  | 
    }  | 
    |
135  | 
    |||
136  | 
    void idea_encrypt(unsigned long *d, IDEA_KEY_SCHEDULE *key)  | 
    ||
137  | 
    	{ | 
    ||
138  | 
    IDEA_INT *p;  | 
    ||
139  | 
    unsigned long x1,x2,x3,x4,t0,t1,ul;  | 
    ||
140  | 
    |||
141  | 
    392  | 
    x2=d[0];  | 
    |
142  | 
    196  | 
    x1=(x2>>16);  | 
    |
143  | 
    196  | 
    x4=d[1];  | 
    |
144  | 
    196  | 
    x3=(x4>>16);  | 
    |
145  | 
    |||
146  | 
    196  | 
    p= &(key->data[0][0]);  | 
    |
147  | 
    |||
148  | 
    ✓✓✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(0);  | 
    
149  | 
    ✓✗✓✗ ✓✓✓✗  | 
    1764  | 
    E_IDEA(1);  | 
    
150  | 
    ✓✗✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(2);  | 
    
151  | 
    ✓✗✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(3);  | 
    
152  | 
    ✓✗✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(4);  | 
    
153  | 
    ✓✗✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(5);  | 
    
154  | 
    ✓✗✓✗ ✓✓✓✗  | 
    1764  | 
    E_IDEA(6);  | 
    
155  | 
    ✓✗✓✗ ✓✗✓✗  | 
    1764  | 
    E_IDEA(7);  | 
    
156  | 
    |||
157  | 
    196  | 
    x1&=0xffff;  | 
    |
158  | 
    ✓✓ | 588  | 
    idea_mul(x1,x1,*p,ul); p++;  | 
    
159  | 
    |||
160  | 
    196  | 
    t0= x3+ *(p++);  | 
    |
161  | 
    196  | 
    t1= x2+ *(p++);  | 
    |
162  | 
    |||
163  | 
    196  | 
    x4&=0xffff;  | 
    |
164  | 
    ✓✗ | 392  | 
    idea_mul(x4,x4,*p,ul);  | 
    
165  | 
    |||
166  | 
    196  | 
    d[0]=(t0&0xffff)|((x1&0xffff)<<16);  | 
    |
167  | 
    196  | 
    d[1]=(x4&0xffff)|((t1&0xffff)<<16);  | 
    |
168  | 
    196  | 
    }  | 
    
| Generated by: GCOVR (Version 3.3) |