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