xref: /freebsd-src/crypto/heimdal/doc/doxyout/ntlm/html/test__ntlm_8c-example.html (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
1ae771770SStanislav Sedov<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2ae771770SStanislav Sedov<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3ae771770SStanislav Sedov<title>Heimdalntlmlibrary: test_ntlm.c</title>
4ae771770SStanislav Sedov<link href="doxygen.css" rel="stylesheet" type="text/css">
5ae771770SStanislav Sedov<link href="tabs.css" rel="stylesheet" type="text/css">
6ae771770SStanislav Sedov</head><body>
7ae771770SStanislav Sedov<p>
8ae771770SStanislav Sedov<a href="http://www.h5l.org/"><img src="http://www.h5l.org/keyhole-heimdal.png" alt="keyhole logo"/></a>
9ae771770SStanislav Sedov</p>
10ae771770SStanislav Sedov<!-- end of header marker -->
11ae771770SStanislav Sedov<!-- Generated by Doxygen 1.5.6 -->
12ae771770SStanislav Sedov<div class="navigation" id="top">
13ae771770SStanislav Sedov  <div class="tabs">
14ae771770SStanislav Sedov    <ul>
15ae771770SStanislav Sedov      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
16ae771770SStanislav Sedov      <li><a href="modules.html"><span>Modules</span></a></li>
17ae771770SStanislav Sedov      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
18ae771770SStanislav Sedov      <li><a href="examples.html"><span>Examples</span></a></li>
19ae771770SStanislav Sedov    </ul>
20ae771770SStanislav Sedov  </div>
21ae771770SStanislav Sedov</div>
22ae771770SStanislav Sedov<div class="contents">
23ae771770SStanislav Sedov<h1>test_ntlm.c</h1>Example how to use the NTLM primitives.<p>
24ae771770SStanislav Sedov<div class="fragment"><pre class="fragment"><span class="comment">/*</span>
25ae771770SStanislav Sedov<span class="comment"> * Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan</span>
26ae771770SStanislav Sedov<span class="comment"> * (Royal Institute of Technology, Stockholm, Sweden).</span>
27ae771770SStanislav Sedov<span class="comment"> * All rights reserved.</span>
28ae771770SStanislav Sedov<span class="comment"> *</span>
29ae771770SStanislav Sedov<span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
30ae771770SStanislav Sedov<span class="comment"> * modification, are permitted provided that the following conditions</span>
31ae771770SStanislav Sedov<span class="comment"> * are met:</span>
32ae771770SStanislav Sedov<span class="comment"> *</span>
33ae771770SStanislav Sedov<span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
34ae771770SStanislav Sedov<span class="comment"> *    notice, this list of conditions and the following disclaimer.</span>
35ae771770SStanislav Sedov<span class="comment"> *</span>
36ae771770SStanislav Sedov<span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
37ae771770SStanislav Sedov<span class="comment"> *    notice, this list of conditions and the following disclaimer in the</span>
38ae771770SStanislav Sedov<span class="comment"> *    documentation and/or other materials provided with the distribution.</span>
39ae771770SStanislav Sedov<span class="comment"> *</span>
40ae771770SStanislav Sedov<span class="comment"> * 3. Neither the name of KTH nor the names of its contributors may be</span>
41ae771770SStanislav Sedov<span class="comment"> *    used to endorse or promote products derived from this software without</span>
42ae771770SStanislav Sedov<span class="comment"> *    specific prior written permission.</span>
43ae771770SStanislav Sedov<span class="comment"> *</span>
44ae771770SStanislav Sedov<span class="comment"> * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY</span>
45ae771770SStanislav Sedov<span class="comment"> * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
46ae771770SStanislav Sedov<span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</span>
47ae771770SStanislav Sedov<span class="comment"> * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE</span>
48ae771770SStanislav Sedov<span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span>
49ae771770SStanislav Sedov<span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span>
50ae771770SStanislav Sedov<span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR</span>
51ae771770SStanislav Sedov<span class="comment"> * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
52ae771770SStanislav Sedov<span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR</span>
53ae771770SStanislav Sedov<span class="comment"> * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF</span>
54ae771770SStanislav Sedov<span class="comment"> * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
55ae771770SStanislav Sedov<span class="comment"> */</span>
56ae771770SStanislav Sedov
57ae771770SStanislav Sedov<span class="preprocessor">#include "config.h"</span>
58ae771770SStanislav Sedov
59ae771770SStanislav Sedov<span class="preprocessor">#include &lt;stdio.h&gt;</span>
60ae771770SStanislav Sedov<span class="preprocessor">#include &lt;err.h&gt;</span>
61ae771770SStanislav Sedov<span class="preprocessor">#include &lt;roken.h&gt;</span>
62ae771770SStanislav Sedov<span class="preprocessor">#include &lt;getarg.h&gt;</span>
63ae771770SStanislav Sedov
64ae771770SStanislav Sedov<span class="preprocessor">#include &lt;krb5-types.h&gt;</span> <span class="comment">/* or &lt;inttypes.h&gt; */</span>
65ae771770SStanislav Sedov<span class="preprocessor">#include &lt;heimntlm.h&gt;</span>
66ae771770SStanislav Sedov
67ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span>
68ae771770SStanislav Sedovtest_parse(<span class="keywordtype">void</span>)
69ae771770SStanislav Sedov{
70ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">char</span> *user = <span class="stringliteral">"foo"</span>,
71ae771770SStanislav Sedov        *domain = <span class="stringliteral">"mydomain"</span>,
72ae771770SStanislav Sedov        *password = <span class="stringliteral">"digestpassword"</span>,
73ae771770SStanislav Sedov        *target = <span class="stringliteral">"DOMAIN"</span>;
74ae771770SStanislav Sedov    <span class="keyword">struct </span><a name="_a0"></a><a class="code" href="structntlm__type1.html">ntlm_type1</a> type1;
75ae771770SStanislav Sedov    <span class="keyword">struct </span><a name="_a1"></a><a class="code" href="structntlm__type2.html">ntlm_type2</a> type2;
76ae771770SStanislav Sedov    <span class="keyword">struct </span><a name="_a2"></a><a class="code" href="structntlm__type3.html">ntlm_type3</a> type3;
77ae771770SStanislav Sedov    <span class="keyword">struct </span><a name="_a3"></a><a class="code" href="structntlm__buf.html">ntlm_buf</a> data;
78ae771770SStanislav Sedov    <span class="keywordtype">int</span> ret, flags;
79ae771770SStanislav Sedov
80ae771770SStanislav Sedov    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));
81ae771770SStanislav Sedov
82ae771770SStanislav Sedov    type1.<a name="a4"></a><a class="code" href="structntlm__type1.html#e2f4bbf968f7dde8f1cd2a71396a06fb">flags</a> = NTLM_NEG_UNICODE|NTLM_NEG_TARGET|NTLM_NEG_NTLM;
83ae771770SStanislav Sedov    type1.<a name="a5"></a><a class="code" href="structntlm__type1.html#7d99f4da91742cd5bd94f1af1713c075">domain</a> = rk_UNCONST(domain);
84ae771770SStanislav Sedov    type1.<a name="a6"></a><a class="code" href="structntlm__type1.html#63e2c0e1d31b93802670e677b89ae7e8">hostname</a> = NULL;
85ae771770SStanislav Sedov    type1.<a name="a7"></a><a class="code" href="structntlm__type1.html#3f0a2c98b021a211c030b09b37d35fa3">os</a>[0] = 0;
86ae771770SStanislav Sedov    type1.<a class="code" href="structntlm__type1.html#3f0a2c98b021a211c030b09b37d35fa3">os</a>[1] = 0;
87ae771770SStanislav Sedov
88ae771770SStanislav Sedov    ret = <a name="a8"></a><a class="code" href="group__ntlm__core.html#g0107727234287ac61a8801b0faff9dff">heim_ntlm_encode_type1</a>(&amp;type1, &amp;data);
89ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
90ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_encode_type1"</span>);
91ae771770SStanislav Sedov
92ae771770SStanislav Sedov    memset(&amp;type1, 0, <span class="keyword">sizeof</span>(type1));
93ae771770SStanislav Sedov
94ae771770SStanislav Sedov    ret = heim_ntlm_decode_type1(&amp;data, &amp;type1);
95ae771770SStanislav Sedov    free(data.<a name="a9"></a><a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
96ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
97ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_encode_type1"</span>);
98ae771770SStanislav Sedov
99ae771770SStanislav Sedov    <a name="a10"></a><a class="code" href="group__ntlm__core.html#g76fa6caf3f539e24008e31613f5eb663">heim_ntlm_free_type1</a>(&amp;type1);
100ae771770SStanislav Sedov
101ae771770SStanislav Sedov    <span class="comment">/*</span>
102ae771770SStanislav Sedov<span class="comment">     *</span>
103ae771770SStanislav Sedov<span class="comment">     */</span>
104ae771770SStanislav Sedov
105ae771770SStanislav Sedov    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));
106ae771770SStanislav Sedov
107ae771770SStanislav Sedov    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;
108ae771770SStanislav Sedov    type2.<a name="a11"></a><a class="code" href="structntlm__type2.html#7f52e5d5e1e31e369d88d1cfb738a9ff">flags</a> = flags;
109ae771770SStanislav Sedov
110ae771770SStanislav Sedov    memset(type2.<a name="a12"></a><a class="code" href="structntlm__type2.html#12c5c7a960c60bbd54dbf49527856bab">challenge</a>, 0x7f, <span class="keyword">sizeof</span>(type2.<a class="code" href="structntlm__type2.html#12c5c7a960c60bbd54dbf49527856bab">challenge</a>));
111ae771770SStanislav Sedov    type2.<a name="a13"></a><a class="code" href="structntlm__type2.html#7ed7a5246d77d4358e6fa459c6263a10">targetname</a> = rk_UNCONST(target);
112ae771770SStanislav Sedov    type2.<a name="a14"></a><a class="code" href="structntlm__type2.html#d468bf3c5f042a893f3d118a9cb50a34">targetinfo</a>.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a> = NULL;
113ae771770SStanislav Sedov    type2.<a class="code" href="structntlm__type2.html#d468bf3c5f042a893f3d118a9cb50a34">targetinfo</a>.<a name="a15"></a><a class="code" href="structntlm__buf.html#1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 0;
114ae771770SStanislav Sedov
115ae771770SStanislav Sedov    ret = <a name="a16"></a><a class="code" href="group__ntlm__core.html#g2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;data);
116ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
117ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_encode_type2"</span>);
118ae771770SStanislav Sedov
119ae771770SStanislav Sedov    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));
120ae771770SStanislav Sedov
121ae771770SStanislav Sedov    ret = heim_ntlm_decode_type2(&amp;data, &amp;type2);
122ae771770SStanislav Sedov    free(data.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
123ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
124ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_decode_type2"</span>);
125ae771770SStanislav Sedov
126ae771770SStanislav Sedov    <a name="a17"></a><a class="code" href="group__ntlm__core.html#g8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);
127ae771770SStanislav Sedov
128ae771770SStanislav Sedov    <span class="comment">/*</span>
129ae771770SStanislav Sedov<span class="comment">     *</span>
130ae771770SStanislav Sedov<span class="comment">     */</span>
131ae771770SStanislav Sedov
132ae771770SStanislav Sedov    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));
133ae771770SStanislav Sedov
134ae771770SStanislav Sedov    type3.<a name="a18"></a><a class="code" href="structntlm__type3.html#65347e68a22b66fc65c299f2cda2cf2d">flags</a> = flags;
135ae771770SStanislav Sedov    type3.<a name="a19"></a><a class="code" href="structntlm__type3.html#c6e99229102b238c4aad9b93fabe95b7">username</a> = rk_UNCONST(user);
136ae771770SStanislav Sedov    type3.<a name="a20"></a><a class="code" href="structntlm__type3.html#89d7688f04cb1362ffa5a81759d28716">targetname</a> = rk_UNCONST(target);
137ae771770SStanislav Sedov    type3.<a name="a21"></a><a class="code" href="structntlm__type3.html#ffbe974b5c93e47e2c8bf6f5a767c82d">ws</a> = rk_UNCONST(<span class="stringliteral">"workstation"</span>);
138ae771770SStanislav Sedov
139ae771770SStanislav Sedov    {
140ae771770SStanislav Sedov        <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> key;
141ae771770SStanislav Sedov        <a name="a22"></a><a class="code" href="group__ntlm__core.html#g254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(password, &amp;key);
142ae771770SStanislav Sedov
143ae771770SStanislav Sedov        <a name="a23"></a><a class="code" href="group__ntlm__core.html#ge3b634802ef94233a175291abd2ea14d">heim_ntlm_calculate_ntlm1</a>(key.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>, key.<a class="code" href="structntlm__buf.html#1ca1856fd5b4ac0197320d7723c73bd0">length</a>,
144ae771770SStanislav Sedov                                  type2.<a class="code" href="structntlm__type2.html#12c5c7a960c60bbd54dbf49527856bab">challenge</a>,
145ae771770SStanislav Sedov                                  &amp;type3.<a name="a24"></a><a class="code" href="structntlm__type3.html#7b496ad8682fbd4a5fe06c32da7621c7">ntlm</a>);
146ae771770SStanislav Sedov        free(key.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
147ae771770SStanislav Sedov    }
148ae771770SStanislav Sedov
149ae771770SStanislav Sedov    ret = <a name="a25"></a><a class="code" href="group__ntlm__core.html#g9cf026be6e602c22d62aa9e47e85c7c2">heim_ntlm_encode_type3</a>(&amp;type3, &amp;data);
150ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
151ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_encode_type3"</span>);
152ae771770SStanislav Sedov
153ae771770SStanislav Sedov    free(type3.<a class="code" href="structntlm__type3.html#7b496ad8682fbd4a5fe06c32da7621c7">ntlm</a>.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
154ae771770SStanislav Sedov
155ae771770SStanislav Sedov    memset(&amp;type3, 0, <span class="keyword">sizeof</span>(type3));
156ae771770SStanislav Sedov
157ae771770SStanislav Sedov    ret = heim_ntlm_decode_type3(&amp;data, 1, &amp;type3);
158ae771770SStanislav Sedov    free(data.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
159ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
160ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_decode_type3"</span>);
161ae771770SStanislav Sedov
162ae771770SStanislav Sedov    <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"workstation"</span>, type3.<a class="code" href="structntlm__type3.html#ffbe974b5c93e47e2c8bf6f5a767c82d">ws</a>) != 0)
163ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"type3 ws wrong"</span>);
164ae771770SStanislav Sedov
165ae771770SStanislav Sedov    <span class="keywordflow">if</span> (strcmp(target, type3.<a class="code" href="structntlm__type3.html#89d7688f04cb1362ffa5a81759d28716">targetname</a>) != 0)
166ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"type3 targetname wrong"</span>);
167ae771770SStanislav Sedov
168ae771770SStanislav Sedov    <span class="keywordflow">if</span> (strcmp(user, type3.<a class="code" href="structntlm__type3.html#c6e99229102b238c4aad9b93fabe95b7">username</a>) != 0)
169ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"type3 username wrong"</span>);
170ae771770SStanislav Sedov
171ae771770SStanislav Sedov
172ae771770SStanislav Sedov    <a name="a26"></a><a class="code" href="group__ntlm__core.html#gc4e6d01e5247b8540d41ccbbf1031319">heim_ntlm_free_type3</a>(&amp;type3);
173ae771770SStanislav Sedov
174ae771770SStanislav Sedov    <span class="comment">/*</span>
175ae771770SStanislav Sedov<span class="comment">     * NTLMv2</span>
176ae771770SStanislav Sedov<span class="comment">     */</span>
177ae771770SStanislav Sedov
178ae771770SStanislav Sedov    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));
179ae771770SStanislav Sedov
180ae771770SStanislav Sedov    flags = NTLM_NEG_UNICODE | NTLM_NEG_NTLM | NTLM_TARGET_DOMAIN;
181ae771770SStanislav Sedov    type2.<a class="code" href="structntlm__type2.html#7f52e5d5e1e31e369d88d1cfb738a9ff">flags</a> = flags;
182ae771770SStanislav Sedov
183ae771770SStanislav Sedov    memset(type2.<a class="code" href="structntlm__type2.html#12c5c7a960c60bbd54dbf49527856bab">challenge</a>, 0x7f, <span class="keyword">sizeof</span>(type2.<a class="code" href="structntlm__type2.html#12c5c7a960c60bbd54dbf49527856bab">challenge</a>));
184ae771770SStanislav Sedov    type2.<a class="code" href="structntlm__type2.html#7ed7a5246d77d4358e6fa459c6263a10">targetname</a> = rk_UNCONST(target);
185ae771770SStanislav Sedov    type2.<a class="code" href="structntlm__type2.html#d468bf3c5f042a893f3d118a9cb50a34">targetinfo</a>.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a> = <span class="stringliteral">"\x00\x00"</span>;
186ae771770SStanislav Sedov    type2.<a class="code" href="structntlm__type2.html#d468bf3c5f042a893f3d118a9cb50a34">targetinfo</a>.<a class="code" href="structntlm__buf.html#1ca1856fd5b4ac0197320d7723c73bd0">length</a> = 2;
187ae771770SStanislav Sedov
188ae771770SStanislav Sedov    ret = <a class="code" href="group__ntlm__core.html#g2860c6f6d497255eb433adc8cacc49dd">heim_ntlm_encode_type2</a>(&amp;type2, &amp;data);
189ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
190ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_encode_type2"</span>);
191ae771770SStanislav Sedov
192ae771770SStanislav Sedov    memset(&amp;type2, 0, <span class="keyword">sizeof</span>(type2));
193ae771770SStanislav Sedov
194ae771770SStanislav Sedov    ret = heim_ntlm_decode_type2(&amp;data, &amp;type2);
195ae771770SStanislav Sedov    free(data.<a class="code" href="structntlm__buf.html#0cb7caf04f8f80326491b45edcdd2687">data</a>);
196ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
197ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_decode_type2"</span>);
198ae771770SStanislav Sedov
199ae771770SStanislav Sedov    <a class="code" href="group__ntlm__core.html#g8fde84c86f1c7c9f730f7fb4acedcb43">heim_ntlm_free_type2</a>(&amp;type2);
200ae771770SStanislav Sedov
201ae771770SStanislav Sedov    <span class="keywordflow">return</span> 0;
202ae771770SStanislav Sedov}
203ae771770SStanislav Sedov
204ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span>
205ae771770SStanislav Sedovtest_keys(<span class="keywordtype">void</span>)
206ae771770SStanislav Sedov{
207ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">char</span>
208ae771770SStanislav Sedov        *username = <span class="stringliteral">"test"</span>,
209ae771770SStanislav Sedov        *password = <span class="stringliteral">"test1234"</span>,
210ae771770SStanislav Sedov        *target = <span class="stringliteral">"TESTNT"</span>;
211ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
212ae771770SStanislav Sedov        serverchallenge[8] = <span class="stringliteral">"\x67\x7f\x1c\x55\x7a\x5e\xe9\x6c"</span>;
213ae771770SStanislav Sedov    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> infotarget, infotarget2, answer, key;
214ae771770SStanislav Sedov    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlmv2[16], ntlmv2_1[16];
215ae771770SStanislav Sedov    <span class="keywordtype">int</span> ret;
216ae771770SStanislav Sedov
217ae771770SStanislav Sedov    infotarget.length = 70;
218ae771770SStanislav Sedov    infotarget.data =
219ae771770SStanislav Sedov        <span class="stringliteral">"\x02\x00\x0c\x00\x54\x00\x45\x00\x53\x00\x54\x00\x4e\x00\x54\x00"</span>
220ae771770SStanislav Sedov        <span class="stringliteral">"\x01\x00\x0c\x00\x4d\x00\x45\x00\x4d\x00\x42\x00\x45\x00\x52\x00"</span>
221ae771770SStanislav Sedov        <span class="stringliteral">"\x03\x00\x1e\x00\x6d\x00\x65\x00\x6d\x00\x62\x00\x65\x00\x72\x00"</span>
222ae771770SStanislav Sedov            <span class="stringliteral">"\x2e\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e\x00\x63\x00\x6f"</span>
223ae771770SStanislav Sedov            <span class="stringliteral">"\x00\x6d\x00"</span>
224ae771770SStanislav Sedov        <span class="stringliteral">"\x00\x00\x00\x00"</span>;
225ae771770SStanislav Sedov
226ae771770SStanislav Sedov    answer.length = 0;
227ae771770SStanislav Sedov    answer.data = NULL;
228ae771770SStanislav Sedov
229ae771770SStanislav Sedov    <a class="code" href="group__ntlm__core.html#g254ee0a4d5a2594833e36697ad575d7e">heim_ntlm_nt_key</a>(password, &amp;key);
230ae771770SStanislav Sedov
231ae771770SStanislav Sedov    ret = <a name="a27"></a><a class="code" href="group__ntlm__core.html#ga8f07fb71a0d5f095cde3fb9fb40d10c">heim_ntlm_calculate_ntlm2</a>(key.data,
232ae771770SStanislav Sedov                                    key.length,
233ae771770SStanislav Sedov                                    username,
234ae771770SStanislav Sedov                                    target,
235ae771770SStanislav Sedov                                    serverchallenge,
236ae771770SStanislav Sedov                                    &amp;infotarget,
237ae771770SStanislav Sedov                                    ntlmv2,
238ae771770SStanislav Sedov                                    &amp;answer);
239ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
240ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_calculate_ntlm2"</span>);
241ae771770SStanislav Sedov
242ae771770SStanislav Sedov    ret = <a name="a28"></a><a class="code" href="group__ntlm__core.html#g3b3d6a5187cab6bfe656afa7a8273ca6">heim_ntlm_verify_ntlm2</a>(key.data,
243ae771770SStanislav Sedov                                 key.length,
244ae771770SStanislav Sedov                                 username,
245ae771770SStanislav Sedov                                 target,
246ae771770SStanislav Sedov                                 0,
247ae771770SStanislav Sedov                                 serverchallenge,
248ae771770SStanislav Sedov                                 &amp;answer,
249ae771770SStanislav Sedov                                 &amp;infotarget2,
250ae771770SStanislav Sedov                                 ntlmv2_1);
251ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
252ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_verify_ntlm2"</span>);
253ae771770SStanislav Sedov
254ae771770SStanislav Sedov    <span class="keywordflow">if</span> (memcmp(ntlmv2, ntlmv2_1, <span class="keyword">sizeof</span>(ntlmv2)) != 0)
255ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"ntlm master key not same"</span>);
256ae771770SStanislav Sedov
257ae771770SStanislav Sedov    <span class="keywordflow">if</span> (infotarget.length &gt; infotarget2.length)
258ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"infotarget length"</span>);
259ae771770SStanislav Sedov
260ae771770SStanislav Sedov    <span class="keywordflow">if</span> (memcmp(infotarget.data, infotarget2.data, infotarget.length) != 0)
261ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"infotarget not the same"</span>);
262ae771770SStanislav Sedov
263ae771770SStanislav Sedov    free(key.data);
264ae771770SStanislav Sedov    free(answer.data);
265ae771770SStanislav Sedov    free(infotarget2.data);
266ae771770SStanislav Sedov
267ae771770SStanislav Sedov    <span class="keywordflow">return</span> 0;
268ae771770SStanislav Sedov}
269ae771770SStanislav Sedov
270ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span>
271ae771770SStanislav Sedovtest_ntlm2_session_resp(<span class="keywordtype">void</span>)
272ae771770SStanislav Sedov{
273ae771770SStanislav Sedov    <span class="keywordtype">int</span> ret;
274ae771770SStanislav Sedov    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> lm, ntlm;
275ae771770SStanislav Sedov
276ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> lm_resp[24] =
277ae771770SStanislav Sedov        <span class="stringliteral">"\xff\xff\xff\x00\x11\x22\x33\x44"</span>
278ae771770SStanislav Sedov        <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x00"</span>
279ae771770SStanislav Sedov        <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x00"</span>;
280ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm2_sess_resp[24] =
281ae771770SStanislav Sedov        <span class="stringliteral">"\x10\xd5\x50\x83\x2d\x12\xb2\xcc"</span>
282ae771770SStanislav Sedov        <span class="stringliteral">"\xb7\x9d\x5a\xd1\xf4\xee\xd3\xdf"</span>
283ae771770SStanislav Sedov        <span class="stringliteral">"\x82\xac\xa4\xc3\x68\x1d\xd4\x55"</span>;
284ae771770SStanislav Sedov
285ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> client_nonce[8] =
286ae771770SStanislav Sedov        <span class="stringliteral">"\xff\xff\xff\x00\x11\x22\x33\x44"</span>;
287ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> server_challenge[8] =
288ae771770SStanislav Sedov        <span class="stringliteral">"\x01\x23\x45\x67\x89\xab\xcd\xef"</span>;
289ae771770SStanislav Sedov
290ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ntlm_hash[16] =
291ae771770SStanislav Sedov        <span class="stringliteral">"\xcd\x06\xca\x7c\x7e\x10\xc9\x9b"</span>
292ae771770SStanislav Sedov        <span class="stringliteral">"\x1d\x33\xb7\x48\x5a\x2e\xd8\x08"</span>;
293ae771770SStanislav Sedov
294ae771770SStanislav Sedov    ret = heim_ntlm_calculate_ntlm2_sess(client_nonce,
295ae771770SStanislav Sedov                                         server_challenge,
296ae771770SStanislav Sedov                                         ntlm_hash,
297ae771770SStanislav Sedov                                         &amp;lm,
298ae771770SStanislav Sedov                                         &amp;ntlm);
299ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
300ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"heim_ntlm_calculate_ntlm2_sess_resp"</span>);
301ae771770SStanislav Sedov
302ae771770SStanislav Sedov    <span class="keywordflow">if</span> (lm.length != 24 || memcmp(lm.data, lm_resp, 24) != 0)
303ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"lm_resp wrong"</span>);
304ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ntlm.length != 24 || memcmp(ntlm.data, ntlm2_sess_resp, 24) != 0)
305ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"ntlm2_sess_resp wrong"</span>);
306ae771770SStanislav Sedov
307ae771770SStanislav Sedov    free(lm.data);
308ae771770SStanislav Sedov    free(ntlm.data);
309ae771770SStanislav Sedov
310ae771770SStanislav Sedov
311ae771770SStanislav Sedov    <span class="keywordflow">return</span> 0;
312ae771770SStanislav Sedov}
313ae771770SStanislav Sedov
314ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span>
315ae771770SStanislav Sedovtest_targetinfo(<span class="keywordtype">void</span>)
316ae771770SStanislav Sedov{
317ae771770SStanislav Sedov    <span class="keyword">struct </span>ntlm_targetinfo ti;
318ae771770SStanislav Sedov    <span class="keyword">struct </span><a class="code" href="structntlm__buf.html">ntlm_buf</a> buf;
319ae771770SStanislav Sedov    <span class="keyword">const</span> <span class="keywordtype">char</span> *dnsservername = <span class="stringliteral">"dnsservername"</span>;
320ae771770SStanislav Sedov    <span class="keywordtype">int</span> ret;
321ae771770SStanislav Sedov
322ae771770SStanislav Sedov    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));
323ae771770SStanislav Sedov
324ae771770SStanislav Sedov    ti.dnsservername = rk_UNCONST(dnsservername);
325ae771770SStanislav Sedov    ti.avflags = 1;
326ae771770SStanislav Sedov    ret = <a name="a29"></a><a class="code" href="group__ntlm__core.html#g2881747fad2ac2979a28d3bd050b0fa8">heim_ntlm_encode_targetinfo</a>(&amp;ti, 1, &amp;buf);
327ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
328ae771770SStanislav Sedov        <span class="keywordflow">return</span> ret;
329ae771770SStanislav Sedov
330ae771770SStanislav Sedov    memset(&amp;ti, 0, <span class="keyword">sizeof</span>(ti));
331ae771770SStanislav Sedov
332ae771770SStanislav Sedov    ret = <a name="a30"></a><a class="code" href="group__ntlm__core.html#gf1d4de2faec8b1c1070a55fd2e6e630f">heim_ntlm_decode_targetinfo</a>(&amp;buf, 1, &amp;ti);
333ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ret)
334ae771770SStanislav Sedov        <span class="keywordflow">return</span> ret;
335ae771770SStanislav Sedov
336ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ti.dnsservername == NULL ||
337ae771770SStanislav Sedov        strcmp(ti.dnsservername, dnsservername) != 0)
338ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"ti.dnshostname != %s"</span>, dnsservername);
339ae771770SStanislav Sedov    <span class="keywordflow">if</span> (ti.avflags != 1)
340ae771770SStanislav Sedov        errx(1, <span class="stringliteral">"ti.avflags != 1"</span>);
341ae771770SStanislav Sedov
342ae771770SStanislav Sedov    <a name="a31"></a><a class="code" href="group__ntlm__core.html#g704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&amp;ti);
343ae771770SStanislav Sedov
344ae771770SStanislav Sedov    <span class="keywordflow">return</span> 0;
345ae771770SStanislav Sedov}
346ae771770SStanislav Sedov
347ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span> verbose_flag = 0;
348ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span> version_flag = 0;
349ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">int</span> help_flag    = 0;
350ae771770SStanislav Sedov
351ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keyword">struct </span>getargs args[] = {
352ae771770SStanislav Sedov    {<span class="stringliteral">"verbose"</span>, 0,      arg_flag,       &amp;verbose_flag, <span class="stringliteral">"verbose printing"</span>, NULL },
353ae771770SStanislav Sedov    {<span class="stringliteral">"version"</span>, 0,      arg_flag,       &amp;version_flag, <span class="stringliteral">"print version"</span>, NULL },
354ae771770SStanislav Sedov    {<span class="stringliteral">"help"</span>,    0,      arg_flag,       &amp;help_flag,  NULL, NULL }
355ae771770SStanislav Sedov};
356ae771770SStanislav Sedov
357ae771770SStanislav Sedov<span class="keyword">static</span> <span class="keywordtype">void</span>
358ae771770SStanislav Sedovusage (<span class="keywordtype">int</span> ret)
359ae771770SStanislav Sedov{
360ae771770SStanislav Sedov    arg_printusage (args, <span class="keyword">sizeof</span>(args)/<span class="keyword">sizeof</span>(*args),
361ae771770SStanislav Sedov                    NULL, <span class="stringliteral">""</span>);
362ae771770SStanislav Sedov    exit (ret);
363ae771770SStanislav Sedov}
364ae771770SStanislav Sedov
365ae771770SStanislav Sedov<span class="keywordtype">int</span>
366ae771770SStanislav Sedovmain(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)
367ae771770SStanislav Sedov{
368ae771770SStanislav Sedov    <span class="keywordtype">int</span> ret = 0, optind = 0;
369ae771770SStanislav Sedov
370ae771770SStanislav Sedov    setprogname(argv[0]);
371ae771770SStanislav Sedov
372ae771770SStanislav Sedov    <span class="keywordflow">if</span>(getarg(args, <span class="keyword">sizeof</span>(args) / <span class="keyword">sizeof</span>(args[0]), argc, argv, &amp;optind))
373ae771770SStanislav Sedov        usage(1);
374ae771770SStanislav Sedov
375ae771770SStanislav Sedov    <span class="keywordflow">if</span> (help_flag)
376ae771770SStanislav Sedov        usage (0);
377ae771770SStanislav Sedov
378ae771770SStanislav Sedov    <span class="keywordflow">if</span>(version_flag){
379ae771770SStanislav Sedov        print_version(NULL);
380ae771770SStanislav Sedov        exit(0);
381ae771770SStanislav Sedov    }
382ae771770SStanislav Sedov
383ae771770SStanislav Sedov    argc -= optind;
384ae771770SStanislav Sedov    argv += optind;
385ae771770SStanislav Sedov
386ae771770SStanislav Sedov    <span class="keywordflow">if</span> (verbose_flag)
387ae771770SStanislav Sedov        printf(<span class="stringliteral">"test_parse\n"</span>);
388ae771770SStanislav Sedov
389ae771770SStanislav Sedov    ret += test_parse();
390ae771770SStanislav Sedov    <span class="keywordflow">if</span> (verbose_flag)
391ae771770SStanislav Sedov        printf(<span class="stringliteral">"test_keys\n"</span>);
392ae771770SStanislav Sedov
393ae771770SStanislav Sedov    ret += test_keys();
394ae771770SStanislav Sedov    <span class="keywordflow">if</span> (verbose_flag)
395ae771770SStanislav Sedov        printf(<span class="stringliteral">"test_ntlm2_session_resp\n"</span>);
396ae771770SStanislav Sedov    ret += test_ntlm2_session_resp();
397ae771770SStanislav Sedov
398ae771770SStanislav Sedov    <span class="keywordflow">if</span> (verbose_flag)
399ae771770SStanislav Sedov        printf(<span class="stringliteral">"test_targetinfo\n"</span>);
400ae771770SStanislav Sedov    ret += test_targetinfo();
401ae771770SStanislav Sedov
402ae771770SStanislav Sedov    <span class="keywordflow">return</span> ret;
403ae771770SStanislav Sedov}
404ae771770SStanislav Sedov</pre></div> </div>
405ae771770SStanislav Sedov<hr size="1"><address style="text-align: right;"><small>
406*cf771f22SStanislav SedovGenerated on Wed Jan 11 14:07:50 2012 for Heimdalntlmlibrary by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6</small></address>
407ae771770SStanislav Sedov</body>
408ae771770SStanislav Sedov</html>
409