blob: 093d32bb234d3fdcfac1a497d44a31baebfa1c9d [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__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080037"b2a_uu($module, data, /)\n"
38"--\n"
39"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020040"Uuencode line of data.");
41
42#define BINASCII_B2A_UU_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030043 {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020044
45static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030046binascii_b2a_uu_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020047
48static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030049binascii_b2a_uu(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020050{
51 PyObject *return_value = NULL;
52 Py_buffer data = {NULL, NULL};
53
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030054 if (!PyArg_Parse(arg, "y*:b2a_uu", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020055 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030056 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020057 return_value = binascii_b2a_uu_impl(module, &data);
58
59exit:
60 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030061 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020062 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030063 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020064
65 return return_value;
66}
67
68PyDoc_STRVAR(binascii_a2b_base64__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -080069"a2b_base64($module, data, /)\n"
70"--\n"
71"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020072"Decode a line of base64 data.");
73
74#define BINASCII_A2B_BASE64_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030075 {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020076
77static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030078binascii_a2b_base64_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020079
80static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030081binascii_a2b_base64(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020082{
83 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -050084 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020085
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030086 if (!PyArg_Parse(arg, "O&:a2b_base64", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020087 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030088 }
Serhiy Storchaka12785612014-01-25 11:49:49 +020089 return_value = binascii_a2b_base64_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020090
91exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -050092 /* Cleanup for data */
93 if (data.obj)
94 PyBuffer_Release(&data);
95
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020096 return return_value;
97}
98
99PyDoc_STRVAR(binascii_b2a_base64__doc__,
Victor Stinnere84c9762015-10-11 11:01:02 +0200100"b2a_base64($module, /, data, *, newline=True)\n"
Larry Hastings2623c8c2014-02-08 22:15:29 -0800101"--\n"
102"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200103"Base64-code line of data.");
104
105#define BINASCII_B2A_BASE64_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700106 {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_FASTCALL, binascii_b2a_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200107
108static PyObject *
Serhiy Storchaka2954f832016-07-07 18:20:03 +0300109binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200110
111static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700112binascii_b2a_base64(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200113{
114 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300115 static const char * const _keywords[] = {"data", "newline", NULL};
116 static _PyArg_Parser _parser = {"y*|$i:b2a_base64", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200117 Py_buffer data = {NULL, NULL};
Victor Stinnere84c9762015-10-11 11:01:02 +0200118 int newline = 1;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200119
Victor Stinner3e1fad62017-01-17 01:29:01 +0100120 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300121 &data, &newline)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200122 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300123 }
Victor Stinnere84c9762015-10-11 11:01:02 +0200124 return_value = binascii_b2a_base64_impl(module, &data, newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200125
126exit:
127 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300128 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200129 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300130 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200131
132 return return_value;
133}
134
135PyDoc_STRVAR(binascii_a2b_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800136"a2b_hqx($module, data, /)\n"
137"--\n"
138"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200139"Decode .hqx coding.");
140
141#define BINASCII_A2B_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300142 {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200143
144static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300145binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200146
147static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300148binascii_a2b_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200149{
150 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500151 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200152
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300153 if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200154 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300155 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200156 return_value = binascii_a2b_hqx_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200157
158exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500159 /* Cleanup for data */
160 if (data.obj)
161 PyBuffer_Release(&data);
162
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200163 return return_value;
164}
165
166PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800167"rlecode_hqx($module, data, /)\n"
168"--\n"
169"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200170"Binhex RLE-code binary data.");
171
172#define BINASCII_RLECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300173 {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200174
175static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300176binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200177
178static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300179binascii_rlecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200180{
181 PyObject *return_value = NULL;
182 Py_buffer data = {NULL, NULL};
183
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300184 if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200185 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300186 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200187 return_value = binascii_rlecode_hqx_impl(module, &data);
188
189exit:
190 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300191 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200192 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300193 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200194
195 return return_value;
196}
197
198PyDoc_STRVAR(binascii_b2a_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800199"b2a_hqx($module, data, /)\n"
200"--\n"
201"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200202"Encode .hqx data.");
203
204#define BINASCII_B2A_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300205 {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200206
207static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300208binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200209
210static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300211binascii_b2a_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200212{
213 PyObject *return_value = NULL;
214 Py_buffer data = {NULL, NULL};
215
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300216 if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200217 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300218 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200219 return_value = binascii_b2a_hqx_impl(module, &data);
220
221exit:
222 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300223 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200224 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300225 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200226
227 return return_value;
228}
229
230PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800231"rledecode_hqx($module, data, /)\n"
232"--\n"
233"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200234"Decode hexbin RLE-coded string.");
235
236#define BINASCII_RLEDECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300237 {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200238
239static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300240binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200241
242static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300243binascii_rledecode_hqx(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200244{
245 PyObject *return_value = NULL;
246 Py_buffer data = {NULL, NULL};
247
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300248 if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200249 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300250 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200251 return_value = binascii_rledecode_hqx_impl(module, &data);
252
253exit:
254 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300255 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200256 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300257 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200258
259 return return_value;
260}
261
262PyDoc_STRVAR(binascii_crc_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800263"crc_hqx($module, data, crc, /)\n"
264"--\n"
265"\n"
Martin Panter3310e142016-12-24 07:36:44 +0000266"Compute CRC-CCITT incrementally.");
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200267
268#define BINASCII_CRC_HQX_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100269 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_FASTCALL, binascii_crc_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200270
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300271static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300272binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200273
274static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100275binascii_crc_hqx(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200276{
277 PyObject *return_value = NULL;
278 Py_buffer data = {NULL, NULL};
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300279 unsigned int crc;
280 unsigned int _return_value;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200281
Victor Stinner259f0e42017-01-17 01:35:17 +0100282 if (!_PyArg_ParseStack(args, nargs, "y*I:crc_hqx",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300283 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200284 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300285 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100286
287 if (!_PyArg_NoStackKeywords("crc_hqx", kwnames)) {
288 goto exit;
289 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200290 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300291 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200292 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300293 }
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300294 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200295
296exit:
297 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300298 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200299 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300300 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200301
302 return return_value;
303}
304
305PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800306"crc32($module, data, crc=0, /)\n"
307"--\n"
308"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200309"Compute CRC-32 incrementally.");
310
311#define BINASCII_CRC32_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100312 {"crc32", (PyCFunction)binascii_crc32, METH_FASTCALL, binascii_crc32__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200313
314static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300315binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200316
317static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100318binascii_crc32(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200319{
320 PyObject *return_value = NULL;
321 Py_buffer data = {NULL, NULL};
322 unsigned int crc = 0;
323 unsigned int _return_value;
324
Victor Stinner259f0e42017-01-17 01:35:17 +0100325 if (!_PyArg_ParseStack(args, nargs, "y*|I:crc32",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300326 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200327 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300328 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100329
330 if (!_PyArg_NoStackKeywords("crc32", kwnames)) {
331 goto exit;
332 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200333 _return_value = binascii_crc32_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300334 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200335 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300336 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200337 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
338
339exit:
340 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300341 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200342 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300343 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200344
345 return return_value;
346}
347
348PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800349"b2a_hex($module, data, /)\n"
350"--\n"
351"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200352"Hexadecimal representation of binary data.\n"
353"\n"
354"The return value is a bytes object. This function is also\n"
355"available as \"hexlify()\".");
356
357#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300358 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200359
360static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300361binascii_b2a_hex_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200362
363static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300364binascii_b2a_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200365{
366 PyObject *return_value = NULL;
367 Py_buffer data = {NULL, NULL};
368
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300369 if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200370 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300371 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200372 return_value = binascii_b2a_hex_impl(module, &data);
373
374exit:
375 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300376 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200377 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300378 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200379
380 return return_value;
381}
382
Zachary Wareb176d402015-01-20 13:59:46 -0600383PyDoc_STRVAR(binascii_hexlify__doc__,
384"hexlify($module, data, /)\n"
385"--\n"
386"\n"
387"Hexadecimal representation of binary data.\n"
388"\n"
389"The return value is a bytes object.");
390
391#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300392 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600393
394static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300395binascii_hexlify_impl(PyObject *module, Py_buffer *data);
Zachary Wareb176d402015-01-20 13:59:46 -0600396
397static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300398binascii_hexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600399{
400 PyObject *return_value = NULL;
401 Py_buffer data = {NULL, NULL};
402
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300403 if (!PyArg_Parse(arg, "y*:hexlify", &data)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600404 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300405 }
Zachary Wareb176d402015-01-20 13:59:46 -0600406 return_value = binascii_hexlify_impl(module, &data);
407
408exit:
409 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300410 if (data.obj) {
Zachary Wareb176d402015-01-20 13:59:46 -0600411 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300412 }
Zachary Wareb176d402015-01-20 13:59:46 -0600413
414 return return_value;
415}
416
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200417PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800418"a2b_hex($module, hexstr, /)\n"
419"--\n"
420"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200421"Binary data of hexadecimal representation.\n"
422"\n"
423"hexstr must contain an even number of hex digits (upper or lower case).\n"
424"This function is also available as \"unhexlify()\".");
425
426#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300427 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200428
429static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300430binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200431
432static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300433binascii_a2b_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200434{
435 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500436 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200437
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300438 if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200439 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300440 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200441 return_value = binascii_a2b_hex_impl(module, &hexstr);
442
443exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500444 /* Cleanup for hexstr */
445 if (hexstr.obj)
446 PyBuffer_Release(&hexstr);
447
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200448 return return_value;
449}
450
Zachary Wareb176d402015-01-20 13:59:46 -0600451PyDoc_STRVAR(binascii_unhexlify__doc__,
452"unhexlify($module, hexstr, /)\n"
453"--\n"
454"\n"
455"Binary data of hexadecimal representation.\n"
456"\n"
457"hexstr must contain an even number of hex digits (upper or lower case).");
458
459#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300460 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600461
462static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300463binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr);
Zachary Wareb176d402015-01-20 13:59:46 -0600464
465static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300466binascii_unhexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600467{
468 PyObject *return_value = NULL;
469 Py_buffer hexstr = {NULL, NULL};
470
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300471 if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600472 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300473 }
Zachary Wareb176d402015-01-20 13:59:46 -0600474 return_value = binascii_unhexlify_impl(module, &hexstr);
475
476exit:
477 /* Cleanup for hexstr */
478 if (hexstr.obj)
479 PyBuffer_Release(&hexstr);
480
481 return return_value;
482}
483
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200484PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800485"a2b_qp($module, /, data, header=False)\n"
486"--\n"
487"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200488"Decode a string of qp-encoded data.");
489
490#define BINASCII_A2B_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700491 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_FASTCALL, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200492
493static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300494binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200495
496static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700497binascii_a2b_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200498{
499 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300500 static const char * const _keywords[] = {"data", "header", NULL};
501 static _PyArg_Parser _parser = {"O&|i:a2b_qp", _keywords, 0};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500502 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200503 int header = 0;
504
Victor Stinner3e1fad62017-01-17 01:29:01 +0100505 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300506 ascii_buffer_converter, &data, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200507 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300508 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200509 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200510
511exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500512 /* Cleanup for data */
513 if (data.obj)
514 PyBuffer_Release(&data);
515
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200516 return return_value;
517}
518
519PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800520"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
521"--\n"
522"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200523"Encode a string using quoted-printable encoding.\n"
524"\n"
525"On encoding, when istext is set, newlines are not encoded, and white\n"
526"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
527"are both encoded. When quotetabs is set, space and tabs are encoded.");
528
529#define BINASCII_B2A_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700530 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_FASTCALL, binascii_b2a_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200531
532static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300533binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs,
Larry Hastings89964c42015-04-14 18:07:59 -0400534 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200535
536static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700537binascii_b2a_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200538{
539 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300540 static const char * const _keywords[] = {"data", "quotetabs", "istext", "header", NULL};
541 static _PyArg_Parser _parser = {"y*|iii:b2a_qp", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200542 Py_buffer data = {NULL, NULL};
543 int quotetabs = 0;
544 int istext = 1;
545 int header = 0;
546
Victor Stinner3e1fad62017-01-17 01:29:01 +0100547 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300548 &data, &quotetabs, &istext, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200549 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300550 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200551 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
552
553exit:
554 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300555 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200556 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300557 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200558
559 return return_value;
560}
Victor Stinner259f0e42017-01-17 01:35:17 +0100561/*[clinic end generated code: output=4a418f883ccc79fe input=a9049054013a1b77]*/