1 /* Copyright (c) 1999-2002 Ng Pheng Siong. All rights reserved.
2  * Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved.
3 */
4 /* $Id$ */
5 
6 %{
7 #include <openssl/x509v3.h>
8 %}
9 
10 %warnfilter(454) _util_err;
11 %inline %{
12 static PyObject *_util_err;
13 
util_init(PyObject * util_err)14 void util_init(PyObject *util_err) {
15     Py_INCREF(util_err);
16     _util_err = util_err;
17 }
18 
util_hex_to_string(PyObject * blob)19 PyObject *util_hex_to_string(PyObject *blob) {
20     PyObject *obj;
21     const void *buf;
22     char *ret;
23     Py_ssize_t len;
24 
25     if (m2_PyObject_AsReadBuffer(blob, &buf, &len) == -1)
26         return NULL;
27 
28     ret = hex_to_string((unsigned char *)buf, len);
29     if (!ret) {
30         m2_PyErr_Msg(_util_err);
31         return NULL;
32     }
33 
34     obj = PyBytes_FromString(ret);
35 
36     OPENSSL_free(ret);
37     return obj;
38 }
39 
util_string_to_hex(PyObject * blob)40 PyObject *util_string_to_hex(PyObject *blob) {
41     PyObject *obj;
42     const void *buf;
43     unsigned char *ret;
44     Py_ssize_t len0;
45     long len;
46 
47     if (m2_PyObject_AsReadBuffer(blob, &buf, &len0) == -1)
48         return NULL;
49 
50     len = len0;
51     ret = string_to_hex((char *)buf, &len);
52     if (ret == NULL) {
53         m2_PyErr_Msg(_util_err);
54         return NULL;
55     }
56     obj = PyBytes_FromStringAndSize((char*)ret, len);
57     OPENSSL_free(ret);
58     return obj;
59 }
60 %}
61