@@ -1862,31 +1862,56 @@ def UNSEAL(data, auth_data, key, aes = False):
18621862 plain = cipher .decrypt (data )
18631863 return plain , cfounder
18641864
1865+ def CompressedUtf8String (domain_name ):
1866+ if domain_name is None :
1867+ raise ValueError ("domain_name cannot be None" )
1868+
1869+ MAX_LABEL_LENGTH = 63
1870+
1871+ buf = bytearray ()
1872+ labels = domain_name .split ('.' )
1873+
1874+ for label in labels :
1875+ label_bytes = label .encode ('utf-8' )
1876+ if len (label_bytes ) > MAX_LABEL_LENGTH :
1877+ raise ValueError ("Label exceeded max length of 63 bytes." )
1878+ buf .append (len (label_bytes ))
1879+ buf .extend (label_bytes )
1880+ buf .append (0 )
1881+
1882+ return bytes (buf )
18651883
18661884def getSSPType1 (workstation = '' , domain = '' , signingRequired = False ):
18671885 auth = NL_AUTH_MESSAGE ()
1886+ auth ['MessageType' ] = NL_AUTH_MESSAGE_REQUEST
18681887 auth ['Flags' ] = 0
1869- auth ['Buffer' ] = b''
1870- auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1888+
18711889 if domain != '' :
1872- auth ['Buffer' ] = auth ['Buffer' ] + b (domain ) + b'\x00 '
1873- else :
1874- auth ['Buffer' ] += b'WORKGROUP\x00 '
1875-
1876- auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_HOST
1877-
1878- if workstation != '' :
1879- auth ['Buffer' ] = auth ['Buffer' ] + b (workstation ) + b'\x00 '
1890+ if '.' in domain :
1891+ auth ['Flags' ] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_DNS_DOMAIN
1892+ if workstation != '' :
1893+ auth ['Buffer' ] = b (workstation ) + b'\x00 ' + CompressedUtf8String (domain )
1894+ else :
1895+ auth ['Buffer' ] = b'MYHOST\x00 ' + CompressedUtf8String (domain )
1896+ else :
1897+ auth ['Flags' ] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1898+ if workstation != '' :
1899+ auth ['Buffer' ] = b (domain ) + b'\x00 ' + b (workstation ) + b'\x00 '
1900+ else :
1901+ auth ['Buffer' ] = b (domain ) + b'\x00 MYHOST\x00 '
18801902 else :
1881- auth ['Buffer' ] += b'MYHOST\x00 '
1882-
1903+ if workstation != '' :
1904+ auth ['Buffer' ] = b'WORKGROUP\x00 ' + b (workstation ) + b'\x00 '
1905+ else :
1906+ auth ['Buffer' ] = b'WORKGROUP\x00 MYHOST\x00 '
1907+
18831908 auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_HOST_UTF8
1884-
1909+
18851910 if workstation != '' :
18861911 auth ['Buffer' ] += pack ('<B' ,len (workstation )) + b (workstation ) + b'\x00 '
18871912 else :
18881913 auth ['Buffer' ] += b'\x06 MYHOST\x00 '
1889-
1914+
18901915 return auth
18911916
18921917################################################################################
0 commit comments