blob: 130e249bf8961d6f07f1d8e9347fa3084a3579a5 [file] [log] [blame]
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +02001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(binascii_a2b_uu__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -08006"a2b_uu($module, data, /)\n"
7"--\n"
8"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +02009"Decode a line of uuencoded data.");
10
11#define BINASCII_A2B_UU_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030012 {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020013
14static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030015binascii_a2b_uu_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020016
17static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030018binascii_a2b_uu(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020019{
20 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050021 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020022
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030023 if (!PyArg_Parse(arg, "O&:a2b_uu", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020024 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030025 }
Serhiy Storchaka12785612014-01-25 11:49:49 +020026 return_value = binascii_a2b_uu_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020027
28exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050029 /* Cleanup for data */
30 if (data.obj)
31 PyBuffer_Release(&data);
32
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020033 return return_value;
34}
35
36PyDoc_STRVAR(binascii_b2a_uu__doc__,
Xiang Zhang13f1f422017-05-03 11:16:21 +080037"b2a_uu($module, data, /, *, backtick=False)\n"
Larry Hastings2623c8c2014-02-08 22:15:29 -080038"--\n"
39"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020040"Uuencode line of data.");
41
42#define BINASCII_B2A_UU_METHODDEF \
Xiang Zhang13f1f422017-05-03 11:16:21 +080043 {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_FASTCALL, binascii_b2a_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020044
45static PyObject *
Xiang Zhang13f1f422017-05-03 11:16:21 +080046binascii_b2a_uu_impl(PyObject *module, Py_buffer *data, int backtick);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020047
48static PyObject *
Xiang Zhang13f1f422017-05-03 11:16:21 +080049binascii_b2a_uu(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020050{
51 PyObject *return_value = NULL;
Xiang Zhang13f1f422017-05-03 11:16:21 +080052 static const char * const _keywords[] = {"", "backtick", NULL};
53 static _PyArg_Parser _parser = {"y*|$i:b2a_uu", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020054 Py_buffer data = {NULL, NULL};
Xiang Zhang13f1f422017-05-03 11:16:21 +080055 int backtick = 0;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020056
Xiang Zhang13f1f422017-05-03 11:16:21 +080057 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
58 &data, &backtick)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020059 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030060 }
Xiang Zhang13f1f422017-05-03 11:16:21 +080061 return_value = binascii_b2a_uu_impl(module, &data, backtick);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020062
63exit:
64 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030065 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020066 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030067 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020068
69 return return_value;
70}
71
72PyDoc_STRVAR(binascii_a2b_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080073"a2b_base64($module, data, /)\n"
74"--\n"
75"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020076"Decode a line of base64 data.");
77
78#define BINASCII_A2B_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030079 {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020080
81static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030082binascii_a2b_base64_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020083
84static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030085binascii_a2b_base64(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020086{
87 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050088 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020089
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030090 if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020091 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030092 }
Serhiy Storchaka12785612014-01-25 11:49:49 +020093 return_value = binascii_a2b_base64_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020094
95exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050096 /* Cleanup for data */
97 if (data.obj)
98 PyBuffer_Release(&data);
99
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200100 return return_value;
101}
102
103PyDoc_STRVAR(binascii_b2a_base64__doc__,
Xiang Zhang1374dbb2017-05-01 13:12:07 +0800104"b2a_base64($module, data, /, *, newline=True)\n"
Larry Hastings2623c8c2014-02-08 22:15:29 -0800105"--\n"
106"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200107"Base64-code line of data.");
108
109#define BINASCII_B2A_BASE64_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700110 {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_FASTCALL, binascii_b2a_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200111
112static PyObject *
Serhiy Storchaka2954f832016-07-07 18:20:03 +0300113binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200114
115static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700116binascii_b2a_base64(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200117{
118 PyObject *return_value = NULL;
Xiang Zhang1374dbb2017-05-01 13:12:07 +0800119 static const char * const _keywords[] = {"", "newline", NULL};
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300120 static _PyArg_Parser _parser = {"y*|$i:b2a_base64", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200121 Py_buffer data = {NULL, NULL};
Victor Stinnere84c9762015-10-11 11:01:02 +0200122 int newline = 1;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200123
Victor Stinner3e1fad62017-01-17 01:29:01 +0100124 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300125 &data, &newline)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200126 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300127 }
Victor Stinnere84c9762015-10-11 11:01:02 +0200128 return_value = binascii_b2a_base64_impl(module, &data, newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200129
130exit:
131 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300132 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200133 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300134 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200135
136 return return_value;
137}
138
139PyDoc_STRVAR(binascii_a2b_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800140"a2b_hqx($module, data, /)\n"
141"--\n"
142"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200143"Decode .hqx coding.");
144
145#define BINASCII_A2B_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300146 {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200147
148static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300149binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200150
151static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300152binascii_a2b_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200153{
154 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500155 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200156
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300157 if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200158 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300159 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200160 return_value = binascii_a2b_hqx_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200161
162exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500163 /* Cleanup for data */
164 if (data.obj)
165 PyBuffer_Release(&data);
166
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200167 return return_value;
168}
169
170PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800171"rlecode_hqx($module, data, /)\n"
172"--\n"
173"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200174"Binhex RLE-code binary data.");
175
176#define BINASCII_RLECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300177 {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200178
179static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300180binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200181
182static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300183binascii_rlecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200184{
185 PyObject *return_value = NULL;
186 Py_buffer data = {NULL, NULL};
187
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300188 if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200189 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300190 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200191 return_value = binascii_rlecode_hqx_impl(module, &data);
192
193exit:
194 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300195 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200196 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300197 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200198
199 return return_value;
200}
201
202PyDoc_STRVAR(binascii_b2a_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800203"b2a_hqx($module, data, /)\n"
204"--\n"
205"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200206"Encode .hqx data.");
207
208#define BINASCII_B2A_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300209 {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200210
211static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300212binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200213
214static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300215binascii_b2a_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200216{
217 PyObject *return_value = NULL;
218 Py_buffer data = {NULL, NULL};
219
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300220 if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200221 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300222 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200223 return_value = binascii_b2a_hqx_impl(module, &data);
224
225exit:
226 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300227 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200228 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300229 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200230
231 return return_value;
232}
233
234PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800235"rledecode_hqx($module, data, /)\n"
236"--\n"
237"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200238"Decode hexbin RLE-coded string.");
239
240#define BINASCII_RLEDECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300241 {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200242
243static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300244binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200245
246static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300247binascii_rledecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200248{
249 PyObject *return_value = NULL;
250 Py_buffer data = {NULL, NULL};
251
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300252 if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200253 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300254 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200255 return_value = binascii_rledecode_hqx_impl(module, &data);
256
257exit:
258 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300259 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200260 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300261 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200262
263 return return_value;
264}
265
266PyDoc_STRVAR(binascii_crc_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800267"crc_hqx($module, data, crc, /)\n"
268"--\n"
269"\n"
Martin Panter3310e142016-12-24 07:36:44 +0000270"Compute CRC-CCITT incrementally.");
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200271
272#define BINASCII_CRC_HQX_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100273 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_FASTCALL, binascii_crc_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200274
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300275static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300276binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200277
278static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100279binascii_crc_hqx(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200280{
281 PyObject *return_value = NULL;
282 Py_buffer data = {NULL, NULL};
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300283 unsigned int crc;
284 unsigned int _return_value;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200285
Victor Stinner259f0e42017-01-17 01:35:17 +0100286 if (!_PyArg_ParseStack(args, nargs, "y*I:crc_hqx",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300287 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200288 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300289 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100290
291 if (!_PyArg_NoStackKeywords("crc_hqx", kwnames)) {
292 goto exit;
293 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200294 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300295 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200296 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300297 }
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300298 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200299
300exit:
301 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300302 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200303 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300304 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200305
306 return return_value;
307}
308
309PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800310"crc32($module, data, crc=0, /)\n"
311"--\n"
312"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200313"Compute CRC-32 incrementally.");
314
315#define BINASCII_CRC32_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100316 {"crc32", (PyCFunction)binascii_crc32, METH_FASTCALL, binascii_crc32__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200317
318static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300319binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200320
321static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100322binascii_crc32(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200323{
324 PyObject *return_value = NULL;
325 Py_buffer data = {NULL, NULL};
326 unsigned int crc = 0;
327 unsigned int _return_value;
328
Victor Stinner259f0e42017-01-17 01:35:17 +0100329 if (!_PyArg_ParseStack(args, nargs, "y*|I:crc32",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300330 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200331 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300332 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100333
334 if (!_PyArg_NoStackKeywords("crc32", kwnames)) {
335 goto exit;
336 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200337 _return_value = binascii_crc32_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300338 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200339 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300340 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200341 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
342
343exit:
344 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300345 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200346 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300347 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200348
349 return return_value;
350}
351
352PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800353"b2a_hex($module, data, /)\n"
354"--\n"
355"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200356"Hexadecimal representation of binary data.\n"
357"\n"
358"The return value is a bytes object. This function is also\n"
359"available as \"hexlify()\".");
360
361#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300362 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200363
364static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300365binascii_b2a_hex_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200366
367static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300368binascii_b2a_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200369{
370 PyObject *return_value = NULL;
371 Py_buffer data = {NULL, NULL};
372
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300373 if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200374 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300375 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200376 return_value = binascii_b2a_hex_impl(module, &data);
377
378exit:
379 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300380 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200381 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300382 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200383
384 return return_value;
385}
386
Zachary Wareb176d402015-01-20 13:59:46 -0600387PyDoc_STRVAR(binascii_hexlify__doc__,
388"hexlify($module, data, /)\n"
389"--\n"
390"\n"
391"Hexadecimal representation of binary data.\n"
392"\n"
393"The return value is a bytes object.");
394
395#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300396 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600397
398static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300399binascii_hexlify_impl(PyObject *module, Py_buffer *data);
Zachary Wareb176d402015-01-20 13:59:46 -0600400
401static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300402binascii_hexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600403{
404 PyObject *return_value = NULL;
405 Py_buffer data = {NULL, NULL};
406
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300407 if (!PyArg_Parse(arg, "y*:hexlify", &data)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600408 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300409 }
Zachary Wareb176d402015-01-20 13:59:46 -0600410 return_value = binascii_hexlify_impl(module, &data);
411
412exit:
413 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300414 if (data.obj) {
Zachary Wareb176d402015-01-20 13:59:46 -0600415 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300416 }
Zachary Wareb176d402015-01-20 13:59:46 -0600417
418 return return_value;
419}
420
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200421PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800422"a2b_hex($module, hexstr, /)\n"
423"--\n"
424"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200425"Binary data of hexadecimal representation.\n"
426"\n"
427"hexstr must contain an even number of hex digits (upper or lower case).\n"
428"This function is also available as \"unhexlify()\".");
429
430#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300431 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200432
433static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300434binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200435
436static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300437binascii_a2b_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200438{
439 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500440 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200441
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300442 if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200443 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300444 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200445 return_value = binascii_a2b_hex_impl(module, &hexstr);
446
447exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500448 /* Cleanup for hexstr */
449 if (hexstr.obj)
450 PyBuffer_Release(&hexstr);
451
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200452 return return_value;
453}
454
Zachary Wareb176d402015-01-20 13:59:46 -0600455PyDoc_STRVAR(binascii_unhexlify__doc__,
456"unhexlify($module, hexstr, /)\n"
457"--\n"
458"\n"
459"Binary data of hexadecimal representation.\n"
460"\n"
461"hexstr must contain an even number of hex digits (upper or lower case).");
462
463#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300464 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600465
466static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300467binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr);
Zachary Wareb176d402015-01-20 13:59:46 -0600468
469static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300470binascii_unhexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600471{
472 PyObject *return_value = NULL;
473 Py_buffer hexstr = {NULL, NULL};
474
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300475 if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600476 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300477 }
Zachary Wareb176d402015-01-20 13:59:46 -0600478 return_value = binascii_unhexlify_impl(module, &hexstr);
479
480exit:
481 /* Cleanup for hexstr */
482 if (hexstr.obj)
483 PyBuffer_Release(&hexstr);
484
485 return return_value;
486}
487
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200488PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800489"a2b_qp($module, /, data, header=False)\n"
490"--\n"
491"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200492"Decode a string of qp-encoded data.");
493
494#define BINASCII_A2B_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700495 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_FASTCALL, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200496
497static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300498binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200499
500static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700501binascii_a2b_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200502{
503 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300504 static const char * const _keywords[] = {"data", "header", NULL};
505 static _PyArg_Parser _parser = {"O&|i:a2b_qp", _keywords, 0};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500506 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200507 int header = 0;
508
Victor Stinner3e1fad62017-01-17 01:29:01 +0100509 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300510 ascii_buffer_converter, &data, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200511 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300512 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200513 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200514
515exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500516 /* Cleanup for data */
517 if (data.obj)
518 PyBuffer_Release(&data);
519
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200520 return return_value;
521}
522
523PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800524"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
525"--\n"
526"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200527"Encode a string using quoted-printable encoding.\n"
528"\n"
529"On encoding, when istext is set, newlines are not encoded, and white\n"
530"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
531"are both encoded. When quotetabs is set, space and tabs are encoded.");
532
533#define BINASCII_B2A_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700534 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_FASTCALL, binascii_b2a_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200535
536static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300537binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs,
Larry Hastings89964c42015-04-14 18:07:59 -0400538 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200539
540static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700541binascii_b2a_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200542{
543 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300544 static const char * const _keywords[] = {"data", "quotetabs", "istext", "header", NULL};
545 static _PyArg_Parser _parser = {"y*|iii:b2a_qp", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200546 Py_buffer data = {NULL, NULL};
547 int quotetabs = 0;
548 int istext = 1;
549 int header = 0;
550
Victor Stinner3e1fad62017-01-17 01:29:01 +0100551 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300552 &data, &quotetabs, &istext, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200553 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300554 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200555 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
556
557exit:
558 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300559 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200560 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300561 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200562
563 return return_value;
564}
Xiang Zhang13f1f422017-05-03 11:16:21 +0800565/*[clinic end generated code: output=9db57e86dbe7b2fa input=a9049054013a1b77]*/