| GCC Code Coverage Report | |||||||||||||||||||||
        
  | 
    |||||||||||||||||||||
| Line | Branch | Exec | Source | 
1  | 
    /* $OpenBSD: ofb_enc.c,v 1.6 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 "des_locl.h"  | 
    ||
60  | 
    |||
61  | 
    /* The input and output are loaded in multiples of 8 bits.  | 
    ||
62  | 
    * What this means is that if you hame numbits=12 and length=2  | 
    ||
63  | 
    * the first 12 bits will be retrieved from the first byte and half  | 
    ||
64  | 
    * the second. The second 12 bits will come from the 3rd and half the 4th  | 
    ||
65  | 
    * byte.  | 
    ||
66  | 
    */  | 
    ||
67  | 
    void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,  | 
    ||
68  | 
    long length, DES_key_schedule *schedule,  | 
    ||
69  | 
    DES_cblock *ivec)  | 
    ||
70  | 
    	{ | 
    ||
71  | 
    24  | 
    DES_LONG d0,d1,vv0,vv1,v0,v1,n=(numbits+7)/8;  | 
    |
72  | 
    DES_LONG mask0,mask1;  | 
    ||
73  | 
    long l=length;  | 
    ||
74  | 
    int num=numbits;  | 
    ||
75  | 
    12  | 
    DES_LONG ti[2];  | 
    |
76  | 
    unsigned char *iv;  | 
    ||
77  | 
    |||
78  | 
    ✗✓ | 12  | 
    if (num > 64) return;  | 
    
79  | 
    ✓✗ | 12  | 
    if (num > 32)  | 
    
80  | 
    		{ | 
    ||
81  | 
    mask0=0xffffffffL;  | 
    ||
82  | 
    ✓✗ | 12  | 
    if (num >= 64)  | 
    
83  | 
    12  | 
    mask1=mask0;  | 
    |
84  | 
    else  | 
    ||
85  | 
    mask1=(1L<<(num-32))-1;  | 
    ||
86  | 
    }  | 
    ||
87  | 
    else  | 
    ||
88  | 
    		{ | 
    ||
89  | 
    if (num == 32)  | 
    ||
90  | 
    mask0=0xffffffffL;  | 
    ||
91  | 
    else  | 
    ||
92  | 
    mask0=(1L<<num)-1;  | 
    ||
93  | 
    mask1=0x00000000L;  | 
    ||
94  | 
    }  | 
    ||
95  | 
    |||
96  | 
    12  | 
    iv = &(*ivec)[0];  | 
    |
97  | 
    12  | 
    c2l(iv,v0);  | 
    |
98  | 
    12  | 
    c2l(iv,v1);  | 
    |
99  | 
    12  | 
    ti[0]=v0;  | 
    |
100  | 
    12  | 
    ti[1]=v1;  | 
    |
101  | 
    ✓✓ | 60  | 
    while (l-- > 0)  | 
    
102  | 
    		{ | 
    ||
103  | 
    324  | 
    ti[0]=v0;  | 
    |
104  | 
    324  | 
    ti[1]=v1;  | 
    |
105  | 
    324  | 
    DES_encrypt1((DES_LONG *)ti,schedule,DES_ENCRYPT);  | 
    |
106  | 
    324  | 
    vv0=ti[0];  | 
    |
107  | 
    324  | 
    vv1=ti[1];  | 
    |
108  | 
    ✓✓✓✓ ✓✓✓✓ ✓  | 
    612  | 
    c2ln(in,d0,d1,n);  | 
    
109  | 
    324  | 
    in+=n;  | 
    |
110  | 
    324  | 
    d0=(d0^vv0)&mask0;  | 
    |
111  | 
    324  | 
    d1=(d1^vv1)&mask1;  | 
    |
112  | 
    ✓✓✓✓ ✓✓✓✓ ✓  | 
    612  | 
    l2cn(d0,d1,out,n);  | 
    
113  | 
    36  | 
    out+=n;  | 
    |
114  | 
    |||
115  | 
    ✗✓ | 36  | 
    if (num == 32)  | 
    
116  | 
    			{ v0=v1; v1=vv0; } | 
    ||
117  | 
    ✓✗ | 36  | 
    else if (num == 64)  | 
    
118  | 
    36  | 
    				{ v0=vv0; v1=vv1; } | 
    |
119  | 
    else if (num > 32) /* && num != 64 */  | 
    ||
120  | 
    			{ | 
    ||
121  | 
    v0=((v1>>(num-32))|(vv0<<(64-num)))&0xffffffffL;  | 
    ||
122  | 
    v1=((vv0>>(num-32))|(vv1<<(64-num)))&0xffffffffL;  | 
    ||
123  | 
    }  | 
    ||
124  | 
    else /* num < 32 */  | 
    ||
125  | 
    			{ | 
    ||
126  | 
    v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL;  | 
    ||
127  | 
    v1=((v1>>num)|(vv0<<(32-num)))&0xffffffffL;  | 
    ||
128  | 
    }  | 
    ||
129  | 
    }  | 
    ||
130  | 
    iv = &(*ivec)[0];  | 
    ||
131  | 
    12  | 
    l2c(v0,iv);  | 
    |
132  | 
    12  | 
    l2c(v1,iv);  | 
    |
133  | 
    12  | 
    v0=v1=d0=d1=ti[0]=ti[1]=vv0=vv1=0;  | 
    |
134  | 
    24  | 
    }  | 
    |
135  | 
    
| Generated by: GCOVR (Version 3.3) |