diff --git a/Report/includes/abbreviations.typ b/Report/includes/abbreviations.typ index 003dad1..5523c33 100644 --- a/Report/includes/abbreviations.typ +++ b/Report/includes/abbreviations.typ @@ -1,9 +1,13 @@ -#heading(numbering: none, outlined: true)[Список условных обозначений и сокращений] +#import "common.typ": pz-front-heading, pz-table -#import "common.typ": pz-table +#pz-front-heading[Обозначения и сокращения] + +#set par(first-line-indent: 1.25cm, justify: true) + +В настоящем документе применяются следующие обозначения и сокращения: #pz-table( - [Условные обозначения и сокращения], + [], 2, table.header([Обозначение], [Расшифровка]), [API], [Application Programming Interface — программный интерфейс приложения], diff --git a/Report/includes/abstract-en.typ b/Report/includes/abstract-en.typ index a5269a5..ed50275 100644 --- a/Report/includes/abstract-en.typ +++ b/Report/includes/abstract-en.typ @@ -1,9 +1,26 @@ -#heading(numbering: none, outlined: true)[Abstract] +#import "common.typ": pz-biblio-strip-en, pz-front-heading -#v(0.5em) +#pagebreak(weak: true) -The thesis describes the Wallenc mobile application — a client wallet for storing data on untrusted backends without a dedicated application server. Data is encrypted on the device before upload; decryption is performed only when the user enters a valid key. The work includes analysis of analogues, requirements, architecture and UI design, Kotlin implementation for Android, testing, and a brief economic assessment. +#pz-biblio-strip-en( + udk: "004.738.5", + author: "Pytkov Roman Evgenievich", + title: "Development of the Wallenc mobile application — a universal wallet for secure storage of data on untrusted backends without a dedicated application server", + year: 2026, +) -The application uses MVVM and Clean Architecture. Main features are local and remote vault management, client-side AES encryption, Room metadata storage, and Yandex OAuth integration. +#pz-front-heading(page-break: false)[Annotation] -Keywords: mobile application, client-side encryption, Android, vault, OAuth, Room. +#{ + set par(first-line-indent: 0pt, justify: true) + + [The thesis describes the Wallenc mobile application — a client wallet for storing data on untrusted backends without a dedicated application server. Data is encrypted on the device before upload; decryption is performed only when the user enters a valid key. The work includes analysis of analogues, requirements, architecture and UI design, Kotlin implementation for Android, testing, and a brief economic assessment.] + + parbreak() + + [The application uses MVVM and Clean Architecture. Main features are local and remote vault management, client-side AES encryption, Room metadata storage, and Yandex OAuth integration.] + + parbreak() + + [Keywords: mobile application, client-side encryption, Android, vault, OAuth, Room.] +} diff --git a/Report/includes/abstract-ru.typ b/Report/includes/abstract-ru.typ new file mode 100644 index 0000000..2c6106c --- /dev/null +++ b/Report/includes/abstract-ru.typ @@ -0,0 +1,20 @@ +#import "common.typ": pz-biblio-strip-ru, pz-front-heading + +#pz-biblio-strip-ru( + udk: "004.738.5", + author: "Пытков Роман Евгеньевич", + title: "Разработка мобильного приложения Wallenc — универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера", + year: 2026, +) + +#pz-front-heading(page-break: false)[Аннотация] + +#{ + set par(first-line-indent: 1.25cm, justify: true) + + [Пояснительная записка посвящена разработке мобильного приложения Wallenc — клиентского кошелька для безопасного хранения данных на недоверенных хранилищах без собственного сервера приложения. Описаны анализ предметной области и аналогов, формирование требований, проектирование архитектуры и пользовательского интерфейса, программная реализация на Kotlin (Android, Jetpack Compose, Room, Hilt), тестирование и краткая экономическая оценка.] + + parbreak() + + [Реализованы управление локальными и удалёнными vault, клиентское AES-шифрование, OAuth Яндекс, служебное хранение метаданных в Room; спроектирован контур синхронизации без передачи ключей провайдеру. Исходный код размещён в приватном репозитории Gitea ЮФУ. Полный листинг исходных файлов — приложение А; программная документация — приложение Б.] +} diff --git a/Report/includes/blank-front-matter.typ b/Report/includes/blank-front-matter.typ new file mode 100644 index 0000000..180e588 --- /dev/null +++ b/Report/includes/blank-front-matter.typ @@ -0,0 +1,5 @@ +// Заглушки под титул, ТЗ и резерв (3 стр.); удалить перед склейкой с внешним PDF. +#for _ in range(3) { + pagebreak(weak: true) + page(header: none, footer: none)[] +} diff --git a/Report/includes/common.typ b/Report/includes/common.typ index c69f4e5..5d42ebc 100644 --- a/Report/includes/common.typ +++ b/Report/includes/common.typ @@ -5,6 +5,105 @@ #let pz-appendix-title(body) = heading(level: 1)[#body] +#let pz-sig-line(label) = box( + width: 5.5cm, + stroke: (bottom: 0.5pt), + inset: (bottom: 3pt), +)[#label] + +// Без heading(level: 1): в gost перед ним всегда pagebreak (add-pagebreaks). +#let pz-front-heading(body, page-break: true) = { + if page-break { + pagebreak(weak: true) + } + align(center)[ + #text(weight: "bold")[#upper(body)] + ] + v(0.75em) +} + +// Бланк аннотации: 2×2 без рамок; левый столбец — отступ, текст во 2-м (2 ячейки). +#let pz-dept-mop = "кафедра МОП ЭВМ" +#let pz-dept-sait = "кафедра системного анализа и телекоммуникаций" + +#let pz-biblio-strip(head, tail) = { + table( + columns: (0.82fr, 1fr), + stroke: none, + inset: (x: 0pt, y: 5pt), + align: (left, left), + [], head, + [], tail, + ) + v(0.65em) +} + +#let pz-biblio-strip-ru( + udk: "", + author: "", + title: "", + direction: "09.03.04", + institute: "Южный федеральный университет", + faculty: "ИКТИБ", + department: pz-dept-mop, + year: 2026, +) = { + let pages = context counter(page).final().first() + pz-biblio-strip( + [ + УДК #udk + #linebreak() + #upper(author) + #linebreak() + #quote[#title] + ], + [ + Квалификационная работа на степень + #linebreak() + «БАКАЛАВР» по направлению #direction + #linebreak() + #institute, + #linebreak() + #faculty, #department — #year#sym.space.nobreak г., + #linebreak() + #pages#sym.space.nobreak с. + ], + ) +} + +#let pz-biblio-strip-en( + udk: "", + author: "", + title: "", + direction: "09.03.04", + institute: "Southern Federal University", + faculty: "ICTIS", + department: "the Department of Mathematical Support and Application of Computers (MOP EVM)", + year: 2026, +) = { + let pages = context counter(page).final().first() + pz-biblio-strip( + [ + UDC #udk + #linebreak() + #upper(author) + #linebreak() + #quote[#title] + ], + [ + Qualification work for the degree of + #linebreak() + BACHELOR in the direction of #direction + #linebreak() + #institute, + #linebreak() + #faculty, #department — #year, + #linebreak() + #pages#sym.space.nobreak p. + ], + ) +} + #let pz-column-count(columns) = if type(columns) == int { columns } else if type(columns) == array { diff --git a/Report/includes/intro.typ b/Report/includes/intro.typ index 03726af..d8be110 100644 --- a/Report/includes/intro.typ +++ b/Report/includes/intro.typ @@ -17,7 +17,7 @@ *Методы исследования*: анализ нормативной и технической документации, сравнительный анализ программных аналогов, объектно-ориентированное проектирование (UML, BPMN, DFD), прототипирование пользовательского интерфейса, программная реализация и тестирование @gost7322017 @kotlin-docs. -*Практическая база.* Работа выполнена в рамках производственной практики в ООО НМФ «Нейротех» (09.02.2026–06.05.2026) по направлению 09.03.04 «Программная инженерия». Научный руководитель — Беликов А. Н.; руководитель от организации — Алексеев Д. М. +*Практическая база.* Работа выполнена в рамках производственной практики в ООО НМФ «Нейротех» (09.02.2026–06.05.2026) по направлению 09.03.04 «Программная инженерия» на кафедре математического обеспечения и применения ЭВМ (МОП ЭВМ). Научный руководитель — Беликов А. Н. (кафедра системного анализа и телекоммуникаций, САИТ); руководитель от организации — Алексеев Д. М. *Научная новизна* заключается в сочетании универсальной модели vault, клиентского шифрования и адаптерного доступа к разным типам хранилищ без собственного сервера приложения, с проектным контуром синхронизации зашифрованных данных без передачи ключей провайдеру. diff --git a/Report/includes/technical-assignment.typ b/Report/includes/technical-assignment.typ new file mode 100644 index 0000000..96d2aea --- /dev/null +++ b/Report/includes/technical-assignment.typ @@ -0,0 +1,136 @@ +#import "common.typ": pz-sig-line + +#pagebreak(weak: true) + +// Строка ТЗ с линией на всю ширину (как бланк ВКР). +#let tz-row(body) = { + v(0.35em) + table( + columns: 1, + stroke: none, + inset: (x: 0pt, top: 1pt, bottom: 6pt), + align: left, + table.hline(stroke: 0.5pt + black), + [#body], + ) +} + +#let tz-row-split(left, right) = { + v(0.35em) + table( + columns: (1fr, auto), + stroke: none, + inset: (x: 0pt, top: 1pt, bottom: 6pt), + table.hline(stroke: 0.5pt + black), + [#left], + align(end)[#right], + ) +} + +#align(center)[ + #set par(first-line-indent: 0pt, justify: false, leading: 1.15em) + #text(weight: "bold")[ТЕХНИЧЕСКОЕ ЗАДАНИЕ] + #text(weight: "bold")[НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ] + #v(0.5em) + БАКАЛАВРА по образовательной программе\ + #quote[Методы и средства разработки программного обеспечения]\ + направления 09.03.04 Программная инженерия + #v(0.35em) + студенту группы КТбо4-9\ + Пыткову Роману Евгеньевичу +] + +#v(0.5em) +#set par(first-line-indent: 0pt, justify: true, leading: 0.95em) + +#tz-row[ + 1. Тема выпускной квалификационной работы: #quote[Разработка мобильного приложения Wallenc — универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера] утверждена приказом по ВУЗу № 2191-к от 17.02.2026 г. +] + +#tz-row[2. Требования и исходные данные к работе:] + +#tz-row[2.1 Среда разработки: Android Studio, Gradle, Git.] + +#tz-row[2.2 ОС разработки: GNU/Linux / Windows 11.] + +#tz-row[2.3 Язык программирования: Kotlin; целевая платформа — Android (API 26+).] + +#tz-row[2.4 Стек: Jetpack Compose, Coroutines/Flow, Hilt, Room, JUnit.] + +#tz-row[3. Перечень подлежащих разработке вопросов (содержание работы):] + +#tz-row[3.1 Введение] + +#tz-row[3.2 Анализ требований и предметной области] + +#tz-row[3.3 Проектирование архитектуры системы и пользовательского интерфейса] + +#tz-row[3.4 Программная реализация] + +#tz-row[3.5 Тестирование программного обеспечения] + +#tz-row[3.6 Технико-экономическое обоснование разработки] + +#tz-row[3.7 Заключение] + +#tz-row[3.8 Список использованных источников] + +#tz-row[3.9 Приложение А — листинги исходного кода] + +#tz-row[3.10 Приложение Б — программная документация] + +#tz-row[3.11 Приложение В — скриншоты пользовательского интерфейса] + +#tz-row[4. Перечень графического материала:] + +#tz-row-split( + [4.1 Контекстная диаграмма и диаграммы требований], + [— 4 пл.], +) +#tz-row-split( + [4.2 Архитектура, DFD, UML, схема Room], + [— 6 пл.], +) +#tz-row-split( + [4.3 Пользовательские сценарии и экраны UI], + [— 12 пл.], +) +#tz-row-split( + [4.4 Диаграммы реализации и зависимостей модулей], + [— 4 пл.], +) +#tz-row-split( + [4.5 Материалы тестирования], + [— 6 пл.], +) + +#tz-row[ + 5. Консультанты по выпускной квалификационной работе (с указанием разделов): не предусмотрены. +] + +#tz-row[6. Срок сдачи законченной ВКР руководителю: «06» 05 2026 г.] + +#tz-row[7. Дата выдачи задания: «09» 02 2026 г.] + +#v(1.25em) + +#align(left)[ + #set par(first-line-indent: 0pt, justify: false, leading: 1.1em) + Руководитель образовательной программы\ + заведующий кафедрой математического обеспечения и применения ЭВМ\ + #v(0.5em) + #pz-sig-line[Беликов А. Н.]\ + (подпись, дата)\ + #v(0.75em) + Руководитель ВКР:\ + старший преподаватель кафедры системного анализа и телекоммуникаций\ + #v(0.5em) + #pz-sig-line[Беликов А. Н.]\ + (подпись, дата)\ + #v(0.75em) + Исполнитель:\ + студент группы КТбо4-9\ + #v(0.5em) + #pz-sig-line[Пытков Р. Е.]\ + (подпись, дата) +] diff --git a/Report/includes/title-page.typ b/Report/includes/title-page.typ new file mode 100644 index 0000000..630033a --- /dev/null +++ b/Report/includes/title-page.typ @@ -0,0 +1,120 @@ +#import "common.typ": pz-sig-line + +#let pz-title-page( + ministry: [], + university-full: [], + university-short: [], + institute: [], + department: [], + topic: [], + program: [], + direction: [], + student-name: [], + student-position: [], + supervisor-name: [], + supervisor-position: [], + norm-name: [], + norm-position: [], + dept-head-name: [], + dept-head-position: [], + city: [], + year: [], +) = { + set par(first-line-indent: 0pt, justify: false) + set align(center) + + ministry + v(0.35em) + university-full + v(0.25em) + university-short + v(1.25em) + + align(left)[ + #set par(first-line-indent: 0pt) + #institute\ + #department + ] + + v(0.75em) + + grid( + columns: (1fr, 1fr), + gutter: 12pt, + align: (left, left), + [], + [ + К защите допустить:\ + #dept-head-position\ + #v(0.6em) + #pz-sig-line(dept-head-name)\ + #box(width: 5.5cm)[#year г.] + ], + ) + + v(1.25em) + + text(weight: "bold")[ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА] + + v(0.75em) + + [по образовательной программе\ + #quote[#program]\ + направления #direction Программная инженерия] + + v(0.75em) + + [на тему:] + + v(0.35em) + + text(weight: "bold")[#quote[#topic]] + + v(1.25em) + + align(left)[ + #set par(first-line-indent: 0pt) + Руководитель ВКР:\ + #supervisor-position\ + #v(0.6em) + #pz-sig-line(supervisor-name)\ + (подпись, дата)\ + #v(0.75em) + Нормоконтроль:\ + #norm-position\ + #v(0.6em) + #pz-sig-line(norm-name)\ + (подпись, дата)\ + #v(0.75em) + Выполнил:\ + #student-position\ + #v(0.6em) + #pz-sig-line(student-name)\ + (подпись, дата) + ] + + v(1fr) + + [#city #year] +} + +#pz-title-page( + ministry: [Министерство науки и высшего образования Российской Федерации], + university-full: [Федеральное государственное автономное образовательное учреждение высшего образования «Южный федеральный университет»], + university-short: [(ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ)], + institute: [Институт компьютерных технологий и информационной безопасности], + department: [Кафедра математического обеспечения и применения ЭВМ (МОП ЭВМ)], + topic: [Разработка мобильного приложения Wallenc — универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера], + program: [Методы и средства разработки программного обеспечения], + direction: [09.03.04], + student-name: [Пытков Р. Е.], + student-position: [студент группы КТбо4-9], + supervisor-name: [Беликов А. Н.], + supervisor-position: [старший преподаватель кафедры системного анализа и телекоммуникаций], + norm-name: [Беликов А. Н.], + norm-position: [старший преподаватель кафедры системного анализа и телекоммуникаций], + dept-head-name: [Беликов А. Н.], + dept-head-position: [Зав. кафедрой системного анализа и телекоммуникаций], + city: [Таганрог], + year: [2026], +) diff --git a/Report/Пояснительная_записка_ПытковРЕ.typ b/Report/Пояснительная_записка_ПытковРЕ.typ index dba6b5f..7353f36 100644 --- a/Report/Пояснительная_записка_ПытковРЕ.typ +++ b/Report/Пояснительная_записка_ПытковРЕ.typ @@ -1,4 +1,4 @@ -#import "@preview/modern-g7-32:0.2.0": abstract, appendixes, enum-numbering, gost +#import "@preview/modern-g7-32:0.2.0": appendixes, enum-numbering, gost #set enum(numbering: enum-numbering) #set heading(numbering: "1.1.1.1") @@ -24,27 +24,22 @@ performers: ( (name: "Пытков Р. Е.", position: "студент гр. КТбо4-9"), ), + hide-title: true, ) #set text(font: "Times New Roman") #import "includes/common.typ": pz-appendix-title, pz-fig -#abstract( - "мобильное приложение", - "клиентское шифрование", - "Android", - "vault", - "zero-knowledge", - "синхронизация", -)[ - Пояснительная записка посвящена разработке мобильного приложения Wallenc — клиентского кошелька для безопасного хранения данных на недоверенных хранилищах без собственного сервера приложения. Описаны анализ предметной области и аналогов, формирование требований, проектирование архитектуры и пользовательского интерфейса, программная реализация на Kotlin (Android, Jetpack Compose, Room, Hilt), тестирование и краткая экономическая оценка. Реализованы управление локальными и удалёнными vault, клиентское AES-шифрование, OAuth Яндекс, служебное хранение метаданных в Room; спроектирован контур синхронизации без передачи ключей провайдеру. Исходный код размещён в приватном репозитории Gitea ЮФУ. Полный листинг исходных файлов — приложение А; программная документация — приложение Б. -] - +#include "includes/blank-front-matter.typ" +#include "includes/abstract-ru.typ" #include "includes/abstract-en.typ" +#set outline(indent: 1.25cm / 2) #outline() +#include "includes/abbreviations.typ" + #include "includes/intro.typ" #include "includes/ch01.typ" #include "includes/ch02.typ" @@ -53,7 +48,6 @@ #include "includes/ch05.typ" #include "includes/ch06.typ" #include "includes/conclusion.typ" -#include "includes/abbreviations.typ" // Заголовок списка источников задаётся в gost (bibliography.title). #bibliography("references.bib")