VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/GfMul.h
blob: 12dc864fdaf609d8748b7164dc2069727ffc3a21 (plain)
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
/*
 ---------------------------------------------------------------------------
 Copyright (c) 2003, Dr Brian Gladman, Worcester, UK.   All rights reserved.

 LICENSE TERMS

 The free distribution and use of this software is allowed (with or without
 changes) provided that:

  1. source code distributions include the above copyright notice, this
     list of conditions and the following disclaimer;

  2. binary distributions include the above copyright notice, this list
     of conditions and the following disclaimer in their documentation;

  3. the name of the copyright holder is not used to endorse products
     built using this software without specific written permission.

 DISCLAIMER

 This software is provided 'as is' with no explicit or implied warranties
 in respect of its properties, including, but not limited to, correctness
 and/or fitness for purpose.
 ---------------------------------------------------------------------------
 Issue Date: 31/01/2004
*/

/* Adapted for TrueCrypt */

#ifndef _GCM_H
#define _GCM_H

#include "Tcdefs.h"

#if defined(__cplusplus)
extern "C"
{
#endif

#define CBLK_LEN   16  /* encryption block length */
#define CBLK_LEN8  8

typedef struct
{
    unsigned __int32 gf_t8k[CBLK_LEN * 2][16][CBLK_LEN / 4];
} GfCtx8k;

typedef struct
{
		unsigned __int32 gf_t4k[CBLK_LEN8 * 2][16][CBLK_LEN / 4];
} GfCtx4k64;

typedef struct
{
	/* union not used to support faster mounting */
    unsigned __int32 gf_t128[CBLK_LEN * 2 / 2][16][CBLK_LEN / 4];
    unsigned __int32 gf_t64[CBLK_LEN8 * 2][16][CBLK_LEN8 / 4];
} GfCtx;

typedef int  ret_type;

void GfMul128 (void *a, const void* b);
void GfMul128Tab(unsigned char a[16], GfCtx8k *ctx);
int Gf128Tab64Init (unsigned __int8 *a, GfCtx *ctx);
void Gf128MulBy64Tab (unsigned __int8 a[8], unsigned __int8 p[16], GfCtx *ctx);
void MirrorBits128 (unsigned __int8 *a);
void MirrorBits64 (unsigned __int8 *a);
BOOL GfMulSelfTest ();

#if defined(__cplusplus)
}
#endif

#endif
lass="o">="_blank">Форум</a></li> </ul> </div> <div> <p> <a href="Documentation.html">Документация</a> <img src="arrow_right.gif" alt=">>" style="margin-top: 5px"> <a href="Introduction.html">Введение</a> </p> </div> <div class="wikidoc"> <h1>Введение</h1> <div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px"> VeraCrypt это программное обеспечение, предназначенное для создания томов (устройств хранения данных) и работы с ними с использованием шифрования на лету (on-the-fly encryption). Шифрование на лету означает, что данные автоматически зашифровываются непосредственно перед записью их на диск и расшифровываются сразу же после их считывания, т. е. без какого-либо вмешательства пользователя. Никакие данные, хранящиеся в зашифрованном томе, невозможно прочитать (расшифровать) без правильного указания пароля/ключевых файлов или правильных ключей шифрования. Полностью шифруется вся файловая система (имена файлов и папок, содержимое каждого файла, свободное место, метаданные и др.).</div> <div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px"> Файлы можно копировать со смонтированного тома VeraCrypt и на него точно так же, как и при использовании любого обычного диска (например, с помощью перетаскивания). При чтении или копировании из зашифрованного тома VeraCrypt файлы автоматически на лету расшифровываются (в память/ОЗУ). Аналогично, файлы, записываемые или копируемые в том VeraCrypt, автоматически на лету зашифровываются в ОЗУ (непосредственно перед их сохранением на диск). Обратите внимание: это <i>не</i> означает, что перед шифрованием/дешифрованием в ОЗУ должен находиться <i>весь</i> обрабатываемый файл. Никакой дополнительной памяти (ОЗУ) для VeraCrypt не требуется. Пояснение, как всё это работает, приведено в следующем абзаце.<br style="text-align:left"> <br style="text-align:left"> Предположим, у нас есть видеофайл формата .avi, хранящийся в томе VeraCrypt (следовательно, этот видеофайл полностью зашифрован). Пользователь указывает правильный пароль (и/или ключевой файл) и монтирует (открывает) том VeraCrypt. Когда пользователь дважды щёлкает мышью по значку этого видеофайла, операционная система запускает приложение, ассоциированное с файлами такого типа – в данном случае это, как правило, мультимедийный проигрыватель. Затем мультимедийный проигрыватель начинает загружать маленькую начальную часть видеофайла из зашифрованного тома VeraCrypt в ОЗУ (память), чтобы приступить к воспроизведению. Во время загрузки части файла VeraCrypt автоматически расшифровывает её (в ОЗУ), после чего расшифрованная часть видео (хранящаяся в ОЗУ) воспроизводится медиапроигрывателем. Пока эта часть воспроизводится, медиапроигрыватель начинает считывать другую небольшую часть видеофайла из зашифрованного тома VeraCrypt в ОЗУ (память), и процесс повторяется. Данная операция называется шифрованием/дешифрованием на лету, она работает для файлов любых типов (не только видео).</div> <p>Обратите внимание: VeraCrypt никогда не сохраняет на диске никаких данных в незашифрованном виде – такие данные временно хранятся только в ОЗУ (оперативной памяти). Даже когда том смонтирован, хранящиеся в нём данные по-прежнему остаются зашифрованными. При перезагрузке Windows или выключении компьютера том будет размонтирован, а хранящиеся в нём файлы станут недоступными (и зашифрованными). Даже в случае непредвиденного перебоя питания (без правильного завершения работы системы), хранящиеся в томе файлы останутся недоступными (и зашифрованными). Чтобы получить к ним доступ вновь, нужно смонтировать том (и правильно указать пароль и/или ключевой файл). <br><br>Краткий учебник по началу работы см. в главе <i>Руководство для начинающих</i>.</p> </div> </body></html>