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