<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Paolo Ardoino - ideas, programming, web and more... &#187; Linux</title>
	<atom:link href="http://ardoino.com/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://ardoino.com</link>
	<description>Homo quisque faber ipse fortunae suae</description>
	<lastBuildDate>Tue, 27 Oct 2009 22:42:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kernel Socks Bouncer &#8211; linux anonymous connections</title>
		<link>http://ardoino.com/5-kernel_socks_bouncer/</link>
		<comments>http://ardoino.com/5-kernel_socks_bouncer/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 07:00:58 +0000</pubDate>
		<dc:creator>Paolo Ardoino</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Anonimity]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[ksb26]]></category>
		<category><![CDATA[lkm]]></category>
		<category><![CDATA[tor]]></category>

		<guid isPermaLink="false">http://ardoino.com/5-kernel_socks_bouncer/</guid>
		<description><![CDATA[ksb26 ( Kernel Socks Bouncer ) is a Linux Kernel 2.6.x Loadable Kernel Module that hijacks tcp connections (to user-defined target hosts) through socks 5 servers chains.
ksb26 works as an hidden layer that adds anonymity to software that doesn&#8217;t support anonymous connections.
ksb26 is divided into a lkm ( Linux Loadable Kernel Module ) and a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ksb.sourceforge.net" title="Kernel Socks Bouncer" target="_blank">ksb26 ( Kernel Socks Bouncer )</a> is a Linux Kernel 2.6.x Loadable Kernel Module that hijacks tcp connections (to user-defined target hosts) through socks 5 servers chains.<br />
ksb26 works as an hidden layer that adds anonymity to software that doesn&#8217;t support anonymous connections.</p>
<p>ksb26 is divided into a lkm ( Linux Loadable Kernel Module ) and a userspace manager which communicate via a character device.<br />
- ksb26 lkm intercepts and redirects tcp connections.<br />
- ksb26manager keeps updated socks and target-hosts lists.</p>
<p>
<strong>Version</strong>: 0.0.4<br />
<strong>Website</strong>: <a href="http://ksb.sourceforge.net" title="Kernel Socks Bouncer" target="_blank">http://ksb.sourceforge.net</a></p>
<p>
Learn more about <a href="http://ardoino.com/6-linux-kernel-hijack-syscall/" title="Hijacking Linux kernel 2.6 sys_connect system call " target="_blank">hijacking system calls in Linux 2.6 kernel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ardoino.com/5-kernel_socks_bouncer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hijacking Linux kernel 2.6 sys_connect system call</title>
		<link>http://ardoino.com/6-linux-kernel-hijack-syscall/</link>
		<comments>http://ardoino.com/6-linux-kernel-hijack-syscall/#comments</comments>
		<pubDate>Fri, 28 Oct 2005 07:00:00 +0000</pubDate>
		<dc:creator>Paolo Ardoino</dc:creator>
				<category><![CDATA[Crypto/Security]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hijack]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[lkm]]></category>
		<category><![CDATA[rootkit]]></category>
		<category><![CDATA[system call]]></category>
		<category><![CDATA[sys_call]]></category>

		<guid isPermaLink="false">http://ardoino.com/index.php/1970/01/01/hijacking-linux-kernel-26-sys_connect-sys_call/</guid>
		<description><![CDATA[In Linux-2.4.x kernel it was very simple create an lkm to hijack the sys_connect system call using the exported symbol:

1
extern void *sys_call_table&#91;&#93;;

So, it is very simple to substitute the pointer to another system call, the one we have created!

1
2
3
4
5
6
static inline _syscall1&#40;int,close,int,fd&#41;;
int &#40; * o_socketcall&#41; &#40;int, unsigned long *&#41;;
int my_socketcall &#40;int, unsigned long *&#41;;
o_socketcall = sys_call_table&#91;SYS_socketcall&#93;; [...]]]></description>
			<content:encoded><![CDATA[<p>In Linux-2.4.x kernel it was very simple create an lkm to hijack the sys_connect system call using the exported symbol:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">void</span> <span style="color: #339933;">*</span>sys_call_table<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>So, it is very simple to substitute the pointer to another system call, the one we have created!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">static</span> <span style="color: #000000; font-weight: bold;">inline</span> _syscall1<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span>close<span style="color: #339933;">,</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span>fd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">*</span> o_socketcall<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> my_socketcall <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
o_socketcall <span style="color: #339933;">=</span> sys_call_table<span style="color: #009900;">&#91;</span>SYS_socketcall<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//saving original pointer</span>
sys_call_table<span style="color: #009900;">&#91;</span>SYS_socketcall<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>my_socketcall<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//hijacking system call</span>
sys_call_table<span style="color: #009900;">&#91;</span>SYS_socketcall<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>o_socketcall<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//restoring original syscall</span></pre></td></tr></table></div>

<p>( Read <a href="http://phrack.org" title="Phrack magazine" target="_blank">Phrack</a> n.50 to learn more about system call hijacking in Linux-2.4.x kernels )</p>
<p>In Linux-2.6.x kernels the sys_call_table symbol is no more exported for security and stability reasons. So how can we hijack connections?<span id="more-6"></span>Here is the solution I use in Kernel Socks Bouncer and it works very well!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Use this to restore original conditions</span>
<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> unpatch_unix_stream_connect<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>unix_stream_ops <span style="color: #339933;">&amp;&amp;</span> orig_unix_stream_connect<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		unix_stream_ops<span style="color: #339933;">-&gt;</span>connect <span style="color: #339933;">=</span> orig_unix_stream_connect<span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Use this to substitute your connect to the original</span>
<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> patch_unix_stream_connect<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">struct</span> socket <span style="color: #339933;">*</span>sock_stream <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>sock_create<span style="color: #009900;">&#40;</span>2<span style="color: #339933;">,</span> 1<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>sock_stream<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> 0<span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>sock_stream <span style="color: #339933;">&amp;&amp;</span>
<span style="color: #009900;">&#40;</span>unix_stream_ops <span style="color: #339933;">=</span> sock_stream<span style="color: #339933;">-&gt;</span>ops<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		orig_unix_stream_connect <span style="color: #339933;">=</span> unix_stream_ops<span style="color: #339933;">-&gt;</span>connect<span style="color: #339933;">;</span>
		unix_stream_ops<span style="color: #339933;">-&gt;</span>connect <span style="color: #339933;">=</span> ksb26_unix_stream_connect<span style="color: #339933;">;</span>
		sock_release<span style="color: #009900;">&#40;</span>sock_stream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This function causes the use of ksb26_unix_stream_connect instead of the real connect; as in 2.4 kernel we have to save the pointer to the original call and then we can push our call!</p>
]]></content:encoded>
			<wfw:commentRss>http://ardoino.com/6-linux-kernel-hijack-syscall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple file encrypter/decrypter ( DES / Blowfish / IDEA / MD5 / RSA algorithms )</title>
		<link>http://ardoino.com/10-openssl-file-encrypter-decrypter/</link>
		<comments>http://ardoino.com/10-openssl-file-encrypter-decrypter/#comments</comments>
		<pubDate>Sun, 07 Mar 2004 07:00:01 +0000</pubDate>
		<dc:creator>Paolo Ardoino</dc:creator>
				<category><![CDATA[Crypto/Security]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://ardoino.com/crypt-openssl-file-encrypter-decrypter/</guid>
		<description><![CDATA[UNISFED is a simple file encrypter / decrypter that supports DES / Blowfish / IDEA / MD5 / RSA algorithms based on OpenSSL libraries.

Version: 0.1
Download the code
Some code chunks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* DES
 * If mode = DES_ENCRYPT encrypts *filein file with DES algorithm
 * If mode = DES_DECRYPT decrypts *filein file with DES algorithm
 * output is [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UNISFED</strong> is a simple file encrypter / decrypter that supports DES / Blowfish / IDEA / MD5 / RSA algorithms based on OpenSSL libraries.</p>
<p><span id="more-10"></span></p>
<p><strong>Version</strong>: 0.1</p>
<p><a href="/pub/crypto-security/unisfed-0.1.tar.gz">Download the code</a></p>
<p>Some code chunks</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* DES
 * If mode = DES_ENCRYPT encrypts *filein file with DES algorithm
 * If mode = DES_DECRYPT decrypts *filein file with DES algorithm
 * output is written in *fileout file
 * Returns 1 if the function runs successfully
 * Works on 8 bytes blocks
 *
 */</span>
<span style="color: #993333;">void</span> des_encrypt_decrypt<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> mode<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>filein<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>fileout<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        FILE <span style="color: #339933;">*</span>fpin<span style="color: #339933;">,*</span>fpout<span style="color: #339933;">;</span>
        <span style="color: #993333;">char</span> buf<span style="color: #009900;">&#91;</span>MAXPASSLEN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        des_cblock key<span style="color: #339933;">,</span>inmsg<span style="color: #339933;">,</span>outmsg<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* key, plaintext, ciphertext must be 8 byte blocks */</span>
        des_key_schedule sched<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>filein<span style="color: #339933;">,</span>fileout<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: input and output files must not be the same file.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* des_read_pw_string reads password from stdin and stores it in buf */</span>
        <span style="color: #808080; font-style: italic;">/* this function automatically asks to re-enter password and checks it */</span>
        memset<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>MAXPASSLEN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mode <span style="color: #339933;">==</span> DES_ENCRYPT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Encrypting file '%s' with des cipher.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>filein<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>des_read_pw_string<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span>MAXPASSLEN <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Enter the password:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to read password.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Decrypting file '%s' with des cipher.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>filein<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>des_read_pw_string<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span>MAXPASSLEN <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Enter the password:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to read password.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* des_string to key convers the password to a key */</span>
        des_string_to_key<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,&amp;</span>key<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #808080; font-style: italic;">/* des_set_key_checked checks that a key passed in of odd parity and set up the key schedule */</span>
        des_set_key_checked<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>key<span style="color: #339933;">,</span>sched<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fpin <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>filein<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fpout <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>fileout<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to open output file.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* reads 8 bytes at a time(block=8bytes),encrypts/decrypts each block with ecb */</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>inmsg<span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #339933;">,</span>fpin<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                memset<span style="color: #009900;">&#40;</span>outmsg<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>8<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                des_ecb_encrypt<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>inmsg<span style="color: #339933;">,&amp;</span>outmsg<span style="color: #339933;">,</span>sched<span style="color: #339933;">,</span>mode<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                fwrite<span style="color: #009900;">&#40;</span>outmsg<span style="color: #339933;">,</span>1<span style="color: #339933;">,</span>8<span style="color: #339933;">,</span>fpout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                memset<span style="color: #009900;">&#40;</span>inmsg<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>8<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        fclose<span style="color: #009900;">&#40;</span>fpin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fclose<span style="color: #009900;">&#40;</span>fpout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Done.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Blowfish
 * If mode = BF_ENCRYPT encrypts *filein file with Blowfish algorithm
 * If mode = BF_DECRYPT decrypts *filein file with Blowfish algorithm
 * output is written in *fileout file
 * Returns 1 if the function runs successfully
 * Works on 8 bytes blocks
 *
 */</span>
<span style="color: #993333;">void</span> bf_encrypt_decrypt<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> mode<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>filein<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>fileout<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        FILE <span style="color: #339933;">*</span>fpin<span style="color: #339933;">,*</span>fpout<span style="color: #339933;">;</span>
        <span style="color: #993333;">char</span> buf<span style="color: #009900;">&#91;</span>MAXPASSLEN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> inmsg<span style="color: #009900;">&#91;</span>8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>outmsg<span style="color: #009900;">&#91;</span>8<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* blowfish operates on 8 byte blocks */</span>
        BF_KEY key<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>strcmp<span style="color: #009900;">&#40;</span>filein<span style="color: #339933;">,</span>fileout<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: input and output files must not be the same file.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* reads password from stdin using the same function used for des passwords */</span>
        memset<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>MAXPASSLEN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mode <span style="color: #339933;">==</span> BF_ENCRYPT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Encrypting file '%s' with BlowFish cipher.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>filein<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>des_read_pw_string<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span>MAXPASSLEN <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Enter the password:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to read password.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Decrypting file '%s' with BlowFish cipher.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>filein<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>des_read_pw_string<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span>MAXPASSLEN <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Enter the password:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to read password.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* set up the key using password stored in buf from des_read_pw_string */</span>
        BF_set_key<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>key<span style="color: #339933;">,</span>strlen<span style="color: #009900;">&#40;</span>buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fpin <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>filein<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>fpout <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>fileout<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                fprintf<span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;Error: failed to open output file.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #808080; font-style: italic;">/* reads 8 bytes at a time(block=8bytes),encrypts/decrypts each block with ecb */</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>inmsg<span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #339933;">,</span>fpin<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                memset<span style="color: #009900;">&#40;</span>outmsg<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>8<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                BF_ecb_encrypt<span style="color: #009900;">&#40;</span>inmsg<span style="color: #339933;">,</span>outmsg<span style="color: #339933;">,&amp;</span>key<span style="color: #339933;">,</span>mode<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                fwrite<span style="color: #009900;">&#40;</span>outmsg<span style="color: #339933;">,</span>1<span style="color: #339933;">,</span>8<span style="color: #339933;">,</span>fpout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                memset<span style="color: #009900;">&#40;</span>inmsg<span style="color: #339933;">,</span><span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">,</span>8<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        fclose<span style="color: #009900;">&#40;</span>fpin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        fclose<span style="color: #009900;">&#40;</span>fpout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Done.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://ardoino.com/10-openssl-file-encrypter-decrypter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
