/* Frees a key protector object */ void pybde_key_protector_free( pybde_key_protector_t *pybde_key_protector ) { libcerror_error_t *error = NULL; struct _typeobject *ob_type = NULL; static char *function = "pybde_key_protector_free"; if( pybde_key_protector == NULL ) { PyErr_Format( PyExc_TypeError, "%s: invalid key protector.", function ); return; } if( pybde_key_protector->key_protector == NULL ) { PyErr_Format( PyExc_TypeError, "%s: invalid key protector - missing libbde key protector.", function ); return; } ob_type = Py_TYPE( pybde_key_protector ); if( ob_type == NULL ) { PyErr_Format( PyExc_ValueError, "%s: missing ob_type.", function ); return; } if( ob_type->tp_free == NULL ) { PyErr_Format( PyExc_ValueError, "%s: invalid ob_type - missing tp_free.", function ); return; } if( libbde_key_protector_free( &( pybde_key_protector->key_protector ), &error ) != 1 ) { pybde_error_raise( error, PyExc_IOError, "%s: unable to free libbde key protector.", function ); libcerror_error_free( &error ); } if( pybde_key_protector->volume_object != NULL ) { Py_DecRef( (PyObject *) pybde_key_protector->volume_object ); } ob_type->tp_free( (PyObject*) pybde_key_protector ); }
/* Creates a new string object from a GUID * Returns a Python object if successful or NULL on error */ PyObject *pybde_string_new_from_guid( const uint8_t *guid_buffer, size_t guid_buffer_size ) { char guid_string[ 48 ]; libcerror_error_t *error = NULL; libfguid_identifier_t *guid = NULL; PyObject *string_object = NULL; const char *errors = NULL; static char *function = "pybde_string_new_from_guid"; if( libfguid_identifier_initialize( &guid, &error ) != 1 ) { pybde_error_raise( error, PyExc_IOError, "%s: unable to create GUID.", function ); libcerror_error_free( &error ); goto on_error; } if( libfguid_identifier_copy_from_byte_stream( guid, guid_buffer, guid_buffer_size, LIBFGUID_ENDIAN_LITTLE, &error ) != 1 ) { pybde_error_raise( error, PyExc_IOError, "%s: unable to copy byte stream to GUID.", function ); libcerror_error_free( &error ); goto on_error; } if( libfguid_identifier_copy_to_utf8_string( guid, (uint8_t *) guid_string, 48, LIBFGUID_STRING_FORMAT_FLAG_USE_LOWER_CASE, &error ) != 1 ) { pybde_error_raise( error, PyExc_IOError, "%s: unable to copy GUID to string.", function ); libcerror_error_free( &error ); goto on_error; } if( libfguid_identifier_free( &guid, &error ) != 1 ) { pybde_error_raise( error, PyExc_IOError, "%s: unable to free GUID.", function ); libcerror_error_free( &error ); goto on_error; } /* Pass the string length to PyUnicode_DecodeUTF8 * otherwise it makes the end of string character is part * of the string */ string_object = PyUnicode_DecodeUTF8( guid_string, (Py_ssize_t) 36, errors ); return( string_object ); on_error: if( guid != NULL ) { libfguid_identifier_free( &guid, NULL ); } return( NULL ); }