mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
import windows.winproxy as winproxy
|
|
import windows.generated_def as gdef
|
|
|
|
def binary_to_string(data, flags=gdef.CRYPT_STRING_BASE64, header=None):
|
|
if header is not None:
|
|
if flags != gdef.CRYPT_STRING_BASE64:
|
|
raise ValueError("custom_header parameter can only be used with flags==CRYPT_STRING_BASE64")
|
|
databuff = (gdef.BYTE * len(data))(*data)
|
|
buffsize = gdef.DWORD(0)
|
|
winproxy.CryptBinaryToStringW (databuff, len(databuff), flags, None, buffsize)
|
|
|
|
resbuff = (gdef.WCHAR * buffsize.value)()
|
|
|
|
winproxy.CryptBinaryToStringW(databuff, len(databuff), flags, resbuff, buffsize)
|
|
strres = resbuff[:buffsize.value]
|
|
if header:
|
|
strres = "-----BEGIN {header}-----\r\n{0}-----END {header}-----".format(strres, header=header)
|
|
return strres
|
|
|
|
def string_to_binary(data, flags=gdef.CRYPT_STRING_ANY):
|
|
# Get the buffer size
|
|
buffsize = gdef.DWORD(0)
|
|
winproxy.CryptStringToBinaryW(data, len(data), flags, None, buffsize, None, None)
|
|
|
|
# Decode
|
|
resbuff = (gdef.BYTE * buffsize.value)()
|
|
skipped = gdef.DWORD()
|
|
outflags = gdef.DWORD()
|
|
|
|
winproxy.CryptStringToBinaryW(data, len(data), flags, resbuff, buffsize, skipped, outflags)
|
|
return bytearray(resbuff[:buffsize.value])
|