summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-05-19 16:08:23 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-05-19 16:08:23 +0400
commitea3102c95848f7ee86dfe2081d4a711d37add7d3 (patch)
treeb1c2d2a4a18f4ab7cd19edec8396b1e3870b0cb9
parent9ee54e3e82e92669775eadabaa0c743d74482729 (diff)
Add latex report
-rw-r--r--.gitignore14
-rw-r--r--http-client/go.sum77
-rw-r--r--http-server/go.sum2
-rw-r--r--report/SCWorks.cls908
-rw-r--r--report/coursework.pdfbin0 -> 284022 bytes
-rw-r--r--report/coursework.tex498
-rw-r--r--report/images/screenshots/chat.pngbin0 -> 7921 bytes
-rw-r--r--report/images/screenshots/error.pngbin0 -> 19468 bytes
-rw-r--r--report/images/screenshots/input.pngbin0 -> 6554 bytes
-rw-r--r--report/images/screenshots/key.pngbin0 -> 31781 bytes
-rw-r--r--report/images/screenshots/register.pngbin0 -> 18721 bytes
-rw-r--r--report/images/screenshots/start.pngbin0 -> 10196 bytes
-rwxr-xr-xreport/merge.sh5
-rw-r--r--report/preamble.sty50
-rw-r--r--report/sources.bib29
-rw-r--r--report/title.pdfbin0 -> 25350 bytes
-rw-r--r--report/titlepage.tex53
17 files changed, 1635 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 723ef36..167b5d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,13 @@
-.idea \ No newline at end of file
+*.sqlite3
+.*
+_minted*
+*.aux
+*.bbl
+*.bcf
+*.blg
+*.fdb_latexmk
+*.fls
+*.log
+*.xml
+*.gz
+*.toc \ No newline at end of file
diff --git a/http-client/go.sum b/http-client/go.sum
new file mode 100644
index 0000000..d4331e2
--- /dev/null
+++ b/http-client/go.sum
@@ -0,0 +1,77 @@
+fyne.io/fyne/v2 v2.0.2 h1:6pDvFuCmL1odyT/fPI+2L54hMJW1Zt9Dno41HmLInRs=
+fyne.io/fyne/v2 v2.0.2/go.mod h1:3+FYmLJVgeb8EvTPJ5YzZeo7LkAq4bbuY3Zrir6xHbg=
+github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I=
+github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 h1:FDqhDm7pcsLhhWl1QtD8vlzI4mm59llRvNzrFg6/LAA=
+github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3/go.mod h1:CzM2G82Q9BDUvMTGHnXf/6OExw/Dz2ivDj48nVg7Lg8=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fyne-io/mobile v0.1.3-0.20210318200029-09e9c4e13a8f h1:rguJ/t99j/6zRSFzsBKlsmmyl+vOvCeTJ+2uTBvuXFI=
+github.com/fyne-io/mobile v0.1.3-0.20210318200029-09e9c4e13a8f/go.mod h1:/kOrWrZB6sasLbEy2JIvr4arEzQTXBTZGb3Y96yWbHY=
+github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluNRiMjZHalQZrVrvTbPh+qw=
+github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210311203641-62640a716d48 h1:QrUfZrT8n72FUuiABt4tbu8PwDnOPAbnj3Mql1UhdRI=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210311203641-62640a716d48/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8=
+github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw=
+github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc=
+github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/lucor/goinfo v0.0.0-20200401173949-526b5363a13a/go.mod h1:ORP3/rB5IsulLEBwQZCJyyV6niqmI7P4EWSmkug+1Ng=
+github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 h1:HunZiaEKNGVdhTRQOVpMmj5MQnGnv+e8uZNu3xFLgyM=
+github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4=
+github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCEzJNy71UkeF4XIx2EVmL9KLwDQdmM=
+github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8=
+golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200328031815-3db5fc6bac03/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/http-server/go.sum b/http-server/go.sum
new file mode 100644
index 0000000..96ff824
--- /dev/null
+++ b/http-server/go.sum
@@ -0,0 +1,2 @@
+github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA=
+github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
diff --git a/report/SCWorks.cls b/report/SCWorks.cls
new file mode 100644
index 0000000..7eddd54
--- /dev/null
+++ b/report/SCWorks.cls
@@ -0,0 +1,908 @@
+\LoadClass[14pt]{extarticle}
+%\RequirePackage[14pt]{extsizes}
+\RequirePackage[
+ a4paper, mag=1000,
+ left=2.5cm, right=1.5cm, top=2cm, bottom=2cm, bindingoffset=0cm,
+ headheight=0cm, footskip=1cm, headsep=0cm
+ ]{geometry}
+\RequirePackage{setspace}
+\RequirePackage{calc}
+\RequirePackage{titlesec}
+\RequirePackage{titletoc}
+\RequirePackage{caption}
+\RequirePackage{graphicx}
+\RequirePackage[inline]{enumitem}
+
+
+
+
+% --------------------------------------------------------------------------%
+% Input data
+% --------------------------------------------------------------------------%
+\def\chair#1{\gdef\@chair{#1}}\chair{\hbox to 3cm{\hrulefill}}
+\def\worktype#1{\gdef\@worktype{#1}}
+\def\worktitle{\@title}
+\def\typework#1{\gdef\@typework{#1}}
+\def\disserform#1{\gdef\@disserform{#1}}
+\def\disserformP#1{\gdef\@disserformP{#1}}
+\def\disserformR#1{\gdef\@disserformR{#1}}
+\def\disserformV#1{\gdef\@disserformV{#1}}
+\def\course#1{\gdef\@course{#1}}\course{2}
+\def\group#1{\gdef\@group{#1}}\group{211}
+\def\department#1{\gdef\@department{#1}}\department{\cyr\cyrf\cyra\cyrk%
+\cyru\cyrl\cyrsftsn\cyrt\cyre\cyrt\cyra\ \CYRK\CYRN\cyri\CYRI\CYRT}
+\def\otdelenie#1{\gdef\@otdelenie{#1}}
+\def\studentName{\@author}
+%\def\studentName#1{\gdef\@studentName{#1}}
+\def\satitle#1{\gdef\@satitle{#1}}\satitle{\hbox to 3cm{\hrulefill}}
+\def\saname#1{\gdef\@saname{#1}}\saname{\hbox to 3cm{\hrulefill}}
+\def\critictitle#1{\gdef\@critictitle{#1}}\critictitle{\hbox to 3cm{\hrulefill}}
+\def\criticname#1{\gdef\@criticname{#1}}\criticname{\hbox to 3cm{\hrulefill}}
+\def\secrname#1{\gdef\@secrname{#1}}\secrname{\hbox to 3cm{\hrulefill}}
+\def\chtitle#1{\gdef\@chtitle{#1}}\chtitle{\hbox to 3cm{\hrulefill}}
+\def\chname#1{\gdef\@chname{#1}}\chname{\hbox to 3cm{\hrulefill}}
+%\def\year#1{\gdef\@year{#1}}
+\def\spectype#1{\gdef\@spectype{#1}}
+\def\spectyperod#1{\gdef\@spectyperod{#1}}
+\def\workform#1{\gdef\@workform{#1}}
+\def\practtype#1{\gdef\@practtype{#1}}\practtype{\cyr\cyru\cyrch\cyre\cyrb%
+\cyrn\cyra\cyrya}
+\def\term#1{\gdef\@term{#1}}\term{2}
+\def\duration#1{\gdef\@duration{#1}}\duration{2}
+\def\protnum#1{\gdef\@protnum{#1}}\protnum{\hbox to 1cm{\hrulefill}}
+\def\protdate#1{\gdef\@protdate{#1}}\protdate{\hbox to 3cm{\hrulefill}}
+\def\practStart#1{\gdef\@practStart{#1}}\practStart{\hbox to 3cm{\hrulefill}}
+\def\practFinish#1{\gdef\@practFinish{#1}}\practFinish{\hbox to 3cm{\hrulefill}}
+\def\reviewtype#1{\gdef\@reviewtype{#1}}\reviewtype{\CYRO\CYRT%
+\CYRZ\CYRERY\CYRV}
+
+\def\patitle#1{\gdef\@patitle{#1}}\patitle{\@satitle}
+\def\paname#1{\gdef\@paname{#1}}\paname{\@saname}
+
+\def\napravlenie#1{\gdef\@napravlenie{#1}}\napravlenie{\hbox to 3cm{\hrulefill}}
+\def\Napravlenie{\@napravlenie}
+
+
+\def\studenttitle#1{\gdef\@studenttitle{#1}}\studenttitle{\cyr\cyrs\cyrt%
+\cyru\cyrd\cyre\cyrn\cyrt\cyra}
+\def\studentdone#1{\gdef\@studentdone{#1}}\studentdone{\cyrp\cyrr\cyro%
+\cyrsh\cyre\cyrd\cyrsh\cyre\cyrg\cyro}
+\def\studentfemale{\studenttitle{\cyrs\cyrt\cyru\cyrd\cyre\cyrn\cyrt%
+\cyrk\cyri}\studentdone{\cyrp\cyrr\cyro\cyrsh\cyre\cyrd\cyrsh%
+\cyre\cyrishrt}}
+
+%\newcommand{\MakeTitle}{}
+
+\def\workname#1{\gdef\@workname{#1}}
+
+%\hbox to 3cm{\hrulefill}
+
+% --------------------------------------------------------------------------%
+
+
+\newcommand{\signature}[2]{
+\hbox to 7cm{#1\hfill} \hbox to 3cm{\hrulefill} \hbox to 6cm{\hfill #2}}
+
+\newcommand{\inlinesignature}[2]{%
+#1\qquad \hbox to 3cm{\hrulefill}\quad #2}
+
+
+\newcommand{\signatureline}{}
+
+% --------------------------------------------------------------------------%
+\newcommand{\scaleUnivName}{0.97}
+
+\DeclareOption{times}{%
+ \renewcommand{\rmdefault}{ftm}
+ \renewcommand{\scaleUnivName}{1.0}
+}
+
+\DeclareOption{spec}{%
+ \spectype{\cyr\cyrs\cyrp\cyre\cyrc\cyri\cyra\cyrl\cyrsftsn\cyrn\cyro%
+ \cyrs\cyrt\cyri}
+ \spectyperod{\cyrs\cyrp\cyre\cyrc\cyri\cyra\cyrl\cyrsftsn\cyrn\cyro%
+ \cyrs\cyrt\cyri}
+ \workform{\cyr\CYRS\CYRP\CYRE\CYRC\CYRI\CYRA\CYRL\CYRI\CYRS\CYRT\CYRA}
+ \disserform{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRA\CYRYA\ \CYRR\CYRA%
+ \CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRO\CYRISHRT\ \CYRR%
+ \CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRO\CYRISHRT\ \CYRR%
+ \CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRU\CYRYU\ \CYRR\CYRA%
+ \CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{bachelor}{%
+ \spectype{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyrya}
+ \spectyperod{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri \cyryu}
+ \workform{\cyr\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRA}
+ \disserform{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRA%
+ \CYRYA\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRU%
+ \CYRYU\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{master}{%
+ \spectype{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyrya}
+ \spectyperod{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri \cyryu}
+ \workform{\cyr\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRR\CYRA}
+ \disserform{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRA%
+ \CYRYA\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRU%
+ \CYRYU\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{coursework}{%
+ \worktype{\cyr\CYRK\cyru\cyrr\cyrs\cyro\cyrv\cyra\cyrya\ \cyrr\cyra\cyrb%
+ \cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ \workname{\MakeUppercase{\@worktype}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{diploma}{%
+ \worktype{\cyr\CYRV\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyra\cyrya\ \cyrk\cyrv%
+ \cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro\cyrn\cyrn\cyra%
+ \cyrya\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ \workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{autoref}{%
+ \workname{\cyr\CYRA\CYRV\CYRT\CYRO\CYRR\CYRE\CYRF\CYRE\CYRR\CYRA\CYRT\ %
+ \MakeUppercase{\@disserformR}}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ %\workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{nir}{%
+ \workname{\cyr\CYRO\CYRT\CYRCH\CYRE\CYRT\ \CYRO\ \CYRN\CYRA\CYRU\CYRCH%
+ \CYRN\CYRO-\CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+ \CYRSFTSN\CYRS\CYRK\CYRO\CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ %\workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{pract}{%
+ \worktype{\cyr\CYRO\cyrt\cyrch\cyre\cyrt\ \cyro\ \cyrp\cyrr\cyra\cyrk\cyrt%
+ \cyri\cyrk\cyre}
+ \renewcommand{\maketitle}{\MakeTitlePr}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn}
+}
+
+\DeclareOption{review}{%
+ \reviewtype{\CYRO\CYRT\CYRZ\CYRERY\CYRV}
+ \worktype{\cyrn\cyra\cyru\cyrch\cyrn\cyro\cyrg\cyro\ \cyrr\cyru\cyrk%
+ \cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrya\ \cyro\ \cyrv\cyrery%
+ \cyrp\cyru\cyrs\cyrk\cyrn\cyro\cyrishrt\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf%
+ \cyri\cyrk\cyra\cyrc\cyri\cyro\cyrn\cyrn\cyro\cyrishrt\ \cyrr\cyra\cyrb%
+ \cyro\cyrt\cyre}
+ \workname{\cyr\cyrn\cyra\cyru\cyrch\cyrn\cyro\cyrg\cyro\ \cyrr\cyru\cyrk%
+ \cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrya\ \cyro\ \MakeLowercase{\@disserformP}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleReview}
+ \renewcommand{\signatureline}{%
+ \par\noindent%
+ \CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+ \cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\%
+ \signature{\@satitle}{\@saname}\\%
+ }
+}
+
+\DeclareOption{assignment}{%
+ \reviewtype{\CYRZ\CYRA\CYRD\CYRA\CYRN\CYRI\CYRE}
+ \worktype{\cyrn\cyra\ \cyrv\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyru%
+ \cyryu\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro%
+ \cyrn\cyrn\cyru\cyryu\ \cyrr\cyra\cyrb\cyro\cyrt\cyru}
+ \workname{\cyr\cyrn\cyra\ \MakeLowercase{\@disserformV}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleAssign}
+ \renewcommand{\signatureline}{%
+
+ \vfill%
+ \noindent%
+ \textbf{\CYRS\cyrr\cyro\cyrk\ \cyrp\cyrr\cyre\cyrd\cyro\cyrs\cyrt\cyra%
+ \cyrv\cyrl\cyre\cyrn\cyri\cyrya\ \cyrr\cyra\cyrb\cyro\cyrt\cyrery:}\ \@practFinish
+
+ \vspace{2em}\raggedright
+ \noindent \CYRR\cyra\cyrs\cyrs\cyrm\cyro\cyrt\cyrr\cyre\cyrn\cyro\ %
+ \cyrn\cyra\ \cyrz\cyra\cyrs\cyre\cyrd\cyra\cyrn\cyri\cyri\ \cyrk\cyra%
+ \cyrf\cyre\cyrd\cyrr\cyrery\ \@chair
+
+ \vspace{1em}
+ \CYRP\cyrr\cyro\cyrt\cyro\cyrk\cyro\cyrl\ \textnumero\ \@protnum\ \cyro%
+ \cyrt\ \@protdate
+
+ \vspace{1em}
+ \raggedright
+ \noindent
+ \inlinesignature{\CYRS\cyre\cyrk\cyrr\cyre\cyrt\cyra\cyrr\cyrsftsn}{\@secrname}
+
+ \vspace{2em}
+ \noindent\raggedright
+ \CYRD\cyra\cyrt\cyra\ \cyrv\cyrery\cyrd\cyra\cyrch\cyri\ \cyrz\cyra%
+ \cyrd\cyra\cyrn\cyri\cyrya\ \@practStart
+
+ \vspace{1em}
+ \noindent\raggedright
+ \inlinesignature{\CYRZ\cyra\cyrd\cyra\cyrn\cyri\cyre\ \cyrp\cyro\cyrl%
+ \cyru\cyrch\cyri\cyrl}{\hbox to 3cm{\hrulefill}}
+
+ \vspace{1cm}
+ }
+}
+
+\DeclareOption{critique}{%
+ \reviewtype{\CYRR\CYRE\CYRC\CYRE\CYRN\CYRZ\CYRI\CYRYA}
+ \worktype{\cyrn\cyra\ \cyrv\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyru%
+ \cyryu\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro%
+ \cyrn\cyrn\cyru\cyryu\ \cyrr\cyra\cyrb\cyro\cyrt\cyru}
+ \workname{\cyr\cyrn\cyra\ \MakeLowercase{\@disserformV}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleReview}
+ \renewcommand{\signatureline}{%
+ \par\noindent%
+ \CYRR\cyre\cyrc\cyre\cyrn\cyrz\cyre\cyrn\cyrt\\%
+ \signature{\@critictitle}{\@criticname}\\%
+ }
+}
+
+
+\DeclareOption{referat}{%
+ \worktype{\cyr\CYRR\cyre\cyrf\cyre\cyrr\cyra\cyrt}
+ \workname{\MakeUppercase{\@worktype}}
+ \renewcommand{\maketitle}{\RefMakeTitle}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn}
+}
+
+\DeclareOption{och}{%
+ \otdelenie{\cyr\cyro\cyrch\cyrn\cyro\cyrishrt\ \cyrf\cyro\cyrr\cyrm%
+ \cyrery\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyrya}
+}
+
+\DeclareOption{zaoch}{%
+ \otdelenie{\cyr\cyrz\cyra\cyro\cyrch\cyrn\cyro\cyrishrt\ \cyrf\cyro\cyrr%
+ \cyrm\cyrery\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyrya}
+}
+
+\ExecuteOptions{coursework,och,bachelor}
+\ProcessOptions
+
+% --------------------------------------------------------------------------%
+\newcommand*{\hm}[1]{#1\nobreak\discretionary{}%
+{\hbox{$\mathsurround=0pt #1$}}{}}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+
+\onehalfspacing
+\parindent=1.25cm
+\pagestyle{headings}
+\renewcommand{\@oddhead}{}
+\renewcommand{\@oddfoot}{\hfil \thepage}
+
+% --------------------------------------------------------------------------%
+% Table and figure numbering by sections
+% --------------------------------------------------------------------------%
+\newif\if@secNumbering\@secNumberingfalse
+\newcommand{\secNumbering}{
+ \renewcommand{\thefigure}{\arabic{section}.\arabic{figure}}
+ \renewcommand{\thetable}{\arabic{section}.\arabic{table}}
+ \renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
+ \@addtoreset{figure}{section}
+ \@addtoreset{table}{section}
+ \@addtoreset{equation}{section}
+ \@secNumberingtrue
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Table and figure captions
+% --------------------------------------------------------------------------%
+\def\CaptionName#1{\gdef\@captionname{#1}}
+\newlength\tmp %10cm
+\setlength{\tmp}{1ex}
+\setlength{\belowcaptionskip}{1ex}
+\setlength{\abovecaptionskip}{1ex}
+
+\captionsetup[figure]{name=\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk, labelsep=endash,
+ justification=centering, font={small}, skip=\abovecaptionskip, position=below}
+\captionsetup[table]{name=\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra, labelsep=endash, format=plain,
+ justification=RaggedRight, singlelinecheck=false, font={small}, position=top}
+
+% --------------------------------------------------------------------------%
+% Table of contents
+% --------------------------------------------------------------------------%
+\renewcommand{\tableofcontents}%
+{\structformat\section*{\uppercase{\cyr\CYRS\CYRO\CYRD\CYRE\CYRR\CYRZH\CYRA%
+\CYRN\CYRI\CYRE}}\secformat\@starttoc{toc}
+\thispagestyle{empty}}
+
+\renewcommand{\@dotsep}{1.5}
+\renewcommand{\@pnumwidth}{1.0em}
+
+\newcommand{\l@abcd}[2]{{\@dottedtocline{0}{0pt}{0pt}{#1}{#2}}}
+
+\renewcommand{\l@section}{\@dottedtocline{1}{0em}{1.5em}}
+\renewcommand{\l@subsection}{\@dottedtocline{2}{1.5em}{2.3em}}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Sections, subsections
+% --------------------------------------------------------------------------%
+% Numbering
+\renewcommand{\thesection}{\arabic{section}}
+\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}
+\renewcommand{\thesubsubsection}{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}
+
+\newcommand{\sectionbreak}{\clearpage}
+
+% Contents, intro, conclusion
+\newcommand{\structformat}
+{
+ \titlespacing{\section}
+ {0cm}{3ex plus 1ex minus .2ex}{1.4ex plus.2ex}
+ \titleformat{\section}[block]
+ {\centering\bfseries}
+ {\thesection}{0ex}{}
+}
+
+% Sections, subsections
+\newcommand{\secformat}
+{
+ \titlespacing{\section}
+ {0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+ \titleformat{\section}[block]
+ {\hspace{1.25cm}\raggedright\bfseries}
+ {\thesection}{1ex}{}
+}
+
+\newif\if@hyperrefloaded\@hyperrefloadedfalse
+\AtBeginDocument{\@ifpackageloaded{hyperref}%
+ {\@hyperrefloadedtrue}{\@hyperrefloadedfalse}%
+}
+
+%\RequirePackage{ifthen}
+\newcommand{\starsection}[1]{
+ \structformat
+ \section*{#1}%
+ \if@hyperrefloaded
+ \phantomsection
+ \fi
+ \addcontentsline{toc}{section}{#1}
+ \setcounter{section}{0}
+ \secformat
+}
+
+
+\setcounter{section}{0}
+\secformat
+
+
+\newcommand{\intro}{\starsection{\cyr\CYRV\CYRV\CYRE\CYRD\CYRE%
+\CYRN\CYRI\CYRE}}
+\newcommand{\abbreviations}{\starsection{\CYRO\CYRB\CYRO\CYRZ\CYRN\CYRA%
+\CYRCH\CYRE\CYRN\CYRI\CYRYA\ \CYRI\ \CYRS\CYRO\CYRK\CYRR\CYRA\CYRSHCH%
+\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\definitions}{\starsection{\CYRO\CYRP\CYRR\CYRE\CYRD\CYRE%
+\CYRL\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\defabbr}{\starsection{\CYRO\CYRP\CYRR\CYRE\CYRD\CYRE\CYRL%
+\CYRE\CYRN\CYRI\CYRYA, \CYRO\CYRB\CYRO\CYRZ\CYRN\CYRA\CYRCH\CYRE\CYRN%
+\CYRI\CYRYA\ \CYRI\ \CYRS\CYRO\CYRK\CYRR\CYRA\CYRSHCH\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\conclusion}{\starsection{\cyr\CYRZ\CYRA\CYRK\CYRL\CYRYU%
+\CYRCH\CYRE\CYRN\CYRI\CYRE}}
+
+% Section and subsection parameters
+\titlespacing{\section}
+{0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+
+\titleformat{\subsection}[block]
+{\hspace{1.25cm}\normalfont\bfseries}
+{\thesubsection}{1ex}{}
+\titlespacing{\subsection}
+{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}
+
+\titleformat{\subsubsection}[block]
+{\hspace{1.25cm}\normalfont}
+{\thesubsubsection}{1ex}{}
+\titlespacing{\subsubsection}
+{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}
+
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+
+
+%\AddEnumerateCounter{\Asbuk}{\@Asbuk}{\CYRM}
+%\AddEnumerateCounter{\asbuk}{\@asbuk}{\cyrm}
+
+\makeatletter
+\def\redeflsection{\def\l@section{\@dottedtocline{1}{0em}{10em}}}
+\renewcommand{\appendix}{\par%
+
+ \renewcommand{\secNumbering}{
+ \renewcommand{\thefigure}{\Asbuk{section}.\arabic{figure}}
+ \renewcommand{\thetable}{\Asbuk{section}.\arabic{table}}
+ \renewcommand{\theequation}{\Asbuk{section}.\arabic{equation}}
+ \@addtoreset{figure}{section}
+ \@addtoreset{table}{section}
+ \@addtoreset{equation}{section}
+
+ }
+ \if@secNumbering
+ \secNumbering
+ \fi
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \renewcommand{\appendixname}{\cyr\CYRP\CYRR\CYRI\CYRL\CYRO\CYRZH\CYRE%
+ \CYRN\CYRI\CYRE}%
+ \def\sectionname{\appendixname}%
+ \addtocontents{toc}{\protect\redeflsection}%
+ \gdef\thesection{\Asbuk{section}}%
+ \titlespacing{\section}
+ %{0cm}{1ex plus 0.1ex minus .2ex}{1.1ex plus.1ex}
+ {0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+ \titleformat{\section}[display]
+ {\centering\normalfont\bfseries}
+ {\appendixname\hspace{1ex}\thesection}{0ex}{}
+
+
+ \titlecontents{section}
+ [3ex]
+ {\hspace{-3ex}}
+ {\appendixname~\thecontentslabel\hspace{2ex}}
+ {\hspace{2.3em}}
+ {\titlerule*[0.98ex]{.}\contentspage}
+
+}
+
+
+
+% --------------------------------------------------------------------------%
+% Title pages
+% --------------------------------------------------------------------------%
+%\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+%\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ %
+%\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+%\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+%\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+%\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+%\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \cyrv\cyrery\cyrs%
+%\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+%\cyro\cyrv\cyra\cyrn\cyri\cyrya\\
+%\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+%\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT\ %
+%\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+%\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}\\}}
+
+%\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+%\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ \hspace{-1em}%
+%\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+%\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+%\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+%\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+%\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \\\cyrv\cyrery\cyrs%
+%\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+%\cyro\cyrv\cyra\cyrn\cyri\cyrya\\\hspace{-2em}
+%{
+%\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+%\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT}} \\%
+%{\textbf{\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT}} \\%
+%{\textbf{\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+%\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}}\\}}
+
+\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ %
+\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \\\cyrv\cyrery\cyrs%
+\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+\cyro\cyrv\cyra\cyrn\cyri\cyrya\\[0.2em]
+
+\centerline{\scalebox{\scaleUnivName}[1.0]{\parbox[t]{1.1\textwidth}
+{\centering
+\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT\ \\%
+\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT\ \\%
+\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}}}}}}
+
+\newcommand{\CDMakeTitle}
+{
+\thispagestyle{empty}
+\shapka
+%\vspace{0.5cm}
+\begin{center}
+%\parbox{8cm}{
+%\raggedright
+\CYRK\cyra\cyrf\cyre\cyrd\cyrr\cyra\ \@chair
+%}
+\end{center}
+
+\vspace{14pt}
+\vspace{1cm}
+{\centering
+\textbf{\MakeUppercase{\@title}}
+\\[0.3cm]
+{\@workname}
+
+}
+
+\vspace{1.5cm}
+\begin{flushleft}
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+\cyrr\cyru\cyrp\cyrp\cyrery\\
+\@spectype\ \@napravlenie\\
+\@department\\
+\@author
+\end{flushleft}
+\vfill
+
+\noindent
+\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRZ\cyra\cyrv\cyre\cyrd\cyru\cyryu\cyrshch\cyri\cyrishrt\ \cyrk\cyra%
+\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt\\
+\signature{\@chtitle}{\@chname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Title page of internship
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitlePr}
+{
+\thispagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+\vspace{0.5cm}
+
+
+\begin{flushright}
+ \parbox{7cm}{
+ \begin{flushleft}
+ \CYRU\CYRT\CYRV\CYRE\CYRR\CYRZH\CYRD\CYRA\CYRYU\\
+ \CYRZ\cyra\cyrv.\cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt,\\
+ \@chtitle\\
+ \hbox to 7cm{\hrulefill\ \@chname}
+ \end{flushleft}
+ }
+\end{flushright}
+
+\vspace{1cm}
+\begin{center}\textbf{\MakeUppercase{\@worktype}}\end{center}
+\begin{flushleft}
+ \vspace{12pt}
+ \@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+ \cyrr\cyru\cyrp\cyrp\cyrery\ \@department\\
+ \@author
+ \vspace{0.5cm}
+
+
+ \cyrv\cyri\cyrd\ \cyrp\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri: \@practtype\\
+ \cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyra: \@chair\\
+ \cyrk\cyru\cyrr\cyrs: \@course\\
+ \cyrs\cyre\cyrm\cyre\cyrs\cyrt\cyrr: \@term\\
+ \cyrp\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyri\cyrt\cyre\cyrl\cyrsftsn\cyrn%
+ \cyro\cyrs\cyrt\cyrsftsn: \@duration\ \cyrn\cyre\cyrd., \cyrs\ \@practStart\ \cyrg. \cyrp\cyro\ \@practFinish\ \cyrg.
+\end{flushleft}
+%\parindent=-0.2cm
+\vspace{1cm}
+
+\noindent
+\CYRR\cyru\cyrk\cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\ \cyrp%
+\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri\ \cyro\cyrt\ \cyru\cyrn\cyri\cyrv%
+\cyre\cyrr\cyrs\cyri\cyrt\cyre\cyrt\cyra,\\[12pt]%
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRR\cyru\cyrk\cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\ \cyrp%
+\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri\ \cyro\cyrt\ \cyro\cyrr\cyrg\cyra%
+\cyrn\cyri\cyrz\cyra\cyrc\cyri\cyri\ (\cyru\cyrch\cyrr\cyre\cyrzh\cyrd%
+\cyre\cyrn\cyri\cyrya, \cyrp\cyrr\cyre\cyrd\cyrp\cyrr\cyri\cyrya\cyrt%
+\cyri\cyrya),\\[12pt]%
+\signature{\@patitle}{\@paname}
+
+\newpage
+\thispagestyle{empty}
+\vspace*{11cm}
+\CYRT\cyre\cyrm\cyra\ \cyrp\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri:<<\@title>>
+\parindent=1.25cm
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Title page of review
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitleReview}
+{
+\pagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+
+
+{
+\centering
+\textbf{\MakeUppercase{\@reviewtype}}\\[-0.3em]
+\textbf{\@workname}\\[0.3em]
+<<{\MakeUppercase{\@title}}>>
+
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ %
+\@department\\
+
+\centering
+{\@author}\\
+
+\centering
+\@studentdone\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyre\ \cyrp%
+\cyro\ \@spectyperod\ \@napravlenie
+
+}
+\vspace{2em}
+}
+% --------------------------------------------------------------------------%
+
+
+% --------------------------------------------------------------------------%
+% Title page of assignment
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitleAssign}
+{
+\pagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+
+{
+\centering
+\CYRK\cyra\cyrf\cyre\cyrd\cyrr\cyra\ \@chair
+
+
+\vspace{6em}
+\centering
+\textbf{\MakeUppercase{\@reviewtype}\\%[-0.3em]
+\@workname}
+
+\vspace{0.3em}
+\raggedright
+\cyrp\cyro\ \@spectyperod\ \@napravlenie\\
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ %
+\@department\\
+\MakeUppercase{\@author}\\
+\textbf{\CYRT\cyre\cyrm\cyra\ \cyrr\cyra\cyrb\cyro\cyrt\cyrery:} <<{\MakeUppercase{\@title}}>>
+
+}
+
+\vfill
+
+\noindent
+\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRZ\cyra\cyrv\cyre\cyrd\cyru\cyryu\cyrshch\cyri\cyrishrt\ \cyrk\cyra%
+\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt\\
+\signature{\@chtitle}{\@chname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+\begin{center}\bf
+C\cyro\cyrd\cyre\cyrr\cyrzh\cyra\cyrn\cyri\cyre\ \cyrr\cyra\cyrb%
+\cyro\cyrt\cyrery
+\end{center}
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Referat title page
+% --------------------------------------------------------------------------%
+\newcommand{\RefMakeTitle}
+{
+\thispagestyle{empty}
+\shapka
+
+\vspace{3cm}
+{\centering
+\textbf{\MakeUppercase{\@title}}
+\\[0.3cm]
+{\@workname}
+
+}
+
+\vspace{1.5cm}
+\begin{flushleft}
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+\cyrr\cyru\cyrp\cyrp\cyrery\\
+\@spectype\ \@napravlenie\\
+\@department\\
+\@author
+\end{flushleft}
+\vfill
+
+\noindent
+\CYRP\cyrr\cyro\cyrv\cyre\cyrr\cyre\cyrn\cyro:\\
+\signature{\@satitle}{\@saname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Last page
+% --------------------------------------------------------------------------%
+\newcommand{\lastpage}
+{
+\newpage
+\thispagestyle{empty}
+\vspace*{11cm}
+\@worktype\ <<\@title>>\ \@typework\ \cyrm\cyrn\cyro\cyrishrt\ %
+\cyrs\cyra\cyrm\cyro\cyrs\cyrt\cyro\cyrya\cyrt\cyre\cyrl\cyrsftsn\cyrn%
+\cyro, \cyri\ \cyrn\cyra\ \cyrv\cyrs\cyre\ \cyri\cyrs\cyrt\cyro\cyrch%
+\cyrn\cyri\cyrk\cyri, \cyri\cyrm\cyre\cyryu\cyrshch\cyri\cyre\cyrs%
+\cyrya\ \cyrv\ \cyrr\cyra\cyrb\cyro\cyrt\cyre, \cyrd\cyra\cyrn\cyrery\ %
+\cyrs\cyro\cyro\cyrt\cyrv\cyre\cyrs\cyrt\cyrv\cyru\cyryu\cyrshch\cyri%
+\cyre\ \cyrs\cyrs\cyrery\cyrl\cyrk\cyri.\par
+\parindent=9cm
+\parbox{8cm}{
+\begin{flushleft}
+\hbox to 6cm{\hbox to 3.5cm{\hrulefill}/\hbox to 3.5cm{\hrulefill}/}
+\end{flushleft}
+}
+}
+
+\AddEnumerateCounter{\Asbuk}{\@Asbuk}{\CYRM}
+\AddEnumerateCounter{\asbuk}{\@asbuk}{\cyrm}
+
+% --------------------------------------------------------------------------%
+% enumerations
+% --------------------------------------------------------------------------%
+\setlist{noitemsep}
+%\setlist[1]{labelindent=\parindent} % < Usually a good idea
+\setlist[itemize]{
+%leftmargin=52pt,
+rightmargin=0pt,
+labelsep=7pt,
+labelwidth=20pt,
+itemindent=0pt,
+listparindent=0pt,
+topsep=0pt,%4pt plus 2pt minus 4pt,
+partopsep=0pt,% plus 1pt minus 1pt,
+parsep=0pt,% plus 1pt,
+itemsep=0 pt%\parsep
+}
+\setlist[enumerate]{
+%leftmargin=52pt,
+rightmargin=0pt,
+labelsep=5pt,
+labelwidth=20pt,
+itemindent=0pt,
+listparindent=0pt,
+topsep=0pt,%4pt plus 2pt minus 4pt,
+partopsep=0pt,% plus 1pt minus 1pt,
+parsep=0pt,% plus 1pt,
+itemsep=0pt%\parsep
+}
+\setlist[itemize,1]{label={\normalfont\bfseries\textemdash}}
+%\setlist[enumerate]{labelsep=*, leftmargin=1.5pc}
+\setlist[enumerate,1]{label=\arabic*., ref=\arabic*}
+\setlist[enumerate,2]{label=\emph{\asbuk*}), ref=\theenumi.\emph{\asbuk*}}
+\setlist[enumerate,3]{label=\roman*., ref=\theenumii.\roman*}
+\setlist[enumerate,4]{label=\Asbuk*., ref=\theenumiii.\Asbuk*}
+%\setlist[description]{font=\sffamily\bfseries}
+
+%%%\renewcommand{\@listI}{%
+%%%\leftmargin=52pt
+%%%\rightmargin=0pt
+%%%\labelsep=7pt
+%%%\labelwidth=20pt
+%%%\itemindent=0pt
+%%%\listparindent=0pt
+%%%\topsep=4pt plus 2pt minus 4pt
+%%%\partopsep=0pt plus 1pt minus 1pt
+%%%\parsep=0pt plus 1pt
+%%%\itemsep=\parsep}
+
+%%%\renewcommand\theenumi {\@arabic\c@enumi}
+%%%\renewcommand\theenumii {\asbuk{enumii}}
+%%%\renewcommand\theenumiii{\@roman\c@enumiii}
+%%%\renewcommand\theenumiv {\Asbuk{enumiv}}
+%%%\newcommand\atheenumi{\asbuk{enumi}}
+%%%\newcommand\atheenumii{\asbuk{enumii}}
+%%%\renewcommand\labelenumi {\theenumi.}
+%%%\renewcommand\labelenumii {\theenumii.}
+%%%\renewcommand\labelenumiii{\theenumiii.}
+%%%\renewcommand\labelenumiv {\theenumiv.}
+%%%\renewcommand\p@enumii {\theenumi}
+%%%\renewcommand\p@enumiii {\theenumi.\theenumii}
+%%%\renewcommand\p@enumiv {\p@enumiii.\theenumiii}
+%%%\renewcommand\labelitemi {\normalfont\bfseries\textemdash}
+%%%\renewcommand\labelitemii {\normalfont\bfseries\textendash}
+%%%\renewcommand\labelitemiii{\textperiodcentered}
+%%%\renewcommand\labelitemiv {\textasteriskcentered}
+%%%
+%%%\renewcommand{\@listI}{%
+%%%\leftmargin=52pt
+%%%\rightmargin=0pt
+%%%\labelsep=7pt
+%%%\labelwidth=20pt
+%%%\itemindent=0pt
+%%%\listparindent=0pt
+%%%\topsep=4pt plus 2pt minus 4pt
+%%%\partopsep=0pt plus 1pt minus 1pt
+%%%\parsep=0pt plus 1pt
+%%%\itemsep=\parsep}
+% --------------------------------------------------------------------------%
+
+
+% --------------------------------------------------------------------------%
+% References
+% --------------------------------------------------------------------------%
+\makeatletter
+\def\@biblabel#1{#1 }
+
+\renewenvironment{thebibliography}[1]
+{
+ \starsection{\cyr\CYRS\CYRP\CYRI\CYRS\CYRO\CYRK\ \CYRI\CYRS\CYRP\CYRO\CYRL%
+ \CYRSFTSN\CYRZ\CYRO\CYRV\CYRA\CYRN\CYRN\CYRERY\CYRH\ \CYRI\CYRS\CYRT%
+ \CYRO\CYRCH\CYRN\CYRI\CYRK\CYRO\CYRV}
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \setlength{\itemsep}{0pt}
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+{\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+
+\makeatother
+% --------------------------------------------------------------------------%
diff --git a/report/coursework.pdf b/report/coursework.pdf
new file mode 100644
index 0000000..e379155
--- /dev/null
+++ b/report/coursework.pdf
Binary files differ
diff --git a/report/coursework.tex b/report/coursework.tex
new file mode 100644
index 0000000..3821166
--- /dev/null
+++ b/report/coursework.tex
@@ -0,0 +1,498 @@
+\documentclass[spec, och, coursework]{SCWorks}
+\usepackage{preamble}
+
+
+\begin{document}
+\include{titlepage.tex}
+\tableofcontents
+
+
+\intro
+Для безопасного ведения корреспонденции в Интернете необходимы способы
+подтверждения авторства того или иного пользователя для каждого сообщения.
+Методы, используемые для реализации таких систем взаимодействия зачастую
+намного более надёжные, чем системы общения с помощью физических бумажных
+носителей. Такая надёжность достигается с помощью использования современных
+криптографических протоколов, взлом которых является крайне неэффективной
+задачей.
+
+Основной схемой подтверждения авторства какого-либо сообщения является
+\textit{Электронная цифровая подпись}. При подписи сообщения по такой схеме
+используется сразу несколько криптографических протоколов, обеспечивающих
+надёжность подписи.
+
+Для реализации алгоритмов цифровой подписи обычно используется два
+криптографических алгоритма:
+\begin{itemize}
+ \item
+ Хэш-функции --- односторонние функции, которые однозначно преобразуют
+ сообщение произвольной длины в сообщение фиксированной длины;
+ \item
+ Системы с открытым ключом --- системы ассиметричного шифрования,
+ которые позволяют надёжно защитить электронную подпись от подделки.
+\end{itemize}
+
+Системы, в которых используется какой-либо вид цифровой подписи способны
+распознать любые попытки компрометации сообщений любого своего пользователя.
+
+
+\section{Хэширование}
+В основе алгоритмов цифровой подписи обычно используется какая-либо
+односторонняя хэш-фунцкция в том или ином виде.
+
+Хэш-функция определена для сообщений любой длины, при этом в результате
+получается хэш некоторой фиксированной длины. То есть $h = H(M)$, где
+$H$ -- некоторая хэш-функция, $M$ -- некоторое сообщение, а $h$ -- хэш
+сообщения, полученный с помощью функции $H$. При этом хэш-функции обладают
+дополнительными свойствами, которые обеспечивают полезность таких функций
+в крипографии:
+
+\begin{itemize}
+ \item Для данного $M$ легко вычислить $h$;
+ \item Для данного $h$ сложно вычислить такое $M$, что $H(M) = h$;
+ \item Для данного $M$ сложно найти другое такое $M'$, что $H(M) = H(M')$.
+\end{itemize}
+
+На практике, для реализации односторонних хэш-функций используется идея функции
+сжатия. В результате применения такой функции получается значение длины $n$,
+меньшее длины $m$ исходного сообщения. В качестве параметров односторонняя
+функция сжатия принимает часть сообщения и хэш-значение всех предыдущих блоков,
+полученных по данному алгоритму. Таким образом хэш текущей части сообщения $M_i$
+вычисляется по формуле \[ h_i = f(M_i, h_{i - 1}) \].
+
+Это значение становится одним из параметров для вычисления хэша для следующего
+блока сообщения. Хэшем всего сообщения является хэш последнего блока.
+\cite{scheiner-applied}
+
+Наиболее известными алгоритмами хэширования являются MD5 и SHA, разработанные
+в 1991 и 1995 году соответственно. На данный момент оба алгоритма считаются
+небезопасными для определённых целей, но на их примере можно рассмотреть
+практическую реализацию и применение односторонних хэш-функций.
+
+
+\subsection{MD5}
+Алгоритм MD5 основан является улучшенной версией предшествующего алгоритма MD4.
+Они cхожи по дизайну, хотя MD5 является несколько более сложным. Эти алгоритмы
+обрабатывают данное сообщение блоким по 512 бит, которые в свою очередь
+разбиты на 16 32-битных подблоков. В результате их исполнения в обоих случаях
+получается хэш длины 128 бит, который получается конкатенацией четырёх
+32-битных блоков.
+
+Перед применением непосредственно алгоритма хэширования MD5 предварительно
+обрабатывает сообщение. Суть обработки состоит в том, что сообщение дополняется
+так, что его длина была на 64 бита меньше числа, кратного 512. Дополнение
+состоит из одного единичного бита, за которым следует необходимое количество
+нулей. После этого в конце добавляется 64-битное представление длины сообщения
+(до дополнения). Таким образом, в резултате получается сообщение, длина которого
+кратна 512 битам.
+
+Следующим шагом будет установка начальных значений четырёх \textit{цепных
+переменных}. Они получают следующие значения:
+\begin{align*}
+ A &= \texttt{01234567}_{16} \\
+ B &= \texttt{89abcdef}_{16} \\
+ C &= \texttt{fedcba98}_{16} \\
+ D &= \texttt{76542210}_{16}
+\end{align*}
+
+Эти значения копируются в новые временные переменные $a = A$, $b = B$, $c = C$,
+$d = D$.
+
+Алгоритм обрабатывает изначальное сообщения по циклам, при этом в каждом цикле
+обрабатывается свой 512-битный блок. Каждый цикл разделён на 4 раунда, в каждом
+из который используется своя нелинейная функция
+\begin{align*}
+ F(x, y, z) &= (x \land y) \lor (\neg x \land z) \\
+ G(x, y, z) &= (x \land z) \lor (\neg z \land y) \\
+ H(x, y, z) &= x \oplus y \oplus z \\
+ I(x, y, z) &= y \oplus (x \lor \neg z)
+\end{align*}
+
+Для обработки $j$-го 32-битного подблока $M_j$ вводятся ещё четыре операции для
+каждого из четырёх раундов:
+\begin{align*}
+ FF(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + F(b, c, d) + M_j + t_i) <<< s)) \\
+ GG(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + G(b, c, d) + M_j + t_i) <<< s)) \\
+ HH(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + H(b, c, d) + M_j + t_i) <<< s)) \\
+ II(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + I(b, c, d) + M_j + t_i) <<< s))
+\end{align*}
+
+Каждая итерация состоит из 64 шагов по 16 шагов на раунд. Для шагов
+$i = \overline{1,64}$ константа $t_i = \left[2^{32} \cdot |\sin(i)|\right]$.
+После выполнения всех шагов алгоритма, изменённые значения $a$, $b$, $c$, $d$
+прибавляются к $A$, $B$, $C$, $D$ и алгоритм повторяется для следующего блока
+сообщения. Результат получается после выполнения алгоритма на последнем блоке и
+конкатенации $A$, $B$, $C$ и $D$.
+
+Операции каждого раунда MD5 можно посмотреть в приложении $?$.
+\cite{scheiner-applied}
+
+
+\subsection{Secure Hash Algorithm}
+Алгоритм хэширования SHA (или SHA-1) в общих чертах схож с алгоритмом MD4,
+но в нём присутствуют дополнительные изменения, которые делают его более
+криптостойким.
+\begin{enumerate}
+ \item
+ Более длинная 160-битная длина хэша из-за использования пяти цепных
+ переменных вместо четырёх;
+ \item
+ В SHA используется 4 раунда, как и в MD5, но при этом в четвёртом
+ раунде используется такая же функция, как и во втором;
+ \item Количество шагов алгоритма увеличено с 64 до 80;
+ \item
+ Количество числовых констант уменьшено до четырёх, каждая из которых
+ является общей для одного из раундов алгоритма, вместо уникальной
+ константы для каждого шага алгоритма;
+ \item Изменён набор нелинейных функций.
+\end{enumerate}
+
+Как и в MD5 первым шагом является установка начальных значений цепных
+переменных:
+\[ A = \texttt{67452301}_{16} \]
+\[ B = \texttt{efcdab89}_{16} \]
+\[ C = \texttt{98badcfe}_{16} \]
+\[ D = \texttt{10325476}_{16} \]
+\[ E = \texttt{c3d2e1f0}_{16} \]
+
+На каждой итерации алгоритма обрабатывается очередной блок исходного сообщения.
+Значения цепных переменных копируются в новые переменные $a = A$, $b = B$,
+$c = C$, $d = D$, $e = E$.
+
+Набор нелинейных функций у SHA следующий:
+\begin{align*}
+ f_t(x, y, z) &= (x \land y) \lor (\neg x \land z), \, \text{для } t = \overline{0, 19} \\
+ f_t(x, y, z) &= x \oplus y \oplus z, \, \text{для } t = \overline{20, 39} \\
+ f_t(x, y, z) &= (x \land y) \lor (x \land z) \lor (y \land z), \, \text{для } t = \overline{40, 59} \\
+ f_t(x, y, z) &= x \oplus y \oplus z, \, \text{для } t = \overline{60, 79}
+\end{align*}
+
+Обрабатываемый блок сообщения преобразуется из 16 32-битных слов ($M_i, \,
+i = \overline{0, 15}$) в 80 32-битных слов ($W_i, \, i = \overline{0, 79}$)
+по следующему алгоритму:
+\begin{align*}
+ W_t &= M_t, \, \text{для } t = \overline{0, 15} \\
+ W_t &= (W_{t - 3} \oplus W_{t - 8} \oplus W_{t - 14} \oplus W_{t - 16}) <<< 1, \, \text{для } t = \overline{16, 79}
+\end{align*}
+
+Для четырёх раундов используются следующие числовые константы:
+\begin{align*}
+ K_t &= \left[\frac{\sqrt{2}}{4} \cdot 2^{32}\right] = \texttt{5a827999}_{16}, \, \text{для } t = \overline{0, 19} \\
+ K_t &= \left[\frac{\sqrt{3}}{4} \cdot 2^{32}\right] = \texttt{6ed9eba1}_{16}, \, \text{для } t = \overline{20, 39} \\
+ K_t &= \left[\frac{\sqrt{5}}{4} \cdot 2^{32}\right] = \texttt{8f1bbcdc}_{16}, \, \text{для } t = \overline{40, 59} \\
+ K_t &= \left[\frac{\sqrt{10}}{4} \cdot 2^{32}\right] = \texttt{ca62c1d6}_{16}, \, \text{для } t = \overline{60, 79} \\
+\end{align*}
+
+Основной цикл алгоритма:
+\begin{minted}{basic}
+ for t = 0 to 79
+ tmp = (a <<< 5) + f_t(b, c, d) + e + W_t + K_t
+ e = d
+ d = c
+ c = b <<< 30
+ b = a
+ a = tmp
+\end{minted}
+
+Далее переменные $a$, $b$, $c$, $d$ и $e$ прибавляются к $A$, $B$, $C$, $D$
+и $E$ соответственно. Результатом всего алгоритма является конкатенация
+$A$, $B$, $C$, $D$ и $E$ после выполнения его для всех блоков исходного
+сообщения.
+
+\section{Ассиметричное шифрование}
+В системах шифрования с открытым ключом (ассиметричных системах шифрования)
+каждый из пользователей обладает некоторым ключом $k$, состоящим из
+открытого ключа $k_o$, который определяет правило шифрования $E_k$,
+и закрытого ключа $k_p$, который определяет правило расшифрования $D_k$.
+Эти правила связаны соотношением
+\[ E_k(M) = C, \, D_k(C) = M \]
+где $M$ --- любой открытый текст, $C$ --- шифротекст. \cite{alferov}
+
+Для отправки конфиденциального сообщения от пользователя B пользователю A,
+следует использовать следующий алгоритм:
+\begin{enumerate}
+ \item Пользователь B запрашивает у пользователя A копию открытого ключа $k_o$;
+ \item Пользователь B вычисляет шифротекст $C = E_k(M)$ для своего сообщения $M$;
+ \item
+ Пользователь A получает шифротекст $C$ и расшифровывает его с помощью
+ своего закрытого ключа $k_p$, чтобы получить зашифрованное сообщение
+ $M = D_k(C)$.
+\end{enumerate}
+
+Системы шифрования с открытым ключом осуществляют блочное шифрование, поэтому
+текст исходного сообщения перед началом алгоритма шифрования разбивается на
+блоки необходимого размера, которые затем последовательно преобразуются.
+Ассиметричные системы обычно обеспечивают значительно меньшие скорости
+шифрования, чем симметричные системы из-за чего из зачастую используют только
+для передачи ключей пользователей, которые затем используются в симметричных
+системах шифрования.
+
+\subsection{RSA}
+Для обеспечения шифрования в алгоритме RSA используется факт того, что
+имея два достаточно больших простых числа можно легко найти их произведение,
+но имея произведение двух простых чисел нет простого способа найти его
+разложение на множители \cite{encyclopedia}. Пусть $n = p \cdot q$ --- целое
+число, представимое в виде произведения
+двух больших простых числел $p$ и $q$. Выберем два числа $e$ и $d$ из условия
+\[ e \cdot d \equiv 1 (\text{mod } \varphi(n)) \]
+где $\varphi(n) = (p - 1) \cdot (q - 1)$ --- значение функции Эйлера от числа
+$n$.
+
+Пусть $k = (n, p, q, e, d)$ --- некоторый выбранный ключ, который состоит из
+открытого ключа $k_o = (n, e)$ и закрытого ключа $k_p = (n, p, q, d)$.
+Тогда правила шифрования и расшифрования для некоторого сообщения $M$ и
+шифротекста $C$ определяются следующими формулами:
+\[ C = E_k(M) = M^e (\text{mod } n), \, D_k(C) = C^d (\text{mod } n) = M\]
+
+Нетрудно продемонстрировать, что сложность нахождения секретного ключа RSA
+определяется сложностью факторизации числа $n$. Поэтому для создания ключа
+следует использовать достаочно длинные простые числа, на которые также
+можно наложить дополнительные требования для усложнения задачи:
+\begin{enumerate}
+ \item
+ Числа $p$ и $q$ должны не слишком сильно отличаться друг от друга, но
+ и не быть слишком близкими друг к другу;
+ \item
+ Следует подобрать такие два таких числа, что наибольший общий делитель
+ чисел $p - 1$ и $q - 1$ был небольшим (желательно, равным 2);
+ \item
+ $p$ и $q$ должны быть сильно простыми числами, т. е. следующее
+ число имеет большой простой делитель и предыдущее число тоже имеет
+ такой большой простой делитель $s$, что $s - 1$ также обладает
+ достаточно большим простым делителем.
+\end{enumerate}
+
+\section{Электронная цифровая подпись}
+Цифровая подпись является некоторым числом, которое зависит от исходного
+сообщения и некоторого закрытого ключа. С помощью цифровой подписи можно
+решить три важных задачи при обмене сообщениями:
+\begin{itemize}
+ \item аутентификация источника сообщения;
+ \item установление целостности сообщения;
+ \item обеспечение невозможности отказа от факта подписи конкретного сообщения.
+\end{itemize}
+
+Надёжность схемы цифровой подписи определяется сложностью выполнения следующих
+задач:
+\begin{itemize}
+ \item
+ Подделка подписи (нахождение значения подписи под заданным
+ сообщением лицом, не являющимся владельцем секретного ключа);
+ \item
+ Создание подписанного сообщения (нахождения хотя бы одного сообщения
+ с правильным значением подписи);
+ \item Подмена сообщения (подбор двух различных сообщений с одинаковой подписью).
+\end{itemize}
+
+Для создания цифровой подписи можно использовать алгоритмы шифрования с открытым
+ключом, так как они обеспечивают невозможность подделки сообщения. Предположим,
+что имеется некоторая пара преобразований $(E_k, D_k)$, где $E_k$
+зависит от открытого ключа $k_o$, а $D_k$ --- от закрытого $k_p$. Цифровую
+подпись $S$ сообщения $M$ можно вычислить с помощью преобразования $D_k(M) = S$.
+Таким образом, полученную подпись любой другой пользователь сможет проверить
+с помощью известного ему преобразования $E_k(S) = M$ и получить исходное
+сообщение.
+
+Проблема такого подхода заключается в том, что для такой системы подписи не
+выполняется требование невозможности создания подписанного сообщения,
+так как для любого $S_1$ любой пользователь может вычислить $M_1 = E_k(S_1)$
+и получить подписанное сообщение.
+
+Для решения этой проблемы зачастую в систему подписи также включается некоторая
+хэш-функция $h$, которая перед подписью применяется к сообщению.
+Но так как по хэшу сообщения невозможно восстановить само сообщение, подпись
+должна отправляться вместе с сообщением. Создание подписи по такой схеме
+удовлетворяет всем трём требованиям для надёжности цифровой подписи.
+\cite{alferov}
+
+\subsection{Правовая сторона применения ЭЦП в России}
+В российском Федеральном Законе \textnumero 63 электронные цифровые подписи
+подразделяются на три вида:
+\begin{enumerate}
+ \item
+ Простая электронная подпись --- подпись, которая с помощью определённых
+ криптографических протоколов позволяет подтвердить факт формирования
+ подписи определённым лицом;
+ \item
+ Неквалифицированная электронная подпись --- подпись, которая получена
+ в результате криптографического преобразования информации с
+ использованием ключа электронной подписи, позволяет определить лицо,
+ подписавшее электронный документ, позволяет обнаружить факт внесения
+ изменений в документ после его подписи;
+ \item
+ Квалифицированная электронная подпись --- подпись, которая соответствует
+ всем техническим признакам неквалифицированной электронной подписи, но
+ при этом также имеет ключ проверки электронной подписи в
+ квалифицированном сертификате, а также создана при помощи средств
+ электронной подписи, получивших подтверждение соответствия требованиям,
+ установленных в \textnumero 63-ФЗ.
+\end{enumerate}
+
+Электронные документы считаются равнозначными документам на бумажном носителе,
+подписанном собственноручной подписью, если они подписаны квалифицированной
+электронной подписью и соответствуют остальным требованиям \textnumero 63-ФЗ.
+
+Таким образом, электронные цифровые подписи, применяемые в разнообразных
+веб-приложениях для защиты от компрометации канала связи обычно не имеют
+правовой силы на территории Российской Федерации.
+
+
+\section{Разработка системы с применением ЭЦП}
+В качестве системы, в которой необходимо применение электронной цифровой подписи
+мною была выбрана система мгновенного обмена сообщениями (чат). Для разработки
+данной системы я выбрал язык программирования Go, в стандартной библиотеке
+которого присутствуют все криптографические функции, необходимые для реализации
+данной системы. Для упрощения работы с чатом также были использованы две
+сторонние библиотеки:
+\begin{itemize}
+ \item
+ \textbf{fyne.io}, для создания пользовательского интерфейса клиентской
+ части системы;
+ \item Реализация драйвера базы данных \textbf{sqlite3} для языка Go.
+\end{itemize}
+
+\subsection{Используемый алгоритм цифровой подписи}
+В качестве алгоритма шифрования с открытым ключом используется RSA, в качестве
+хэш-функции $h$ --- SHA-256, а также в процессе подписи к сообщению применяется
+алгоритм Base64.
+
+Алгоритм подписи:
+\begin{enumerate}
+ \item Генерируются открытый и закрытый ключи шифрования RSA;
+ \item Сообщение $M$ преобразуется с помощью алгоритма Base64 в $B_M$;
+ \item Вычисляется хэш $H_M = h(B_M)$;
+ \item Хэш зашифровывется с помощью ключа $k_o$: $C_M = E_k(H_M)$;
+ \item
+ Полученный шифротекст $C_M$ преобразуется в подпись $S_M$ с помощью
+ алгоритма Base64.
+\end{enumerate}
+
+Для отправки сообщения $M$ на сервер к нему дополнительно приставляется
+его подпись. Данные, отправляемые на сервер состоят из трёх частей,
+конкатенируемых перед отправкой:
+\begin{itemize}
+ \item Преобразованное с помощью алгоритма Base64 сообщение $M$;
+ \item Знак точки;
+ \item Цифровая подпись $S_M$.
+\end{itemize}
+
+При получении сообщения от клиента, сервер проверяет его подпись. Алгоритм
+проверки подписи:
+\begin{enumerate}
+ \item Полученное сообщение разделяется на $B_M$ и $S_M$;
+ \item $S_M$ декодируются с помощью алгоритма Base64 в шифротекст $C_M$;
+ \item Вычисляется хэш $H_M = h(B_M)$;
+ \item Шифротекст $C_M$ расшифровывается с помощью ключа $h_p$ в сообщение $H_S$;
+ \item Подпись считается валидной в случае, если $H_S = H_M$.
+\end{enumerate}
+
+\subsection{Реализация сервера приложения}
+Сервер приложения принимает сетевые запросы по прикладному протоколу $HTTP$.
+В сервере реализованы следующие точки входа:
+\begin{itemize}
+ \item
+ \texttt{/api/register}: с помощью данной точки пользователь может внести
+ свой ключ проверки подписи в систему;
+ \item
+ \texttt{/api/sendMessage}: все сообщения, которые сервер должен сохранить
+ в своей базе данных и передать другим пользователям системы отправляются
+ на эту точку входа;
+ \item
+ \texttt{/api/pollMessages}: с помощью данной точки входа пользователь
+ способен запросить все сообщения, которые пришли на сервер после
+ некоторого момента времени (который пользователь указывает в запросе);
+ \item
+ \texttt{/api/getUserKey}: для проверки подписи пришедшего сообщения
+ на стороне клиента, пользователь может запросить ключ другого
+ пользователя, сохранённый на сервере;
+ \item
+ \texttt{/api/tryAuth}: данная точка входа не выполняет никаких действий,
+ и реализована для удобства проверки возможности аутентификации
+ пользователя на сервере (при удачной аутентификации данная точка
+ вернёт ответ со статусом HTTP 200, иначе, при провале аутентификации по
+ каким-либо причинам, статус будет не равен 200 и клиент может вывести
+ предупреждение пользователю).
+\end{itemize}
+
+\subsection{Работа с клиентом приложения}
+Для начала обмена сообщения с другими ползователями, подключенными к системе
+необходимо в неё войти, либо зарегистрироваться. Вход возможен только при
+наличии сгенерированного ключа для подписи, поэтому при первом запуске
+следует нажать на кнопку <<Зарегистрироваться>> (рис. \ref{fig:start}).
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/start.png}
+ \caption{Экран при запуске приложения}
+ \label{fig:start}
+\end{figure}
+
+При регистрации (и входе) необходимо ввести URL сервера, к которому должен
+присоединиться клиент и своё имя (рис. \ref{fig:register}). После этого
+необходимо нажать на кнопку <<Сгенерировать ключи подписи>>.
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/register.png}
+ \caption{Окно регистрации}
+ \label{fig:register}
+\end{figure}
+
+Далее можно сохранить ключ в любом удобном месте с любым именем (рис. \ref{fig:key}).
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/key.png}
+ \caption{Выбор места для сохранения ключа}
+ \label{fig:key}
+\end{figure}
+
+После выбора места сохранения ключа необходимо нажать на кнопку
+<<Зарегистрироваться>>, после чего клиент проверит возможность совершить
+это действие с указанными данными. Если клиент не может соединиться с сервером,
+либо на сервере уже зарегистрирован пользователь с таким именем, то клиент
+выведет окно с ошибкой (рис. \ref{fig:error}).
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/error.png}
+ \caption{Ошибка при регистрации}
+ \label{fig:error}
+\end{figure}
+
+Если клиенту удалось соединиться с сервером и успешно пройти все проверки, то
+для пользователя откроется окно чата, в котором можно написать своё сообщение
+в поле снизу. Для отправки сообщения необходимо нажать на кнопку <<Отправить>>
+(рис. \ref{fig:input}).
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/input.png}
+ \caption{Ввод сообщения}
+ \label{fig:input}
+\end{figure}
+
+Все сообщения, которые клиент смог получить от сервера отображаются в этом
+окне чата (рис. \ref{fig:chat}).
+\begin{figure}[H]
+ \centering
+ \includegraphics[width=0.7\textwidth]{screenshots/chat.png}
+ \caption{Окно чата с сообщением}
+ \label{fig:chat}
+\end{figure}
+
+
+\conclusion
+Для реализации систем электронных цифровых подписей обычно используются
+наиболее проверенные криптографически стойкие алгоритмы, которые способны
+обеспечить защищённость от компрометации канала связи между пользователями.
+
+Благодаря таким алгоритмам имеется возможность установления безопасного
+канала связи даже через Интернет, между людьми, которым сложно физически
+обменяться ключами для проверки подписей.
+
+Но с увеличением мощности вычислительных компьютерных систем и разработкой
+квантовых компьютеров некоторые криптографические протоколы находятся
+под угрозой потери надёжности и безопасности. Поэтому можно ожидать появления
+новых алгоритмов шифрования, хэширования и электронной цифровой подписи,
+учитывающих новые разработки в сфере квантовых вычислений.
+
+
+\printbibliography
+
+\end{document}
diff --git a/report/images/screenshots/chat.png b/report/images/screenshots/chat.png
new file mode 100644
index 0000000..64c1c44
--- /dev/null
+++ b/report/images/screenshots/chat.png
Binary files differ
diff --git a/report/images/screenshots/error.png b/report/images/screenshots/error.png
new file mode 100644
index 0000000..15cc0ef
--- /dev/null
+++ b/report/images/screenshots/error.png
Binary files differ
diff --git a/report/images/screenshots/input.png b/report/images/screenshots/input.png
new file mode 100644
index 0000000..894c651
--- /dev/null
+++ b/report/images/screenshots/input.png
Binary files differ
diff --git a/report/images/screenshots/key.png b/report/images/screenshots/key.png
new file mode 100644
index 0000000..edef017
--- /dev/null
+++ b/report/images/screenshots/key.png
Binary files differ
diff --git a/report/images/screenshots/register.png b/report/images/screenshots/register.png
new file mode 100644
index 0000000..b13bed6
--- /dev/null
+++ b/report/images/screenshots/register.png
Binary files differ
diff --git a/report/images/screenshots/start.png b/report/images/screenshots/start.png
new file mode 100644
index 0000000..4c2ea10
--- /dev/null
+++ b/report/images/screenshots/start.png
Binary files differ
diff --git a/report/merge.sh b/report/merge.sh
new file mode 100755
index 0000000..bc4df1c
--- /dev/null
+++ b/report/merge.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+pdftk coursework.pdf cat 2-end output tmp.pdf
+pdftk title.pdf tmp.pdf cat output course.pdf
+rm tmp.pdf
diff --git a/report/preamble.sty b/report/preamble.sty
new file mode 100644
index 0000000..fdd4cb1
--- /dev/null
+++ b/report/preamble.sty
@@ -0,0 +1,50 @@
+\usepackage{subfigure}
+\usepackage{tikz,pgfplots}
+\pgfplotsset{compat=1.5}
+\usepackage{float}
+\setcounter{secnumdepth}{4}
+\titleformat{\paragraph}[block]
+{\hspace{1.25cm}\normalfont}
+{\theparagraph}{1ex}{}
+\titlespacing{\paragraph}
+{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}
+
+% --------------------------------------------------------------------------%
+
+
+\usepackage[T2A]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{graphicx}
+\graphicspath{ {./images/} }
+\usepackage{tempora}
+\usepackage{minted}
+
+% \usepackage[sort,compress]{cite}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{amsthm}
+\usepackage{fancyvrb}
+\usepackage{listings}
+\usepackage{listingsutf8}
+\usepackage{longtable}
+\usepackage{array}
+\usepackage[english,russian]{babel}
+% \usepackage[colorlinks=false]{hyperref}
+\usepackage{url}
+
+\usepackage[parentracker=true,
+ backend=biber,
+ hyperref=false,
+ language=russian,
+ autolang=other,
+ citestyle=gost-numeric,
+ defernumbers=true,
+ bibstyle=gost-numeric,
+]{biblatex}
+\addbibresource{sources.bib}
+\usepackage{csquotes}
+
+
+\newcommand{\eqdef}{\stackrel {\rm def}{=}}
+\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}}
+\newtheorem{lem}{Лемма} \ No newline at end of file
diff --git a/report/sources.bib b/report/sources.bib
new file mode 100644
index 0000000..839fa27
--- /dev/null
+++ b/report/sources.bib
@@ -0,0 +1,29 @@
+@book{scheiner-applied,
+ author = {Bruce Schneier},
+ title = {Applied Cryptography, Second Edition},
+ publisher = {John Wiley \& Sons},
+ year = {1996},
+ isbn = {0-471-11709-9},
+ language = {english},
+ langid = {english},
+}
+
+@book{encyclopedia,
+ author = {Henk C.A.v. Tilborg},
+ title = {Encyclopedia of Cryptography and Security},
+ publisher = {Springer-Verlag New York},
+ year = {2005},
+ isbn = {978-0-387-23473-1},
+ language = {english},
+ langid = {english},
+}
+
+@book{alferov,
+ author = {А. П. Алферов},
+ title = {Основы криптографии, 2-е издание},
+ publisher = {Гелиос АРВ},
+ year = {2002},
+ isbn = {5-85438-025-0},
+ language = {russian},
+ langid = {russian},
+} \ No newline at end of file
diff --git a/report/title.pdf b/report/title.pdf
new file mode 100644
index 0000000..801f0df
--- /dev/null
+++ b/report/title.pdf
Binary files differ
diff --git a/report/titlepage.tex b/report/titlepage.tex
new file mode 100644
index 0000000..69d896e
--- /dev/null
+++ b/report/titlepage.tex
@@ -0,0 +1,53 @@
+\selectlanguage{russian}
+\chair{теоретических основ компьютерной безопасности и криптографии}
+\title{Электронная цифровая подпись}
+\course{2}
+\group{231}
+\department{факультета КНиИТ}
+\napravlenie{10.05.01 "--- Компьютерная безопасность}
+
+% Для студентки. Для работы студента следующая команда не нужна.
+% \studenttitle{Студентки}
+
+% Фамилия, имя, отчество в родительном падеже
+\author{Гущина Андрея Юрьевича}
+
+% Заведующий кафедрой
+\chtitle{д.ф.-м.н.} % степень, звание
+\chname{М. Б. Абросимов}
+
+%Научный руководитель (для реферата преподаватель проверяющий работу)
+\satitle{д.ф.-м.н.} %должность, степень, звание
+\saname{М. Б. Абросимов}
+
+% Руководитель практики от организации (только для практики,
+% для остальных типов работ не используется)
+% \patitle{к.ф.-м.н.}
+% \paname{С.~В.~Миронов}
+
+% Семестр (только для практики, для остальных
+% типов работ не используется)
+%\term{8}
+
+% Наименование практики (только для практики, для остальных
+% типов работ не используется)
+%\practtype{преддипломная}
+
+% Продолжительность практики (количество недель) (только для практики,
+% для остальных типов работ не используется)
+%\duration{4}
+
+% Даты начала и окончания практики (только для практики, для остальных
+% типов работ не используется)
+%\practStart{30.04.2019}
+%\practFinish{27.05.2019}
+
+% Год выполнения отчета
+\date{2021}
+
+\maketitle
+
+% Включение нумерации рисунков, формул и таблиц по разделам
+% (по умолчанию - нумерация сквозная)
+% (допускается оба вида нумерации)
+% \secNumbering \ No newline at end of file