# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2026-02-22 15:58+0000\n" "PO-Revision-Date: 2026-03-02 03:11+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.17\n" #. type: Title = #: documentation/content/en/articles/ipsec-must/_index.adoc:1 #: documentation/content/en/articles/ipsec-must/_index.adoc:11 #, no-wrap msgid "Independent Verification of IPsec Functionality in FreeBSD" msgstr "Независимое исследование работы IPsec во FreeBSD" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:44 msgid "Abstract" msgstr "Аннотация" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:47 msgid "" "You installed IPsec and it seems to be working. How do you know? I describe " "a method for experimentally verifying that IPsec is working." msgstr "" "Вы только что установили и настроили IPsec, и оно, кажется, заработало. Как " "это можно проверить? Я опишу метод экспериментальной проверки правильного " "функционирования IPsec." #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:49 msgid "'''" msgstr "'''" #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:53 #, no-wrap msgid "The Problem" msgstr "Постановка задачи" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:58 msgid "" "First, lets assume you have crossref:ipsec-must[ipsec-install, Installing " "IPsec]. How do you know it is crossref:ipsec-must[caveat, Caveat]? Sure, " "your connection will not work if it is misconfigured, and it will work when " "you finally get it right. man:netstat[1] will list it. But can you " "independently confirm it?" msgstr "" "Для начала предположим, что вы crossref:ipsec-must[ipsec-install, установили " "IPsec]. Как вы узнаете, что IPsec crossref:ipsec-must[caveat, надо учитывать " "предостережение]? Несомненно, соединения не будет, если вы неверно его " "сконфигурировали. И оно, конечно, появится в выводе команды man:netstat[1], " "когда вы всё сделаете верно. Но можно ли как-то подтвердить сам факт " "функционирования IPsec?" #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:60 #, no-wrap msgid "The Solution" msgstr "Решение" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:63 msgid "First, some crypto-relevant info theory:" msgstr "Для начала немного криптографической теории:" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:65 msgid "" "Encrypted data is uniformly distributed, i.e., has maximal entropy per " "symbol;" msgstr "" "Шифрованные данные равномерно распределены по области определения, то есть " "каждый символ имеет максимальную энтропию;" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:66 msgid "" "Raw, uncompressed data is typically redundant, i.e., has sub-maximal entropy." msgstr "" "\"Сырые\" и несжатые данные как правило избыточны, то есть их энтропия " "меньше максимально возможной." #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:70 msgid "" "Suppose you could measure the entropy of the data to- and from- your network " "interface. Then you could see the difference between unencrypted data and " "encrypted data. This would be true even if some of the data in \"encrypted " "mode\" was not encrypted---as the outermost IP header must be if the packet " "is to be routable." msgstr "" "Предположим, что у Вас имеется возможность измерить энтропию входящего и " "исходящего трафика на сетевом интерфейсе. В этом случае Вы сможете легко " "отличить зашифрованные данные от открытых, причём даже в том случае, когда " "часть данных в \"режиме шифрования\" передаётся в открытом виде, к примеру " "внешние заголовки IP, которые используются для маршрутизации." #. type: Title === #: documentation/content/en/articles/ipsec-must/_index.adoc:72 #, no-wrap msgid "MUST" msgstr "MUST" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:77 msgid "" "Ueli Maurer's \"Universal Statistical Test for Random Bit Generators" "\"(https://web.archive.org/web/20011115002319/http://www.geocities.com/" "SiliconValley/Code/4704/universal.pdf[MUST]) quickly measures the entropy of " "a sample. It uses a compression-like algorithm. crossref:ipsec-must[code, " "Maurer's Universal Statistical Test (for block size8 bits)] for a variant " "which measures successive (~quarter megabyte) chunks of a file." msgstr "" "\"Универсальный статистический тест для генераторов случайных чисел\" Уэли " "Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators)" ", сокращённо http://www.geocities.com/SiliconValley/Code/4704/universal." "pdf[MUST], позволяет быстро измерить энтропию последовательного набора " "данных. Используемый алгоритм похож на алгоритм сжатия. В разделе crossref" ":ipsec-must[code, Универсальный статистический тест Маурера (размер блока - " "8 бит))] приведён исходный код, позволяющий измерять энтропию " "последовательных кусков данных размером около четверти мегабайта." #. type: Title === #: documentation/content/en/articles/ipsec-must/_index.adoc:79 #, no-wrap msgid "Tcpdump" msgstr "Tcpdump" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:84 msgid "" "We also need a way to capture the raw network data. A program called man:" "tcpdump[1] lets you do this, if you have enabled the _Berkeley Packet " "Filter_ interface in your crossref:ipsec-must[kernel,src/sys/i386/conf/" "KERNELNAME]." msgstr "" "Ещё нам нужен способ сохранения информации, проходящей через интерфейс. " "Программа man:tcpdump[1] позволяет сделать это в случае, если у вас ядро " "crossref:ipsec-must[kernel,src/sys/i386/conf/KERNELNAME] с поддержкой " "__Пакетного фильтра Беркли (Berkeley Packet Filter)__." #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:86 msgid "The command:" msgstr "Команда:" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:90 #, no-wrap msgid " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n" msgstr " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:94 msgid "" "will capture 4000 raw packets to _dumpfile.bin_. Up to 10,000 bytes per " "packet will be captured in this example." msgstr "" "сохранит 4000 пакетов в файл _dumpfile.bin_. В данном примере объём " "записываемой информации в каждом пакете не может превышать 10,000 байтов." #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:96 #, no-wrap msgid "The Experiment" msgstr "Эксперимент" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:99 msgid "Here is the experiment:" msgstr "Повторите следующие шаги эксперимента:" #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:103 msgid "Open a window to an IPsec host and another window to an insecure host." msgstr "" "Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь " "компьютером через канал IPsec, а в другом - с обычным, \"незащищённым\" " "компьютером." #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:104 msgid "Now start crossref:ipsec-must[tcpdump, Tcpdump]." msgstr "Теперь запустите crossref:ipsec-must[tcpdump, Tcpdump]." #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:105 msgid "" "In the \"secure\" window, run the UNIX(R) command man:yes[1], which will " "stream the `y` character. After a while, stop this. Switch to the insecure " "window, and repeat. After a while, stop." msgstr "" "В \"шифрованном\" окне запустите команду UNIX(R) man:yes[1], которая будет " "выдавать бесконечный поток символов `y`. Немножко подождите и завершите её. " "Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте " "то же самое." #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:106 msgid "" "Now run crossref:ipsec-must[code, Maurer's Universal Statistical Test (for " "block size8 bits)] on the captured packets. You should see something like " "the following. The important thing to note is that the secure connection has " "93% (6.7) of the expected value (7.18), and the \"normal\" connection has " "29% (2.1) of the expected value." msgstr "" "Заключительный этап: запустите crossref:ipsec-must[code, Универсальный " "статистический тест Маурера (размер блока - 8 бит)], передав ему для " "обработки только что сохранённые пакеты через командную строку. Вы должны " "увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное " "соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное " "соединение - всего лишь 29% (2,1)." #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:122 #, no-wrap msgid "" "% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n" "% uliscan ipsecdemo.bin\n" "Uliscan 21 Dec 98\n" "L=8 256 258560\n" "Measuring file ipsecdemo.bin\n" "Init done\n" "Expected value for L=8 is 7.1836656\n" "6.9396 --------------------------------------------------------\n" "6.6177 -----------------------------------------------------\n" "6.4100 ---------------------------------------------------\n" "2.1101 -----------------\n" "2.0838 -----------------\n" "2.0983 -----------------\n" msgstr "" "% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n" "% uliscan ipsecdemo.bin\n" "Uliscan 21 Dec 98\n" "L=8 256 258560\n" "Measuring file ipsecdemo.bin\n" "Init done\n" "Expected value for L=8 is 7.1836656\n" "6.9396 --------------------------------------------------------\n" "6.6177 -----------------------------------------------------\n" "6.4100 ---------------------------------------------------\n" "2.1101 -----------------\n" "2.0838 -----------------\n" "2.0983 -----------------\n" #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:126 #, no-wrap msgid "Caveat" msgstr "Предостережение" #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:132 msgid "" "This experiment shows that IPsec _does_ seem to be distributing the payload " "data __uniformly__, as encryption should. However, the experiment described " "here _cannot_ detect many possible flaws in a system (none of which do I " "have any evidence for). These include poor key generation or exchange, data " "or keys being visible to others, use of weak algorithms, kernel subversion, " "etc. Study the source; know the code." msgstr "" "Этот эксперимент показывает, что IPsec _действительно_ распределяет " "передаваемые байты по области определения __равномерно__, как и любое другое " "шифрование. Однако этот метод _не может_ обнаружить множество других изъянов " "в системе (хотя я таковых не знаю). Для примера можно привести плохие " "алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных " "или ключей, использование слабых в криптографическом смысле алгоритмов, " "взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит." #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:134 #, no-wrap msgid "IPsec---Definition" msgstr "IPsec — определение" #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:140 msgid "" "Internet Protocol security extensions to IPv4; required for IPv6. A " "protocol for negotiating encryption and authentication at the IP (host-to-" "host) level. SSL secures only one application socket; SSH secures only a " "login; PGP secures only a specified file or message. IPsec encrypts " "everything between two hosts." msgstr "" "IPsec представляет собой протокол безопасного обмена информацией по " "Internet. Существует в виде расширения к IPv4; является неотъемлемой частью " "IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP " "(межмашинное \"host-to-host\" взаимодействие). SSL защищает только лишь " "конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает " "определённый файл или письмо. IPsec шифрует всю информацию, передаваемую " "между двумя машинами." #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:142 #, no-wrap msgid "Installing IPsec" msgstr "Установка IPsec" #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:146 msgid "" "Most of the modern versions of FreeBSD have IPsec support in their base " "source. So you will need to include the `IPSEC` option in your kernel " "config and, after kernel rebuild and reinstall, configure IPsec connections " "using man:setkey[8] command." msgstr "" "Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, " "Вы должны будете лишь добавить опцию `IPSEC` в конфигурационный файл ядра, и " "после сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с " "помощью команды man:setkey[8]." #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:148 msgid "" "A comprehensive guide on running IPsec on FreeBSD is provided in extref:{vpn-" "ipsec}[VPN over IPsec]." msgstr "" "Более подробно о том, как запустить IPsec во FreeBSD, можно прочесть в " "extref:{vpn-ipsec}[VPN через IPsec]." #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:150 #, no-wrap msgid "src/sys/i386/conf/KERNELNAME" msgstr "src/sys/i386/conf/KERNELNAME" #. type: delimited block = 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:154 msgid "" "This needs to be present in the kernel config file to capture network data " "with man:tcpdump[1]. Be sure to run man:config[8] after adding this, and " "rebuild and reinstall." msgstr "" "Для того, чтобы захватывать сетевой трафик при помощи man:tcpdump[1], " "следующие строки должны присутствовать в конфигурационном файле ядра. Не " "забудьте после модификации запустить man:config[8], и, как обычно, " "пересобрать и установить новое ядро." #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:158 #, no-wrap msgid "device\tbpf\n" msgstr "device\tbpf\n" #. type: Title == #: documentation/content/en/articles/ipsec-must/_index.adoc:161 #, no-wrap msgid "Maurer's Universal Statistical Test (for block size=8 bits)" msgstr "Универсальный статистический тест Маурера (размер блока - 8 бит)" #. type: Plain text #: documentation/content/en/articles/ipsec-must/_index.adoc:164 msgid "" "You can find the same code at https://web.archive.org/web/20031204230654/" "http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[this link]." msgstr "" "Оригинал нижеприведённого кода находится по https://web.archive.org/" "web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/" "uliscanc.txt[ этому адресу]." #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:169 #, no-wrap msgid "" "/*\n" " ULISCAN.c ---blocksize of 8\n" msgstr "" "/*\n" " ULISCAN.c ---blocksize of 8\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:173 #, no-wrap msgid "" " 1 Oct 98\n" " 1 Dec 98\n" " 21 Dec 98 uliscan.c derived from ueli8.c\n" msgstr "" " 1 Oct 98\n" " 1 Dec 98\n" " 21 Dec 98 uliscan.c derived from ueli8.c\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:175 #, no-wrap msgid " This version has // comments removed for Sun cc\n" msgstr " This version has // comments removed for Sun cc\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:178 #, no-wrap msgid "" " This implements Ueli M Maurer's \"Universal Statistical Test for Random\n" " Bit Generators\" using L=8\n" msgstr "" " This implements Ueli M Maurer's \"Universal Statistical Test for Random\n" " Bit Generators\" using L=8\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:181 #, no-wrap msgid "" " Accepts a filename on the command line; writes its results, with other\n" " info, to stdout.\n" msgstr "" " Accepts a filename on the command line; writes its results, with other\n" " info, to stdout.\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:183 #, no-wrap msgid " Handles input file exhaustion gracefully.\n" msgstr " Handles input file exhaustion gracefully.\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:186 #, no-wrap msgid "" " Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n" " also on the web somewhere, which is where I found it.\n" msgstr "" " Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n" " also on the web somewhere, which is where I found it.\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:189 #, no-wrap msgid "" " -David Honig\n" " honig@sprynet.com\n" msgstr "" " -David Honig\n" " honig@sprynet.com\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:194 #, no-wrap msgid "" " Usage:\n" " ULISCAN filename\n" " outputs to stdout\n" "*/\n" msgstr "" " Usage:\n" " ULISCAN filename\n" " outputs to stdout\n" "*/\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:200 #, no-wrap msgid "" "#define L 8\n" "#define V (1<\n" "#include \n" msgstr "" "#include \n" "#include \n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:215 #, no-wrap msgid "" "int main(argc, argv)\n" "int argc;\n" "char **argv;\n" "{\n" " FILE *fptr;\n" " int i,j;\n" " int b, c;\n" " int table[V];\n" " double sum = 0.0;\n" " int iproduct = 1;\n" " int run;\n" msgstr "" "int main(argc, argv)\n" "int argc;\n" "char **argv;\n" "{\n" " FILE *fptr;\n" " int i,j;\n" " int b, c;\n" " int table[V];\n" " double sum = 0.0;\n" " int iproduct = 1;\n" " int run;\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:217 #, no-wrap msgid " extern double log(/* double x */);\n" msgstr " extern double log(/* double x */);\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:219 #, no-wrap msgid " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n" msgstr " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:226 #, no-wrap msgid "" " if (argc < 2) {\n" " printf(\"Usage: Uliscan filename\\n\");\n" " exit(-1);\n" " } else {\n" " printf(\"Measuring file %s\\n\", argv[1]);\n" " }\n" msgstr "" " if (argc < 2) {\n" " printf(\"Usage: Uliscan filename\\n\");\n" " exit(-1);\n" " } else {\n" " printf(\"Measuring file %s\\n\", argv[1]);\n" " }\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:228 #, no-wrap msgid " fptr = fopen(argv[1],\"rb\");\n" msgstr " fptr = fopen(argv[1],\"rb\");\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:233 #, no-wrap msgid "" " if (fptr == NULL) {\n" " printf(\"Can't find %s\\n\", argv[1]);\n" " exit(-1);\n" " }\n" msgstr "" " if (fptr == NULL) {\n" " printf(\"Can't find %s\\n\", argv[1]);\n" " exit(-1);\n" " }\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:237 #, no-wrap msgid "" " for (i = 0; i < V; i++) {\n" " table[i] = 0;\n" " }\n" msgstr "" " for (i = 0; i < V; i++) {\n" " table[i] = 0;\n" " }\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:242 #, no-wrap msgid "" " for (i = 0; i < Q; i++) {\n" " b = fgetc(fptr);\n" " table[b] = i;\n" " }\n" msgstr "" " for (i = 0; i < Q; i++) {\n" " b = fgetc(fptr);\n" " table[b] = i;\n" " }\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:244 #, no-wrap msgid " printf(\"Init done\\n\");\n" msgstr " printf(\"Init done\\n\");\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:246 #, no-wrap msgid " printf(\"Expected value for L=8 is 7.1836656\\n\");\n" msgstr " printf(\"Expected value for L=8 is 7.1836656\\n\");\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:248 #, no-wrap msgid " run = 1;\n" msgstr " run = 1;\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:252 #, no-wrap msgid "" " while (run) {\n" " sum = 0.0;\n" " iproduct = 1;\n" msgstr "" " while (run) {\n" " sum = 0.0;\n" " iproduct = 1;\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:257 #, no-wrap msgid "" " if (run)\n" " for (i = Q; run && i < Q + K; i++) {\n" " j = i;\n" " b = fgetc(fptr);\n" msgstr "" " if (run)\n" " for (i = Q; run && i < Q + K; i++) {\n" " j = i;\n" " b = fgetc(fptr);\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:260 #, no-wrap msgid "" " if (b < 0)\n" " run = 0;\n" msgstr "" " if (b < 0)\n" " run = 0;\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:264 #, no-wrap msgid "" " if (run) {\n" " if (table[b] > j)\n" " j += K;\n" msgstr "" " if (run) {\n" " if (table[b] > j)\n" " j += K;\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:266 #, no-wrap msgid " sum += log((double)(j-table[b]));\n" msgstr " sum += log((double)(j-table[b]));\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:270 #, no-wrap msgid "" " table[b] = i;\n" " }\n" " }\n" msgstr "" " table[b] = i;\n" " }\n" " }\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:273 #, no-wrap msgid "" " if (!run)\n" " printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n" msgstr "" " if (!run)\n" " printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:276 #, no-wrap msgid "" " sum = (sum/((double)(i - Q))) / log(2.0);\n" " printf(\"%4.4f \", sum);\n" msgstr "" " sum = (sum/((double)(i - Q))) / log(2.0);\n" " printf(\"%4.4f \", sum);\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:279 #, no-wrap msgid "" " for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n" " printf(\"-\");\n" msgstr "" " for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n" " printf(\"-\");\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:281 #, no-wrap msgid " printf(\"\\n\");\n" msgstr " printf(\"\\n\");\n" #. type: delimited block . 4 #: documentation/content/en/articles/ipsec-must/_index.adoc:295 #, no-wrap msgid "" " /* refill initial table */\n" " if (0) {\n" " for (i = 0; i < Q; i++) {\n" " b = fgetc(fptr);\n" " if (b < 0) {\n" " run = 0;\n" " } else {\n" " table[b] = i;\n" " }\n" " }\n" " }\n" " }\n" "}\n" msgstr "" " /* refill initial table */\n" " if (0) {\n" " for (i = 0; i < Q; i++) {\n" " b = fgetc(fptr);\n" " if (b < 0) {\n" " run = 0;\n" " } else {\n" " table[b] = i;\n" " }\n" " }\n" " }\n" " }\n" "}\n"