CRC and REM. USERS
This commit is contained in:
parent
6aabbf77c3
commit
c0d863ef48
31
DOCS.md
31
DOCS.md
@ -2,8 +2,8 @@
|
|||||||
- [Установка](#установка)
|
- [Установка](#установка)
|
||||||
- [Шифрование](#шифрование)
|
- [Шифрование](#шифрование)
|
||||||
- [Регистрация ключа](#регистрация-ключа)
|
- [Регистрация ключа](#регистрация-ключа)
|
||||||
- [Создание пользователя и шифрование](#создание-пользователя-и-шифрование)
|
- [Команда шифрования](#команда-шифрования)
|
||||||
- [Чтение данных пользователя и расшифровка](#чтение-данных-пользователя-и-расшифровка)
|
- [Расшифровка](#расшифровка)
|
||||||
- [Опции команды](#опции-команды)
|
- [Опции команды](#опции-команды)
|
||||||
- [API](#api)
|
- [API](#api)
|
||||||
## Установка
|
## Установка
|
||||||
@ -27,7 +27,7 @@ make update
|
|||||||
vipre-cryptor --version
|
vipre-cryptor --version
|
||||||
```
|
```
|
||||||
## Шифрование
|
## Шифрование
|
||||||
Для шифрования программа требует создать локального пользователя, зарегистрировать электронный ключ и привязать к пользователю зашифрованный ключом файл.
|
Для шифрования программа требует зарегистрировать электронный ключ и привязать к нему зашифрованный файл.
|
||||||
## Регистрация ключа
|
## Регистрация ключа
|
||||||
Ключ можно создать с помощью OpenSSL:
|
Ключ можно создать с помощью OpenSSL:
|
||||||
```bash
|
```bash
|
||||||
@ -41,18 +41,16 @@ openssl rand -base64 30
|
|||||||
vipre-cryptor --sig ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig
|
vipre-cryptor --sig ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig
|
||||||
```
|
```
|
||||||
Данная команда запросит ваш ключ и запишет его в файл **ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig** особым образом.
|
Данная команда запросит ваш ключ и запишет его в файл **ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig** особым образом.
|
||||||
## Создание пользователя и шифрование
|
## Команда шифрования
|
||||||
Создание пользователя и шифрование файла выглядит следующим образом:
|
Шифрование файла выглядит следующим образом:
|
||||||
```bash
|
```bash
|
||||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
|
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ЗАШИФРОВАННОГО_ФАЙЛА.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
|
||||||
```
|
```
|
||||||
Данная команда запросит логин и пароль нового пользователя.
|
## Расшифровка
|
||||||
## Чтение данных пользователя и расшифровка
|
|
||||||
Для чтения данных необходимо выполнить команду:
|
Для чтения данных необходимо выполнить команду:
|
||||||
```bash
|
```bash
|
||||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХ_ДАННЫХ
|
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ЗАШИФРОВАННОГО_ФАЙЛА.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХ_ДАННЫХ
|
||||||
```
|
```
|
||||||
Данная команда запросит логин и пароль пользователя.
|
|
||||||
## Опции команды
|
## Опции команды
|
||||||
Доступны опции:
|
Доступны опции:
|
||||||
- **--help**
|
- **--help**
|
||||||
@ -62,12 +60,15 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
|
|||||||
- **--sig**
|
- **--sig**
|
||||||
- **--file-input**
|
- **--file-input**
|
||||||
- **--file-out**
|
- **--file-out**
|
||||||
|
- **--type=users**
|
||||||
|
|
||||||
Все опции можно сокращать до одного знака, например:
|
Все опции можно сокращать до одного знака, например:
|
||||||
```ini
|
```ini
|
||||||
# Опции "--file-input" и "--file-out" можно сократить до "--file" или просто "-f"
|
# Опции "--file-input" и "--file-out" можно сократить до "--file" или просто "-f"
|
||||||
"--help" - "-h"
|
[options]
|
||||||
"--version" - "-v"
|
"--help" = "-h"
|
||||||
|
"--version" = "-v"
|
||||||
|
"--type=users" = "-t"
|
||||||
```
|
```
|
||||||
## API
|
## API
|
||||||
У библиотеки есть **API**:
|
У библиотеки есть **API**:
|
||||||
@ -76,10 +77,10 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
|
|||||||
#include "vipre-manager.h"
|
#include "vipre-manager.h"
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
__set_api_mode("admin", "1234", "signature_key");
|
__set_api_mode(NULL, NULL, "signature_key");
|
||||||
__create_sig("api_example_key.sig");
|
__create_sig("api_example_key.sig");
|
||||||
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
|
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
|
||||||
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
|
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
|
||||||
__api_detach();
|
__api_detach();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
10
Makefile
10
Makefile
@ -29,16 +29,24 @@ REMOVE=rm
|
|||||||
INSTALL_NAME=/usr/local/bin/vipre-cryptor
|
INSTALL_NAME=/usr/local/bin/vipre-cryptor
|
||||||
MODE=chmod +x
|
MODE=chmod +x
|
||||||
RUN_OF=./
|
RUN_OF=./
|
||||||
|
API_NAME=api_example.c
|
||||||
|
API_OUT_NAME=api_example
|
||||||
|
|
||||||
.PHONY: clear run install uninstall update
|
.PHONY: clear run install uninstall update api run-api $(OUTPUT_NAME)
|
||||||
|
|
||||||
$(OUTPUT_NAME): $(INPUT_NAME)
|
$(OUTPUT_NAME): $(INPUT_NAME)
|
||||||
$(CC) $(OPTIONS) $(INPUT_NAME) -o $(OUTPUT_NAME)
|
$(CC) $(OPTIONS) $(INPUT_NAME) -o $(OUTPUT_NAME)
|
||||||
|
api:
|
||||||
|
$(CC) $(OPTIONS) $(API_NAME) -o $(API_OUT_NAME)
|
||||||
clear:
|
clear:
|
||||||
$(REMOVE) -f $(OUTPUT_NAME)
|
$(REMOVE) -f $(OUTPUT_NAME)
|
||||||
|
$(REMOVE) -f $(API_OUT_NAME)
|
||||||
run:
|
run:
|
||||||
$(MODE) $(OUTPUT_NAME)
|
$(MODE) $(OUTPUT_NAME)
|
||||||
$(RUN_OF)$(OUTPUT_NAME)
|
$(RUN_OF)$(OUTPUT_NAME)
|
||||||
|
run-api:
|
||||||
|
$(MODE) $(API_OUT_NAME)
|
||||||
|
$(RUN_OF)$(API_OUT_NAME)
|
||||||
install:
|
install:
|
||||||
$(COPY) $(OUTPUT_NAME) $(INSTALL_NAME)
|
$(COPY) $(OUTPUT_NAME) $(INSTALL_NAME)
|
||||||
uninstall:
|
uninstall:
|
||||||
|
|||||||
BIN
api_example
BIN
api_example
Binary file not shown.
@ -2,10 +2,10 @@
|
|||||||
#include "vipre-manager.h"
|
#include "vipre-manager.h"
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
__set_api_mode("admin", "1234", "signature_key");
|
__set_api_mode(NULL, NULL, "signature_key");
|
||||||
__create_sig("api_example_key.sig");
|
__create_sig("api_example_key.sig");
|
||||||
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
|
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
|
||||||
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
|
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
|
||||||
__api_detach();
|
__api_detach();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
Binary file not shown.
0
user_test.bin
Normal file
0
user_test.bin
Normal file
BIN
vipre-cryptor
BIN
vipre-cryptor
Binary file not shown.
@ -28,6 +28,9 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define LIB_TRUE 1
|
||||||
|
#define LIB_FALSE 0
|
||||||
|
|
||||||
#define VERSION "1.0"
|
#define VERSION "1.0"
|
||||||
#define ERROR_FILE_OUT "unnamed_out_file.csv"
|
#define ERROR_FILE_OUT "unnamed_out_file.csv"
|
||||||
|
|
||||||
@ -39,6 +42,7 @@ char* __YEFWHD_api_login = NULL;
|
|||||||
char* __YEFWHD_api_password = NULL;
|
char* __YEFWHD_api_password = NULL;
|
||||||
char* __YEFWHD_api_datakey = NULL;
|
char* __YEFWHD_api_datakey = NULL;
|
||||||
char __YEFWHD_data_type = '\0';
|
char __YEFWHD_data_type = '\0';
|
||||||
|
bool __YEFWHD_users = false;
|
||||||
|
|
||||||
#define VIPRE_API_MODE 'A'
|
#define VIPRE_API_MODE 'A'
|
||||||
|
|
||||||
@ -55,6 +59,10 @@ void __set_api_mode(char* login, char* password, char* data_key) {
|
|||||||
__YEFWHD_data_type = VIPRE_API_MODE;
|
__YEFWHD_data_type = VIPRE_API_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __use_users(bool is_use_users) {
|
||||||
|
__YEFWHD_users = is_use_users;
|
||||||
|
}
|
||||||
|
|
||||||
void _put_vipre_help(void) {
|
void _put_vipre_help(void) {
|
||||||
puts (
|
puts (
|
||||||
"Vipre Console Cryptor V " VERSION "\n"
|
"Vipre Console Cryptor V " VERSION "\n"
|
||||||
@ -190,7 +198,7 @@ int __create_user(char* file, char* user_file, char* cry_file) {
|
|||||||
char user_login[32];
|
char user_login[32];
|
||||||
char password[32];
|
char password[32];
|
||||||
int c;
|
int c;
|
||||||
if (__YEFWHD_data_type != VIPRE_API_MODE) {
|
if (__YEFWHD_data_type != VIPRE_API_MODE && __YEFWHD_users == true) {
|
||||||
fputs("Login: ", stdout);
|
fputs("Login: ", stdout);
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
while((c=getchar())!=EOF && cnt < 31 && c != '\n') {
|
while((c=getchar())!=EOF && cnt < 31 && c != '\n') {
|
||||||
@ -220,18 +228,39 @@ int __create_user(char* file, char* user_file, char* cry_file) {
|
|||||||
free(arr);
|
free(arr);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (__YEFWHD_users == false) {
|
||||||
|
strcpy(user_login, "admin");
|
||||||
|
strcpy(password, "1234");
|
||||||
} else {
|
} else {
|
||||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||||
strncpy(password, __YEFWHD_api_password, 31);
|
strncpy(password, __YEFWHD_api_password, 31);
|
||||||
user_login[31] = '\0';
|
user_login[31] = '\0';
|
||||||
password[31] = '\0';
|
password[31] = '\0';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fputs(user_login, wp); putc('\n', wp);
|
fputs(user_login, wp); putc('\n', wp);
|
||||||
fputs(password, wp); putc('\n', wp);
|
fputs(password, wp); putc('\n', wp);
|
||||||
fseek(fw, 0, SEEK_END);
|
fseek(fw, 0, SEEK_END);
|
||||||
unsigned long file_size = ftell(fw);
|
unsigned long file_size = ftell(fw);
|
||||||
rewind(fw);
|
rewind(fw);
|
||||||
unsigned long count = 0;
|
unsigned long count = 0;
|
||||||
|
|
||||||
|
unsigned char crc = 0xFF;
|
||||||
|
while (count < file_size) {
|
||||||
|
crc ^= (unsigned char)getc(fw);
|
||||||
|
unsigned short int i = 0;
|
||||||
|
while (i < 8) {
|
||||||
|
crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
|
||||||
|
i ++;
|
||||||
|
}
|
||||||
|
count ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
putc((char)crc, wp);
|
||||||
|
fprintf(wp, "%lu\n", count);
|
||||||
|
rewind(fw);
|
||||||
|
count = 0;
|
||||||
while (count < file_size) {
|
while (count < file_size) {
|
||||||
c = (char)getc(fw);
|
c = (char)getc(fw);
|
||||||
c = arr[(unsigned char)c];
|
c = arr[(unsigned char)c];
|
||||||
@ -263,21 +292,33 @@ int __read_user(char* file, char* user_file, char* cry_file) {
|
|||||||
char password[32];
|
char password[32];
|
||||||
char correct_password[32];
|
char correct_password[32];
|
||||||
char* res;
|
char* res;
|
||||||
|
unsigned char crc_file = 0xFF;
|
||||||
res = fgets(correct_login, 32, up);
|
res = fgets(correct_login, 32, up);
|
||||||
res = fgets(correct_password, 32, up);
|
res = fgets(correct_password, 32, up);
|
||||||
if (__YEFWHD_data_type != VIPRE_API_MODE) {
|
crc_file = (unsigned char)fgetc(up);
|
||||||
|
unsigned long read_sum = 0;
|
||||||
|
res = (char*)(unsigned long int)fscanf(up, "%lu\n", &read_sum);
|
||||||
|
if (__YEFWHD_data_type != VIPRE_API_MODE && __YEFWHD_users == true) {
|
||||||
fputs("Login: ", stdout);
|
fputs("Login: ", stdout);
|
||||||
res = fgets(user_login, 32, stdin);
|
res = fgets(user_login, 32, stdin);
|
||||||
fputs("Password: ", stdout);
|
fputs("Password: ", stdout);
|
||||||
res = fgets(password, 32, stdin);
|
res = fgets(password, 32, stdin);
|
||||||
|
} else {
|
||||||
|
if (__YEFWHD_users == false) {
|
||||||
|
strcpy(user_login, "admin");
|
||||||
|
strcpy(password, "1234");
|
||||||
} else {
|
} else {
|
||||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||||
strncpy(password, __YEFWHD_api_password, 31);
|
strncpy(password, __YEFWHD_api_password, 31);
|
||||||
user_login[31] = '\0';
|
user_login[31] = '\0';
|
||||||
password[31] = '\0';
|
password[31] = '\0';
|
||||||
|
|
||||||
}
|
}
|
||||||
if (res);
|
}
|
||||||
|
if (res == NULL) {
|
||||||
|
puts("\033[1mvipre-cryptor: \033[91mThe file is in the wrong format!\033[0m");
|
||||||
|
free(arr);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
};
|
||||||
__nl_del(user_login); __nl_del(password);
|
__nl_del(user_login); __nl_del(password);
|
||||||
__nl_del(correct_login); __nl_del(correct_password);
|
__nl_del(correct_login); __nl_del(correct_password);
|
||||||
if (user_login[strlen(user_login) - 1] == '\n') user_login[strlen(user_login) - 1] = '\0';
|
if (user_login[strlen(user_login) - 1] == '\n') user_login[strlen(user_login) - 1] = '\0';
|
||||||
@ -292,12 +333,26 @@ int __read_user(char* file, char* user_file, char* cry_file) {
|
|||||||
fseek(up, save_pos, SEEK_SET);
|
fseek(up, save_pos, SEEK_SET);
|
||||||
unsigned long pos = 0;
|
unsigned long pos = 0;
|
||||||
int c;
|
int c;
|
||||||
|
unsigned char crc = 0xFF;
|
||||||
while (pos < data_size) {
|
while (pos < data_size) {
|
||||||
c = getc(up);
|
c = getc(up);
|
||||||
c = __find_arr_index(c, arr, arr_len);
|
c = __find_arr_index(c, arr, arr_len);
|
||||||
__refresh_data(arr, arr_len, abs(arr[0]));
|
__refresh_data(arr, arr_len, abs(arr[0]));
|
||||||
putc(c, fw);
|
putc(c, fw);
|
||||||
pos ++;
|
pos ++;
|
||||||
|
crc ^= (unsigned char)c;
|
||||||
|
unsigned short int i = 0;
|
||||||
|
while (i < 8) {
|
||||||
|
crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
|
||||||
|
i ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (crc != crc_file || read_sum != pos) {
|
||||||
|
puts("\033[1mvipre-cryptor: \033[91mVerification error! Request the data again.\033[0m");
|
||||||
|
free(arr);
|
||||||
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
fclose(up);
|
fclose(up);
|
||||||
@ -314,6 +369,7 @@ int parse_file_data(int argc, char** argv) {
|
|||||||
bool create_user = false;
|
bool create_user = false;
|
||||||
bool create_sig = false;
|
bool create_sig = false;
|
||||||
bool read_user = false;
|
bool read_user = false;
|
||||||
|
bool users = false;
|
||||||
char* cry_file = NULL;
|
char* cry_file = NULL;
|
||||||
bool read_cry_file = false;
|
bool read_cry_file = false;
|
||||||
while (n < argc) {
|
while (n < argc) {
|
||||||
@ -342,6 +398,9 @@ int parse_file_data(int argc, char** argv) {
|
|||||||
case 'f':
|
case 'f':
|
||||||
read_cry_file = true;
|
read_cry_file = true;
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
users = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("\033[1mvipre-cryptor: \033[91mUnknown option \"%s\"!\033[0m\n", str);
|
printf("\033[1mvipre-cryptor: \033[91mUnknown option \"%s\"!\033[0m\n", str);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
@ -355,6 +414,7 @@ int parse_file_data(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
n ++;
|
n ++;
|
||||||
}
|
}
|
||||||
|
__YEFWHD_users = users;
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
puts("\033[1mvipre-cryptor: \033[91mNo input file!\033[0m");
|
puts("\033[1mvipre-cryptor: \033[91mNo input file!\033[0m");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user