]> Cypherpunks.ru repositories - pygost.git/blob - www.texi
Fix typo
[pygost.git] / www.texi
1 \input texinfo
2 @documentencoding UTF-8
3 @settitle PyGOST
4
5 @copying
6 Copyright @copyright{} 2015-2017 @email{stargrave@@stargrave.org, Sergey Matveev}
7 @end copying
8
9 @node Top
10 @top PyGOST
11
12 PyGOST is pure Python 2.7/3.x GOST cryptographic functions library.
13 GOST is GOvernment STandard of Russian Federation (and Soviet Union).
14 It is
15 @url{https://www.gnu.org/philosophy/pragmatic.html, copylefted}
16 @url{https://www.gnu.org/philosophy/free-sw.html, free software}:
17 licenced under @url{https://www.gnu.org/licenses/gpl-3.0.html, GPLv3+}.
18 You can read about GOST algorithms @url{http://www.cypherpunks.ru/gost/, more}.
19
20 Currently supported algorithms are:
21
22 @itemize
23 @item GOST 28147-89 (@url{https://tools.ietf.org/html/rfc5830.html, RFC 5830})
24     block cipher with ECB, CNT (CTR), CFB, MAC,
25     CBC (@url{https://tools.ietf.org/html/rfc4357.html, RFC 4357})
26     modes of operation
27 @item various 28147-89-related S-boxes included
28 @item GOST R 34.11-94 hash function
29     (@url{https://tools.ietf.org/html/rfc5831.html, RFC 5831})
30 @item GOST R 34.11-94 based @url{https://en.wikipedia.org/wiki/PBKDF2, PBKDF2} function
31 @item GOST R 34.11-2012 Стрибог (Streebog) hash function
32     (@url{https://tools.ietf.org/html/rfc6986.html, RFC 6986})
33 @item GOST R 34.10-2001
34     (@url{https://tools.ietf.org/html/rfc5832.html, RFC 5832})
35     public key signature function
36 @item GOST R 34.10-2012
37     (@url{https://tools.ietf.org/html/rfc7091.html, RFC 7091})
38     public key signature function
39 @item various 34.10 curve parameters included
40 @item VKO GOST R 34.10-2001 key agreement function
41     (@url{https://tools.ietf.org/html/rfc4357.html, RFC 4357})
42 @item VKO GOST R 34.10-2012 key agreement function
43     (@url{https://tools.ietf.org/html/rfc7836.html, RFC 7836})
44 @item 28147-89 and CryptoPro key wrapping
45     (@url{https://tools.ietf.org/html/rfc4357.html, RFC 4357})
46 @item 28147-89 CryptoPro key meshing for CFB mode
47     (@url{https://tools.ietf.org/html/rfc4357.html, RFC 4357})
48 @item @url{https://tools.ietf.org/html/rfc4491.html, RFC 4491}
49     (using GOST algorithms with X.509) compatibility helpers
50 @item GOST R 34.12-2015 128-bit block cipher Кузнечик (Kuznechik)
51     (@url{https://tools.ietf.org/html/rfc7801.html, RFC 7801})
52 @item GOST R 34.12-2015 64-bit block cipher Магма (Magma)
53 @item GOST R 34.13-2015 padding methods and block cipher modes of operation
54       (ECB, CTR, OFB, CBC, CFB, MAC)
55 @item PEP247-compatible hash/MAC functions
56 @end itemize
57
58 Example 34.10-2012 keypair generation, signing and verifying:
59
60 @verbatim
61 >>> from pygost.gost3410 import CURVE_PARAMS
62 >>> from pygost.gost3410 import GOST3410Curve
63 >>> curve = GOST3410Curve(*CURVE_PARAMS["GostR3410_2012_TC26_ParamSetA"])
64 >>> from os import urandom
65 >>> prv_raw = urandom(32)
66 >>> from pygost.gost3410 import prv_unmarshal
67 >>> prv = prv_unmarshal(prv_raw)
68 >>> from pygost.gost3410 import public_key
69 >>> pub = public_key(curve, prv)
70 >>> from pygost.gost3410 import pub_marshal
71 >>> from pygost.utils import hexenc
72 >>> print "Public key is:", hexenc(pub_marshal(pub))
73 >>> from pygost import gost34112012256
74 >>> data_for_signing = b"some data"
75 >>> dgst = gost34112012256.new(data_for_signing).digest()
76 >>> from pygost.gost3410 import sign
77 >>> signature = sign(curve, prv, dgst, mode=2012)
78 >>> from pygost.gost3410 import verify
79 >>> verify(curve, pub, dgst, signature, mode=2012)
80 True
81 @end verbatim
82
83 Please send questions, bug reports and patches to
84 @url{https://lists.cypherpunks.ru/mailman/listinfo/gost, gost}
85 mailing list. Announcements also go to this mailing list.
86
87 @insertcopying
88
89 @node News
90 @unnumbered News
91
92 @table @strong
93 @item 3.3
94     @itemize
95     @item @code{GOST3412Kuz} renamed to @code{GOST3412Kuznechik}
96     @item @code{GOST3412Magma} implements GOST R 34.12-2015 Magma 64-bit
97         block cipher
98     @end itemize
99
100 @item 3.2
101 34.13-2015 block cipher modes of operation implementations.
102
103 @item 3.1
104 Fixed mypy stubs related to PEP247-successors.
105
106 @item 3.0
107     @itemize
108     @item @code{gost3411_94} renamed to @code{gost341194}
109     @item @code{gost3411_2012} renamed and split to
110         @code{gost34112012256}, @code{gost34112012512}
111     @item @code{GOST34112012} split to
112         @code{GOST34112012256}, @code{GOST34112012512}
113     @item @code{gost3410.kek} moved to separate
114         @code{gost3410_vko.kek_34102001}
115     @item VKO GOST R 34.10-2012 appeared in @code{gost3410_vko},
116         with test vectors
117     @item 34.11-94 digest is reversed, to be compatible with HMAC and
118         PBKDF2 test vectors describe in TC26 documents
119     @item 34.11-94 PBKDF2 test vectors added
120     @item @code{gost3410.prv_unmarshal},
121         @code{gost3410.pub_marshal},
122         @code{gost3410.pub_unmarshal}
123         helpers added, removing the need of @code{x509} module at all
124     @item @code{gost3410.verify} requires @code{(pubX, pubY)} tuple,
125         instead of two separate @code{pubX}, @code{pubY} arguments
126     @item 34.11-94 based PBKDF2 function added
127     @end itemize
128
129 @item 2.4
130 Fixed 34.13 mypy stub.
131
132 @item 2.3
133 Typo and pylint fixes.
134
135 @item 2.2
136 GOST R 34.13-2015 padding methods
137
138 @item 2.1
139 Documentation and supplementary files refactoring.
140
141 @item 2.0
142 PEP-0247 compatible hashers and MAC.
143
144 @item 1.0
145     @itemize
146     @item Ability to specify curve in pygost.x509 module
147     @item Ability to use 34.10-2012 in pygost.x509 functions
148     @end itemize
149
150     Renamed classes and modules:
151
152     @itemize
153     @item pygost.gost3410.SIZE_34100 -> pygost.gost3410.SIZE_3410_2001
154     @item pygost.gost3410.SIZE_34112 -> pygost.gost3410.SIZE_3410_2012
155     @item pygost.gost3411_12.GOST341112 -> pygost.gost3411_2012.GOST34112012
156     @end itemize
157
158 @item 0.16
159 34.10-2012 TC26 curve parameters.
160
161 @item 0.15
162 PEP-0484 static typing hints.
163
164 @item 0.14
165 34.10-2012 workability fix.
166
167 @item 0.13
168 Python3 compatibility.
169
170 @item 0.11
171 GOST R 34.12-2015 Кузнечик (Kuznechik) implementation.
172
173 @item 0.10
174 CryptoPro and GOST key wrapping, CryptoPro key meshing.
175 @end table
176
177 @node Download
178 @unnumbered Download
179
180 No additional dependencies except Python 2.7/3.x interpreter are required.
181
182 Preferable way is to download tarball with the signature:
183
184 @verbatim
185 % wget http://www.cypherpunks.ru/pygost/pygost-2.3.tar.xz
186 % wget http://www.cypherpunks.ru/pygost/pygost-2.3.tar.xz.sig
187 % gpg --verify pygost-2.3.tar.xz.sig pygost-2.3.tar.xz
188 % xz -d < pygost-2.3.tar.xz | tar xf -
189 % cd pygost-2.3
190 % python setup.py install
191 @end verbatim
192
193 @multitable {XXXXX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
194 @headitem Version @tab Size @tab Tarball @tab SHA256 checksum @tab Streebog-256 checksum
195
196 @item 3.3 @tab 41 KiB
197 @tab @url{pygost-3.3.tar.xz, link} @url{pygost-3.3.tar.xz.sig, sign}
198 @tab @code{D118F539 537CCD5D 9CCE850E DD8EFD8E ACDA9D6E 0C113A0F C575574A F4BD452A}
199 @tab @code{8400a3714b70dddfef03f6fe96325e73ac25db814d052a44dbd8f2ce5ddb05bb}
200
201 @item 3.2 @tab 41 KiB
202 @tab @url{pygost-3.2.tar.xz, link} @url{pygost-3.2.tar.xz.sig, sign}
203 @tab @code{6779D1B1 A4E2B1C3 49CA39F8 425FC962 AF2ED133 BB495343 0F83764B E2624087}
204 @tab @code{0a39880ad00ca11d112fef096b81a42a85ce4e5b25c48d1f643858b1e0c520d6}
205
206 @item 3.1 @tab 39 KiB
207 @tab @url{pygost-3.1.tar.xz, link} @url{pygost-3.1.tar.xz.sig, sign}
208 @tab @code{ACCCF1A9 F4B345FF 01595248 5B793DAC FCF71D1F 32A6ABCF 32042DDB 20897BC5}
209 @tab @code{823961b6c2a1abe83f6d828397002e68d711a08ce115f21ddff81a294882cd46}
210
211 @item 3.0 @tab 39 KiB
212 @tab @url{pygost-3.0.tar.xz, link} @url{pygost-3.0.tar.xz.sig, sign}
213 @tab @code{0AB10703 6960962D 30BD1646 ACC8D44B E9CBD8A8 4F25DF25 91F26383 DE28875F}
214 @tab @code{ef4729df62b4f615a154a9c35ccffaf6bb614a23067f4dd49d2993ec93bb6665}
215
216 @item 2.4 @tab 37 KiB
217 @tab @url{pygost-2.4.tar.xz, link} @url{pygost-2.4.tar.xz.sig, sign}
218 @tab @code{94D14E99 3CF63973 6C8E78D0 5EBD0838 09A47624 C05A9878 11136301 C0A07264}
219 @tab @code{b107b5ba043a2e4c30d9348e222b92218b8dff9d672964ffd04259c5261bc5a7}
220
221 @item 2.3 @tab 37 KiB
222 @tab @url{pygost-2.3.tar.xz, link} @url{pygost-2.3.tar.xz.sig, sign}
223 @tab @code{FF2C7E78 F3677B45 EB472DC6 1837C72C 0BD72387 AB0A9DC7 AD88AD11 59589732}
224 @tab @code{42cfd0cdf357997a909a9114ca14391b4c5e8b62e298675f899b80a8a26d690f}
225
226 @end multitable
227
228 But also you can use PIP (@strong{no} authentication is performed!):
229
230 @verbatim
231 % pip install pygost==2.3
232 @end verbatim
233
234 You @strong{have to} verify downloaded tarballs integrity and
235 authenticity to be sure that you retrieved trusted and untampered
236 software. @url{https://www.gnupg.org/, The GNU Privacy Guard} is used
237 for that purpose.
238
239 For the very first time it it necessary to get signing public key and
240 import it. It is provided below, but you should check alternative
241 resources.
242
243 @verbatim
244 pub   rsa2048/0xE6FD1269CD0C009E 2016-09-13
245       F55A 7619 3A0C 323A A031  0E6B E6FD 1269 CD0C 009E
246 uid   PyGOST releases <pygost at cypherpunks dot ru>
247 @end verbatim
248
249 @itemize
250
251 @item @url{https://lists.cypherpunks.ru/mailman/listinfo/gost, gost} maillist
252
253 @item
254 @verbatim
255 % gpg --keyserver hkp://keys.gnupg.net/ --recv-keys 0xE6FD1269CD0C009E
256 % gpg --auto-key-locate dane --locate-keys pygost at cypherpunks dot ru
257 % gpg --auto-key-locate wkd --locate-keys pygost at cypherpunks dot ru
258 % gpg --auto-key-locate pka --locate-keys pygost at cypherpunks dot ru
259 @end verbatim
260
261 @item
262 @verbatiminclude PUBKEY.asc
263
264 @end itemize
265
266 You can obtain development source code by cloning
267 @url{http://git-scm.com/, Git}
268 @url{https://git.cypherpunks.ru/cgit.cgi/pygost.git/}.
269
270 @bye