View | Details | Raw Unified | Return to bug 247762
Collapse All | Expand All

(-)Makefile (+8 lines)
Line 0 Link Here
1
# $FreeBSD$
2
3
SUBDIR = articles
4
5
COMPAT_SYMLINK=	fa
6
7
DOC_PREFIX = ${.CURDIR}/..
8
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
(-)articles/Makefile (+8 lines)
Line 0 Link Here
1
# $FreeBSD$
2
3
SUBDIR = ipsec-must
4
5
# ROOT_SYMLINKS+= new-users
6
7
DOC_PREFIX?= ${.CURDIR}/../..
8
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
(-)articles/ipsec-must/Makefile (+18 lines)
Line 0 Link Here
1
#
2
# $FreeBSD$
3
#
4
# Article: Independent Verification of IPsec Functionality in FreeBSD
5
6
DOC?= article
7
8
FORMATS?= html
9
10
INSTALL_COMPRESSED?=gz
11
INSTALL_ONLY_COMPRESSED?=
12
13
SRCS=	article.xml
14
15
URL_RELPREFIX?=	../../../..
16
DOC_PREFIX?= ${.CURDIR}/../../..
17
18
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
(-)articles/ipsec-must/article.xml (+272 lines)
Line 0 Link Here
1
<?xml version="1.0" encoding="utf-8"?>
2
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN" "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
3
<!--
4
    The FreeBSD Documentation Project
5
6
    $FreeBSD$
7
-->
8
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.0" xml:lang="fa_IR">
9
  <info><title>تصدیق عملکرد IPsec به طور مستقل در FreeBSD</title>
10
    
11
12
    <author><personname><firstname>دیوید</firstname><surname>هانیگ</surname></personname><affiliation> <address><email>honig@sprynet.com</email></address> </affiliation></author>
13
14
    <pubdate>1999-05-03</pubdate>
15
16
    <legalnotice xml:id="trademarks" role="trademarks">
17
      <para>FreeBSD یک نشان تجاری ثبت شده متعلق به FreeBSD Foundation است.</para>
18
      <para>Motif، OSF/1 و UNIX نشان‌های تجاری ثبت شده و IT DialTone و The Open Group نشان‌های تجاری متعلق به کنسرسیوم The Open Group در ایالات متحده و دیگر کشورها هستند.</para>
19
      <para>بسیاری از عناوین مورد استفاده توسط تولیدکنندگان و فروشندگان برای مشخص کردن محصولاتشان به عنوان نشان‌های تجاری اظهار شده‌اند. در هر جای این سند که این عناوین ذکر شده باشند، در صورتی که پروژه FreeBSD از اظهارنامه آن نشان تجاری آگاه باشد، همراه عنوان علامت <quote>™</quote> یا <quote>®</quote> آمده است.</para>
20
    </legalnotice>
21
22
    <releaseinfo>$FreeBSD$</releaseinfo>
23
24
    <abstract>
25
      <para>IPsec را نصب کرده‌اید و به نظر می‌رسد که کار هم می‌کند. ولی از کجا می‌دانید؟ من روشی را در اینجا تشریح می‌کنم که با آن می‌توانید به طور آزمون‌گرانه تصدیق کنید که IPsec به درستی کار می‌کند.</para>
26
    </abstract>
27
  </info>
28
29
  <sect1 xml:id="problem">
30
    <title>تعریف مشکل</title>
31
32
    <para>ابتدا، بیایید فرض کنیم که شما <link linkend="ipsec-install"><emphasis>IPsec</emphasis> را نصب کرده‌اید</link>. از کجا می‌دانید که به درستی <link linkend="caveat">کار می‌کند</link>؟ بله، درست است، اگر به درستی پیکربندی نشده بود اتصال شما کار نمی‌کرد، فقط وقتی آن را درست پیکربندی کرده باشید کار خواهد کرد. <citerefentry><refentrytitle>netstat</refentrytitle><manvolnum>1</manvolnum></citerefentry> آن را فهرست خواهد کرد. ولی آیا به طور مستقل هم می‌توانید آن را تصدیق کنید؟</para>
33
  </sect1>
34
35
  <sect1 xml:id="solution">
36
    <title>راه حل</title>
37
38
    <para>ابتدا، کمی اطلاعات تئوری در رابطه با رمزنگاری:</para>
39
40
    <orderedlist>
41
      <listitem>
42
	<para>داده‌های رمزنگاری‌شده به طور یکنواخت توزیع می‌شوند. به عبارت دیگر، به ازای هر نماد، آنتروپی بیشینه دارند؛</para>
43
      </listitem>
44
45
      <listitem>
46
	<para>داده‌های خام و فشرده‌ نشده عموما افزونگی دارند. به عبارت دیگر، آنتروپی فرو-بیشینه دارند.</para>
47
      </listitem>
48
    </orderedlist>
49
50
    <para>فرض کنید که می‌توانستید آنتروپی داده‌های ارسالی به کارت شبکه و دریافتی از آن را اندازه‌گیری کنید. آنگاه می‌توانستید تفاوت بین داده‌های رمزنگاری‌شده و رمزنگاری‌نشده را ببینید. این گفته حتی وقتی که مقداری از داده‌ها در <quote>حالت رمزنگاری</quote> عملا رمزنگاری‌نشده باشند هم درست است. مثلا اگر قرار باشد بسته قابل مسیریابی باشد، آنگاه بیرونی‌ترین سرایند IP نباید رمزنگاری‌شده باشد.</para>
51
52
    <sect2 xml:id="MUST">
53
      <title>MUST</title>
54
55
      <para>ابزار <quote>Universal Statistical Test for Random Bit Generators</quote>(<link xlink:href="https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf"> <acronym>MUST</acronym></link>) یولی مائورر می‌تواند آنتروپی یک نمونه را به سرعت اندازه‌گیری کند. این ابزار از یک الگوریتم شبه-فشرده‌سازی استفاده می‌کند. کد گونه‌ای از این ابزار که قادر است به طور پیاپی (تقریبا یک چارک مگابایت) قطعات یک پرونده را اندازه‌گیری کند، <link linkend="code"> در زیر آورده شده است</link>.</para>
56
    </sect2>
57
58
    <sect2 xml:id="tcpdump">
59
      <title>Tcpdump</title>
60
61
      <para>ما همچنین به روشی نیاز داریم تا بتوانیم داده‌های خام شبکه را ضبط کنیم. برنامه‌ای به نام <citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</manvolnum></citerefentry> اجازه انجام چنین کاری را به ما می‌دهد. برای استفاده از آن نیاز است تا در <link linkend="kernel">پرونده پیکربندی هسته</link> <emphasis>Berkeley Packet Filter</emphasis> را فعال کرده باشید.</para>
62
63
      <para>دستور:</para>
64
65
      <screen><userinput>tcpdump -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput></screen>
66
67
      <para>۴۰۰۰ بسته خام را ضبط کرده و در <replaceable>dumpfile.bin</replaceable> ذخیره می‌کند. در این مثال، تا ۱۰٬۰۰۰ بایت در هر بسته ضبط خواهد شد.</para>
68
    </sect2>
69
  </sect1>
70
71
  <sect1 xml:id="experiment">
72
    <title>آزمایش</title>
73
74
    <para>آزمایش از این قرار است:</para>
75
76
    <procedure>
77
      <step>
78
	<para>یک پنجره به یک میزبانِ IPsec و پنجره‌ای دیگر به یک میزبان ناامن باز کنید.</para>
79
      </step>
80
81
      <step>
82
	<para>حالا شروع به <link linkend="tcpdump">ضبط بسته‌ها</link> نمایید.</para>
83
      </step>
84
85
      <step>
86
	<para>حال در پنجره <quote>امن</quote>، دستور <trademark class="registered">یونیکسی</trademark> <citerefentry><refentrytitle>yes</refentrytitle><manvolnum>1</manvolnum></citerefentry> را اجرا کنید، که باعث خواهد شد کاراکتر <literal>y</literal> مثل یک جویبار روان شود. پس از مدتی، این دستور را متوقف کنید. به پنجره ناامن بروید و همین کار را تکرار کنید. پس از مدتی، آن را هم متوقف کنید.</para>
87
      </step>
88
89
      <step>
90
	<para>حال <link linkend="code">MUST</link> را روی بسته‌های ضبط شده اجرا کنید. باید چیزی شبیه خروجی زیر را ببینید. نکته مهم این است که اتصال امن ۹۳٪ (۶.۷) از مقدار مورد انتظار (۷.۱۸) را دارد، و اتصال <quote>عادی</quote> تنها ۲۹٪ (۲.۱) از مقدار مورد انتظار را دارد.</para>
91
92
    <screen><prompt>%</prompt> <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput>
93
<prompt>%</prompt> <userinput>uliscan <replaceable>ipsecdemo.bin</replaceable></userinput>
94
95
Uliscan 21 Dec 98
96
L=8 256 258560
97
Measuring file ipsecdemo.bin
98
Init done
99
Expected value for L=8 is 7.1836656
100
6.9396 --------------------------------------------------------
101
6.6177 -----------------------------------------------------
102
6.4100 ---------------------------------------------------
103
2.1101 -----------------
104
2.0838 -----------------
105
2.0983 -----------------</screen>
106
      </step>
107
    </procedure>
108
  </sect1>
109
110
    <sect1 xml:id="caveat">
111
      <title>هشدار</title>
112
113
    <para>این آزمایش نشان می‌دهد که IPsec ظاهرا دارد داده‌ها را <emphasis>به طور یکنواخت</emphasis> <emphasis>توزیع می‌کند</emphasis>، همانطور که از یک رمزنگاری انتظار می‌رود. با این حال، آزمایشی که در اینجا شرح آن رفت <emphasis>نمی‌تواند</emphasis> هیچگونه نقص احتمالی را در سامانه تشخیص دهد (که برای هیچکدام از آنها هیچ نشانه‌ای ندارم). این نقص‌ها می‌توانند چیزهایی مثل تولید کلید ضعیف یا تبادل نادرست کلیدها، در معرض نمایش بودن کلیدها یا داده‌ها برای بقیه، استفاده از الگوریتم ضعیف، تخریب هسته از درون و غیره باشند. کدمنبع را بخوانید و با آن آشنا شوید.</para>
114
  </sect1>
115
116
  <sect1 xml:id="IPsec">
117
    <title>IPsec---تعریف</title>
118
119
    <para>افزونه‌های امنیتی قرارداد اینترنت برای IPv4؛ که در IPv6 الزامی است، قراردادی است برای مذاکره کردن روش‌های رمزنگاری و احراز هویت در لایه IP (میزبان به میزبان). SSL تنها یک سوکت را ایمن می‌کند؛ <application>SSH</application> تنها یک ورود را ایمن می‌کند؛ <application>PGP</application> تنها یک پرونده یا پیغام را ایمن می‌کند. ولی IPsec همه چیز را بین دو میزبان ایمن می‌کند.</para>
120
  </sect1>
121
122
  <sect1 xml:id="ipsec-install">
123
    <title>نصب IPsec</title>
124
125
    <para>بیشتر نسخه‌های مدرن FreeBSD از IPsec در کدمنبع‌شان پشتیبانی می‌کنند. تنها نیاز است که شما گزینه <option>IPSEC</option> را در فایل پیکربندی هسته بگنجانید و پس از آنکه هسته را کامپایل و نصب کردید، با استفاده از دستور <citerefentry><refentrytitle>setkey</refentrytitle><manvolnum>8</manvolnum></citerefentry> اتصالات IPsec را پیکربندی کنید.</para>
126
127
    <para>یک راهنمای جامع درباره راه‌اندازی IPsec در FreeBSD در <link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ipsec.html">کتاب راهنمای FreeBSD</link> آورده شده است.</para>
128
  </sect1>
129
130
  <sect1 xml:id="kernel">
131
    <title>src/sys/i386/conf/KERNELNAME</title>
132
133
    <para>نیاز است تا آن را در فایل پیکربندی هسته گنجانده باشید تا بتوان داده‌های شبکه را با <citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</manvolnum></citerefentry> ضبط کرد. مطمئن شوید که پس از اضافه کردن آن <citerefentry><refentrytitle>config</refentrytitle><manvolnum>8</manvolnum></citerefentry> را اجرا خواهید کرد، سپس هسته را مجددا کامپایل و نصب نمایید.</para>
134
135
    <programlisting>device	bpf</programlisting>
136
  </sect1>
137
138
    <sect1 xml:id="code">
139
      <title>Maurer's Universal Statistical Test (برای بلاک‌هایی با اندازه ۸ بیتی)</title>
140
141
        <para>همین کد را می‌توانید در <link xlink:href="https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt"> این نشانی</link> هم پیدا کنید.</para>
142
143
<programlisting>/*
144
  ULISCAN.c   ---blocksize of 8
145
146
  1 Oct 98
147
  1 Dec 98
148
  21 Dec 98       uliscan.c derived from ueli8.c
149
150
  This version has // comments removed for Sun cc
151
152
  This implements Ueli M Maurer's "Universal Statistical Test for Random
153
  Bit Generators" using L=8
154
155
  Accepts a filename on the command line; writes its results, with other
156
  info, to stdout.
157
158
  Handles input file exhaustion gracefully.
159
160
  Ref: J. Cryptology v 5 no 2, 1992 pp 89-105
161
  also on the web somewhere, which is where I found it.
162
163
  -David Honig
164
  honig@sprynet.com
165
166
  Usage:
167
  ULISCAN filename
168
  outputs to stdout
169
*/
170
171
#define L 8
172
#define V (1&lt;&lt;L)
173
#define Q (10*V)
174
#define K (100   *Q)
175
#define MAXSAMP (Q + K)
176
177
#include &lt;stdio.h&gt;
178
#include &lt;math.h&gt;
179
180
int main(argc, argv)
181
int argc;
182
char **argv;
183
{
184
  FILE *fptr;
185
  int i,j;
186
  int b, c;
187
  int table[V];
188
  double sum = 0.0;
189
  int iproduct = 1;
190
  int run;
191
192
  extern double   log(/* double x */);
193
194
  printf("Uliscan 21 Dec 98 \nL=%d %d %d \n", L, V, MAXSAMP);
195
196
  if (argc &lt; 2) {
197
    printf("Usage: Uliscan filename\n");
198
    exit(-1);
199
  } else {
200
    printf("Measuring file %s\n", argv[1]);
201
  }
202
203
  fptr = fopen(argv[1],"rb");
204
205
  if (fptr == NULL) {
206
    printf("Can't find %s\n", argv[1]);
207
    exit(-1);
208
  }
209
210
  for (i = 0; i &lt; V; i++) {
211
    table[i] = 0;
212
  }
213
214
  for (i = 0; i &lt; Q; i++) {
215
    b = fgetc(fptr);
216
    table[b] = i;
217
  }
218
219
  printf("Init done\n");
220
221
  printf("Expected value for L=8 is 7.1836656\n");
222
223
  run = 1;
224
225
  while (run) {
226
    sum = 0.0;
227
    iproduct = 1;
228
229
    if (run)
230
      for (i = Q; run &amp;&amp; i &lt; Q + K; i++) {
231
        j = i;
232
        b = fgetc(fptr);
233
234
        if (b &lt; 0)
235
          run = 0;
236
237
        if (run) {
238
          if (table[b] &gt; j)
239
            j += K;
240
241
          sum += log((double)(j-table[b]));
242
243
          table[b] = i;
244
        }
245
      }
246
247
    if (!run)
248
      printf("Premature end of file; read %d blocks.\n", i - Q);
249
250
    sum = (sum/((double)(i - Q))) /  log(2.0);
251
    printf("%4.4f ", sum);
252
253
    for (i = 0; i &lt; (int)(sum*8.0 + 0.50); i++)
254
      printf("-");
255
256
    printf("\n");
257
258
    /* refill initial table */
259
    if (0) {
260
      for (i = 0; i &lt; Q; i++) {
261
        b = fgetc(fptr);
262
        if (b &lt; 0) {
263
          run = 0;
264
        } else {
265
          table[b] = i;
266
        }
267
      }
268
    }
269
  }
270
}</programlisting>
271
  </sect1>
272
</article>
(-)articles/ipsec-must/fa_IR.po (+692 lines)
Line 0 Link Here
1
# FreeBSD$
2
# Javad Kouhi <javad.kouhi@gmail.com>, 2020.
3
# Faraz Vahedi <kfv@irbug.org>, 2020.
4
# Parsa Samet <qps@irbug.org>, 2020.
5
msgid ""
6
msgstr ""
7
"Project-Id-Version: PACKAGE VERSION\n"
8
"POT-Creation-Date: 2020-06-06 11:08-0300\n"
9
"PO-Revision-Date: 2020-05-09 12:58+0000\n"
10
"Last-Translator: Parsa Samet <qps@irbug.org>\n"
11
"Language-Team: Persian <https://translate-dev.freebsd.org/projects/freebsd-"
12
"doc/articles_ipsec-must/fa/>\n"
13
"Language: fa\n"
14
"MIME-Version: 1.0\n"
15
"Content-Type: text/plain; charset=UTF-8\n"
16
"Content-Transfer-Encoding: 8bit\n"
17
"Plural-Forms: nplurals=2; plural=n > 1;\n"
18
"X-Generator: Weblate 3.11.3\n"
19
20
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
21
msgctxt "_"
22
msgid "translator-credits"
23
msgstr "جواد کوهی <javad@kouhi.org>، سال ۲۰۲۰"
24
25
#. (itstool) path: info/title
26
#: article.translate.xml:9
27
msgid "Independent Verification of IPsec Functionality in FreeBSD"
28
msgstr "تصدیق عملکرد IPsec به طور مستقل در FreeBSD"
29
30
#. (itstool) path: affiliation/address
31
#: article.translate.xml:13
32
#, no-wrap
33
msgid "<email>honig@sprynet.com</email>"
34
msgstr "<email>honig@sprynet.com</email>"
35
36
#. (itstool) path: info/author
37
#: article.translate.xml:12
38
msgid ""
39
"<personname><firstname>David</firstname><surname>Honig</surname></"
40
"personname><affiliation> <_:address-1/> </affiliation>"
41
msgstr ""
42
"<personname><firstname>دیوید</firstname><surname>هانیگ</surname></"
43
"personname><affiliation> <_:address-1/> </affiliation>"
44
45
#. (itstool) path: info/pubdate
46
#: article.translate.xml:16
47
msgid "1999-05-03"
48
msgstr "1999-05-03"
49
50
#. (itstool) path: legalnotice/para
51
#: article.translate.xml:19
52
msgid "FreeBSD is a registered trademark of the FreeBSD Foundation."
53
msgstr "FreeBSD یک نشان تجاری ثبت شده متعلق به FreeBSD Foundation است."
54
55
#. (itstool) path: legalnotice/para
56
#: article.translate.xml:21
57
msgid ""
58
"Motif, OSF/1, and UNIX are registered trademarks and IT DialTone and The "
59
"Open Group are trademarks of The Open Group in the United States and other "
60
"countries."
61
msgstr ""
62
"Motif، OSF/1 و UNIX نشان‌های تجاری ثبت شده و IT DialTone و The Open Group "
63
"نشان‌های تجاری متعلق به کنسرسیوم The Open Group در ایالات متحده و دیگر کشورها "
64
"هستند."
65
66
#. (itstool) path: legalnotice/para
67
#: article.translate.xml:25
68
msgid ""
69
"Many of the designations used by manufacturers and sellers to distinguish "
70
"their products are claimed as trademarks. Where those designations appear in "
71
"this document, and the FreeBSD Project was aware of the trademark claim, the "
72
"designations have been followed by the <quote>™</quote> or the <quote>®</"
73
"quote> symbol."
74
msgstr ""
75
"بسیاری از عناوین مورد استفاده توسط تولیدکنندگان و فروشندگان برای مشخص کردن "
76
"محصولاتشان به عنوان نشان‌های تجاری اظهار شده‌اند. در هر جای این سند که این "
77
"عناوین ذکر شده باشند، در صورتی که پروژه FreeBSD از اظهارنامه آن نشان تجاری "
78
"آگاه باشد، همراه عنوان علامت <quote>™</quote> یا <quote>®</quote> آمده است."
79
80
#. (itstool) path: info/releaseinfo
81
#: article.translate.xml:33
82
msgid ""
83
"$FreeBSD: head/en_US.ISO8859-1/articles/ipsec-must/article.xml 52227 "
84
"2018-09-06 01:30:47Z ebrandi $"
85
msgstr ""
86
"$FreeBSD: head/en_US.ISO8859-1/articles/ipsec-must/article.xml 52227 "
87
"2018-09-06 01:30:47Z ebrandi $"
88
89
#. (itstool) path: abstract/para
90
#: article.translate.xml:36
91
msgid ""
92
"You installed IPsec and it seems to be working. How do you know? I describe "
93
"a method for experimentally verifying that IPsec is working."
94
msgstr ""
95
"IPsec را نصب کرده‌اید و به نظر می‌رسد که کار هم می‌کند. ولی از کجا می‌دانید؟ من "
96
"روشی را در اینجا تشریح می‌کنم که با آن می‌توانید به طور آزمون‌گرانه تصدیق کنید "
97
"که IPsec به درستی کار می‌کند."
98
99
#. (itstool) path: sect1/title
100
#: article.translate.xml:43
101
msgid "The Problem"
102
msgstr "تعریف مشکل"
103
104
#. (itstool) path: sect1/para
105
#: article.translate.xml:45
106
msgid ""
107
"First, lets assume you have <link linkend=\"ipsec-install\"> installed "
108
"<emphasis>IPsec</emphasis></link>. How do you know it is <link linkend="
109
"\"caveat\">working</link>? Sure, your connection will not work if it is "
110
"misconfigured, and it will work when you finally get it right. "
111
"<citerefentry><refentrytitle>netstat</refentrytitle><manvolnum>1</"
112
"manvolnum></citerefentry> will list it. But can you independently confirm it?"
113
msgstr ""
114
"ابتدا، بیایید فرض کنیم که شما <link linkend=\"ipsec-install"
115
"\"><emphasis>IPsec</emphasis> را نصب کرده‌اید</link>. از کجا می‌دانید که به "
116
"درستی <link linkend=\"caveat\">کار می‌کند</link>؟ بله، درست است، اگر به درستی "
117
"پیکربندی نشده بود اتصال شما کار نمی‌کرد، فقط وقتی آن را درست پیکربندی کرده "
118
"باشید کار خواهد کرد. <citerefentry><refentrytitle>netstat</"
119
"refentrytitle><manvolnum>1</manvolnum></citerefentry> آن را فهرست خواهد کرد. "
120
"ولی آیا به طور مستقل هم می‌توانید آن را تصدیق کنید؟"
121
122
#. (itstool) path: sect1/title
123
#: article.translate.xml:54
124
msgid "The Solution"
125
msgstr "راه حل"
126
127
#. (itstool) path: sect1/para
128
#: article.translate.xml:56
129
msgid "First, some crypto-relevant info theory:"
130
msgstr "ابتدا، کمی اطلاعات تئوری در رابطه با رمزنگاری:"
131
132
#. (itstool) path: listitem/para
133
#: article.translate.xml:60
134
msgid ""
135
"Encrypted data is uniformly distributed, i.e., has maximal entropy per "
136
"symbol;"
137
msgstr ""
138
"داده‌های رمزنگاری‌شده به طور یکنواخت توزیع می‌شوند. به عبارت دیگر، به ازای هر "
139
"نماد، آنتروپی بیشینه دارند؛"
140
141
#. (itstool) path: listitem/para
142
#: article.translate.xml:65
143
msgid ""
144
"Raw, uncompressed data is typically redundant, i.e., has sub-maximal entropy."
145
msgstr ""
146
"داده‌های خام و فشرده‌ نشده عموما افزونگی دارند. به عبارت دیگر، آنتروپی فرو-"
147
"بیشینه دارند."
148
149
#. (itstool) path: sect1/para
150
#: article.translate.xml:70
151
msgid ""
152
"Suppose you could measure the entropy of the data to- and from- your network "
153
"interface. Then you could see the difference between unencrypted data and "
154
"encrypted data. This would be true even if some of the data in "
155
"<quote>encrypted mode</quote> was not encrypted---as the outermost IP header "
156
"must be if the packet is to be routable."
157
msgstr ""
158
"فرض کنید که می‌توانستید آنتروپی داده‌های ارسالی به کارت شبکه و دریافتی از آن "
159
"را اندازه‌گیری کنید. آنگاه می‌توانستید تفاوت بین داده‌های رمزنگاری‌شده و "
160
"رمزنگاری‌نشده را ببینید. این گفته حتی وقتی که مقداری از داده‌ها در <quote>حالت "
161
"رمزنگاری</quote> عملا رمزنگاری‌نشده باشند هم درست است. مثلا اگر قرار باشد "
162
"بسته قابل مسیریابی باشد، آنگاه بیرونی‌ترین سرایند IP نباید رمزنگاری‌شده باشد."
163
164
#. (itstool) path: sect2/title
165
#: article.translate.xml:78
166
msgid "MUST"
167
msgstr "MUST"
168
169
#. (itstool) path: sect2/para
170
#: article.translate.xml:80
171
msgid ""
172
"Ueli Maurer's <quote>Universal Statistical Test for Random Bit Generators</"
173
"quote>(<link xlink:href=\"https://web.archive.org/web/20011115002319/http://"
174
"www.geocities.com/SiliconValley/Code/4704/universal.pdf\"> <acronym>MUST</"
175
"acronym></link>) quickly measures the entropy of a sample. It uses a "
176
"compression-like algorithm. <link linkend=\"code\">The code is given below</"
177
"link> for a variant which measures successive (~quarter megabyte) chunks of "
178
"a file."
179
msgstr ""
180
"ابزار <quote>Universal Statistical Test for Random Bit Generators</"
181
"quote>(<link xlink:href=\"https://web.archive.org/web/20011115002319/http://"
182
"www.geocities.com/SiliconValley/Code/4704/universal.pdf\"> <acronym>MUST</"
183
"acronym></link>) یولی مائورر می‌تواند آنتروپی یک نمونه را به سرعت اندازه‌گیری "
184
"کند. این ابزار از یک الگوریتم شبه-فشرده‌سازی استفاده می‌کند. کد گونه‌ای از این "
185
"ابزار که قادر است به طور پیاپی (تقریبا یک چارک مگابایت) قطعات یک پرونده را "
186
"اندازه‌گیری کند، <link linkend=\"code\"> در زیر آورده شده است</link>."
187
188
#. (itstool) path: sect2/title
189
#: article.translate.xml:89
190
msgid "Tcpdump"
191
msgstr "Tcpdump"
192
193
#. (itstool) path: sect2/para
194
#: article.translate.xml:91
195
msgid ""
196
"We also need a way to capture the raw network data. A program called "
197
"<citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</"
198
"manvolnum></citerefentry> lets you do this, if you have enabled the "
199
"<emphasis>Berkeley Packet Filter</emphasis> interface in your <link linkend="
200
"\"kernel\">kernel's config file</link>."
201
msgstr ""
202
"ما همچنین به روشی نیاز داریم تا بتوانیم داده‌های خام شبکه را ضبط کنیم. "
203
"برنامه‌ای به نام <citerefentry><refentrytitle>tcpdump</"
204
"refentrytitle><manvolnum>1</manvolnum></citerefentry> اجازه انجام چنین کاری "
205
"را به ما می‌دهد. برای استفاده از آن نیاز است تا در <link linkend=\"kernel"
206
"\">پرونده پیکربندی هسته</link> <emphasis>Berkeley Packet Filter</emphasis> "
207
"را فعال کرده باشید."
208
209
#. (itstool) path: sect2/para
210
#: article.translate.xml:97
211
msgid "The command:"
212
msgstr "دستور:"
213
214
#. (itstool) path: sect2/screen
215
#: article.translate.xml:99
216
#, no-wrap
217
msgid "<userinput>tcpdump -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput>"
218
msgstr "<userinput>tcpdump -c 4000 -s 10000 -w <replaceable>dumpfile.bin</replaceable></userinput>"
219
220
#. (itstool) path: sect2/para
221
#: article.translate.xml:101
222
msgid ""
223
"will capture 4000 raw packets to <replaceable>dumpfile.bin</replaceable>. Up "
224
"to 10,000 bytes per packet will be captured in this example."
225
msgstr ""
226
"۴۰۰۰ بسته خام را ضبط کرده و در <replaceable>dumpfile.bin</replaceable> ذخیره "
227
"می‌کند. در این مثال، تا ۱۰٬۰۰۰ بایت در هر بسته ضبط خواهد شد."
228
229
#. (itstool) path: sect1/title
230
#: article.translate.xml:108
231
msgid "The Experiment"
232
msgstr "آزمایش"
233
234
#. (itstool) path: sect1/para
235
#: article.translate.xml:110
236
msgid "Here is the experiment:"
237
msgstr "آزمایش از این قرار است:"
238
239
#. (itstool) path: step/para
240
#: article.translate.xml:114
241
msgid "Open a window to an IPsec host and another window to an insecure host."
242
msgstr ""
243
"یک پنجره به یک میزبانِ IPsec و پنجره‌ای دیگر به یک میزبان ناامن باز کنید."
244
245
#. (itstool) path: step/para
246
#: article.translate.xml:119
247
msgid "Now start <link linkend=\"tcpdump\">capturing packets</link>."
248
msgstr "حالا شروع به <link linkend=\"tcpdump\">ضبط بسته‌ها</link> نمایید."
249
250
#. (itstool) path: step/para
251
#: article.translate.xml:124
252
msgid ""
253
"In the <quote>secure</quote> window, run the <trademark class=\"registered"
254
"\">UNIX</trademark> command <citerefentry><refentrytitle>yes</"
255
"refentrytitle><manvolnum>1</manvolnum></citerefentry>, which will stream the "
256
"<literal>y</literal> character. After a while, stop this. Switch to the "
257
"insecure window, and repeat. After a while, stop."
258
msgstr ""
259
"حال در پنجره <quote>امن</quote>، دستور <trademark class=\"registered"
260
"\">یونیکسی</trademark> <citerefentry><refentrytitle>yes</"
261
"refentrytitle><manvolnum>1</manvolnum></citerefentry> را اجرا کنید، که باعث "
262
"خواهد شد کاراکتر <literal>y</literal> مثل یک جویبار روان شود. پس از مدتی، "
263
"این دستور را متوقف کنید. به پنجره ناامن بروید و همین کار را تکرار کنید. پس "
264
"از مدتی، آن را هم متوقف کنید."
265
266
#. (itstool) path: step/para
267
#: article.translate.xml:131
268
msgid ""
269
"Now run <link linkend=\"code\">MUST</link> on the captured packets. You "
270
"should see something like the following. The important thing to note is that "
271
"the secure connection has 93% (6.7) of the expected value (7.18), and the "
272
"<quote>normal</quote> connection has 29% (2.1) of the expected value."
273
msgstr ""
274
"حال <link linkend=\"code\">MUST</link> را روی بسته‌های ضبط شده اجرا کنید. "
275
"باید چیزی شبیه خروجی زیر را ببینید. نکته مهم این است که اتصال امن ۹۳٪ (۶.۷) "
276
"از مقدار مورد انتظار (۷.۱۸) را دارد، و اتصال <quote>عادی</quote> تنها ۲۹٪ "
277
"(۲.۱) از مقدار مورد انتظار را دارد."
278
279
#. (itstool) path: step/screen
280
#: article.translate.xml:138
281
#, no-wrap
282
msgid ""
283
"<prompt>%</prompt> <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput>\n"
284
"<prompt>%</prompt> <userinput>uliscan <replaceable>ipsecdemo.bin</replaceable></userinput>\n"
285
"\n"
286
"Uliscan 21 Dec 98\n"
287
"L=8 256 258560\n"
288
"Measuring file ipsecdemo.bin\n"
289
"Init done\n"
290
"Expected value for L=8 is 7.1836656\n"
291
"6.9396 --------------------------------------------------------\n"
292
"6.6177 -----------------------------------------------------\n"
293
"6.4100 ---------------------------------------------------\n"
294
"2.1101 -----------------\n"
295
"2.0838 -----------------\n"
296
"2.0983 -----------------"
297
msgstr ""
298
"<prompt>%</prompt> <userinput>tcpdump -c 4000 -s 10000 -w <replaceable>ipsecdemo.bin</replaceable></userinput>\n"
299
"<prompt>%</prompt> <userinput>uliscan <replaceable>ipsecdemo.bin</replaceable></userinput>\n"
300
"\n"
301
"Uliscan 21 Dec 98\n"
302
"L=8 256 258560\n"
303
"Measuring file ipsecdemo.bin\n"
304
"Init done\n"
305
"Expected value for L=8 is 7.1836656\n"
306
"6.9396 --------------------------------------------------------\n"
307
"6.6177 -----------------------------------------------------\n"
308
"6.4100 ---------------------------------------------------\n"
309
"2.1101 -----------------\n"
310
"2.0838 -----------------\n"
311
"2.0983 -----------------"
312
313
#. (itstool) path: sect1/title
314
#: article.translate.xml:157
315
msgid "Caveat"
316
msgstr "هشدار"
317
318
#. (itstool) path: sect1/para
319
#: article.translate.xml:159
320
msgid ""
321
"This experiment shows that IPsec <emphasis>does</emphasis> seem to be "
322
"distributing the payload data <emphasis>uniformly</emphasis>, as encryption "
323
"should. However, the experiment described here <emphasis>cannot</emphasis> "
324
"detect many possible flaws in a system (none of which do I have any evidence "
325
"for). These include poor key generation or exchange, data or keys being "
326
"visible to others, use of weak algorithms, kernel subversion, etc. Study the "
327
"source; know the code."
328
msgstr ""
329
"این آزمایش نشان می‌دهد که IPsec ظاهرا دارد داده‌ها را <emphasis>به طور "
330
"یکنواخت</emphasis> <emphasis>توزیع می‌کند</emphasis>، همانطور که از یک "
331
"رمزنگاری انتظار می‌رود. با این حال، آزمایشی که در اینجا شرح آن رفت "
332
"<emphasis>نمی‌تواند</emphasis> هیچگونه نقص احتمالی را در سامانه تشخیص دهد (که "
333
"برای هیچکدام از آنها هیچ نشانه‌ای ندارم). این نقص‌ها می‌توانند چیزهایی مثل "
334
"تولید کلید ضعیف یا تبادل نادرست کلیدها، در معرض نمایش بودن کلیدها یا داده‌ها "
335
"برای بقیه، استفاده از الگوریتم ضعیف، تخریب هسته از درون و غیره باشند. کدمنبع "
336
"را بخوانید و با آن آشنا شوید."
337
338
#. (itstool) path: sect1/title
339
#: article.translate.xml:171
340
msgid "IPsec---Definition"
341
msgstr "IPsec---تعریف"
342
343
#. (itstool) path: sect1/para
344
#: article.translate.xml:173
345
msgid ""
346
"Internet Protocol security extensions to IPv4; required for IPv6. A protocol "
347
"for negotiating encryption and authentication at the IP (host-to-host) "
348
"level. SSL secures only one application socket; <application>SSH</"
349
"application> secures only a login; <application>PGP</application> secures "
350
"only a specified file or message. IPsec encrypts everything between two "
351
"hosts."
352
msgstr ""
353
"افزونه‌های امنیتی قرارداد اینترنت برای IPv4؛ که در IPv6 الزامی است، قراردادی "
354
"است برای مذاکره کردن روش‌های رمزنگاری و احراز هویت در لایه IP (میزبان به "
355
"میزبان). SSL تنها یک سوکت را ایمن می‌کند؛ <application>SSH</application> تنها "
356
"یک ورود را ایمن می‌کند؛ <application>PGP</application> تنها یک پرونده یا "
357
"پیغام را ایمن می‌کند. ولی IPsec همه چیز را بین دو میزبان ایمن می‌کند."
358
359
#. (itstool) path: sect1/title
360
#: article.translate.xml:182
361
msgid "Installing IPsec"
362
msgstr "نصب IPsec"
363
364
#. (itstool) path: sect1/para
365
#: article.translate.xml:184
366
msgid ""
367
"Most of the modern versions of FreeBSD have IPsec support in their base "
368
"source. So you will need to include the <option>IPSEC</option> option in "
369
"your kernel config and, after kernel rebuild and reinstall, configure IPsec "
370
"connections using <citerefentry><refentrytitle>setkey</"
371
"refentrytitle><manvolnum>8</manvolnum></citerefentry> command."
372
msgstr ""
373
"بیشتر نسخه‌های مدرن FreeBSD از IPsec در کدمنبع‌شان پشتیبانی می‌کنند. تنها نیاز "
374
"است که شما گزینه <option>IPSEC</option> را در فایل پیکربندی هسته بگنجانید و "
375
"پس از آنکه هسته را کامپایل و نصب کردید، با استفاده از دستور "
376
"<citerefentry><refentrytitle>setkey</refentrytitle><manvolnum>8</manvolnum></"
377
"citerefentry> اتصالات IPsec را پیکربندی کنید."
378
379
#. (itstool) path: sect1/para
380
#: article.translate.xml:190
381
msgid ""
382
"A comprehensive guide on running IPsec on FreeBSD is provided in <link xlink:"
383
"href=\"@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ipsec.html"
384
"\">FreeBSD Handbook</link>."
385
msgstr ""
386
"یک راهنمای جامع درباره راه‌اندازی IPsec در FreeBSD در <link xlink:href="
387
"\"@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/ipsec.html\">کتاب "
388
"راهنمای FreeBSD</link> آورده شده است."
389
390
#. (itstool) path: sect1/title
391
#: article.translate.xml:196
392
msgid "src/sys/i386/conf/KERNELNAME"
393
msgstr "src/sys/i386/conf/KERNELNAME"
394
395
#. (itstool) path: sect1/para
396
#: article.translate.xml:198
397
msgid ""
398
"This needs to be present in the kernel config file in order to capture "
399
"network data with <citerefentry><refentrytitle>tcpdump</"
400
"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Be sure to run "
401
"<citerefentry><refentrytitle>config</refentrytitle><manvolnum>8</manvolnum></"
402
"citerefentry> after adding this, and rebuild and reinstall."
403
msgstr ""
404
"نیاز است تا آن را در فایل پیکربندی هسته گنجانده باشید تا بتوان داده‌های شبکه "
405
"را با <citerefentry><refentrytitle>tcpdump</refentrytitle><manvolnum>1</"
406
"manvolnum></citerefentry> ضبط کرد. مطمئن شوید که پس از اضافه کردن آن "
407
"<citerefentry><refentrytitle>config</refentrytitle><manvolnum>8</manvolnum></"
408
"citerefentry> را اجرا خواهید کرد، سپس هسته را مجددا کامپایل و نصب نمایید."
409
410
#. (itstool) path: sect1/programlisting
411
#: article.translate.xml:203
412
#, no-wrap
413
msgid "device\tbpf"
414
msgstr "device\tbpf"
415
416
#. (itstool) path: sect1/title
417
#: article.translate.xml:207
418
msgid "Maurer's Universal Statistical Test (for block size=8 bits)"
419
msgstr "Maurer's Universal Statistical Test (برای بلاک‌هایی با اندازه ۸ بیتی)"
420
421
#. (itstool) path: sect1/para
422
#: article.translate.xml:210
423
msgid ""
424
"You can find the same code at <link xlink:href=\"https://web.archive.org/"
425
"web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/"
426
"uliscanc.txt\"> this link</link>."
427
msgstr ""
428
"همین کد را می‌توانید در <link xlink:href=\"https://web.archive.org/"
429
"web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/"
430
"uliscanc.txt\"> این نشانی</link> هم پیدا کنید."
431
432
#. (itstool) path: sect1/programlisting
433
#: article.translate.xml:213
434
#, no-wrap
435
msgid ""
436
"/*\n"
437
"  ULISCAN.c   ---blocksize of 8\n"
438
"\n"
439
"  1 Oct 98\n"
440
"  1 Dec 98\n"
441
"  21 Dec 98       uliscan.c derived from ueli8.c\n"
442
"\n"
443
"  This version has // comments removed for Sun cc\n"
444
"\n"
445
"  This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
446
"  Bit Generators\" using L=8\n"
447
"\n"
448
"  Accepts a filename on the command line; writes its results, with other\n"
449
"  info, to stdout.\n"
450
"\n"
451
"  Handles input file exhaustion gracefully.\n"
452
"\n"
453
"  Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
454
"  also on the web somewhere, which is where I found it.\n"
455
"\n"
456
"  -David Honig\n"
457
"  honig@sprynet.com\n"
458
"\n"
459
"  Usage:\n"
460
"  ULISCAN filename\n"
461
"  outputs to stdout\n"
462
"*/\n"
463
"\n"
464
"#define L 8\n"
465
"#define V (1&lt;&lt;L)\n"
466
"#define Q (10*V)\n"
467
"#define K (100   *Q)\n"
468
"#define MAXSAMP (Q + K)\n"
469
"\n"
470
"#include &lt;stdio.h&gt;\n"
471
"#include &lt;math.h&gt;\n"
472
"\n"
473
"int main(argc, argv)\n"
474
"int argc;\n"
475
"char **argv;\n"
476
"{\n"
477
"  FILE *fptr;\n"
478
"  int i,j;\n"
479
"  int b, c;\n"
480
"  int table[V];\n"
481
"  double sum = 0.0;\n"
482
"  int iproduct = 1;\n"
483
"  int run;\n"
484
"\n"
485
"  extern double   log(/* double x */);\n"
486
"\n"
487
"  printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
488
"\n"
489
"  if (argc &lt; 2) {\n"
490
"    printf(\"Usage: Uliscan filename\\n\");\n"
491
"    exit(-1);\n"
492
"  } else {\n"
493
"    printf(\"Measuring file %s\\n\", argv[1]);\n"
494
"  }\n"
495
"\n"
496
"  fptr = fopen(argv[1],\"rb\");\n"
497
"\n"
498
"  if (fptr == NULL) {\n"
499
"    printf(\"Can't find %s\\n\", argv[1]);\n"
500
"    exit(-1);\n"
501
"  }\n"
502
"\n"
503
"  for (i = 0; i &lt; V; i++) {\n"
504
"    table[i] = 0;\n"
505
"  }\n"
506
"\n"
507
"  for (i = 0; i &lt; Q; i++) {\n"
508
"    b = fgetc(fptr);\n"
509
"    table[b] = i;\n"
510
"  }\n"
511
"\n"
512
"  printf(\"Init done\\n\");\n"
513
"\n"
514
"  printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
515
"\n"
516
"  run = 1;\n"
517
"\n"
518
"  while (run) {\n"
519
"    sum = 0.0;\n"
520
"    iproduct = 1;\n"
521
"\n"
522
"    if (run)\n"
523
"      for (i = Q; run &amp;&amp; i &lt; Q + K; i++) {\n"
524
"        j = i;\n"
525
"        b = fgetc(fptr);\n"
526
"\n"
527
"        if (b &lt; 0)\n"
528
"          run = 0;\n"
529
"\n"
530
"        if (run) {\n"
531
"          if (table[b] &gt; j)\n"
532
"            j += K;\n"
533
"\n"
534
"          sum += log((double)(j-table[b]));\n"
535
"\n"
536
"          table[b] = i;\n"
537
"        }\n"
538
"      }\n"
539
"\n"
540
"    if (!run)\n"
541
"      printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
542
"\n"
543
"    sum = (sum/((double)(i - Q))) /  log(2.0);\n"
544
"    printf(\"%4.4f \", sum);\n"
545
"\n"
546
"    for (i = 0; i &lt; (int)(sum*8.0 + 0.50); i++)\n"
547
"      printf(\"-\");\n"
548
"\n"
549
"    printf(\"\\n\");\n"
550
"\n"
551
"    /* refill initial table */\n"
552
"    if (0) {\n"
553
"      for (i = 0; i &lt; Q; i++) {\n"
554
"        b = fgetc(fptr);\n"
555
"        if (b &lt; 0) {\n"
556
"          run = 0;\n"
557
"        } else {\n"
558
"          table[b] = i;\n"
559
"        }\n"
560
"      }\n"
561
"    }\n"
562
"  }\n"
563
"}"
564
msgstr ""
565
"/*\n"
566
"  ULISCAN.c   ---blocksize of 8\n"
567
"\n"
568
"  1 Oct 98\n"
569
"  1 Dec 98\n"
570
"  21 Dec 98       uliscan.c derived from ueli8.c\n"
571
"\n"
572
"  This version has // comments removed for Sun cc\n"
573
"\n"
574
"  This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
575
"  Bit Generators\" using L=8\n"
576
"\n"
577
"  Accepts a filename on the command line; writes its results, with other\n"
578
"  info, to stdout.\n"
579
"\n"
580
"  Handles input file exhaustion gracefully.\n"
581
"\n"
582
"  Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
583
"  also on the web somewhere, which is where I found it.\n"
584
"\n"
585
"  -David Honig\n"
586
"  honig@sprynet.com\n"
587
"\n"
588
"  Usage:\n"
589
"  ULISCAN filename\n"
590
"  outputs to stdout\n"
591
"*/\n"
592
"\n"
593
"#define L 8\n"
594
"#define V (1&lt;&lt;L)\n"
595
"#define Q (10*V)\n"
596
"#define K (100   *Q)\n"
597
"#define MAXSAMP (Q + K)\n"
598
"\n"
599
"#include &lt;stdio.h&gt;\n"
600
"#include &lt;math.h&gt;\n"
601
"\n"
602
"int main(argc, argv)\n"
603
"int argc;\n"
604
"char **argv;\n"
605
"{\n"
606
"  FILE *fptr;\n"
607
"  int i,j;\n"
608
"  int b, c;\n"
609
"  int table[V];\n"
610
"  double sum = 0.0;\n"
611
"  int iproduct = 1;\n"
612
"  int run;\n"
613
"\n"
614
"  extern double   log(/* double x */);\n"
615
"\n"
616
"  printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
617
"\n"
618
"  if (argc &lt; 2) {\n"
619
"    printf(\"Usage: Uliscan filename\\n\");\n"
620
"    exit(-1);\n"
621
"  } else {\n"
622
"    printf(\"Measuring file %s\\n\", argv[1]);\n"
623
"  }\n"
624
"\n"
625
"  fptr = fopen(argv[1],\"rb\");\n"
626
"\n"
627
"  if (fptr == NULL) {\n"
628
"    printf(\"Can't find %s\\n\", argv[1]);\n"
629
"    exit(-1);\n"
630
"  }\n"
631
"\n"
632
"  for (i = 0; i &lt; V; i++) {\n"
633
"    table[i] = 0;\n"
634
"  }\n"
635
"\n"
636
"  for (i = 0; i &lt; Q; i++) {\n"
637
"    b = fgetc(fptr);\n"
638
"    table[b] = i;\n"
639
"  }\n"
640
"\n"
641
"  printf(\"Init done\\n\");\n"
642
"\n"
643
"  printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
644
"\n"
645
"  run = 1;\n"
646
"\n"
647
"  while (run) {\n"
648
"    sum = 0.0;\n"
649
"    iproduct = 1;\n"
650
"\n"
651
"    if (run)\n"
652
"      for (i = Q; run &amp;&amp; i &lt; Q + K; i++) {\n"
653
"        j = i;\n"
654
"        b = fgetc(fptr);\n"
655
"\n"
656
"        if (b &lt; 0)\n"
657
"          run = 0;\n"
658
"\n"
659
"        if (run) {\n"
660
"          if (table[b] &gt; j)\n"
661
"            j += K;\n"
662
"\n"
663
"          sum += log((double)(j-table[b]));\n"
664
"\n"
665
"          table[b] = i;\n"
666
"        }\n"
667
"      }\n"
668
"\n"
669
"    if (!run)\n"
670
"      printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
671
"\n"
672
"    sum = (sum/((double)(i - Q))) /  log(2.0);\n"
673
"    printf(\"%4.4f \", sum);\n"
674
"\n"
675
"    for (i = 0; i &lt; (int)(sum*8.0 + 0.50); i++)\n"
676
"      printf(\"-\");\n"
677
"\n"
678
"    printf(\"\\n\");\n"
679
"\n"
680
"    /* refill initial table */\n"
681
"    if (0) {\n"
682
"      for (i = 0; i &lt; Q; i++) {\n"
683
"        b = fgetc(fptr);\n"
684
"        if (b &lt; 0) {\n"
685
"          run = 0;\n"
686
"        } else {\n"
687
"          table[b] = i;\n"
688
"        }\n"
689
"      }\n"
690
"    }\n"
691
"  }\n"
692
"}"

Return to bug 247762