Files

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])