diff --git a/include/wrapping_base64.h b/include/wrapping_base64.h
index 2fcedda20b42c6404cf6035c368919d55ee66b66..4133504dd0edcaf5db7e0972146b8e5f64015c75 100644
--- a/include/wrapping_base64.h
+++ b/include/wrapping_base64.h
@@ -1,6 +1,15 @@
 #include "Python.h"
 #include "dap_enc_base64.h"
+#include "py_bytes_object_worker.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 PyObject *dap_encode_base64_py(PyObject *self, PyObject *args);
 
-PyObject *dap_decode_base64_py(PyObject *self, PyObject *args);
\ No newline at end of file
+PyObject *dap_decode_base64_py(PyObject *self, PyObject *args);
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/src/wrapping_base64.c b/src/wrapping_base64.c
index 7447a64a3187a5a13129551472c7845e4d708251..c2fe47658d04301abf8111762f7195e59dfbf007 100644
--- a/src/wrapping_base64.c
+++ b/src/wrapping_base64.c
@@ -1,22 +1,27 @@
 #include "wrapping_base64.h"
 
  PyObject *dap_encode_base64_py(PyObject *self, PyObject *args){
-    const char* data;
-    if (!PyArg_ParseTuple(args, "s", &data)){
-        return NULL;
-    }
-    char res[DAP_ENC_BASE64_ENCODE_SIZE(strlen(data))];
-    dap_enc_base64_encode(data, strlen(data),res, DAP_ENC_DATA_TYPE_B64);
-    return Py_BuildValue("s", res);
+     PyObject *in_data;
+     if (!PyArg_ParseTuple(args, "S", & in_data)){
+         return NULL;
+     }
+     char* data = PyBytes_AsString(in_data);
+     size_t size_t_str = strlen(data);
+     char res[DAP_ENC_BASE64_ENCODE_SIZE(size_t_str)];
+     dap_enc_base64_encode(data, size_t_str,res, DAP_ENC_DATA_TYPE_B64);
+     PyBytesObject *out_obj = (PyBytesObject *)PyBytes_FromFormat("%s",res);
+     return Py_BuildValue("Si", out_obj, size_t_str);
 }
 
  PyObject *dap_decode_base64_py(PyObject *self, PyObject *args){
-    const char* data;
-    int size_source;
-    if (!PyArg_ParseTuple(args, "s|i", &data, &size_source)){
-        return NULL;
-    }
-    char res[size_source];
-    dap_enc_base64_decode(data, strlen(data), res, DAP_ENC_DATA_TYPE_B64);
-    return Py_BuildValue("s", res);
+     PyObject *data;
+     int size_t_str;
+     if (!PyArg_ParseTuple(args, "S|i", &data, &size_t_str)) {
+         return NULL;
+     }
+     char *in_data = PyBytes_AsString(data);
+     char res[size_t_str];
+     dap_enc_base64_decode(in_data, strlen(in_data), res, DAP_ENC_DATA_TYPE_B64);
+     PyObject *pyBytesObject = PyBytes_FromFormat("%s", res);
+     return Py_BuildValue("O", pyBytesObject);
 }
\ No newline at end of file