xref: /netbsd-src/crypto/external/bsd/heimdal/dist/doc/doxyout/ntlm/html/test_ntlm_8c-example.html (revision dd75ac5b443e967e26b4d18cc8cd5eb98512bfbf)
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>test_ntlm.c</title>
4<link href="doxygen.css" rel="stylesheet" type="text/css">
5<link href="tabs.css" rel="stylesheet" type="text/css">
6</head><body>
7<p>
8<a href="http://www.h5l.org/"><img src="http://www.h5l.org/keyhole-heimdal.png" alt="keyhole logo"/></a>
9</p>
10<!-- end of header marker -->
11<!-- Generated by Doxygen 1.9.1 -->
12<script type="text/javascript" src="menudata.js"></script>
13<script type="text/javascript" src="menu.js"></script>
14<script type="text/javascript">
15/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
16$(function() {
17  initMenu('',false,false,'search.php','Search');
18});
19/* @license-end */</script>
20<div id="main-nav"></div>
21</div><!-- top -->
22<div class="header">
23  <div class="headertitle">
24<div class="title">test_ntlm.c</div>  </div>
25</div><!--header-->
26<div class="contents">
27<p>Example how to use the NTLM primitives.</p>
28<div class="fragment"><div class="line"><span class="comment">/*</span></div>
29<div class="line"><span class="comment"> * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan</span></div>
30<div class="line"><span class="comment"> * (Royal Institute of Technology, Stockholm, Sweden).</span></div>
31<div class="line"><span class="comment"> * All rights reserved.</span></div>
32<div class="line"><span class="comment"> *</span></div>
33<div class="line"><span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div>
34<div class="line"><span class="comment"> * modification, are permitted provided that the following conditions</span></div>
35<div class="line"><span class="comment"> * are met:</span></div>
36<div class="line"><span class="comment"> *</span></div>
37<div class="line"><span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div>
38<div class="line"><span class="comment"> *    notice, this list of conditions and the following disclaimer.</span></div>
39<div class="line"><span class="comment"> *</span></div>
40<div class="line"><span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div>
41<div class="line"><span class="comment"> *    notice, this list of conditions and the following disclaimer in the</span></div>
42<div class="line"><span class="comment"> *    documentation and/or other materials provided with the distribution.</span></div>
43<div class="line"><span class="comment"> *</span></div>
44<div class="line"><span class="comment"> * 3. Neither the name of KTH nor the names of its contributors may be</span></div>
45<div class="line"><span class="comment"> *    used to endorse or promote products derived from this software without</span></div>
46<div class="line"><span class="comment"> *    specific prior written permission.</span></div>
47<div class="line"><span class="comment"> *</span></div>
48<div class="line"><span class="comment"> * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS&#39;&#39; AND ANY</span></div>
49<div class="line"><span class="comment"> * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div>
50<div class="line"><span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span></div>
51<div class="line"><span class="comment"> * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE</span></div>
52<div class="line"><span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div>
53<div class="line"><span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div>
54<div class="line"><span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR</span></div>
55<div class="line"><span class="comment"> * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span></div>
56<div class="line"><span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</span></div>
57<div class="line"><span class="comment"> * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF</span></div>
58<div class="line"><span class="comment"> * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div>
59<div class="line"><span class="comment"> */</span></div>
60<div class="line"> </div>
61<div class="line"><span class="preprocessor">#include &quot;config.h&quot;</span></div>
62<div class="line"> </div>
63<div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
64<div class="line"><span class="preprocessor">#include &lt;err.h&gt;</span></div>
65<div class="line"><span class="preprocessor">#include &lt;roken.h&gt;</span></div>
66<div class="line"><span class="preprocessor">#include &lt;getarg.h&gt;</span></div>
67<div class="line"> </div>
68<div class="line"><span class="preprocessor">#include &lt;krb5-types.h&gt;</span> <span class="comment">/* or &lt;inttypes.h&gt; */</span></div>
69<div class="line"><span class="preprocessor">#include &lt;heimntlm.h&gt;</span></div>
70<div class="line"> </div>
71<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> dumpdata_flag;</div>
72<div class="line"> </div>
73<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
74<div class="line">test_parse(<span class="keywordtype">void</span>)</div>
75<div class="line">{</div>
76<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *user = <span class="stringliteral">&quot;foo&quot;</span>,</div>
77<div class="line">        *domain = <span class="stringliteral">&quot;mydomain&quot;</span>,</div>
78<div class="line">        *hostname = <span class="stringliteral">&quot;myhostname&quot;</span>,</div>
79<div class="line">        *password = <span class="stringliteral">&quot;digestpassword&quot;</span>,</div>
80<div class="line">        *target = <span class="stringliteral">&quot;DOMAIN&quot;</span>;</div>
81<div class="line">    <span class="keyword">struct </span><a name="_a0"></a><a class="code" href="structntlm__type1.html">ntlm_type1</a> type1;</div>
82<div class="line">    <span class="keyword">struct </span><a name="_a1"></a><a class="code" href="structntlm__type2.html">ntlm_type2</a> type2;</div>
83<div class="line">    <span class="keyword">struct </span><a name="_a2"></a><a class="code" href="structntlm__type3.html">ntlm_type3</a> type3;</div>
84<div class="line">    <span class="keyword">struct </span><a name="_a3"></a><a class="code" href="structntlm__buf.html">ntlm_buf</a> <a name="a4"></a><a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>;</div>
85<div class="line">    <span class="keywordtype">int</span> ret, flags;</div>
86<div class="line"> </div>
87<div class="line">    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));</div>
88<div class="line"> </div>
89<div class="line">    type1.<a name="a5"></a>flags = NTLM_NEG_UNICODE|NTLM_NEG_TARGET|NTLM_NEG_NTLM|NTLM_NEG_VERSION;</div>
90<div class="line">    type1.<a name="a6"></a>domain = rk_UNCONST(domain);</div>
91<div class="line">    type1.<a name="a7"></a>hostname = rk_UNCONST(hostname);</div>
92<div class="line">    type1.<a name="a8"></a>os[0] = 0;</div>
93<div class="line">    type1.os[1] = 0;</div>
94<div class="line"> </div>
95<div class="line">    ret = <a name="a9"></a><a class="code" href="group__ntlm__core.html#ga0107727234287ac61a8801b0faff9dff">heim_ntlm_encode_type1</a>(&amp;type1, &amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
96<div class="line">    <span class="keywordflow">if</span> (ret)</div>
97<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type1&quot;</span>);</div>
98<div class="line"> </div>
99<div class="line">    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));</div>
100<div class="line"> </div>
101<div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div>
102<div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type1&quot;</span>, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length);</div>
103<div class="line"> </div>
104<div class="line">    ret = heim_ntlm_decode_type1(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &amp;type1);</div>
105<div class="line">    free(<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data);</div>
106<div class="line">    <span class="keywordflow">if</span> (ret)</div>
107<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type1&quot;</span>);</div>
108<div class="line"> </div>
109<div class="line">    <span class="keywordflow">if</span> (strcmp(type1.domain, domain) != 0)</div>
110<div class="line">        errx(1, <span class="stringliteral">&quot;parser got domain wrong: %s&quot;</span>, type1.domain);</div>
111<div class="line"> </div>
112<div class="line">    <span class="keywordflow">if</span> (strcmp(type1.hostname, hostname) != 0)</div>
113<div class="line">        errx(1, <span class="stringliteral">&quot;parser got hostname wrong: %s&quot;</span>, type1.hostname);</div>
114<div class="line"> </div>
115<div class="line">    <a name="a10"></a><a class="code" href="group__ntlm__core.html#ga76fa6caf3f539e24008e31613f5eb663">heim_ntlm_free_type1</a>(&amp;type1);</div>
116<div class="line"> </div>
117<div class="line">    <span class="comment">/*</span></div>
118<div class="line"><span class="comment">     *</span></div>
119<div class="line"><span class="comment">     */</span></div>
120<div class="line"> </div>
121<div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div>
122<div class="line"> </div>
123<div class="line">    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;</div>
124<div class="line">    type2.<a name="a11"></a>flags = flags;</div>
125<div class="line"> </div>
126<div class="line">    memset(type2.<a name="a12"></a>challenge, 0x7f, <span class="keyword">sizeof</span>(type2.challenge));</div>
127<div class="line">    type2.<a name="a13"></a>targetname = rk_UNCONST(target);</div>
128<div class="line">    type2.<a name="a14"></a>targetinfo.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;</div>
129<div class="line">    type2.targetinfo.<a name="a15"></a><a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;</div>
130<div class="line"> </div>
131<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;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
132<div class="line">    <span class="keywordflow">if</span> (ret)</div>
133<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2&quot;</span>);</div>
134<div class="line"> </div>
135<div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div>
136<div class="line"> </div>
137<div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div>
138<div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type2&quot;</span>, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length);</div>
139<div class="line"> </div>
140<div class="line">    ret = heim_ntlm_decode_type2(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &amp;type2);</div>
141<div class="line">    free(<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data);</div>
142<div class="line">    <span class="keywordflow">if</span> (ret)</div>
143<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2&quot;</span>);</div>
144<div class="line"> </div>
145<div class="line">    <a name="a17"></a><a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div>
146<div class="line"> </div>
147<div class="line">    <span class="comment">/*</span></div>
148<div class="line"><span class="comment">     *</span></div>
149<div class="line"><span class="comment">     */</span></div>
150<div class="line"> </div>
151<div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div>
152<div class="line"> </div>
153<div class="line">    type3.<a name="a18"></a>flags = flags;</div>
154<div class="line">    type3.<a name="a19"></a>username = rk_UNCONST(user);</div>
155<div class="line">    type3.<a name="a20"></a>targetname = rk_UNCONST(target);</div>
156<div class="line">    type3.<a name="a21"></a>ws = rk_UNCONST(<span class="stringliteral">&quot;workstation&quot;</span>);</div>
157<div class="line"> </div>
158<div class="line">    {</div>
159<div class="line">        <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> key;</div>
160<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>
161<div class="line"> </div>
162<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>
163<div class="line">                                  type2.challenge,</div>
164<div class="line">                                  &amp;type3.<a name="a24"></a>ntlm);</div>
165<div class="line">        free(key.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
166<div class="line">    }</div>
167<div class="line"> </div>
168<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;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, NULL);</div>
169<div class="line">    <span class="keywordflow">if</span> (ret)</div>
170<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type3&quot;</span>);</div>
171<div class="line"> </div>
172<div class="line">    free(type3.ntlm.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
173<div class="line"> </div>
174<div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div>
175<div class="line"> </div>
176<div class="line">    <span class="keywordflow">if</span> (dumpdata_flag)</div>
177<div class="line">        rk_dumpdata(<span class="stringliteral">&quot;ntlm-type3&quot;</span>, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data, <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length);</div>
178<div class="line"> </div>
179<div class="line">    ret = heim_ntlm_decode_type3(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, 1, &amp;type3);</div>
180<div class="line">    free(<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data);</div>
181<div class="line">    <span class="keywordflow">if</span> (ret)</div>
182<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type3&quot;</span>);</div>
183<div class="line"> </div>
184<div class="line">    <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">&quot;workstation&quot;</span>, type3.ws) != 0)</div>
185<div class="line">        errx(1, <span class="stringliteral">&quot;type3 ws wrong&quot;</span>);</div>
186<div class="line"> </div>
187<div class="line">    <span class="keywordflow">if</span> (strcmp(target, type3.targetname) != 0)</div>
188<div class="line">        errx(1, <span class="stringliteral">&quot;type3 targetname wrong&quot;</span>);</div>
189<div class="line"> </div>
190<div class="line">    <span class="keywordflow">if</span> (strcmp(user, type3.username) != 0)</div>
191<div class="line">        errx(1, <span class="stringliteral">&quot;type3 username wrong&quot;</span>);</div>
192<div class="line"> </div>
193<div class="line"> </div>
194<div class="line">    <a name="a26"></a><a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;type3);</div>
195<div class="line"> </div>
196<div class="line">    <span class="comment">/*</span></div>
197<div class="line"><span class="comment">     * NTLMv2</span></div>
198<div class="line"><span class="comment">     */</span></div>
199<div class="line"> </div>
200<div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div>
201<div class="line"> </div>
202<div class="line">    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;</div>
203<div class="line">    type2.flags = flags;</div>
204<div class="line"> </div>
205<div class="line">    memset(type2.challenge, 0x7f, <span class="keyword">sizeof</span>(type2.challenge));</div>
206<div class="line">    type2.targetname = rk_UNCONST(target);</div>
207<div class="line">    type2.targetinfo.<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a> = <span class="stringliteral">&quot;\x00\x00&quot;</span>;</div>
208<div class="line">    type2.targetinfo.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 2;</div>
209<div class="line"> </div>
210<div class="line">    ret = <a class="code" href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
211<div class="line">    <span class="keywordflow">if</span> (ret)</div>
212<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2&quot;</span>);</div>
213<div class="line"> </div>
214<div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div>
215<div class="line"> </div>
216<div class="line">    ret = heim_ntlm_decode_type2(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &amp;type2);</div>
217<div class="line">    free(<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data);</div>
218<div class="line">    <span class="keywordflow">if</span> (ret)</div>
219<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2&quot;</span>);</div>
220<div class="line"> </div>
221<div class="line">    <a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div>
222<div class="line"> </div>
223<div class="line">    <span class="keywordflow">return</span> 0;</div>
224<div class="line">}</div>
225<div class="line"> </div>
226<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
227<div class="line">test_keys(<span class="keywordtype">void</span>)</div>
228<div class="line">{</div>
229<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span></div>
230<div class="line">        *username = <span class="stringliteral">&quot;test&quot;</span>,</div>
231<div class="line">        *password = <span class="stringliteral">&quot;test1234&quot;</span>,</div>
232<div class="line">        *target = <span class="stringliteral">&quot;TESTNT&quot;</span>;</div>
233<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span></div>
234<div class="line">        serverchallenge[8] = <span class="stringliteral">&quot;\x67\x7f\x1c\x55\x7a\x5e\xe9\x6c&quot;</span>;</div>
235<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> infotarget, infotarget2, answer, key;</div>
236<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlmv2[16], ntlmv2_1[16];</div>
237<div class="line">    <span class="keywordtype">int</span> ret;</div>
238<div class="line"> </div>
239<div class="line">    infotarget.<a class="code" href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 70;</div>
240<div class="line">    infotarget.data =</div>
241<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>
242<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>
243<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>
244<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>
245<div class="line">            <span class="stringliteral">&quot;\x00\x6d\x00&quot;</span></div>
246<div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00&quot;</span>;</div>
247<div class="line"> </div>
248<div class="line">    answer.length = 0;</div>
249<div class="line">    answer.data = NULL;</div>
250<div class="line"> </div>
251<div class="line">    <a class="code" href="group__ntlm__core.html#ga254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(password, &amp;key);</div>
252<div class="line"> </div>
253<div class="line">    ret = <a name="a27"></a><a class="code" href="group__ntlm__core.html#gaa8f07fb71a0d5f095cde3fb9fb40d10c">heim_ntlm_calculate_ntlm2</a>(key.data,</div>
254<div class="line">                                    key.length,</div>
255<div class="line">                                    username,</div>
256<div class="line">                                    target,</div>
257<div class="line">                                    serverchallenge,</div>
258<div class="line">                                    &amp;infotarget,</div>
259<div class="line">                                    ntlmv2,</div>
260<div class="line">                                    &amp;answer);</div>
261<div class="line">    <span class="keywordflow">if</span> (ret)</div>
262<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_calculate_ntlm2&quot;</span>);</div>
263<div class="line"> </div>
264<div class="line">    ret = <a name="a28"></a><a class="code" href="group__ntlm__core.html#ga3b3d6a5187cab6bfe656afa7a8273ca6">heim_ntlm_verify_ntlm2</a>(key.data,</div>
265<div class="line">                                 key.length,</div>
266<div class="line">                                 username,</div>
267<div class="line">                                 target,</div>
268<div class="line">                                 0,</div>
269<div class="line">                                 serverchallenge,</div>
270<div class="line">                                 &amp;answer,</div>
271<div class="line">                                 &amp;infotarget2,</div>
272<div class="line">                                 ntlmv2_1);</div>
273<div class="line">    <span class="keywordflow">if</span> (ret)</div>
274<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_verify_ntlm2&quot;</span>);</div>
275<div class="line"> </div>
276<div class="line">    <span class="keywordflow">if</span> (memcmp(ntlmv2, ntlmv2_1, <span class="keyword">sizeof</span>(ntlmv2)) != 0)</div>
277<div class="line">        errx(1, <span class="stringliteral">&quot;ntlm master key not same&quot;</span>);</div>
278<div class="line"> </div>
279<div class="line">    <span class="keywordflow">if</span> (infotarget.length &gt; infotarget2.length)</div>
280<div class="line">        errx(1, <span class="stringliteral">&quot;infotarget length&quot;</span>);</div>
281<div class="line"> </div>
282<div class="line">    <span class="keywordflow">if</span> (memcmp(infotarget.data, infotarget2.data, infotarget.length) != 0)</div>
283<div class="line">        errx(1, <span class="stringliteral">&quot;infotarget not the same&quot;</span>);</div>
284<div class="line"> </div>
285<div class="line">    free(key.data);</div>
286<div class="line">    free(answer.data);</div>
287<div class="line">    free(infotarget2.data);</div>
288<div class="line"> </div>
289<div class="line">    <span class="keywordflow">return</span> 0;</div>
290<div class="line">}</div>
291<div class="line"> </div>
292<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
293<div class="line">test_ntlm2_session_resp(<span class="keywordtype">void</span>)</div>
294<div class="line">{</div>
295<div class="line">    <span class="keywordtype">int</span> ret;</div>
296<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> lm, ntlm;</div>
297<div class="line"> </div>
298<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> lm_resp[24] =</div>
299<div class="line">        <span class="stringliteral">&quot;\xff\xff\xff\x00\x11\x22\x33\x44&quot;</span></div>
300<div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x00&quot;</span></div>
301<div class="line">        <span class="stringliteral">&quot;\x00\x00\x00\x00\x00\x00\x00\x00&quot;</span>;</div>
302<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm2_sess_resp[24] =</div>
303<div class="line">        <span class="stringliteral">&quot;\x10\xd5\x50\x83\x2d\x12\xb2\xcc&quot;</span></div>
304<div class="line">        <span class="stringliteral">&quot;\xb7\x9d\x5a\xd1\xf4\xee\xd3\xdf&quot;</span></div>
305<div class="line">        <span class="stringliteral">&quot;\x82\xac\xa4\xc3\x68\x1d\xd4\x55&quot;</span>;</div>
306<div class="line"> </div>
307<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> client_nonce[8] =</div>
308<div class="line">        <span class="stringliteral">&quot;\xff\xff\xff\x00\x11\x22\x33\x44&quot;</span>;</div>
309<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> server_challenge[8] =</div>
310<div class="line">        <span class="stringliteral">&quot;\x01\x23\x45\x67\x89\xab\xcd\xef&quot;</span>;</div>
311<div class="line"> </div>
312<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm_hash[16] =</div>
313<div class="line">        <span class="stringliteral">&quot;\xcd\x06\xca\x7c\x7e\x10\xc9\x9b&quot;</span></div>
314<div class="line">        <span class="stringliteral">&quot;\x1d\x33\xb7\x48\x5a\x2e\xd8\x08&quot;</span>;</div>
315<div class="line"> </div>
316<div class="line">    ret = heim_ntlm_calculate_ntlm2_sess(client_nonce,</div>
317<div class="line">                                         server_challenge,</div>
318<div class="line">                                         ntlm_hash,</div>
319<div class="line">                                         &amp;lm,</div>
320<div class="line">                                         &amp;ntlm);</div>
321<div class="line">    <span class="keywordflow">if</span> (ret)</div>
322<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_calculate_ntlm2_sess_resp&quot;</span>);</div>
323<div class="line"> </div>
324<div class="line">    <span class="keywordflow">if</span> (lm.length != 24 || memcmp(lm.data, lm_resp, 24) != 0)</div>
325<div class="line">        errx(1, <span class="stringliteral">&quot;lm_resp wrong&quot;</span>);</div>
326<div class="line">    <span class="keywordflow">if</span> (ntlm.length != 24 || memcmp(ntlm.data, ntlm2_sess_resp, 24) != 0)</div>
327<div class="line">        errx(1, <span class="stringliteral">&quot;ntlm2_sess_resp wrong&quot;</span>);</div>
328<div class="line"> </div>
329<div class="line">    free(lm.data);</div>
330<div class="line">    free(ntlm.data);</div>
331<div class="line"> </div>
332<div class="line"> </div>
333<div class="line">    <span class="keywordflow">return</span> 0;</div>
334<div class="line">}</div>
335<div class="line"> </div>
336<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
337<div class="line">test_ntlmv2(<span class="keywordtype">void</span>)</div>
338<div class="line">{</div>
339<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type3[413] = </div>
340<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>
341<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>
342<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>
343<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>
344<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>
345<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>
346<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>
347<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>
348<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>
349<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>
350<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>
351<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>
352<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>
353<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>
354<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>
355<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>
356<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>
357<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>
358<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>
359<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>
360<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>
361<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>
362<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>
363<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>
364<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>
365<div class="line">        <span class="stringliteral">&quot;\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x00\x00&quot;</span>;</div>
366<div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> challenge[8] = </div>
367<div class="line">        <span class="stringliteral">&quot;\xe4\x9c\x6a\x12\xe1\xbd\xde\x6a&quot;</span>;</div>
368<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> sessionkey[16];</div>
369<div class="line"> </div>
370<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>
371<div class="line"> </div>
372<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>;</div>
373<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type3.html">ntlm_type3</a> t3;</div>
374<div class="line">    <span class="keywordtype">int</span> ret;</div>
375<div class="line"> </div>
376<div class="line">    <span class="keyword">struct </span>ntlm_targetinfo ti;</div>
377<div class="line"> </div>
378<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> timsg[114] = </div>
379<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>
380<div class="line"> </div>
381<div class="line"> </div>
382<div class="line">    data.data = type3;</div>
383<div class="line">    data.length = <span class="keyword">sizeof</span>(type3);</div>
384<div class="line"> </div>
385<div class="line">    ret = heim_ntlm_decode_type3(&amp;data, 1, &amp;t3);</div>
386<div class="line">    <span class="keywordflow">if</span> (ret)</div>
387<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type3&quot;</span>);</div>
388<div class="line">    </div>
389<div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div>
390<div class="line"> </div>
391<div class="line">    data.data = timsg;</div>
392<div class="line">    data.length = <span class="keyword">sizeof</span>(timsg);</div>
393<div class="line"> </div>
394<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>
395<div class="line">    <span class="keywordflow">if</span> (ret)</div>
396<div class="line">        <span class="keywordflow">return</span> ret;</div>
397<div class="line"> </div>
398<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>
399<div class="line">                                 t3.username,</div>
400<div class="line">                                 t3.targetname,</div>
401<div class="line">                                 1285615547,</div>
402<div class="line">                                 challenge,</div>
403<div class="line">                                 &amp;t3.ntlm,</div>
404<div class="line">                                 &amp;data,</div>
405<div class="line">                                 sessionkey);</div>
406<div class="line">    <span class="keywordflow">if</span> (ret)</div>
407<div class="line">        errx(1, <span class="stringliteral">&quot;verify_ntlmv2&quot;</span>);</div>
408<div class="line"> </div>
409<div class="line">    <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(timsg) != data.length || memcmp(timsg, data.data, <span class="keyword">sizeof</span>(timsg)) != 0)</div>
410<div class="line">        errx(1, <span class="stringliteral">&quot;target info wrong: %d != %d&quot;</span>,</div>
411<div class="line">             (<span class="keywordtype">int</span>)<span class="keyword">sizeof</span>(timsg), (<span class="keywordtype">int</span>)data.length);</div>
412<div class="line"> </div>
413<div class="line">    <a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;t3);</div>
414<div class="line">    <a name="a30"></a><a class="code" href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&amp;ti);</div>
415<div class="line"> </div>
416<div class="line">    <span class="keywordflow">return</span> 0;</div>
417<div class="line">}</div>
418<div class="line"> </div>
419<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
420<div class="line">test_targetinfo(<span class="keywordtype">void</span>)</div>
421<div class="line">{</div>
422<div class="line">    <span class="keyword">struct </span>ntlm_targetinfo ti;</div>
423<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> buf;</div>
424<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *dnsservername = <span class="stringliteral">&quot;dnsservername&quot;</span>;</div>
425<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *targetname = <span class="stringliteral">&quot;targetname&quot;</span>;</div>
426<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> z16[16] = { 0 };</div>
427<div class="line">    <span class="keywordtype">int</span> ret;</div>
428<div class="line"> </div>
429<div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div>
430<div class="line"> </div>
431<div class="line">    ti.dnsservername = rk_UNCONST(dnsservername);</div>
432<div class="line">    ti.avflags = 1;</div>
433<div class="line">    ti.targetname = rk_UNCONST(targetname);</div>
434<div class="line">    ti.channel_bindings.data = rk_UNCONST(z16);</div>
435<div class="line">    ti.channel_bindings.length = <span class="keyword">sizeof</span>(z16);</div>
436<div class="line"> </div>
437<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>
438<div class="line">    <span class="keywordflow">if</span> (ret)</div>
439<div class="line">        <span class="keywordflow">return</span> ret;</div>
440<div class="line"> </div>
441<div class="line">    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));</div>
442<div class="line"> </div>
443<div class="line">    ret = <a class="code" href="group__ntlm__core.html#gaf1d4de2faec8b1c1070a55fd2e6e630f">heim_ntlm_decode_targetinfo</a>(&amp;buf, 1, &amp;ti);</div>
444<div class="line">    <span class="keywordflow">if</span> (ret)</div>
445<div class="line">        <span class="keywordflow">return</span> ret;</div>
446<div class="line"> </div>
447<div class="line">    <span class="keywordflow">if</span> (ti.dnsservername == NULL ||</div>
448<div class="line">        strcmp(ti.dnsservername, dnsservername) != 0)</div>
449<div class="line">        errx(1, <span class="stringliteral">&quot;ti.dnshostname != %s&quot;</span>, dnsservername);</div>
450<div class="line">    <span class="keywordflow">if</span> (ti.avflags != 1)</div>
451<div class="line">        errx(1, <span class="stringliteral">&quot;ti.avflags != 1&quot;</span>);</div>
452<div class="line">    <span class="keywordflow">if</span> (ti.targetname == NULL ||</div>
453<div class="line">        strcmp(ti.targetname, targetname) != 0)</div>
454<div class="line">        errx(1, <span class="stringliteral">&quot;ti.targetname != %s&quot;</span>, targetname);</div>
455<div class="line"> </div>
456<div class="line">    <span class="keywordflow">if</span> (ti.channel_bindings.length != <span class="keyword">sizeof</span>(z16) ||</div>
457<div class="line">        memcmp(ti.channel_bindings.data, z16, <span class="keyword">sizeof</span>(z16)) != 0)</div>
458<div class="line">        errx(1, <span class="stringliteral">&quot;ti.channel_bindings != Z(16)&quot;</span>);</div>
459<div class="line"> </div>
460<div class="line">    <a class="code" href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&amp;ti);</div>
461<div class="line"> </div>
462<div class="line">    <span class="keywordflow">return</span> 0;</div>
463<div class="line">}</div>
464<div class="line"> </div>
465<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
466<div class="line">test_string2key(<span class="keywordtype">void</span>)</div>
467<div class="line">{</div>
468<div class="line">    <span class="keyword">const</span> <span class="keywordtype">char</span> *pw = <span class="stringliteral">&quot;山田&quot;</span>;</div>
469<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> buf;</div>
470<div class="line"> </div>
471<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> key[16] = {</div>
472<div class="line">        0xc6, 0x5d, 0xc7, 0x61, 0xa1, 0x34, 0x17, 0xa1,</div>
473<div class="line">        0x17, 0x08, 0x9c, 0x1b, 0xb0, 0x0d, 0x0f, 0x19</div>
474<div class="line">    };</div>
475<div class="line"> </div>
476<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>
477<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlmv_nt_key(jp)&quot;</span>);</div>
478<div class="line"> </div>
479<div class="line">    <span class="keywordflow">if</span> (buf.length != 16 || memcmp(buf.data, key, 16) != 0)</div>
480<div class="line">        errx(1, <span class="stringliteral">&quot;compare failed&quot;</span>);</div>
481<div class="line"> </div>
482<div class="line">    <a name="a32"></a><a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;buf);</div>
483<div class="line"> </div>
484<div class="line">    <span class="keywordflow">return</span> 0;</div>
485<div class="line">}</div>
486<div class="line"> </div>
487<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span></div>
488<div class="line">test_jp(<span class="keywordtype">void</span>)</div>
489<div class="line">{</div>
490<div class="line">    <span class="keywordtype">char</span> buf2[220] =</div>
491<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>
492<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>
493<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>
494<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>
495<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>
496<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>
497<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>
498<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>
499<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>
500<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>
501<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>
502<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>
503<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>
504<div class="line">        <span class="stringliteral">&quot;\x94\x51\xf0\xbd\xdc\x61\xcb\x01\x00\x00\x00\x00&quot;</span>;</div>
505<div class="line"> </div>
506<div class="line">    <span class="keywordtype">char</span> buf3[362] =</div>
507<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>
508<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>
509<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>
510<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>
511<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>
512<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>
513<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>
514<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>
515<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>
516<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>
517<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>
518<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>
519<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>
520<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>
521<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>
522<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>
523<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>
524<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>
525<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>
526<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>
527<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>
528<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>
529<div class="line">        <span class="stringliteral">&quot;\xa7\x70\x00\x9d\x55\xa0\x59\x74\x2b\x78&quot;</span>;</div>
530<div class="line"> </div>
531<div class="line"> </div>
532<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type2.html">ntlm_type2</a> type2;</div>
533<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__type3.html">ntlm_type3</a> type3;</div>
534<div class="line">    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>;</div>
535<div class="line">    <span class="keywordtype">int</span> ret;</div>
536<div class="line"> </div>
537<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length = <span class="keyword">sizeof</span>(buf2);</div>
538<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data = buf2;</div>
539<div class="line"> </div>
540<div class="line">    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));</div>
541<div class="line"> </div>
542<div class="line">    ret = heim_ntlm_decode_type2(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &amp;type2);</div>
543<div class="line">    <span class="keywordflow">if</span> (ret)</div>
544<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div>
545<div class="line"> </div>
546<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data = NULL;</div>
547<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length = 0;</div>
548<div class="line"> </div>
549<div class="line">    ret = <a class="code" href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
550<div class="line">    <span class="keywordflow">if</span> (ret)</div>
551<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_encode_type2(jp): %d&quot;</span>, ret);</div>
552<div class="line"> </div>
553<div class="line">    <a class="code" href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);</div>
554<div class="line">    <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
555<div class="line"> </div>
556<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length = <span class="keyword">sizeof</span>(buf3);</div>
557<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data = buf3;</div>
558<div class="line"> </div>
559<div class="line">    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));</div>
560<div class="line"> </div>
561<div class="line">    ret = heim_ntlm_decode_type3(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, 1, &amp;type3);</div>
562<div class="line">    <span class="keywordflow">if</span> (ret)</div>
563<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div>
564<div class="line"> </div>
565<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.data = NULL;</div>
566<div class="line">    <a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>.length = 0;</div>
567<div class="line"> </div>
568<div class="line">    ret = <a class="code" href="group__ntlm__core.html#gade200095bfa40a73cfd4154010cc6e76">heim_ntlm_encode_type3</a>(&amp;type3, &amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, NULL);</div>
569<div class="line">    <span class="keywordflow">if</span> (ret)</div>
570<div class="line">        errx(1, <span class="stringliteral">&quot;heim_ntlm_decode_type2(jp): %d&quot;</span>, ret);</div>
571<div class="line"> </div>
572<div class="line">    <a class="code" href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;type3);</div>
573<div class="line">    <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&amp;<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>);</div>
574<div class="line"> </div>
575<div class="line">    <span class="keywordflow">return</span> 0;</div>
576<div class="line">}</div>
577<div class="line"> </div>
578<div class="line"> </div>
579<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> verbose_flag = 0;</div>
580<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> version_flag = 0;</div>
581<div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> help_flag    = 0;</div>
582<div class="line"> </div>
583<div class="line"><span class="keyword">static</span> <span class="keyword">struct </span>getargs args[] = {</div>
584<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>
585<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>
586<div class="line">    {<span class="stringliteral">&quot;help&quot;</span>,    0,      arg_flag,       &amp;help_flag,  NULL, NULL }</div>
587<div class="line">};</div>
588<div class="line"> </div>
589<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span></div>
590<div class="line">usage (<span class="keywordtype">int</span> ret)</div>
591<div class="line">{</div>
592<div class="line">    arg_printusage (args, <span class="keyword">sizeof</span>(args)/<span class="keyword">sizeof</span>(*args),</div>
593<div class="line">                    NULL, <span class="stringliteral">&quot;&quot;</span>);</div>
594<div class="line">    exit (ret);</div>
595<div class="line">}</div>
596<div class="line"> </div>
597<div class="line"><span class="keywordtype">int</span></div>
598<div class="line">main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div>
599<div class="line">{</div>
600<div class="line">    <span class="keywordtype">int</span> ret = 0, optidx = 0;</div>
601<div class="line"> </div>
602<div class="line">    setprogname(argv[0]);</div>
603<div class="line"> </div>
604<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>
605<div class="line">        usage(1);</div>
606<div class="line"> </div>
607<div class="line">    <span class="keywordflow">if</span> (help_flag)</div>
608<div class="line">        usage (0);</div>
609<div class="line"> </div>
610<div class="line">    <span class="keywordflow">if</span>(version_flag){</div>
611<div class="line">        print_version(NULL);</div>
612<div class="line">        exit(0);</div>
613<div class="line">    }</div>
614<div class="line"> </div>
615<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
616<div class="line">        printf(<span class="stringliteral">&quot;test_parse\n&quot;</span>);</div>
617<div class="line">    ret |= test_parse();</div>
618<div class="line"> </div>
619<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
620<div class="line">        printf(<span class="stringliteral">&quot;test_keys\n&quot;</span>);</div>
621<div class="line">    ret |= test_keys();</div>
622<div class="line"> </div>
623<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
624<div class="line">        printf(<span class="stringliteral">&quot;test_ntlm2_session_resp\n&quot;</span>);</div>
625<div class="line">    ret |= test_ntlm2_session_resp();</div>
626<div class="line"> </div>
627<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
628<div class="line">        printf(<span class="stringliteral">&quot;test_targetinfo\n&quot;</span>);</div>
629<div class="line">    ret |= test_targetinfo();</div>
630<div class="line">        </div>
631<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
632<div class="line">        printf(<span class="stringliteral">&quot;test_ntlmv2\n&quot;</span>);</div>
633<div class="line">    ret |= test_ntlmv2();</div>
634<div class="line"> </div>
635<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
636<div class="line">        printf(<span class="stringliteral">&quot;test_string2key\n&quot;</span>);</div>
637<div class="line">    ret |= test_string2key();</div>
638<div class="line"> </div>
639<div class="line">    <span class="keywordflow">if</span> (verbose_flag)</div>
640<div class="line">        printf(<span class="stringliteral">&quot;test_jp\n&quot;</span>);</div>
641<div class="line">    ret |= test_jp();</div>
642<div class="line"> </div>
643<div class="line">    <span class="keywordflow">return</span> ret;</div>
644<div class="line">}</div>
645<div class="ttc" id="agroup__ntlm__core_html_ga0107727234287ac61a8801b0faff9dff"><div class="ttname"><a href="group__ntlm__core.html#ga0107727234287ac61a8801b0faff9dff">heim_ntlm_encode_type1</a></div><div class="ttdeci">int heim_ntlm_encode_type1(const struct ntlm_type1 *type1, struct ntlm_buf *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:732</div></div>
646<div class="ttc" id="agroup__ntlm__core_html_ga254ee0a4d5a2594833e36697ad575d7e"><div class="ttname"><a href="group__ntlm__core.html#ga254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a></div><div class="ttdeci">int heim_ntlm_nt_key(const char *password, struct ntlm_buf *key)</div><div class="ttdef"><b>Definition:</b> ntlm.c:1211</div></div>
647<div class="ttc" id="agroup__ntlm__core_html_ga2860c6f6d497255eb433adc8cacc49dd"><div class="ttname"><a href="group__ntlm__core.html#ga2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a></div><div class="ttdeci">int heim_ntlm_encode_type2(const struct ntlm_type2 *type2, struct ntlm_buf *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:893</div></div>
648<div class="ttc" id="agroup__ntlm__core_html_ga2881747fad2ac2979a28d3bd050b0fa8"><div class="ttname"><a href="group__ntlm__core.html#ga2881747fad2ac2979a28d3bd050b0fa8">heim_ntlm_encode_targetinfo</a></div><div class="ttdeci">int heim_ntlm_encode_targetinfo(const struct ntlm_targetinfo *ti, int ucs2, struct ntlm_buf *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:482</div></div>
649<div class="ttc" id="agroup__ntlm__core_html_ga3b3d6a5187cab6bfe656afa7a8273ca6"><div class="ttname"><a href="group__ntlm__core.html#ga3b3d6a5187cab6bfe656afa7a8273ca6">heim_ntlm_verify_ntlm2</a></div><div class="ttdeci">int heim_ntlm_verify_ntlm2(const void *key, size_t len, const char *username, const char *target, time_t now, const unsigned char serverchallenge[8], const struct ntlm_buf *answer, struct ntlm_buf *infotarget, unsigned char ntlmv2[16])</div><div class="ttdef"><b>Definition:</b> ntlm.c:1850</div></div>
650<div class="ttc" id="agroup__ntlm__core_html_ga5f6c313a3a7258cda5f09bb44f8d1776"><div class="ttname"><a href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a></div><div class="ttdeci">void heim_ntlm_free_buf(struct ntlm_buf *p)</div><div class="ttdef"><b>Definition:</b> ntlm.c:197</div></div>
651<div class="ttc" id="agroup__ntlm__core_html_ga704ec8c5dba05ef57186d242ff165565"><div class="ttname"><a href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a></div><div class="ttdeci">void heim_ntlm_free_targetinfo(struct ntlm_targetinfo *ti)</div><div class="ttdef"><b>Definition:</b> ntlm.c:444</div></div>
652<div class="ttc" id="agroup__ntlm__core_html_ga76fa6caf3f539e24008e31613f5eb663"><div class="ttname"><a href="group__ntlm__core.html#ga76fa6caf3f539e24008e31613f5eb663">heim_ntlm_free_type1</a></div><div class="ttdeci">void heim_ntlm_free_type1(struct ntlm_type1 *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:656</div></div>
653<div class="ttc" id="agroup__ntlm__core_html_ga8fde84c86f1c7c9f730f7fb4acedcb43"><div class="ttname"><a href="group__ntlm__core.html#ga8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a></div><div class="ttdeci">void heim_ntlm_free_type2(struct ntlm_type2 *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:819</div></div>
654<div class="ttc" id="agroup__ntlm__core_html_gaa8f07fb71a0d5f095cde3fb9fb40d10c"><div class="ttname"><a href="group__ntlm__core.html#gaa8f07fb71a0d5f095cde3fb9fb40d10c">heim_ntlm_calculate_ntlm2</a></div><div class="ttdeci">int heim_ntlm_calculate_ntlm2(const void *key, size_t len, const char *username, const char *target, const unsigned char serverchallenge[8], const struct ntlm_buf *infotarget, unsigned char ntlmv2[16], struct ntlm_buf *answer)</div><div class="ttdef"><b>Definition:</b> ntlm.c:1643</div></div>
655<div class="ttc" id="agroup__ntlm__core_html_gac4e6d01e5247b8540d41ccbbf1031319"><div class="ttname"><a href="group__ntlm__core.html#gac4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a></div><div class="ttdeci">void heim_ntlm_free_type3(struct ntlm_type3 *data)</div><div class="ttdef"><b>Definition:</b> ntlm.c:963</div></div>
656<div class="ttc" id="agroup__ntlm__core_html_gade200095bfa40a73cfd4154010cc6e76"><div class="ttname"><a href="group__ntlm__core.html#gade200095bfa40a73cfd4154010cc6e76">heim_ntlm_encode_type3</a></div><div class="ttdeci">int heim_ntlm_encode_type3(const struct ntlm_type3 *type3, struct ntlm_buf *data, size_t *mic_offset)</div><div class="ttdef"><b>Definition:</b> ntlm.c:1067</div></div>
657<div class="ttc" id="agroup__ntlm__core_html_gae3b634802ef94233a175291abd2ea14d"><div class="ttname"><a href="group__ntlm__core.html#gae3b634802ef94233a175291abd2ea14d">heim_ntlm_calculate_ntlm1</a></div><div class="ttdeci">int heim_ntlm_calculate_ntlm1(void *key, size_t len, unsigned char challenge[8], struct ntlm_buf *answer)</div><div class="ttdef"><b>Definition:</b> ntlm.c:1259</div></div>
658<div class="ttc" id="agroup__ntlm__core_html_gaf1d4de2faec8b1c1070a55fd2e6e630f"><div class="ttname"><a href="group__ntlm__core.html#gaf1d4de2faec8b1c1070a55fd2e6e630f">heim_ntlm_decode_targetinfo</a></div><div class="ttdeci">int heim_ntlm_decode_targetinfo(const struct ntlm_buf *data, int ucs2, struct ntlm_targetinfo *ti)</div><div class="ttdef"><b>Definition:</b> ntlm.c:557</div></div>
659<div class="ttc" id="astructntlm__buf_html"><div class="ttname"><a href="structntlm__buf.html">ntlm_buf</a></div><div class="ttdef"><b>Definition:</b> heimntlm.h:43</div></div>
660<div class="ttc" id="astructntlm__buf_html_a0cb7caf04f8f80326491b45edcdd2687"><div class="ttname"><a href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">ntlm_buf::data</a></div><div class="ttdeci">void * data</div><div class="ttdef"><b>Definition:</b> heimntlm.h:45</div></div>
661<div class="ttc" id="astructntlm__buf_html_a1ca1856fd5b4ac0197320d7723c73bd0"><div class="ttname"><a href="structntlm__buf.html#a1ca1856fd5b4ac0197320d7723c73bd0">ntlm_buf::length</a></div><div class="ttdeci">size_t length</div><div class="ttdef"><b>Definition:</b> heimntlm.h:44</div></div>
662<div class="ttc" id="astructntlm__type1_html"><div class="ttname"><a href="structntlm__type1.html">ntlm_type1</a></div><div class="ttdef"><b>Definition:</b> heimntlm.h:120</div></div>
663<div class="ttc" id="astructntlm__type2_html"><div class="ttname"><a href="structntlm__type2.html">ntlm_type2</a></div><div class="ttdef"><b>Definition:</b> heimntlm.h:133</div></div>
664<div class="ttc" id="astructntlm__type3_html"><div class="ttname"><a href="structntlm__type3.html">ntlm_type3</a></div><div class="ttdef"><b>Definition:</b> heimntlm.h:148</div></div>
665</div><!-- fragment --> </div><!-- contents -->
666<hr size="1"><address style="text-align: right;"><small>
667Generated on Tue Nov 15 2022 14:04:26 for Heimdal ntlm library by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.9.1</small></address>
668</body>
669</html>
670