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&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'' 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 "config.h"</span></div> 62<div class="line"> </div> 63<div class="line"><span class="preprocessor">#include <stdio.h></span></div> 64<div class="line"><span class="preprocessor">#include <err.h></span></div> 65<div class="line"><span class="preprocessor">#include <roken.h></span></div> 66<div class="line"><span class="preprocessor">#include <getarg.h></span></div> 67<div class="line"> </div> 68<div class="line"><span class="preprocessor">#include <krb5-types.h></span> <span class="comment">/* or <inttypes.h> */</span></div> 69<div class="line"><span class="preprocessor">#include <heimntlm.h></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">"foo"</span>,</div> 77<div class="line"> *domain = <span class="stringliteral">"mydomain"</span>,</div> 78<div class="line"> *hostname = <span class="stringliteral">"myhostname"</span>,</div> 79<div class="line"> *password = <span class="stringliteral">"digestpassword"</span>,</div> 80<div class="line"> *target = <span class="stringliteral">"DOMAIN"</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(&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>(&type1, &<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">"heim_ntlm_encode_type1"</span>);</div> 98<div class="line"> </div> 99<div class="line"> memset(&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">"ntlm-type1"</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(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &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">"heim_ntlm_encode_type1"</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">"parser got domain wrong: %s"</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">"parser got hostname wrong: %s"</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>(&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(&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>(&type2, &<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">"heim_ntlm_encode_type2"</span>);</div> 134<div class="line"> </div> 135<div class="line"> memset(&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">"ntlm-type2"</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(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &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">"heim_ntlm_decode_type2"</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>(&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(&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">"workstation"</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, &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"> &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>(&type3, &<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">"heim_ntlm_encode_type3"</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(&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">"ntlm-type3"</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(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, 1, &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">"heim_ntlm_decode_type3"</span>);</div> 183<div class="line"> </div> 184<div class="line"> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"workstation"</span>, type3.ws) != 0)</div> 185<div class="line"> errx(1, <span class="stringliteral">"type3 ws wrong"</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">"type3 targetname wrong"</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">"type3 username wrong"</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>(&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(&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">"\x00\x00"</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>(&type2, &<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">"heim_ntlm_encode_type2"</span>);</div> 213<div class="line"> </div> 214<div class="line"> memset(&type2, 0, <span class="keyword">sizeof</span>(type2));</div> 215<div class="line"> </div> 216<div class="line"> ret = heim_ntlm_decode_type2(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &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">"heim_ntlm_decode_type2"</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>(&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">"test"</span>,</div> 231<div class="line"> *password = <span class="stringliteral">"test1234"</span>,</div> 232<div class="line"> *target = <span class="stringliteral">"TESTNT"</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">"\x67\x7f\x1c\x55\x7a\x5e\xe9\x6c"</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">"\x02\x00\x0c\x00\x54\x00\x45\x00\x53\x00\x54\x00\x4e\x00\x54\x00"</span></div> 242<div class="line"> <span class="stringliteral">"\x01\x00\x0c\x00\x4d\x00\x45\x00\x4d\x00\x42\x00\x45\x00\x52\x00"</span></div> 243<div class="line"> <span class="stringliteral">"\x03\x00\x1e\x00\x6d\x00\x65\x00\x6d\x00\x62\x00\x65\x00\x72\x00"</span></div> 244<div class="line"> <span class="stringliteral">"\x2e\x00\x74\x00\x65\x00\x73\x00\x74\x00\x2e\x00\x63\x00\x6f"</span></div> 245<div class="line"> <span class="stringliteral">"\x00\x6d\x00"</span></div> 246<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00"</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, &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"> &infotarget,</div> 259<div class="line"> ntlmv2,</div> 260<div class="line"> &answer);</div> 261<div class="line"> <span class="keywordflow">if</span> (ret)</div> 262<div class="line"> errx(1, <span class="stringliteral">"heim_ntlm_calculate_ntlm2"</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"> &answer,</div> 271<div class="line"> &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">"heim_ntlm_verify_ntlm2"</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">"ntlm master key not same"</span>);</div> 278<div class="line"> </div> 279<div class="line"> <span class="keywordflow">if</span> (infotarget.length > infotarget2.length)</div> 280<div class="line"> errx(1, <span class="stringliteral">"infotarget length"</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">"infotarget not the same"</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">"\xff\xff\xff\x00\x11\x22\x33\x44"</span></div> 300<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x00"</span></div> 301<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x00"</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">"\x10\xd5\x50\x83\x2d\x12\xb2\xcc"</span></div> 304<div class="line"> <span class="stringliteral">"\xb7\x9d\x5a\xd1\xf4\xee\xd3\xdf"</span></div> 305<div class="line"> <span class="stringliteral">"\x82\xac\xa4\xc3\x68\x1d\xd4\x55"</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">"\xff\xff\xff\x00\x11\x22\x33\x44"</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">"\x01\x23\x45\x67\x89\xab\xcd\xef"</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">"\xcd\x06\xca\x7c\x7e\x10\xc9\x9b"</span></div> 314<div class="line"> <span class="stringliteral">"\x1d\x33\xb7\x48\x5a\x2e\xd8\x08"</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"> &lm,</div> 320<div class="line"> &ntlm);</div> 321<div class="line"> <span class="keywordflow">if</span> (ret)</div> 322<div class="line"> errx(1, <span class="stringliteral">"heim_ntlm_calculate_ntlm2_sess_resp"</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">"lm_resp wrong"</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">"ntlm2_sess_resp wrong"</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">"\x4e\x54\x4c\x4d\x53\x53\x50\x00\x03\x00\x00\x00\x18\x00\x18\x00"</span></div> 341<div class="line"> <span class="stringliteral">"\x80\x00\x00\x00\x9e\x00\x9e\x00\x98\x00\x00\x00\x14\x00\x14\x00"</span></div> 342<div class="line"> <span class="stringliteral">"\x48\x00\x00\x00\x10\x00\x10\x00\x5c\x00\x00\x00\x14\x00\x14\x00"</span></div> 343<div class="line"> <span class="stringliteral">"\x6c\x00\x00\x00\x00\x00\x00\x00\x36\x01\x00\x00\x05\x82\x88\xa2"</span></div> 344<div class="line"> <span class="stringliteral">"\x05\x01\x28\x0a\x00\x00\x00\x0f\x43\x00\x4f\x00\x4c\x00\x4c\x00"</span></div> 345<div class="line"> <span class="stringliteral">"\x45\x00\x59\x00\x2d\x00\x58\x00\x50\x00\x34\x00\x54\x00\x45\x00"</span></div> 346<div class="line"> <span class="stringliteral">"\x53\x00\x54\x00\x55\x00\x53\x00\x45\x00\x52\x00\x43\x00\x4f\x00"</span></div> 347<div class="line"> <span class="stringliteral">"\x4c\x00\x4c\x00\x45\x00\x59\x00\x2d\x00\x58\x00\x50\x00\x34\x00"</span></div> 348<div class="line"> <span class="stringliteral">"\x2f\x96\xec\x0a\xf7\x9f\x2e\x24\xba\x09\x48\x10\xa5\x22\xd4\xe1"</span></div> 349<div class="line"> <span class="stringliteral">"\x16\x6a\xca\x58\x74\x9a\xc1\x4f\x54\x6f\xee\x40\x96\xce\x43\x6e"</span></div> 350<div class="line"> <span class="stringliteral">"\xdf\x99\x20\x71\x6c\x9a\xda\x2a\x01\x01\x00\x00\x00\x00\x00\x00"</span></div> 351<div class="line"> <span class="stringliteral">"\x8d\xc0\x57\xc9\x79\x5e\xcb\x01\x16\x6a\xca\x58\x74\x9a\xc1\x4f"</span></div> 352<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x02\x00\x14\x00\x4e\x00\x55\x00\x54\x00\x43\x00"</span></div> 353<div class="line"> <span class="stringliteral">"\x52\x00\x41\x00\x43\x00\x4b\x00\x45\x00\x52\x00\x01\x00\x14\x00"</span></div> 354<div class="line"> <span class="stringliteral">"\x4e\x00\x55\x00\x54\x00\x43\x00\x52\x00\x41\x00\x43\x00\x4b\x00"</span></div> 355<div class="line"> <span class="stringliteral">"\x45\x00\x52\x00\x04\x00\x12\x00\x61\x00\x70\x00\x70\x00\x6c\x00"</span></div> 356<div class="line"> <span class="stringliteral">"\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x03\x00\x20\x00\x68\x00"</span></div> 357<div class="line"> <span class="stringliteral">"\x75\x00\x6d\x00\x6d\x00\x65\x00\x6c\x00\x2e\x00\x61\x00\x70\x00"</span></div> 358<div class="line"> <span class="stringliteral">"\x70\x00\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x00\x00"</span></div> 359<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64\x00\x6f"</span></div> 360<div class="line"> <span class="stringliteral">"\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32\x00\x20"</span></div> 361<div class="line"> <span class="stringliteral">"\x00\x53\x00\x65\x00\x72\x00\x76\x00\x69\x00\x63\x00\x65\x00\x20"</span></div> 362<div class="line"> <span class="stringliteral">"\x00\x50\x00\x61\x00\x63\x00\x6b\x00\x20\x00\x33\x00\x20\x00\x32"</span></div> 363<div class="line"> <span class="stringliteral">"\x00\x36\x00\x30\x00\x30\x00\x00\x00\x57\x00\x69\x00\x6e\x00\x64"</span></div> 364<div class="line"> <span class="stringliteral">"\x00\x6f\x00\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x32"</span></div> 365<div class="line"> <span class="stringliteral">"\x00\x20\x00\x35\x00\x2e\x00\x31\x00\x00\x00\x00\x00"</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">"\xe4\x9c\x6a\x12\xe1\xbd\xde\x6a"</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">"\xD1\x83\x98\x3E\xAE\xA7\xBE\x99\x59\xC8\xF4\xC1\x98\xED\x0E\x68"</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">"\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> 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(&data, 1, &t3);</div> 386<div class="line"> <span class="keywordflow">if</span> (ret)</div> 387<div class="line"> errx(1, <span class="stringliteral">"heim_ntlm_decode_type3"</span>);</div> 388<div class="line"> </div> 389<div class="line"> memset(&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>(&data, 1, &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"> &t3.ntlm,</div> 404<div class="line"> &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">"verify_ntlmv2"</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">"target info wrong: %d != %d"</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>(&t3);</div> 414<div class="line"> <a name="a30"></a><a class="code" href="group__ntlm__core.html#ga704ec8c5dba05ef57186d242ff165565">heim_ntlm_free_targetinfo</a>(&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">"dnsservername"</span>;</div> 425<div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span> *targetname = <span class="stringliteral">"targetname"</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(&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>(&ti, 1, &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(&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>(&buf, 1, &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">"ti.dnshostname != %s"</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">"ti.avflags != 1"</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">"ti.targetname != %s"</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">"ti.channel_bindings != Z(16)"</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>(&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">"山田"</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, &buf) != 0)</div> 477<div class="line"> errx(1, <span class="stringliteral">"heim_ntlmv_nt_key(jp)"</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">"compare failed"</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>(&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">"\x4e\x54\x4c\x4d\x53\x53\x50\x00\x02\x00\x00\x00\x06\x00\x06\x00"</span></div> 492<div class="line"> <span class="stringliteral">"\x38\x00\x00\x00\x05\x02\x89\x62\x62\x94\xb1\xf3\x56\x80\xb0\xf9"</span></div> 493<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x3e\x00\x00\x00"</span></div> 494<div class="line"> <span class="stringliteral">"\x06\x01\xb0\x1d\x00\x00\x00\x0f\x43\x00\x4f\x00\x53\x00\x02\x00"</span></div> 495<div class="line"> <span class="stringliteral">"\x06\x00\x43\x00\x4f\x00\x53\x00\x01\x00\x12\x00\x43\x00\x4f\x00"</span></div> 496<div class="line"> <span class="stringliteral">"\x53\x00\x57\x00\x49\x00\x4e\x00\x37\x00\x4a\x00\x50\x00\x04\x00"</span></div> 497<div class="line"> <span class="stringliteral">"\x1a\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00"</span></div> 498<div class="line"> <span class="stringliteral">"\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x03\x00\x2e\x00"</span></div> 499<div class="line"> <span class="stringliteral">"\x63\x00\x6f\x00\x73\x00\x77\x00\x69\x00\x6e\x00\x37\x00\x6a\x00"</span></div> 500<div class="line"> <span class="stringliteral">"\x70\x00\x2e\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00"</span></div> 501<div class="line"> <span class="stringliteral">"\x70\x00\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x05\x00"</span></div> 502<div class="line"> <span class="stringliteral">"\x1a\x00\x63\x00\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00"</span></div> 503<div class="line"> <span class="stringliteral">"\x6c\x00\x65\x00\x2e\x00\x63\x00\x6f\x00\x6d\x00\x07\x00\x08\x00"</span></div> 504<div class="line"> <span class="stringliteral">"\x94\x51\xf0\xbd\xdc\x61\xcb\x01\x00\x00\x00\x00"</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">"\x4e\x54\x4c\x4d\x53\x53\x50\x00\x03\x00\x00\x00\x18\x00\x18\x00"</span></div> 508<div class="line"> <span class="stringliteral">"\x74\x00\x00\x00\xce\x00\xce\x00\x8c\x00\x00\x00\x1a\x00\x1a\x00"</span></div> 509<div class="line"> <span class="stringliteral">"\x40\x00\x00\x00\x04\x00\x04\x00\x5a\x00\x00\x00\x16\x00\x16\x00"</span></div> 510<div class="line"> <span class="stringliteral">"\x5e\x00\x00\x00\x10\x00\x10\x00\x5a\x01\x00\x00\x05\x02\x89\x62"</span></div> 511<div class="line"> <span class="stringliteral">"\x31\x00\x37\x00\x2e\x00\x32\x00\x30\x00\x31\x00\x2e\x00\x35\x00"</span></div> 512<div class="line"> <span class="stringliteral">"\x37\x00\x2e\x00\x31\x00\x32\x00\x31\x00\x71\x5c\x30\x75\x77\x00"</span></div> 513<div class="line"> <span class="stringliteral">"\x6f\x00\x72\x00\x6b\x00\x73\x00\x74\x00\x61\x00\x74\x00\x69\x00"</span></div> 514<div class="line"> <span class="stringliteral">"\x6f\x00\x6e\x00\xab\xad\xeb\x72\x01\xd4\x5f\xdf\x59\x07\x5f\xa9"</span></div> 515<div class="line"> <span class="stringliteral">"\xfd\x54\x98\x2d\xfa\x17\xbb\xf1\x3c\x8f\xf5\x20\xe6\x8f\xd7\x0a"</span></div> 516<div class="line"> <span class="stringliteral">"\xc9\x19\x3e\x94\x61\x31\xdb\x0f\x55\xe8\xe2\x53\x01\x01\x00\x00"</span></div> 517<div class="line"> <span class="stringliteral">"\x00\x00\x00\x00\x00\x06\x3e\x30\xe4\x61\xcb\x01\x71\x98\x10\x6b"</span></div> 518<div class="line"> <span class="stringliteral">"\x4c\x82\xec\xb3\x00\x00\x00\x00\x02\x00\x06\x00\x43\x00\x4f\x00"</span></div> 519<div class="line"> <span class="stringliteral">"\x53\x00\x01\x00\x12\x00\x43\x00\x4f\x00\x53\x00\x57\x00\x49\x00"</span></div> 520<div class="line"> <span class="stringliteral">"\x4e\x00\x37\x00\x4a\x00\x50\x00\x04\x00\x1a\x00\x63\x00\x6f\x00"</span></div> 521<div class="line"> <span class="stringliteral">"\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00\x2e\x00"</span></div> 522<div class="line"> <span class="stringliteral">"\x63\x00\x6f\x00\x6d\x00\x03\x00\x2e\x00\x63\x00\x6f\x00\x73\x00"</span></div> 523<div class="line"> <span class="stringliteral">"\x77\x00\x69\x00\x6e\x00\x37\x00\x6a\x00\x70\x00\x2e\x00\x63\x00"</span></div> 524<div class="line"> <span class="stringliteral">"\x6f\x00\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00"</span></div> 525<div class="line"> <span class="stringliteral">"\x2e\x00\x63\x00\x6f\x00\x6d\x00\x05\x00\x1a\x00\x63\x00\x6f\x00"</span></div> 526<div class="line"> <span class="stringliteral">"\x73\x00\x2e\x00\x61\x00\x70\x00\x70\x00\x6c\x00\x65\x00\x2e\x00"</span></div> 527<div class="line"> <span class="stringliteral">"\x63\x00\x6f\x00\x6d\x00\x07\x00\x08\x00\xab\xec\xcc\x30\xe4\x61"</span></div> 528<div class="line"> <span class="stringliteral">"\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x2e\xba\x3f\xd1\xb1"</span></div> 529<div class="line"> <span class="stringliteral">"\xa7\x70\x00\x9d\x55\xa0\x59\x74\x2b\x78"</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(&type2, 0, <span class="keyword">sizeof</span>(type2));</div> 541<div class="line"> </div> 542<div class="line"> ret = heim_ntlm_decode_type2(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, &type2);</div> 543<div class="line"> <span class="keywordflow">if</span> (ret)</div> 544<div class="line"> errx(1, <span class="stringliteral">"heim_ntlm_decode_type2(jp): %d"</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>(&type2, &<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">"heim_ntlm_encode_type2(jp): %d"</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>(&type2);</div> 554<div class="line"> <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&<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(&type3, 0, <span class="keyword">sizeof</span>(type3));</div> 560<div class="line"> </div> 561<div class="line"> ret = heim_ntlm_decode_type3(&<a class="code" href="structntlm__buf.html#a0cb7caf04f8f80326491b45edcdd2687">data</a>, 1, &type3);</div> 562<div class="line"> <span class="keywordflow">if</span> (ret)</div> 563<div class="line"> errx(1, <span class="stringliteral">"heim_ntlm_decode_type2(jp): %d"</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>(&type3, &<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">"heim_ntlm_decode_type2(jp): %d"</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>(&type3);</div> 573<div class="line"> <a class="code" href="group__ntlm__core.html#ga5f6c313a3a7258cda5f09bb44f8d1776">heim_ntlm_free_buf</a>(&<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">"verbose"</span>, 0, arg_flag, &verbose_flag, <span class="stringliteral">"verbose printing"</span>, NULL },</div> 585<div class="line"> {<span class="stringliteral">"version"</span>, 0, arg_flag, &version_flag, <span class="stringliteral">"print version"</span>, NULL },</div> 586<div class="line"> {<span class="stringliteral">"help"</span>, 0, arg_flag, &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">""</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, &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">"test_parse\n"</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">"test_keys\n"</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">"test_ntlm2_session_resp\n"</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">"test_targetinfo\n"</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">"test_ntlmv2\n"</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">"test_string2key\n"</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">"test_jp\n"</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 <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