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)
|
||||
## Установка
|
||||
@ -27,7 +27,7 @@ make update
|
||||
vipre-cryptor --version
|
||||
```
|
||||
## Шифрование
|
||||
Для шифрования программа требует создать локального пользователя, зарегистрировать электронный ключ и привязать к пользователю зашифрованный ключом файл.
|
||||
Для шифрования программа требует зарегистрировать электронный ключ и привязать к нему зашифрованный файл.
|
||||
## Регистрация ключа
|
||||
Ключ можно создать с помощью OpenSSL:
|
||||
```bash
|
||||
@ -41,18 +41,16 @@ openssl rand -base64 30
|
||||
vipre-cryptor --sig ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig
|
||||
```
|
||||
Данная команда запросит ваш ключ и запишет его в файл **ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig** особым образом.
|
||||
## Создание пользователя и шифрование
|
||||
Создание пользователя и шифрование файла выглядит следующим образом:
|
||||
## Команда шифрования
|
||||
Шифрование файла выглядит следующим образом:
|
||||
```bash
|
||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
|
||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --create-user ИМЯ_ЗАШИФРОВАННОГО_ФАЙЛА.bin --file-input ФАЙЛ_ДЛЯ_ШИФРОВАНИЯ
|
||||
```
|
||||
Данная команда запросит логин и пароль нового пользователя.
|
||||
## Чтение данных пользователя и расшифровка
|
||||
## Расшифровка
|
||||
Для чтения данных необходимо выполнить команду:
|
||||
```bash
|
||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬЗОВАТЕЛЯ.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХ_ДАННЫХ
|
||||
vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ЗАШИФРОВАННОГО_ФАЙЛА.bin --file-out ФАЙЛ_РАСШИФРОВАННЫХ_ДАННЫХ
|
||||
```
|
||||
Данная команда запросит логин и пароль пользователя.
|
||||
## Опции команды
|
||||
Доступны опции:
|
||||
- **--help**
|
||||
@ -62,12 +60,15 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
|
||||
- **--sig**
|
||||
- **--file-input**
|
||||
- **--file-out**
|
||||
- **--type=users**
|
||||
|
||||
Все опции можно сокращать до одного знака, например:
|
||||
```ini
|
||||
# Опции "--file-input" и "--file-out" можно сократить до "--file" или просто "-f"
|
||||
"--help" - "-h"
|
||||
"--version" - "-v"
|
||||
[options]
|
||||
"--help" = "-h"
|
||||
"--version" = "-v"
|
||||
"--type=users" = "-t"
|
||||
```
|
||||
## API
|
||||
У библиотеки есть **API**:
|
||||
@ -76,10 +77,10 @@ vipre-cryptor ИМЯ_ФАЙЛА_С_КЛЮЧОМ.sig --user-data ИМЯ_ПОЛЬ
|
||||
#include "vipre-manager.h"
|
||||
|
||||
int main(void) {
|
||||
__set_api_mode("admin", "1234", "signature_key");
|
||||
__set_api_mode(NULL, NULL, "signature_key");
|
||||
__create_sig("api_example_key.sig");
|
||||
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
|
||||
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
|
||||
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
|
||||
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
|
||||
__api_detach();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
10
Makefile
10
Makefile
@ -29,16 +29,24 @@ REMOVE=rm
|
||||
INSTALL_NAME=/usr/local/bin/vipre-cryptor
|
||||
MODE=chmod +x
|
||||
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)
|
||||
$(CC) $(OPTIONS) $(INPUT_NAME) -o $(OUTPUT_NAME)
|
||||
api:
|
||||
$(CC) $(OPTIONS) $(API_NAME) -o $(API_OUT_NAME)
|
||||
clear:
|
||||
$(REMOVE) -f $(OUTPUT_NAME)
|
||||
$(REMOVE) -f $(API_OUT_NAME)
|
||||
run:
|
||||
$(MODE) $(OUTPUT_NAME)
|
||||
$(RUN_OF)$(OUTPUT_NAME)
|
||||
run-api:
|
||||
$(MODE) $(API_OUT_NAME)
|
||||
$(RUN_OF)$(API_OUT_NAME)
|
||||
install:
|
||||
$(COPY) $(OUTPUT_NAME) $(INSTALL_NAME)
|
||||
uninstall:
|
||||
|
||||
BIN
api_example
BIN
api_example
Binary file not shown.
@ -2,10 +2,10 @@
|
||||
#include "vipre-manager.h"
|
||||
|
||||
int main(void) {
|
||||
__set_api_mode("admin", "1234", "signature_key");
|
||||
__set_api_mode(NULL, NULL, "signature_key");
|
||||
__create_sig("api_example_key.sig");
|
||||
__create_user("api_example_key.sig", "api_example_user.bin", "example.txt");
|
||||
__read_user("api_example_key.sig", "api_example_user.bin", "example_out.txt");
|
||||
__create_user("api_example_key.sig", "api_example_file.bin", "example.txt");
|
||||
__read_user("api_example_key.sig", "api_example_file.bin", "example_out.txt");
|
||||
__api_detach();
|
||||
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 <string.h>
|
||||
|
||||
#define LIB_TRUE 1
|
||||
#define LIB_FALSE 0
|
||||
|
||||
#define VERSION "1.0"
|
||||
#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_datakey = NULL;
|
||||
char __YEFWHD_data_type = '\0';
|
||||
bool __YEFWHD_users = false;
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
void __use_users(bool is_use_users) {
|
||||
__YEFWHD_users = is_use_users;
|
||||
}
|
||||
|
||||
void _put_vipre_help(void) {
|
||||
puts (
|
||||
"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 password[32];
|
||||
int c;
|
||||
if (__YEFWHD_data_type != VIPRE_API_MODE) {
|
||||
if (__YEFWHD_data_type != VIPRE_API_MODE && __YEFWHD_users == true) {
|
||||
fputs("Login: ", stdout);
|
||||
size_t cnt = 0;
|
||||
while((c=getchar())!=EOF && cnt < 31 && c != '\n') {
|
||||
@ -221,10 +229,15 @@ int __create_user(char* file, char* user_file, char* cry_file) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
} else {
|
||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||
strncpy(password, __YEFWHD_api_password, 31);
|
||||
user_login[31] = '\0';
|
||||
password[31] = '\0';
|
||||
if (__YEFWHD_users == false) {
|
||||
strcpy(user_login, "admin");
|
||||
strcpy(password, "1234");
|
||||
} else {
|
||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||
strncpy(password, __YEFWHD_api_password, 31);
|
||||
user_login[31] = '\0';
|
||||
password[31] = '\0';
|
||||
}
|
||||
}
|
||||
fputs(user_login, wp); putc('\n', wp);
|
||||
fputs(password, wp); putc('\n', wp);
|
||||
@ -232,6 +245,22 @@ int __create_user(char* file, char* user_file, char* cry_file) {
|
||||
unsigned long file_size = ftell(fw);
|
||||
rewind(fw);
|
||||
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) {
|
||||
c = (char)getc(fw);
|
||||
c = arr[(unsigned char)c];
|
||||
@ -263,21 +292,33 @@ int __read_user(char* file, char* user_file, char* cry_file) {
|
||||
char password[32];
|
||||
char correct_password[32];
|
||||
char* res;
|
||||
unsigned char crc_file = 0xFF;
|
||||
res = fgets(correct_login, 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);
|
||||
res = fgets(user_login, 32, stdin);
|
||||
fputs("Password: ", stdout);
|
||||
res = fgets(password, 32, stdin);
|
||||
} else {
|
||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||
strncpy(password, __YEFWHD_api_password, 31);
|
||||
user_login[31] = '\0';
|
||||
password[31] = '\0';
|
||||
|
||||
if (__YEFWHD_users == false) {
|
||||
strcpy(user_login, "admin");
|
||||
strcpy(password, "1234");
|
||||
} else {
|
||||
strncpy(user_login, __YEFWHD_api_login, 31);
|
||||
strncpy(password, __YEFWHD_api_password, 31);
|
||||
user_login[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(correct_login); __nl_del(correct_password);
|
||||
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);
|
||||
unsigned long pos = 0;
|
||||
int c;
|
||||
unsigned char crc = 0xFF;
|
||||
while (pos < data_size) {
|
||||
c = getc(up);
|
||||
c = __find_arr_index(c, arr, arr_len);
|
||||
__refresh_data(arr, arr_len, abs(arr[0]));
|
||||
putc(c, fw);
|
||||
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(up);
|
||||
@ -314,6 +369,7 @@ int parse_file_data(int argc, char** argv) {
|
||||
bool create_user = false;
|
||||
bool create_sig = false;
|
||||
bool read_user = false;
|
||||
bool users = false;
|
||||
char* cry_file = NULL;
|
||||
bool read_cry_file = false;
|
||||
while (n < argc) {
|
||||
@ -342,6 +398,9 @@ int parse_file_data(int argc, char** argv) {
|
||||
case 'f':
|
||||
read_cry_file = true;
|
||||
break;
|
||||
case 't':
|
||||
users = true;
|
||||
break;
|
||||
default:
|
||||
printf("\033[1mvipre-cryptor: \033[91mUnknown option \"%s\"!\033[0m\n", str);
|
||||
return EXIT_FAILURE;
|
||||
@ -355,6 +414,7 @@ int parse_file_data(int argc, char** argv) {
|
||||
}
|
||||
n ++;
|
||||
}
|
||||
__YEFWHD_users = users;
|
||||
if (file == NULL) {
|
||||
puts("\033[1mvipre-cryptor: \033[91mNo input file!\033[0m");
|
||||
return EXIT_FAILURE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user