func TestEncrypt(t *testing.T) { if utils.IsInVexor() { fmt.Println("No GOST OpenSSL in Vexor") return } defer cleanup() createTestFile(t) testFileIn := filepath.Join(testPath, testFile) testFileOut := testFileIn + ".enc" signer := NewGostSignerEncryptor(getSSLParams()) if err := signer.Encrypt(testFileIn, testFileOut); err != nil { t.Fatalf("Ошибка SignDER(): %v", err) } // проверяем только что подписанный файл существует и его получается прочитать if !utils.FileExists(testFileOut) { t.Errorf("Файл %s должен быть распакован, но не найден.\n", testFileOut) } if err := readData(&decryptedData); err != nil { t.Error(err) } // todo хорошо бы проверить расшифровку }
func TestCompress(t *testing.T) { defer func() { os.RemoveAll(testPath) }() createTestFiles(t) binPath, err := utils.GetSelfPath() if err != nil { t.Fatalf("Ошибка получения пути к приложению: %v", err) } outputPath := filepath.Join(binPath, "output.zip") testFilesFullPaths := []string{} for _, f := range testFiles { testFilesFullPaths = append(testFilesFullPaths, filepath.Join(testPath, f)) } if err := Compress(outputPath, testFilesFullPaths...); err != nil { t.Fatalf("Ошибка Compress(): %v", err) } if !utils.FileExists(outputPath) { t.Fatalf("Архив %s не существует", outputPath) } if err := removeTestFiles(); err != nil { fmt.Errorf("Ошибка удаления тестовых директорий: %v\n", err) } if err := Decompress(outputPath, "/"); err != nil { t.Fatalf("Ошибка Compress(): %v", err) } for _, path := range testFilesFullPaths { if !utils.FileExists(path) { t.Errorf("Файл %s должен быть распакован, но не найден.\n", path) } if err := readData(&decompressedData); err != nil { t.Error(err) } sourceLastElement := sourceData[len(sourceData)-1] decompressedLastElement := decompressedData[len(decompressedData)-1] if !reflect.DeepEqual(sourceLastElement, decompressedLastElement) { t.Errorf("Элементы не равны. \nИсходный : %v\nРаспакованный: %v\n") } } }
// NewGostSignerEncryptor создаёт новый объект для подписи func NewGostSignerEncryptor(params SSLParams) encrypt.SignerEncryptor { if !utils.FileExists(params.OpenSSLPath) { fmt.Println("Не удаётся получить доступ к openSSL по заданному пути.") os.Exit(1) } return &gostSSL{ params: params, } }
// Compress создаёт архив с путём и именем fileOut из файлов и папок, переданных в pathIn func Compress(fileOut string, pathIn ...string) error { if utils.FileExists(fileOut) { if err := os.Remove(fileOut); err != nil { return err } } cmdParams := []string{"-j", fileOut} cmdParams = append(cmdParams, pathIn...) cmd := exec.Command(zipPath, cmdParams...) output, err := cmd.CombinedOutput() fmt.Printf("\n### OUTPUT COMPRESS: %v\n", string(output)) if err != nil { fmt.Println("Ошибка выполнения команды zip: ", err.Error()) return err } return nil }