a „oen ã@spddlZddlZddlZddlZddlZddlZddlmZmZm Z dd„Z Gdd„dej ƒZ e dkrle ƒdS)éN)Ú TestSkippedÚ str2bytesÚtestmainc GsRz ||ŽWStjyL}z(|jtjtjfvr6t|ƒ‚‚WYd}~n d}~00dS©N)Úwin32apiÚerrorÚwinerrorÚsspiconZSEC_E_NO_CREDENTIALSZ!SEC_E_NO_AUTHENTICATING_AUTHORITYr)ÚfuncÚargsÚexc©r ú5C:\Program Files\Certbot\pkgs\win32\test\test_sspi.pyÚapplyHandlingSkipss þrc@s¤eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'S)(ÚTestSSPIc GsDz ||ŽWStjy>}z| |j|¡WYd}~n d}~00dS)Nzexpecting %s failure)Ú RuntimeErrorÚ win32securityrÚ assertEqualr)ÚselfÚhrr r r r r rÚassertRaisesHRESULTs  zTestSSPI.assertRaisesHRESULTcCsRtj|t ¡d}t |¡}d}d}|dkrJ| |¡\}}| |¡\}}q$||fS)N)Z targetspnér)ÚsspiZ ClientAuthrZ GetUserNameZ ServerAuthZ authorize)rÚpkg_nameÚ sspiclientÚ sspiserverZ sec_bufferÚerrr r rÚ_doAuth%s zTestSSPI._doAuthcCs&| |¡\}}|j ¡|j ¡dSr)rÚctxtZImpersonateSecurityContextZRevertSecurityContext)rrrrr r rÚ_doTestImpersonate0s zTestSSPI._doTestImpersonatecCst|jdƒdS©NÚKerberos)rr©rr r rÚtestImpersonateKerberos6sz TestSSPI.testImpersonateKerberoscCs| d¡dS©NZNTLM)rr"r r rÚtestImpersonateNTLM9szTestSSPI.testImpersonateNTLMc Csê| |¡\}}|j tj¡}tdƒ}|d}t ¡}| t  t |ƒtj ¡¡| t  |tj ¡¡||d_ |j d|d¡|j |d¡| ||dj ¡tdƒ}| |¡\} } | | | | ¡|¡| |¡\} } | | | | ¡|¡dS)Nú some data to be encrypted ......ÚSecurityTrailerrrÚhello)rrÚQueryContextAttributesr ÚSECPKG_ATTR_SIZESrrÚPySecBufferDescTypeÚappendÚPySecBufferTypeÚlenÚSECBUFFER_DATAÚSECBUFFER_TOKENÚBufferÚEncryptMessageÚDecryptMessagerÚencryptÚdecrypt) rrrrÚ pkg_size_infoÚmsgÚ trailersizeÚencbufZdata_inÚdataZsigr r rÚ_doTestEncrypt<s(ÿ ÿ zTestSSPI._doTestEncryptc Cs| |¡\}}|j tj¡}tdƒ}|d}|d}t ¡}| t  |tj ¡¡| t  t |ƒtj ¡¡| t  |tj ¡¡||d_|j d|d¡|dj|dj|dj} t ¡} |  t  t | ƒtj¡¡|  t  dtj ¡¡| | d_|j | d¡| || dj¡dS)Nr&r'Z BlockSizerré)rrr)r r*rrr+r,r-r0r.r/ZSECBUFFER_PADDINGr1r2ZSECBUFFER_STREAMr3r) rrrrr6r7r8Ú blocksizer9ZencmsgZdecbufr r rÚ_doTestEncryptStreamVs4ÿ ÿ ÿ ÿ zTestSSPI._doTestEncryptStreamcCs| d¡dSr$)r;r"r r rÚtestEncryptNTLMyszTestSSPI.testEncryptNTLMcCs| d¡dSr$)r>r"r r rÚtestEncryptStreamNTLM|szTestSSPI.testEncryptStreamNTLMcCst|jdƒdSr )rr;r"r r rÚtestEncryptKerberosszTestSSPI.testEncryptKerberoscCst|jdƒdSr )rr>r"r r rÚtestEncryptStreamKerberos‚sz"TestSSPI.testEncryptStreamKerberosc Cs| |¡\}}|j tj¡}tdƒ}|d}t ¡}| t  t |ƒtj ¡¡| t  |tj ¡¡||d_ |j d|d¡|j |d¡d|_d|_tdƒ}| |¡} | || ¡| |¡} | tj|j||| ¡| |¡} | || ¡| |¡} | tj|j||| ¡dS)Nr&Z MaxSignaturerrr()rrr)r r*rrr+r,r-r.r/r0r1Z MakeSignatureZVerifySignatureZ next_seq_numÚsignÚverifyrZSEC_E_MESSAGE_ALTERED) rrrrr6r7ZsigsizeZsigbufr:Úkeyr r rÚ _doTestSign…s6ÿ    ÿ   ÿzTestSSPI._doTestSigncCs| d¡dSr$)rFr"r r rÚ testSignNTLM§szTestSSPI.testSignNTLMcCst|jdƒdSr )rrFr"r r rÚtestSignKerberosªszTestSSPI.testSignKerberoscCs:| d¡\}}| d¡}| d¡| tj|jd|¡dS©Nr!shello)rrCrr ÚSEC_E_OUT_OF_SEQUENCErD)rrrrEr r rÚ_testSequenceSign­s    ÿzTestSSPI._testSequenceSigncCst|jƒdSr)rrKr"r r rÚtestSequenceSign¶szTestSSPI.testSequenceSigncCsB| d¡\}}| d¡\}}| d¡\}}| tj|j||¡dSrI)rr4rr rJr5)rrrZblobrEr r rÚ_testSequenceEncrypt¹s  ÿzTestSSPI._testSequenceEncryptcCst|jƒdSr)rrMr"r r rÚtestSequenceEncryptÂszTestSSPI.testSequenceEncryptcCs t ¡}t dt|ƒ¡sJ‚t dtj¡}t dt|ƒ¡s>J‚| |¡t dt|ƒ¡s\J‚t dtj ¡}t dt|ƒ¡s~J‚| |¡t dt|ƒ¡sœJ‚dS)NzNPySecBufferDesc\(ulVersion: 0 \| cBuffers: 0 \| pBuffers: 0x[\da-fA-F]{8,16}\)rzKPySecBuffer\(cbBuffer: 0 \| BufferType: 2 \| pvBuffer: 0x[\da-fA-F]{8,16}\)zNPySecBufferDesc\(ulVersion: 0 \| cBuffers: 1 \| pBuffers: 0x[\da-fA-F]{8,16}\)ézKPySecBuffer\(cbBuffer: 4 \| BufferType: 1 \| pvBuffer: 0x[\da-fA-F]{8,16}\)zNPySecBufferDesc\(ulVersion: 0 \| cBuffers: 2 \| pBuffers: 0x[\da-fA-F]{8,16}\)) rr+ÚreÚmatchÚreprr-r r0r,r/)rZdescZbuffer1Zbuffer2r r rÚtestSecBufferReprÅs2þþ þþ þzTestSSPI.testSecBufferReprN)Ú__name__Ú __module__Ú __qualname__rrrr#r%r;r>r?r@rArBrFrGrHrKrLrMrNrSr r r rrs& #"  rÚ__main__)rPZunittestrr rrZpywin32_testutilrrrrZTestCaserrTr r r rÚs J