blob: 743bf46ea869dc5bf5eb98c3fa98c6b88ebf5028 [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 Stinner37e4ef72016-09-09 20:00:13 -0700120 if (!_PyArg_ParseStack(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 \
269 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__},
270
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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300275binascii_crc_hqx(PyObject *module, PyObject *args)
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
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300282 if (!PyArg_ParseTuple(args, "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 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200286 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300287 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200288 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300289 }
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300290 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200291
292exit:
293 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300294 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200295 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300296 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200297
298 return return_value;
299}
300
301PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800302"crc32($module, data, crc=0, /)\n"
303"--\n"
304"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200305"Compute CRC-32 incrementally.");
306
307#define BINASCII_CRC32_METHODDEF \
308 {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__},
309
310static unsigned int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300311binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200312
313static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300314binascii_crc32(PyObject *module, PyObject *args)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200315{
316 PyObject *return_value = NULL;
317 Py_buffer data = {NULL, NULL};
318 unsigned int crc = 0;
319 unsigned int _return_value;
320
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300321 if (!PyArg_ParseTuple(args, "y*|I:crc32",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300322 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200323 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300324 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200325 _return_value = binascii_crc32_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300326 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200327 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300328 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200329 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
330
331exit:
332 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300333 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200334 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300335 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200336
337 return return_value;
338}
339
340PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800341"b2a_hex($module, data, /)\n"
342"--\n"
343"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200344"Hexadecimal representation of binary data.\n"
345"\n"
346"The return value is a bytes object. This function is also\n"
347"available as \"hexlify()\".");
348
349#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300350 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200351
352static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300353binascii_b2a_hex_impl(PyObject *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200354
355static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300356binascii_b2a_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200357{
358 PyObject *return_value = NULL;
359 Py_buffer data = {NULL, NULL};
360
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300361 if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200362 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300363 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200364 return_value = binascii_b2a_hex_impl(module, &data);
365
366exit:
367 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300368 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200369 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300370 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200371
372 return return_value;
373}
374
Zachary Wareb176d402015-01-20 13:59:46 -0600375PyDoc_STRVAR(binascii_hexlify__doc__,
376"hexlify($module, data, /)\n"
377"--\n"
378"\n"
379"Hexadecimal representation of binary data.\n"
380"\n"
381"The return value is a bytes object.");
382
383#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300384 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600385
386static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300387binascii_hexlify_impl(PyObject *module, Py_buffer *data);
Zachary Wareb176d402015-01-20 13:59:46 -0600388
389static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300390binascii_hexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600391{
392 PyObject *return_value = NULL;
393 Py_buffer data = {NULL, NULL};
394
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300395 if (!PyArg_Parse(arg, "y*:hexlify", &data)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600396 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300397 }
Zachary Wareb176d402015-01-20 13:59:46 -0600398 return_value = binascii_hexlify_impl(module, &data);
399
400exit:
401 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300402 if (data.obj) {
Zachary Wareb176d402015-01-20 13:59:46 -0600403 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300404 }
Zachary Wareb176d402015-01-20 13:59:46 -0600405
406 return return_value;
407}
408
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200409PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800410"a2b_hex($module, hexstr, /)\n"
411"--\n"
412"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200413"Binary data of hexadecimal representation.\n"
414"\n"
415"hexstr must contain an even number of hex digits (upper or lower case).\n"
416"This function is also available as \"unhexlify()\".");
417
418#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300419 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200420
421static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300422binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200423
424static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300425binascii_a2b_hex(PyObject *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200426{
427 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500428 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200429
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300430 if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200431 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300432 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200433 return_value = binascii_a2b_hex_impl(module, &hexstr);
434
435exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500436 /* Cleanup for hexstr */
437 if (hexstr.obj)
438 PyBuffer_Release(&hexstr);
439
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200440 return return_value;
441}
442
Zachary Wareb176d402015-01-20 13:59:46 -0600443PyDoc_STRVAR(binascii_unhexlify__doc__,
444"unhexlify($module, hexstr, /)\n"
445"--\n"
446"\n"
447"Binary data of hexadecimal representation.\n"
448"\n"
449"hexstr must contain an even number of hex digits (upper or lower case).");
450
451#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300452 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600453
454static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300455binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr);
Zachary Wareb176d402015-01-20 13:59:46 -0600456
457static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300458binascii_unhexlify(PyObject *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600459{
460 PyObject *return_value = NULL;
461 Py_buffer hexstr = {NULL, NULL};
462
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300463 if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600464 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300465 }
Zachary Wareb176d402015-01-20 13:59:46 -0600466 return_value = binascii_unhexlify_impl(module, &hexstr);
467
468exit:
469 /* Cleanup for hexstr */
470 if (hexstr.obj)
471 PyBuffer_Release(&hexstr);
472
473 return return_value;
474}
475
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200476PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800477"a2b_qp($module, /, data, header=False)\n"
478"--\n"
479"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200480"Decode a string of qp-encoded data.");
481
482#define BINASCII_A2B_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700483 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_FASTCALL, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200484
485static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300486binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200487
488static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700489binascii_a2b_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200490{
491 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300492 static const char * const _keywords[] = {"data", "header", NULL};
493 static _PyArg_Parser _parser = {"O&|i:a2b_qp", _keywords, 0};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500494 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200495 int header = 0;
496
Victor Stinner37e4ef72016-09-09 20:00:13 -0700497 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300498 ascii_buffer_converter, &data, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200499 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300500 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200501 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200502
503exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500504 /* Cleanup for data */
505 if (data.obj)
506 PyBuffer_Release(&data);
507
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200508 return return_value;
509}
510
511PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800512"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
513"--\n"
514"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200515"Encode a string using quoted-printable encoding.\n"
516"\n"
517"On encoding, when istext is set, newlines are not encoded, and white\n"
518"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
519"are both encoded. When quotetabs is set, space and tabs are encoded.");
520
521#define BINASCII_B2A_QP_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700522 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_FASTCALL, binascii_b2a_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200523
524static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300525binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs,
Larry Hastings89964c42015-04-14 18:07:59 -0400526 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200527
528static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700529binascii_b2a_qp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200530{
531 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300532 static const char * const _keywords[] = {"data", "quotetabs", "istext", "header", NULL};
533 static _PyArg_Parser _parser = {"y*|iii:b2a_qp", _keywords, 0};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200534 Py_buffer data = {NULL, NULL};
535 int quotetabs = 0;
536 int istext = 1;
537 int header = 0;
538
Victor Stinner37e4ef72016-09-09 20:00:13 -0700539 if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300540 &data, &quotetabs, &istext, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200541 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300542 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200543 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
544
545exit:
546 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300547 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200548 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300549 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200550
551 return return_value;
552}
Martin Panter520569e2016-12-24 07:44:03 +0000553/*[clinic end generated code: output=458eb09731cb7877 input=a9049054013a1b77]*/