aboutsummaryrefslogtreecommitdiff
path: root/doc/doxyout/ntlm/html/test_ntlm_8c-example.html
blob: 8c895b09c7fe680b3f979b81c8491186627c95ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>test_ntlm.c</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<p>
<a href="http://www.h5l.org/"><img src="http://www.h5l.org/keyhole-heimdal.png" alt="keyhole logo"/></a>
</p>
<!-- end of header marker -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">test_ntlm.c</div>  </div>
</div><!--header-->
<div class="contents">
<p>Example how to use the NTLM primitives.</p>
<div class="fragment"><div class="line"><span class="comment">/*</span></div><div class="line"><span class="comment"> * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan</span></div><div class="line"><span class="comment"> * (Royal Institute of Technology, Stockholm, Sweden).</span></div><div class="line"><span class="comment"> * All rights reserved.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><span class="comment"> * modification, are permitted provided that the following conditions</span></div><div class="line"><span class="comment"> * are met:</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><span class="comment"> *    notice, this list of conditions and the following disclaimer.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><span class="comment"> *    notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><span class="comment"> *    documentation and/or other materials provided with the distribution.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> * 3. Neither the name of KTH nor the names of its contributors may be</span></div><div class="line"><span class="comment"> *    used to endorse or promote products derived from this software without</span></div><div class="line"><span class="comment"> *    specific prior written permission.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS&#39;&#39; AND ANY</span></div><div class="line"><span class="comment"> * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></div><div class="line"><span class="comment"> * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE</span></div><div class="line"><span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR</span></div><div class="line"><span class="comment"> * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span></div><div class="line"><span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</span></div><div class="line"><span class="comment"> * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF</span></div><div class="line"><span class="comment"> * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><span class="comment"> */</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;config.h&quot;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;err.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;roken.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;getarg.h&gt;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;krb5-types.h&gt;</span> <span class="comment">/* or &lt;inttypes.h&gt; */</span></div><div class="line"><span class="preprocessor">#include &lt;heimntlm.h&gt;</span></div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> dumpdata_flag;</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_parse(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *user = <span class="stringliteral">&quot;foo&quot;</span>,</div><div class="line">        *domain = <span class="stringliteral">&quot;mydomain&quot;</span>,</div><div class="line">        *hostname = <span class="stringliteral">&quot;myhostname&quot;</span>,</div><div class="line">        *password = <span class="stringliteral">&quot;digestpassword&quot;</span>,</div><div class="line">        *target = <span class="stringliteral">&quot;DOMAIN&quot;</span>;</div><div class="line">    <span class="keyword">struct </span><a name="_a0"></a><a class="code" href="structntlm__type1.html">ntlm_type1</a> type1;</div><div class="line">    <span class="keyword">struct </span><a name="_a1"></a><a class="code" href="structntlm__type2.html">ntlm_type2</a> type2;</div><div class="line">    <span class="keyword">struct </span><a name="_a2"></a><a class="code" href="structntlm__type3.html">ntlm_type3</a> type3;</div><div class="line">    <span class="keyword">struct </span><a name="_a3"></a><a class="code" href="structntlm__buf.html">ntlm_buf</a> data;</div><div class="line">    <span class="keywordtype">int</span> ret, flags;</div><div class="line"></div><div class="line">    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));</div><div class="line"></div><div class="line">    type1.<a name="a4"></a>flags = NTLM_NEG_UNICODE|NTLM_NEG_TARGET|NTLM_NEG_NTLM|NTLM_NEG_VERSION;</div><div class="line">    type1.<a name="a5"></a>domain = rk_UNCONST(domain);</div><div class="line">    type1.<a name="a6"></a>hostname = rk_UNCONST(hostname);</div><div class="line">    type1.<a name="a7"></a>os[0] = 0;</div><div class="line">    type1.os[1] = 0;</div><div class="line"></div><div class="line">    ret = <a name="a8"></a><a class="code" href="group__ntlm__core.html#ga0107727234287ac61a8801b0faff9dff">heim_ntlm_encode_type1</a>(&amp;type1, &amp;data);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type1&quot;</span>);</div><div class="line"></div><div class="line">    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div><div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type1&quot;</span>, data.<a name="a9"></a><a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, data.<a name="a10"></a><a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>);</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type1(&amp;data, &amp;type1);</div><div class="line">    free(data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type1&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (strcmp(type1.domain, domain) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;parser got domain wrong: %s&quot;</span>, type1.domain);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (strcmp(type1.hostname, hostname) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;parser got hostname wrong: %s&quot;</span>, type1.hostname);</div><div class="line"></div><div class="line">    <a name="a11"></a><a class="code" href="group__ntlm__core.html#ga76fa6caf3f539e24008e31613f5eb663">heim_ntlm_free_type1</a>(&amp;type1);</div><div class="line"></div><div class="line">    <span class="comment">/*</span></div><div class="line"><span class="comment">     *</span></div><div class="line"><span class="comment">     */</span></div><div class="line"></div><div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div><div class="line"></div><div class="line">    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;</div><div class="line">    type2.<a name="a12"></a>flags = flags;</div><div class="line"></div><div class="line">    memset(type2.<a name="a13"></a>challenge, 0x7f, <span class="keyword">sizeof</span>(type2.challenge));</div><div class="line">    type2.<a name="a14"></a>targetname = rk_UNCONST(target);</div><div class="line">    type2.<a name="a15"></a>targetinfo.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;</div><div class="line">    type2.targetinfo.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;</div><div class="line"></div><div class="line">    ret = <a name="a16"></a><a class="code" href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;data);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2&quot;</span>);</div><div class="line"></div><div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div><div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type2&quot;</span>, data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>);</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type2(&amp;data, &amp;type2);</div><div class="line">    free(data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2&quot;</span>);</div><div class="line"></div><div class="line">    <a name="a17"></a><a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div><div class="line"></div><div class="line">    <span class="comment">/*</span></div><div class="line"><span class="comment">     *</span></div><div class="line"><span class="comment">     */</span></div><div class="line"></div><div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div><div class="line"></div><div class="line">    type3.<a name="a18"></a>flags = flags;</div><div class="line">    type3.<a name="a19"></a>username = rk_UNCONST(user);</div><div class="line">    type3.<a name="a20"></a>targetname = rk_UNCONST(target);</div><div class="line">    type3.<a name="a21"></a>ws = rk_UNCONST(<span class="stringliteral">&quot;workstation&quot;</span>);</div><div class="line"></div><div class="line">    {</div><div class="line">        <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> key;</div><div class="line">        <a name="a22"></a><a class="code" href="group__ntlm__core.html#ga254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(password, &amp;key);</div><div class="line"></div><div class="line">        <a name="a23"></a><a class="code" href="group__ntlm__core.html#gae3b634802ef94233a175291abd2ea14d">heim_ntlm_calculate_ntlm1</a>(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, key.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>,</div><div class="line">                                  type2.challenge,</div><div class="line">                                  &amp;type3.<a name="a24"></a>ntlm);</div><div class="line">        free(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    }</div><div class="line"></div><div class="line">    ret = <a name="a25"></a><a class="code" href="group__ntlm__core.html#gade200095bfa40a73cfd4154010cc6e76">heim_ntlm_encode_type3</a>(&amp;type3, &amp;data, NULL);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type3&quot;</span>);</div><div class="line"></div><div class="line">    free(type3.ntlm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line"></div><div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div><div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type3&quot;</span>, data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>);</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type3(&amp;data, 1, &amp;type3);</div><div class="line">    free(data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type3&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">&quot;workstation&quot;</span>, type3.ws) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;type3 ws wrong&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (strcmp(target, type3.targetname) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;type3 targetname wrong&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (strcmp(user, type3.username) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;type3 username wrong&quot;</span>);</div><div class="line"></div><div class="line"></div><div class="line">    <a name="a26"></a><a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;type3);</div><div class="line"></div><div class="line">    <span class="comment">/*</span></div><div class="line"><span class="comment">     * NTLMv2</span></div><div class="line"><span class="comment">     */</span></div><div class="line"></div><div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div><div class="line"></div><div class="line">    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;</div><div class="line">    type2.flags = flags;</div><div class="line"></div><div class="line">    memset(type2.challenge, 0x7f, <span class="keyword">sizeof</span>(type2.challenge));</div><div class="line">    type2.targetname = rk_UNCONST(target);</div><div class="line">    type2.targetinfo.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = <span class="stringliteral">&quot;\x00\x00&quot;</span>;</div><div class="line">    type2.targetinfo.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 2;</div><div class="line"></div><div class="line">    ret = <a class="code" href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;data);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2&quot;</span>);</div><div class="line"></div><div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type2(&amp;data, &amp;type2);</div><div class="line">    free(data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2&quot;</span>);</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_keys(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span></div><div class="line">        *username = <span class="stringliteral">&quot;test&quot;</span>,</div><div class="line">        *password = <span class="stringliteral">&quot;test1234&quot;</span>,</div><div class="line">        *target = <span class="stringliteral">&quot;TESTNT&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div><div class="line">        serverchallenge[8] = <span class="stringliteral">&quot;\x67\x7f\x1c\x55\x7a\x5e\xe9\x6c&quot;</span>;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> infotarget, infotarget2, answer, key;</div><div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlmv2[16], ntlmv2_1[16];</div><div class="line">    <span class="keywordtype">int</span> ret;</div><div class="line"></div><div class="line">    infotarget.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 70;</div><div class="line">    infotarget.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> =</div><div class="line">        <span class="stringliteral">&quot;\x02\x00\x0c\x00\x54\x00\x45\x00\x53\x00\x54\x00\x4e\x00\x54\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x01\x00\x0c\x00\x4d\x00\x45\x00\x4d\x00\x42\x00\x45\x00\x52\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x03\x00\x1e\x00\x6d\x00\x65\x00\x6d\x00\x62\x00\x65\x00\x72\x00&quot;</span></div><div class="line">            <span class="stringliteral">&quot;\x2e\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e\x00\x63\x00\x6f&quot;</span></div><div class="line">            <span class="stringliteral">&quot;\x00\x6d\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00&quot;</span>;</div><div class="line"></div><div class="line">    answer.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;</div><div class="line">    answer.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#ga254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(password, &amp;key);</div><div class="line"></div><div class="line">    ret = <a name="a27"></a><a class="code" href="group__ntlm__core.html#gaa8f07fb71a0d5f095cde3fb9fb40d10c">heim_ntlm_calculate_ntlm2</a>(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>,</div><div class="line">                                    key.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>,</div><div class="line">                                    username,</div><div class="line">                                    target,</div><div class="line">                                    serverchallenge,</div><div class="line">                                    &amp;infotarget,</div><div class="line">                                    ntlmv2,</div><div class="line">                                    &amp;answer);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_calculate_ntlm2&quot;</span>);</div><div class="line"></div><div class="line">    ret = <a name="a28"></a><a class="code" href="group__ntlm__core.html#ga3b3d6a5187cab6bfe656afa7a8273ca6">heim_ntlm_verify_ntlm2</a>(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>,</div><div class="line">                                 key.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>,</div><div class="line">                                 username,</div><div class="line">                                 target,</div><div class="line">                                 0,</div><div class="line">                                 serverchallenge,</div><div class="line">                                 &amp;answer,</div><div class="line">                                 &amp;infotarget2,</div><div class="line">                                 ntlmv2_1);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_verify_ntlm2&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (memcmp(ntlmv2, ntlmv2_1, <span class="keyword">sizeof</span>(ntlmv2)) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ntlm master key not same&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (infotarget.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> &gt; infotarget2.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>)</div><div class="line">        errx(1, <span class="stringliteral">&quot;infotarget length&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (memcmp(infotarget.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, infotarget2.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, infotarget.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;infotarget not the same&quot;</span>);</div><div class="line"></div><div class="line">    free(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    free(answer.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    free(infotarget2.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_ntlm2_session_resp(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keywordtype">int</span> ret;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> lm, ntlm;</div><div class="line"></div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> lm_resp[24] =</div><div class="line">        <span class="stringliteral">&quot;\xff\xff\xff\x00\x11\x22\x33\x44&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x00&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm2_sess_resp[24] =</div><div class="line">        <span class="stringliteral">&quot;\x10\xd5\x50\x83\x2d\x12\xb2\xcc&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xb7\x9d\x5a\xd1\xf4\xee\xd3\xdf&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x82\xac\xa4\xc3\x68\x1d\xd4\x55&quot;</span>;</div><div class="line"></div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> client_nonce[8] =</div><div class="line">        <span class="stringliteral">&quot;\xff\xff\xff\x00\x11\x22\x33\x44&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> server_challenge[8] =</div><div class="line">        <span class="stringliteral">&quot;\x01\x23\x45\x67\x89\xab\xcd\xef&quot;</span>;</div><div class="line"></div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm_hash[16] =</div><div class="line">        <span class="stringliteral">&quot;\xcd\x06\xca\x7c\x7e\x10\xc9\x9b&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x1d\x33\xb7\x48\x5a\x2e\xd8\x08&quot;</span>;</div><div class="line"></div><div class="line">    ret = heim_ntlm_calculate_ntlm2_sess(client_nonce,</div><div class="line">                                         server_challenge,</div><div class="line">                                         ntlm_hash,</div><div class="line">                                         &amp;lm,</div><div class="line">                                         &amp;ntlm);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_calculate_ntlm2_sess_resp&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (lm.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> != 24 || memcmp(lm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, lm_resp, 24) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;lm_resp wrong&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (ntlm.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> != 24 || memcmp(ntlm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, ntlm2_sess_resp, 24) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ntlm2_sess_resp wrong&quot;</span>);</div><div class="line"></div><div class="line">    free(lm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line">    free(ntlm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div><div class="line"></div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_ntlmv2(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type3[413] = </div><div class="line">        <span class="stringliteral">&quot;\x4e\x54\x4c\x4d\x53\x53\x50\x00\x03\x00\x00\x00\x18\x00\x18\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x80\x00\x00\x00\x9e\x00\x9e\x00\x98\x00\x00\x00\x14\x00\x14\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x48\x00\x00\x00\x10\x00\x10\x00\x5c\x00\x00\x00\x14\x00\x14\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6c\x00\x00\x00\x00\x00\x00\x00\x36\x01\x00\x00\x05\x82\x88\xa2&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x05\x01\x28\x0a\x00\x00\x00\x0f\x43\x00\x4f\x00\x4c\x00\x4c\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x45\x00\x59\x00\x2d\x00\x58\x00\x50\x00\x34\x00\x54\x00\x45\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x53\x00\x54\x00\x55\x00\x53\x00\x45\x00\x52\x00\x43\x00\x4f\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x4c\x00\x4c\x00\x45\x00\x59\x00\x2d\x00\x58\x00\x50\x00\x34\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x2f\x96\xec\x0a\xf7\x9f\x2e\x24\xba\x09\x48\x10\xa5\x22\xd4\xe1&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x16\x6a\xca\x58\x74\x9a\xc1\x4f\x54\x6f\xee\x40\x96\xce\x43\x6e&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xdf\x99\x20\x71\x6c\x9a\xda\x2a\x01\x01\x00\x00\x00\x00\x00\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x8d\xc0\x57\xc9\x79\x5e\xcb\x01\x16\x6a\xca\x58\x74\x9a\xc1\x4f&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x02\x00\x14\x00\x4e\x00\x55\x00\x54\x00\x43\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x52\x00\x41\x00\x43\x00\x4b\x00\x45\x00\x52\x00\x01\x00\x14\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x4e\x00\x55\x00\x54\x00\x43\x00\x52\x00\x41\x00\x43\x00\x4b\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x45\x00\x52\x00\x04\x00\x12\x00\x61\x00\x70\x00\x70\x00\x6c\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x03\x00\x20\x00\x68\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x75\x00\x6d\x00\x6d\x00\x65\x00\x6c\x00\x2e\x00\x61\x00\x70\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x70\x00\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x00\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x53\x00\x65\x00\x72\x00\x76\x00\x69\x00\x63\x00\x65\x00\x20&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x50\x00\x61\x00\x63\x00\x6b\x00\x20\x00\x33\x00\x20\x00\x32&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x36\x00\x30\x00\x30\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x00\x00&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> challenge[8] = </div><div class="line">        <span class="stringliteral">&quot;\xe4\x9c\x6a\x12\xe1\xbd\xde\x6a&quot;</span>;</div><div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> sessionkey[16];</div><div class="line"></div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> key[16] = <span class="stringliteral">&quot;\xD1\x83\x98\x3E\xAE\xA7\xBE\x99\x59\xC8\xF4\xC1\x98\xED\x0E\x68&quot;</span>;</div><div class="line"></div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> data;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type3.html">ntlm_type3</a> t3;</div><div class="line">    <span class="keywordtype">int</span> ret;</div><div class="line"></div><div class="line">    <span class="keyword">struct </span>ntlm_targetinfo ti;</div><div class="line"></div><div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> timsg[114] = </div><div class="line">        <span class="stringliteral">&quot;\002\000\024\000N\000U\000T\000C\000R\000A\000C\000K\000E\000R\000\001\000\024\000N\000U\000T\000C\000R\000A\000C\000K\000E\000R\000\004\000\022\000a\000p\000p\000l\000e\000.\000c\000o\000m\000\003\000 \000h\000u\000m\000m\000e\000l\000.\000a\000p\000p\000l\000e\000.\000c\000o\000m\000\000\000\000\000\000\000\000&quot;</span>;</div><div class="line"></div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = type3;</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = <span class="keyword">sizeof</span>(type3);</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type3(&amp;data, 1, &amp;t3);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type3&quot;</span>);</div><div class="line">    </div><div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = timsg;</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = <span class="keyword">sizeof</span>(timsg);</div><div class="line"></div><div class="line">    ret = <a name="a29"></a><a class="code" href="group__ntlm__core.html#gaf1d4de2faec8b1c1070a55fd2e6e630f">heim_ntlm_decode_targetinfo</a>(&amp;data, 1, &amp;ti);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        <span class="keywordflow">return</span> ret;</div><div class="line"></div><div class="line">    ret = <a class="code" href="group__ntlm__core.html#ga3b3d6a5187cab6bfe656afa7a8273ca6">heim_ntlm_verify_ntlm2</a>(key, <span class="keyword">sizeof</span>(key),</div><div class="line">                                 t3.username,</div><div class="line">                                 t3.targetname,</div><div class="line">                                 1285615547,</div><div class="line">                                 challenge,</div><div class="line">                                 &amp;t3.ntlm,</div><div class="line">                                 &amp;data,</div><div class="line">                                 sessionkey);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;verify_ntlmv2&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(timsg) != data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> || memcmp(timsg, data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, <span class="keyword">sizeof</span>(timsg)) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;target info wrong: %d != %d&quot;</span>,</div><div class="line">             (<span class="keywordtype">int</span>)<span class="keyword">sizeof</span>(timsg), (<span class="keywordtype">int</span>)data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a>);</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;t3);</div><div class="line">    <a name="a30"></a><a class="code" href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&amp;ti);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_targetinfo(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keyword">struct </span>ntlm_targetinfo ti;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> buf;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *dnsservername = <span class="stringliteral">&quot;dnsservername&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *targetname = <span class="stringliteral">&quot;targetname&quot;</span>;</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> z16[16] = { 0 };</div><div class="line">    <span class="keywordtype">int</span> ret;</div><div class="line"></div><div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div><div class="line"></div><div class="line">    ti.dnsservername = rk_UNCONST(dnsservername);</div><div class="line">    ti.avflags = 1;</div><div class="line">    ti.targetname = rk_UNCONST(targetname);</div><div class="line">    ti.channel_bindings.data = rk_UNCONST(z16);</div><div class="line">    ti.channel_bindings.length = <span class="keyword">sizeof</span>(z16);</div><div class="line"></div><div class="line">    ret = <a name="a31"></a><a class="code" href="group__ntlm__core.html#ga2881747fad2ac2979a28d3bd050b0fa8">heim_ntlm_encode_targetinfo</a>(&amp;ti, 1, &amp;buf);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        <span class="keywordflow">return</span> ret;</div><div class="line"></div><div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div><div class="line"></div><div class="line">    ret = <a class="code" href="group__ntlm__core.html#gaf1d4de2faec8b1c1070a55fd2e6e630f">heim_ntlm_decode_targetinfo</a>(&amp;buf, 1, &amp;ti);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        <span class="keywordflow">return</span> ret;</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (ti.dnsservername == NULL ||</div><div class="line">        strcmp(ti.dnsservername, dnsservername) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ti.dnshostname != %s&quot;</span>, dnsservername);</div><div class="line">    <span class="keywordflow">if</span> (ti.avflags != 1)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ti.avflags != 1&quot;</span>);</div><div class="line">    <span class="keywordflow">if</span> (ti.targetname == NULL ||</div><div class="line">        strcmp(ti.targetname, targetname) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ti.targetname != %s&quot;</span>, targetname);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (ti.channel_bindings.length != <span class="keyword">sizeof</span>(z16) ||</div><div class="line">        memcmp(ti.channel_bindings.data, z16, <span class="keyword">sizeof</span>(z16)) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;ti.channel_bindings != Z(16)&quot;</span>);</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&amp;ti);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_string2key(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *pw = <span class="stringliteral">&quot;山田&quot;</span>;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> buf;</div><div class="line"></div><div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> key[16] = {</div><div class="line">        0xc6, 0x5d, 0xc7, 0x61, 0xa1, 0x34, 0x17, 0xa1,</div><div class="line">        0x17, 0x08, 0x9c, 0x1b, 0xb0, 0x0d, 0x0f, 0x19</div><div class="line">    };</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (<a class="code" href="group__ntlm__core.html#ga254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(pw, &amp;buf) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlmv_nt_key(jp)&quot;</span>);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (buf.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> != 16 || memcmp(buf.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, key, 16) != 0)</div><div class="line">        errx(1, <span class="stringliteral">&quot;compare failed&quot;</span>);</div><div class="line"></div><div class="line">    <a name="a32"></a><a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;buf);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line">test_jp(<span class="keywordtype">void</span>)</div><div class="line">{</div><div class="line">    <span class="keywordtype">char</span> buf2[220] =</div><div class="line">        <span class="stringliteral">&quot;\x4e\x54\x4c\x4d\x53\x53\x50\x00\x02\x00\x00\x00\x06\x00\x06\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x38\x00\x00\x00\x05\x02\x89\x62\x62\x94\xb1\xf3\x56\x80\xb0\xf9&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x3e\x00\x00\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x06\x01\xb0\x1d\x00\x00\x00\x0f\x43\x00\x4f\x00\x53\x00\x02\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x06\x00\x43\x00\x4f\x00\x53\x00\x01\x00\x12\x00\x43\x00\x4f\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x53\x00\x57\x00\x49\x00\x4e\x00\x37\x00\x4a\x00\x50\x00\x04\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x1a\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x03\x00\x2e\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x63\x00\x6f\x00\x73\x00\x77\x00\x69\x00\x6e\x00\x37\x00\x6a\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x70\x00\x2e\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x70\x00\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x05\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x1a\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x07\x00\x08\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x94\x51\xf0\xbd\xdc\x61\xcb\x01\x00\x00\x00\x00&quot;</span>;</div><div class="line"></div><div class="line">    <span class="keywordtype">char</span> buf3[362] =</div><div class="line">        <span class="stringliteral">&quot;\x4e\x54\x4c\x4d\x53\x53\x50\x00\x03\x00\x00\x00\x18\x00\x18\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x74\x00\x00\x00\xce\x00\xce\x00\x8c\x00\x00\x00\x1a\x00\x1a\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x40\x00\x00\x00\x04\x00\x04\x00\x5a\x00\x00\x00\x16\x00\x16\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x5e\x00\x00\x00\x10\x00\x10\x00\x5a\x01\x00\x00\x05\x02\x89\x62&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x31\x00\x37\x00\x2e\x00\x32\x00\x30\x00\x31\x00\x2e\x00\x35\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x37\x00\x2e\x00\x31\x00\x32\x00\x31\x00\x71\x5c\x30\x75\x77\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6f\x00\x72\x00\x6b\x00\x73\x00\x74\x00\x61\x00\x74\x00\x69\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6f\x00\x6e\x00\xab\xad\xeb\x72\x01\xd4\x5f\xdf\x59\x07\x5f\xa9&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xfd\x54\x98\x2d\xfa\x17\xbb\xf1\x3c\x8f\xf5\x20\xe6\x8f\xd7\x0a&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xc9\x19\x3e\x94\x61\x31\xdb\x0f\x55\xe8\xe2\x53\x01\x01\x00\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x06\x3e\x30\xe4\x61\xcb\x01\x71\x98\x10\x6b&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x4c\x82\xec\xb3\x00\x00\x00\x00\x02\x00\x06\x00\x43\x00\x4f\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x53\x00\x01\x00\x12\x00\x43\x00\x4f\x00\x53\x00\x57\x00\x49\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x4e\x00\x37\x00\x4a\x00\x50\x00\x04\x00\x1a\x00\x63\x00\x6f\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00\x2e\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x63\x00\x6f\x00\x6d\x00\x03\x00\x2e\x00\x63\x00\x6f\x00\x73\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x77\x00\x69\x00\x6e\x00\x37\x00\x6a\x00\x70\x00\x2e\x00\x63\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x2e\x00\x63\x00\x6f\x00\x6d\x00\x05\x00\x1a\x00\x63\x00\x6f\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00\x2e\x00&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\x63\x00\x6f\x00\x6d\x00\x07\x00\x08\x00\xab\xec\xcc\x30\xe4\x61&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x2e\xba\x3f\xd1\xb1&quot;</span></div><div class="line">        <span class="stringliteral">&quot;\xa7\x70\x00\x9d\x55\xa0\x59\x74\x2b\x78&quot;</span>;</div><div class="line"></div><div class="line"></div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type2.html">ntlm_type2</a> type2;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type3.html">ntlm_type3</a> type3;</div><div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> data;</div><div class="line">    <span class="keywordtype">int</span> ret;</div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = <span class="keyword">sizeof</span>(buf2);</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = buf2;</div><div class="line"></div><div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type2(&amp;data, &amp;type2);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;</div><div class="line"></div><div class="line">    ret = <a class="code" href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;data);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2(jp): %d&quot;</span>, ret);</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div><div class="line">    <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;data);</div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = <span class="keyword">sizeof</span>(buf3);</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = buf3;</div><div class="line"></div><div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div><div class="line"></div><div class="line">    ret = heim_ntlm_decode_type3(&amp;data, 1, &amp;type3);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div><div class="line"></div><div class="line">    data.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;</div><div class="line">    data.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;</div><div class="line"></div><div class="line">    ret = <a class="code" href="group__ntlm__core.html#gade200095bfa40a73cfd4154010cc6e76">heim_ntlm_encode_type3</a>(&amp;type3, &amp;data, NULL);</div><div class="line">    <span class="keywordflow">if</span> (ret)</div><div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div><div class="line"></div><div class="line">    <a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;type3);</div><div class="line">    <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;data);</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> 0;</div><div class="line">}</div><div class="line"></div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> verbose_flag = 0;</div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> version_flag = 0;</div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> help_flag    = 0;</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keyword">struct </span>getargs args[] = {</div><div class="line">    {<span class="stringliteral">&quot;verbose&quot;</span>, 0,      arg_flag,       &amp;verbose_flag, <span class="stringliteral">&quot;verbose printing&quot;</span>, NULL },</div><div class="line">    {<span class="stringliteral">&quot;version&quot;</span>, 0,      arg_flag,       &amp;version_flag, <span class="stringliteral">&quot;print version&quot;</span>, NULL },</div><div class="line">    {<span class="stringliteral">&quot;help&quot;</span>,    0,      arg_flag,       &amp;help_flag,  NULL, NULL }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line">usage (<span class="keywordtype">int</span> ret)</div><div class="line">{</div><div class="line">    arg_printusage (args, <span class="keyword">sizeof</span>(args)/<span class="keyword">sizeof</span>(*args),</div><div class="line">                    NULL, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line">    exit (ret);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keywordtype">int</span></div><div class="line">main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div><div class="line">{</div><div class="line">    <span class="keywordtype">int</span> ret = 0, optidx = 0;</div><div class="line"></div><div class="line">    setprogname(argv[0]);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span>(getarg(args, <span class="keyword">sizeof</span>(args) / <span class="keyword">sizeof</span>(args[0]), argc, argv, &amp;optidx))</div><div class="line">        usage(1);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (help_flag)</div><div class="line">        usage (0);</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span>(version_flag){</div><div class="line">        print_version(NULL);</div><div class="line">        exit(0);</div><div class="line">    }</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_parse\n&quot;</span>);</div><div class="line">    ret |= test_parse();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_keys\n&quot;</span>);</div><div class="line">    ret |= test_keys();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_ntlm2_session_resp\n&quot;</span>);</div><div class="line">    ret |= test_ntlm2_session_resp();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_targetinfo\n&quot;</span>);</div><div class="line">    ret |= test_targetinfo();</div><div class="line">        </div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_ntlmv2\n&quot;</span>);</div><div class="line">    ret |= test_ntlmv2();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_string2key\n&quot;</span>);</div><div class="line">    ret |= test_string2key();</div><div class="line"></div><div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div><div class="line">        printf(<span class="stringliteral">&quot;test_jp\n&quot;</span>);</div><div class="line">    ret |= test_jp();</div><div class="line"></div><div class="line">    <span class="keywordflow">return</span> ret;</div><div class="line">}</div></div><!-- fragment --> </div><!-- contents -->
<hr size="1"><address style="text-align: right;"><small>
Generated on Fri Dec 8 2017 03:49:00 for Heimdalntlmlibrary by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.8.13</small></address>
</body>
</html>