blob: e297f1d53e7baff47ca8a5b176e9d239c2e8909c [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 Storchaka12785612014-01-25 11:49:49 +020015binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020016
17static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030018binascii_a2b_uu(PyModuleDef *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 *
46binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data);
47
48static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030049binascii_b2a_uu(PyModuleDef *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 Storchaka12785612014-01-25 11:49:49 +020078binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +020079
80static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +030081binascii_a2b_base64(PyModuleDef *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 Stinnere84c9762015-10-11 11:01:02 +0200106 {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_VARARGS|METH_KEYWORDS, binascii_b2a_base64__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200107
108static PyObject *
Victor Stinnere84c9762015-10-11 11:01:02 +0200109binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200110
111static PyObject *
Victor Stinnere84c9762015-10-11 11:01:02 +0200112binascii_b2a_base64(PyModuleDef *module, PyObject *args, PyObject *kwargs)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200113{
114 PyObject *return_value = NULL;
Victor Stinnere84c9762015-10-11 11:01:02 +0200115 static char *_keywords[] = {"data", "newline", NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200116 Py_buffer data = {NULL, NULL};
Victor Stinnere84c9762015-10-11 11:01:02 +0200117 int newline = 1;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200118
Victor Stinnere84c9762015-10-11 11:01:02 +0200119 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|$i:b2a_base64", _keywords,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300120 &data, &newline)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200121 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300122 }
Victor Stinnere84c9762015-10-11 11:01:02 +0200123 return_value = binascii_b2a_base64_impl(module, &data, newline);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200124
125exit:
126 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300127 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200128 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300129 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200130
131 return return_value;
132}
133
134PyDoc_STRVAR(binascii_a2b_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800135"a2b_hqx($module, data, /)\n"
136"--\n"
137"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200138"Decode .hqx coding.");
139
140#define BINASCII_A2B_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300141 {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200142
143static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200144binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200145
146static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300147binascii_a2b_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200148{
149 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500150 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200151
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300152 if (!PyArg_Parse(arg, "O&:a2b_hqx", ascii_buffer_converter, &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200153 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300154 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200155 return_value = binascii_a2b_hqx_impl(module, &data);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200156
157exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500158 /* Cleanup for data */
159 if (data.obj)
160 PyBuffer_Release(&data);
161
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200162 return return_value;
163}
164
165PyDoc_STRVAR(binascii_rlecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800166"rlecode_hqx($module, data, /)\n"
167"--\n"
168"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200169"Binhex RLE-code binary data.");
170
171#define BINASCII_RLECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300172 {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200173
174static PyObject *
175binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data);
176
177static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300178binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200179{
180 PyObject *return_value = NULL;
181 Py_buffer data = {NULL, NULL};
182
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300183 if (!PyArg_Parse(arg, "y*:rlecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200184 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300185 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200186 return_value = binascii_rlecode_hqx_impl(module, &data);
187
188exit:
189 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300190 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200191 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300192 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200193
194 return return_value;
195}
196
197PyDoc_STRVAR(binascii_b2a_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800198"b2a_hqx($module, data, /)\n"
199"--\n"
200"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200201"Encode .hqx data.");
202
203#define BINASCII_B2A_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300204 {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200205
206static PyObject *
207binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data);
208
209static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300210binascii_b2a_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200211{
212 PyObject *return_value = NULL;
213 Py_buffer data = {NULL, NULL};
214
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300215 if (!PyArg_Parse(arg, "y*:b2a_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200216 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300217 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200218 return_value = binascii_b2a_hqx_impl(module, &data);
219
220exit:
221 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300222 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200223 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300224 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200225
226 return return_value;
227}
228
229PyDoc_STRVAR(binascii_rledecode_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800230"rledecode_hqx($module, data, /)\n"
231"--\n"
232"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200233"Decode hexbin RLE-coded string.");
234
235#define BINASCII_RLEDECODE_HQX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300236 {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200237
238static PyObject *
239binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data);
240
241static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300242binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200243{
244 PyObject *return_value = NULL;
245 Py_buffer data = {NULL, NULL};
246
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300247 if (!PyArg_Parse(arg, "y*:rledecode_hqx", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200248 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300249 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200250 return_value = binascii_rledecode_hqx_impl(module, &data);
251
252exit:
253 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300254 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200255 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300256 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200257
258 return return_value;
259}
260
261PyDoc_STRVAR(binascii_crc_hqx__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800262"crc_hqx($module, data, crc, /)\n"
263"--\n"
264"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200265"Compute hqx CRC incrementally.");
266
267#define BINASCII_CRC_HQX_METHODDEF \
268 {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__},
269
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300270static unsigned int
271binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200272
273static PyObject *
274binascii_crc_hqx(PyModuleDef *module, PyObject *args)
275{
276 PyObject *return_value = NULL;
277 Py_buffer data = {NULL, NULL};
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300278 unsigned int crc;
279 unsigned int _return_value;
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200280
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300281 if (!PyArg_ParseTuple(args, "y*I:crc_hqx",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300282 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200283 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300284 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200285 _return_value = binascii_crc_hqx_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300286 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200287 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300288 }
Serhiy Storchaka2ef7c472015-04-20 09:26:49 +0300289 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200290
291exit:
292 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300293 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200294 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300295 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200296
297 return return_value;
298}
299
300PyDoc_STRVAR(binascii_crc32__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800301"crc32($module, data, crc=0, /)\n"
302"--\n"
303"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200304"Compute CRC-32 incrementally.");
305
306#define BINASCII_CRC32_METHODDEF \
307 {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__},
308
309static unsigned int
310binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc);
311
312static PyObject *
313binascii_crc32(PyModuleDef *module, PyObject *args)
314{
315 PyObject *return_value = NULL;
316 Py_buffer data = {NULL, NULL};
317 unsigned int crc = 0;
318 unsigned int _return_value;
319
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300320 if (!PyArg_ParseTuple(args, "y*|I:crc32",
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300321 &data, &crc)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200322 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300323 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200324 _return_value = binascii_crc32_impl(module, &data, crc);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300325 if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200326 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300327 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200328 return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
329
330exit:
331 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300332 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200333 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300334 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200335
336 return return_value;
337}
338
339PyDoc_STRVAR(binascii_b2a_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800340"b2a_hex($module, data, /)\n"
341"--\n"
342"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200343"Hexadecimal representation of binary data.\n"
344"\n"
345"The return value is a bytes object. This function is also\n"
346"available as \"hexlify()\".");
347
348#define BINASCII_B2A_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300349 {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200350
351static PyObject *
352binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data);
353
354static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300355binascii_b2a_hex(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200356{
357 PyObject *return_value = NULL;
358 Py_buffer data = {NULL, NULL};
359
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300360 if (!PyArg_Parse(arg, "y*:b2a_hex", &data)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200361 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300362 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200363 return_value = binascii_b2a_hex_impl(module, &data);
364
365exit:
366 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300367 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200368 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300369 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200370
371 return return_value;
372}
373
Zachary Wareb176d402015-01-20 13:59:46 -0600374PyDoc_STRVAR(binascii_hexlify__doc__,
375"hexlify($module, data, /)\n"
376"--\n"
377"\n"
378"Hexadecimal representation of binary data.\n"
379"\n"
380"The return value is a bytes object.");
381
382#define BINASCII_HEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300383 {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600384
385static PyObject *
386binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data);
387
388static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300389binascii_hexlify(PyModuleDef *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600390{
391 PyObject *return_value = NULL;
392 Py_buffer data = {NULL, NULL};
393
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300394 if (!PyArg_Parse(arg, "y*:hexlify", &data)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600395 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300396 }
Zachary Wareb176d402015-01-20 13:59:46 -0600397 return_value = binascii_hexlify_impl(module, &data);
398
399exit:
400 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300401 if (data.obj) {
Zachary Wareb176d402015-01-20 13:59:46 -0600402 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300403 }
Zachary Wareb176d402015-01-20 13:59:46 -0600404
405 return return_value;
406}
407
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200408PyDoc_STRVAR(binascii_a2b_hex__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800409"a2b_hex($module, hexstr, /)\n"
410"--\n"
411"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200412"Binary data of hexadecimal representation.\n"
413"\n"
414"hexstr must contain an even number of hex digits (upper or lower case).\n"
415"This function is also available as \"unhexlify()\".");
416
417#define BINASCII_A2B_HEX_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300418 {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200419
420static PyObject *
421binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr);
422
423static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300424binascii_a2b_hex(PyModuleDef *module, PyObject *arg)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200425{
426 PyObject *return_value = NULL;
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500427 Py_buffer hexstr = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200428
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300429 if (!PyArg_Parse(arg, "O&:a2b_hex", ascii_buffer_converter, &hexstr)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200430 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300431 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200432 return_value = binascii_a2b_hex_impl(module, &hexstr);
433
434exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500435 /* Cleanup for hexstr */
436 if (hexstr.obj)
437 PyBuffer_Release(&hexstr);
438
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200439 return return_value;
440}
441
Zachary Wareb176d402015-01-20 13:59:46 -0600442PyDoc_STRVAR(binascii_unhexlify__doc__,
443"unhexlify($module, hexstr, /)\n"
444"--\n"
445"\n"
446"Binary data of hexadecimal representation.\n"
447"\n"
448"hexstr must contain an even number of hex digits (upper or lower case).");
449
450#define BINASCII_UNHEXLIFY_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300451 {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__},
Zachary Wareb176d402015-01-20 13:59:46 -0600452
453static PyObject *
454binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr);
455
456static PyObject *
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300457binascii_unhexlify(PyModuleDef *module, PyObject *arg)
Zachary Wareb176d402015-01-20 13:59:46 -0600458{
459 PyObject *return_value = NULL;
460 Py_buffer hexstr = {NULL, NULL};
461
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300462 if (!PyArg_Parse(arg, "O&:unhexlify", ascii_buffer_converter, &hexstr)) {
Zachary Wareb176d402015-01-20 13:59:46 -0600463 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300464 }
Zachary Wareb176d402015-01-20 13:59:46 -0600465 return_value = binascii_unhexlify_impl(module, &hexstr);
466
467exit:
468 /* Cleanup for hexstr */
469 if (hexstr.obj)
470 PyBuffer_Release(&hexstr);
471
472 return return_value;
473}
474
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200475PyDoc_STRVAR(binascii_a2b_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800476"a2b_qp($module, /, data, header=False)\n"
477"--\n"
478"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200479"Decode a string of qp-encoded data.");
480
481#define BINASCII_A2B_QP_METHODDEF \
Serhiy Storchaka12785612014-01-25 11:49:49 +0200482 {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__},
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200483
484static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200485binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200486
487static PyObject *
Serhiy Storchaka12785612014-01-25 11:49:49 +0200488binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200489{
490 PyObject *return_value = NULL;
Serhiy Storchaka12785612014-01-25 11:49:49 +0200491 static char *_keywords[] = {"data", "header", NULL};
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500492 Py_buffer data = {NULL, NULL};
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200493 int header = 0;
494
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300495 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&|i:a2b_qp", _keywords,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300496 ascii_buffer_converter, &data, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200497 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300498 }
Serhiy Storchaka12785612014-01-25 11:49:49 +0200499 return_value = binascii_a2b_qp_impl(module, &data, header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200500
501exit:
Benjamin Petersonb62deac2014-01-26 10:41:58 -0500502 /* Cleanup for data */
503 if (data.obj)
504 PyBuffer_Release(&data);
505
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200506 return return_value;
507}
508
509PyDoc_STRVAR(binascii_b2a_qp__doc__,
Larry Hastings2623c8c2014-02-08 22:15:29 -0800510"b2a_qp($module, /, data, quotetabs=False, istext=True, header=False)\n"
511"--\n"
512"\n"
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200513"Encode a string using quoted-printable encoding.\n"
514"\n"
515"On encoding, when istext is set, newlines are not encoded, and white\n"
516"space at end of lines is. When istext is not set, \\r and \\n (CR/LF)\n"
517"are both encoded. When quotetabs is set, space and tabs are encoded.");
518
519#define BINASCII_B2A_QP_METHODDEF \
520 {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__},
521
522static PyObject *
Larry Hastings89964c42015-04-14 18:07:59 -0400523binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs,
524 int istext, int header);
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200525
526static PyObject *
527binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
528{
529 PyObject *return_value = NULL;
530 static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL};
531 Py_buffer data = {NULL, NULL};
532 int quotetabs = 0;
533 int istext = 1;
534 int header = 0;
535
Serhiy Storchaka247789c2015-04-24 00:40:51 +0300536 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "y*|iii:b2a_qp", _keywords,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300537 &data, &quotetabs, &istext, &header)) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200538 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300539 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200540 return_value = binascii_b2a_qp_impl(module, &data, quotetabs, istext, header);
541
542exit:
543 /* Cleanup for data */
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300544 if (data.obj) {
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200545 PyBuffer_Release(&data);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300546 }
Serhiy Storchaka3ffd9132014-01-25 11:21:23 +0200547
548 return return_value;
549}
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300550/*[clinic end generated code: output=7fb420392d78ac4d input=a9049054013a1b77]*/