亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spnegoparse.c

?? 代理服務器 squid-2.6.STABLE16
?? C
?? 第 1 頁 / 共 5 頁
字號:
// Copyright (C) 2002 Microsoft Corporation// All rights reserved.//// THIS CODE AND INFORMATION IS PROVIDED "AS IS"// WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED// OR IMPLIED, INCLUDING BUT NOT LIMITED// TO THE IMPLIED WARRANTIES OF MERCHANTIBILITY// AND/OR FITNESS FOR A PARTICULAR PURPOSE.//// Date    - 10/08/2002// Author  - Sanj Surati///////////////////////////////////////////////////////////////// SPNEGOPARSE.C//// SPNEGO Token Handler Source File//// Contains implementation of SPNEGO Token parsing functions.///////////////////////////////////////////////////////////////#include <stdlib.h>#include <stdio.h>#include <memory.h>#include "spnego.h"#include "derparse.h"#include "spnegoparse.h"//// Defined in DERPARSE.C//extern MECH_OID g_stcMechOIDList [];/**********************************************************************//**                                                                  **//**                                                                  **//**                                                                  **//**                                                                  **//**                 Local SPNEGO Helper definitions                  **//**                                                                  **//**                                                                  **//**                                                                  **//**                                                                  **//**********************************************************************////////////////////////////////////////////////////////////////////////////////// Function://    CalculateMinSpnegoInitTokenSize//// Parameters://    [in]  nMechTokenLength        -  Length of the MechToken Element//    [in]  nMechListMICLength      -  Length of the MechListMIC Element//    [in]  mechOID                 -  OID for MechList//    [in]  nReqFlagsAvailable      -  Is ContextFlags element available//    [out] pnTokenSize             -  Filled out with total size of token//    [out] pnInternalTokenLength   -  Filled out with length minus length//                                     for initial token.//// Returns://    int   Success - SPNEGO_E_SUCCESS//          Failure - SPNEGO API Error code//// Comments ://    Calculates the required length for a SPNEGO NegTokenInit token based//    on the supplied variable length values and which elements are present.//    Note that because the lengths can be represented by an arbitrary//    number of bytes in DER encodings, we actually calculate the lengths//    backwards, so we always know how many bytes we will potentially be//    writing out.//////////////////////////////////////////////////////////////////////////////int CalculateMinSpnegoInitTokenSize( long nMechTokenLength,                                 long nMechListMICLength, SPNEGO_MECH_OID mechOid,                                 int nReqFlagsAvailable, long* pnTokenSize,                                 long* pnInternalTokenLength ){   int   nReturn = SPNEGO_E_INVALID_LENGTH;   // Start at 0.   long  nTotalLength = 0;   long  nTempLength= 0L;   // We will calculate this by walking the token backwards   // Start with MIC Element   if ( nMechListMICLength > 0L )   {      nTempLength = ASNDerCalcElementLength( nMechListMICLength, NULL );      // Check for rollover error      if ( nTempLength < nMechListMICLength )      {         goto xEndTokenInitLength;      }      nTotalLength += nTempLength;   }   // Next is the MechToken   if ( nMechTokenLength > 0L )   {      nTempLength += ASNDerCalcElementLength( nMechTokenLength, NULL );      // Check for rollover error      if ( nTempLength < nTotalLength )      {         goto xEndTokenInitLength;      }      nTotalLength = nTempLength;   }   // Next is the ReqFlags   if ( nReqFlagsAvailable )   {      nTempLength += ASNDerCalcElementLength( SPNEGO_NEGINIT_MAXLEN_REQFLAGS, NULL );      // Check for rollover error      if ( nTempLength < nTotalLength )      {         goto xEndTokenInitLength;      }      nTotalLength = nTempLength;   }   // Next is the MechList - This is REQUIRED   nTempLength += ASNDerCalcMechListLength( mechOid, NULL );   // Check for rollover error   if ( nTempLength < nTotalLength )   {      goto xEndTokenInitLength;   }   nTotalLength = nTempLength;   // Following four fields are the basic header tokens   // Sequence Token   nTempLength += ASNDerCalcTokenLength( nTotalLength, 0L );   // Check for rollover error   if ( nTempLength < nTotalLength )   {      goto xEndTokenInitLength;   }   nTotalLength = nTempLength;   // Neg Token Identifier Token   nTempLength += ASNDerCalcTokenLength( nTotalLength, 0L );   // Check for rollover error   if ( nTempLength < nTotalLength )   {      goto xEndTokenInitLength;   }   nTotalLength = nTempLength;   // SPNEGO OID Token   nTempLength += g_stcMechOIDList[spnego_mech_oid_Spnego].iLen;   // Check for rollover error   if ( nTempLength < nTotalLength )   {      goto xEndTokenInitLength;   }   nTotalLength = nTempLength;   // App Constructed Token   nTempLength += ASNDerCalcTokenLength( nTotalLength, 0L );   // Check for rollover error   if ( nTempLength < nTotalLength )   {      goto xEndTokenInitLength;   }   // The internal length doesn't include the number of bytes   // for the initial token   *pnInternalTokenLength = nTotalLength;   nTotalLength = nTempLength;   // We're done   *pnTokenSize = nTotalLength;   nReturn = SPNEGO_E_SUCCESS;xEndTokenInitLength:   LOG(("CalculateMinSpnegoInitTokenSize returned %d\n",nReturn));   return nReturn;}///////////////////////////////////////////////////////////////////////////////// Function://    CreateSpnegoInitToken//// Parameters://    [in]  MechType                -  OID in MechList//    [in]  ucContextFlags          -  ContextFlags value//    [in]  pbMechToken             -  Mech Token Binary Data//    [in]  ulMechTokenLen          -  Length of Mech Token//    [in]  pbMechListMIC           -  MechListMIC Binary Data//    [in]  ulMechListMICn          -  Length of MechListMIC//    [out] pbTokenData             -  Buffer to write token into.//    [in]  nTokenLength            -  Length of pbTokenData buffer//    [in]  nInternalTokenLength    -  Length of full token without leading//                                     token bytes.//// Returns://    int   Success - SPNEGO_E_SUCCESS//          Failure - SPNEGO API Error code//// Comments ://    Uses DER to fill out pbTokenData with a SPNEGO NegTokenInit Token//    Note that because the lengths can be represented by an arbitrary//    number of bytes in DER encodings, we actually calculate the lengths//    backwards, so we always know how many bytes we will potentially be//    writing out.//////////////////////////////////////////////////////////////////////////////int CreateSpnegoInitToken( SPNEGO_MECH_OID MechType,          unsigned char ucContextFlags, unsigned char* pbMechToken,          unsigned long ulMechTokenLen, unsigned char* pbMechListMIC,          unsigned long ulMechListMICLen, unsigned char* pbTokenData,          long nTokenLength, long nInternalTokenLength ){   int   nReturn = SPNEGO_E_INVALID_LENGTH;   // Start at 0.   long  nTempLength= 0L;   long  nTotalBytesWritten = 0L;   long  nInternalLength = 0L;   unsigned char* pbWriteTokenData = pbTokenData + nTokenLength;   // Temporary buffer to hold the REQ Flags as BIT String Data   unsigned char  abTempReqFlags[SPNEGO_NEGINIT_MAXLEN_REQFLAGS];   // We will write the token out backwards to properly handle the cases   // where the length bytes become adjustable   // Start with MIC Element   if ( ulMechListMICLen > 0L )   {      nTempLength = ASNDerCalcElementLength( ulMechListMICLen, &nInternalLength );      // Decrease the pbWriteTokenData, now we know the length and      // write it out.      pbWriteTokenData -= nTempLength;      nTempLength = ASNDerWriteElement( pbWriteTokenData, SPNEGO_NEGINIT_ELEMENT_MECHLISTMIC,                              OCTETSTRING, pbMechListMIC, ulMechListMICLen );      // Adjust Values and sanity check      nTotalBytesWritten += nTempLength;      nInternalTokenLength -= nTempLength;      if ( nTotalBytesWritten > nTokenLength || nInternalTokenLength < 0 )      {         goto xEndWriteNegTokenInit;      }   }  // IF MechListMIC is present   // Next is the MechToken   if ( ulMechTokenLen > 0L )   {      nTempLength = ASNDerCalcElementLength( ulMechTokenLen, &nInternalLength );      // Decrease the pbWriteTokenData, now we know the length and      // write it out.      pbWriteTokenData -= nTempLength;      nTempLength = ASNDerWriteElement( pbWriteTokenData, SPNEGO_NEGINIT_ELEMENT_MECHTOKEN,                              OCTETSTRING, pbMechToken, ulMechTokenLen );      // Adjust Values and sanity check      nTotalBytesWritten += nTempLength;      nInternalTokenLength -= nTempLength;      if ( nTotalBytesWritten > nTokenLength || nInternalTokenLength < 0 )      {         goto xEndWriteNegTokenInit;      }     }  // IF MechToken Length is present   // Next is the ReqFlags   if ( ucContextFlags > 0L )   {      nTempLength = ASNDerCalcElementLength( SPNEGO_NEGINIT_MAXLEN_REQFLAGS, &nInternalLength );      // We need a byte that indicates how many bits difference between the number      // of bits used in final octet (we only have one) and the max (8)      abTempReqFlags[0] = SPNEGO_NEGINIT_REQFLAGS_BITDIFF;      abTempReqFlags[1] = ucContextFlags;      // Decrease the pbWriteTokenData, now we know the length and      // write it out.      pbWriteTokenData -= nTempLength;      nTempLength = ASNDerWriteElement( pbWriteTokenData, SPNEGO_NEGINIT_ELEMENT_REQFLAGS,                              BITSTRING, abTempReqFlags, SPNEGO_NEGINIT_MAXLEN_REQFLAGS );      // Adjust Values and sanity check      nTotalBytesWritten += nTempLength;      nInternalTokenLength -= nTempLength;      if ( nTotalBytesWritten > nTokenLength || nInternalTokenLength < 0 )      {         goto xEndWriteNegTokenInit;      }   }  // IF ContextFlags   // Next is the MechList - This is REQUIRED   nTempLength = ASNDerCalcMechListLength( MechType, &nInternalLength );   // Decrease the pbWriteTokenData, now we know the length and   // write it out.   pbWriteTokenData -= nTempLength;   nTempLength = ASNDerWriteMechList( pbWriteTokenData, MechType );   // Adjust Values and sanity check   nTotalBytesWritten += nTempLength;   nInternalTokenLength -= nTempLength;   if ( nTotalBytesWritten > nTokenLength || nInternalTokenLength < 0 )   {      goto xEndWriteNegTokenInit;   }   // The next tokens we're writing out reflect the total number of bytes   // we have actually written out.   // Sequence Token   nTempLength = ASNDerCalcTokenLength( nTotalBytesWritten, 0L );   // Decrease the pbWriteTokenData, now we know the length and   // write it out.   pbWriteTokenData -= nTempLength;   nTempLength = ASNDerWriteToken( pbWriteTokenData, SPNEGO_CONSTRUCTED_SEQUENCE,                                    NULL, nTotalBytesWritten );   // Adjust Values and sanity check   nTotalBytesWritten += nTempLength;   nInternalTokenLength -= nTempLength;   if ( nTotalBytesWritten > nTokenLength || nInternalTokenLength < 0 )   {      goto xEndWriteNegTokenInit;   }   // Neg Init Token Identifier Token   nTempLength = ASNDerCalcTokenLength( nTotalBytesWritten, 0L );   // Decrease the pbWriteTokenData, now we know the length and   // write it out.   pbWriteTokenData -= nTempLength;   nTempLength = ASNDerWriteToken( pbWriteTokenData, SPNEGO_NEGINIT_TOKEN_IDENTIFIER,                                    NULL, nTotalBytesWritten );   // Adjust Values and sanity check   nTotalBytesWritten += nTempLength;   nInternalTokenLength -= nTempLength;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产欧美三级| 国产一区二区导航在线播放| 一区二区三区欧美亚洲| 亚洲超丰满肉感bbw| 美日韩黄色大片| 国产麻豆一精品一av一免费 | 亚洲1区2区3区4区| 久久69国产一区二区蜜臀| 粉嫩13p一区二区三区| 日本道精品一区二区三区| 色综合视频在线观看| 欧美人狂配大交3d怪物一区| 久久夜色精品国产噜噜av| 亚洲精品视频在线观看免费 | 日韩精品一区国产麻豆| 日本一区二区电影| 日本 国产 欧美色综合| 国产91丝袜在线18| 东方欧美亚洲色图在线| 成人午夜大片免费观看| 免费成人在线网站| 99精品久久99久久久久| 日韩视频免费直播| 亚洲欧美日韩人成在线播放| 日本欧美在线看| 欧美午夜一区二区| 久久香蕉国产线看观看99| 亚洲r级在线视频| 成人免费不卡视频| 欧美一区二区三区免费大片| 亚洲人成网站精品片在线观看| 日本怡春院一区二区| 成人高清免费观看| 日韩精品一区二区三区蜜臀| 国产欧美精品一区二区色综合| 偷拍亚洲欧洲综合| 欧美色视频一区| 综合婷婷亚洲小说| 成人av网在线| 久久久亚洲精品一区二区三区| 亚洲一卡二卡三卡四卡| bt7086福利一区国产| 国产清纯美女被跳蛋高潮一区二区久久w | 国产真实乱偷精品视频免| 91久久精品一区二区| 国产精品每日更新在线播放网址| 久久精品国产免费| 欧美一区二区三区精品| 亚洲色大成网站www久久九九| 国产原创一区二区三区| 91精品久久久久久蜜臀| 国产精品乱人伦一区二区| 欧美日韩在线一区二区| 欧美国产精品专区| 粉嫩绯色av一区二区在线观看| 日韩精品一区二| 国产精品一区二区黑丝| 久久这里只有精品6| 国产伦精一区二区三区| 欧美国产精品一区二区| 成年人午夜久久久| 亚洲第一久久影院| 欧美成va人片在线观看| 懂色av中文一区二区三区 | 亚洲欧美日韩电影| 欧美日韩国产区一| 国产一区二区三区四区在线观看| 国产精品久久久久一区| 欧美日韩视频在线第一区| 狠狠色丁香婷婷综合久久片| 中文字幕在线不卡| 日韩欧美一级特黄在线播放| 国产黑丝在线一区二区三区| 一区二区三区高清| 日韩你懂的在线播放| 91免费版在线看| 日本女优在线视频一区二区| 国产精品丝袜一区| 555夜色666亚洲国产免| 成人av综合一区| 青青草一区二区三区| 亚洲欧美中日韩| 日韩欧美综合在线| 91色视频在线| 国产高清一区日本| 蜜臀va亚洲va欧美va天堂| 中文字幕佐山爱一区二区免费| 欧美一区二区高清| 91国产免费看| 成人激情电影免费在线观看| 午夜久久电影网| **性色生活片久久毛片| 久久久久国色av免费看影院| 在线成人av网站| 色综合久久久久综合99| 国产成人夜色高潮福利影视| 日韩电影在线免费观看| 亚洲美女淫视频| 国产精品视频一二| 久久蜜臀精品av| 精品99999| 日韩一区二区免费高清| 欧美无乱码久久久免费午夜一区| av午夜精品一区二区三区| 国产老肥熟一区二区三区| 免费高清在线视频一区·| 午夜影院久久久| 亚洲一区二区三区中文字幕在线| 国产精品成人在线观看| 国产日韩欧美精品一区| 久久人人97超碰com| 欧美刺激午夜性久久久久久久| 欧美撒尿777hd撒尿| 欧美日韩一区二区欧美激情| 91久久国产综合久久| 色一情一伦一子一伦一区| av中文字幕在线不卡| 成人h动漫精品一区二区| 粉嫩嫩av羞羞动漫久久久| 成人夜色视频网站在线观看| 国产乱码精品一区二区三 | 欧美一区二区在线免费观看| 欧美性videosxxxxx| 欧美亚洲图片小说| 欧美人妇做爰xxxⅹ性高电影| 在线观看亚洲专区| 欧美日韩三级一区| 777奇米成人网| 精品福利一区二区三区免费视频| 欧美大片拔萝卜| 亚洲精品在线电影| 国产精品欧美一级免费| 中文字幕一区av| 夜夜嗨av一区二区三区| 婷婷夜色潮精品综合在线| 亚洲福利视频一区| 日本va欧美va精品发布| 国产精品一区久久久久| 不卡的看片网站| 在线亚洲高清视频| 欧美群妇大交群中文字幕| 日韩欧美激情四射| 久久一留热品黄| 国产精品麻豆视频| 亚洲欧美电影一区二区| 无吗不卡中文字幕| 黑人巨大精品欧美黑白配亚洲| 国产精品中文字幕一区二区三区| 成人午夜视频在线观看| 色综合色综合色综合色综合色综合 | 日本乱人伦一区| 欧美一区午夜视频在线观看| 精品久久久网站| 亚洲三级在线播放| 婷婷夜色潮精品综合在线| 国产盗摄女厕一区二区三区| 99精品久久99久久久久| 日韩亚洲欧美在线| 亚洲色图视频网| 另类成人小视频在线| 不卡欧美aaaaa| 777午夜精品视频在线播放| 中文子幕无线码一区tr| 婷婷开心久久网| av激情成人网| 日韩一区二区精品在线观看| 最新欧美精品一区二区三区| 久久精品国产在热久久| 色综合欧美在线视频区| 久久综合色8888| 亚洲成人久久影院| 99国产欧美另类久久久精品| 555www色欧美视频| 樱桃视频在线观看一区| 国产福利一区二区| 日韩一区二区三区视频在线观看| 国产精品久久久久久户外露出 | 欧美午夜片在线看| 国产欧美一区二区三区鸳鸯浴| 日产精品久久久久久久性色| 99久久精品一区二区| 国产婷婷精品av在线| 久久精品国产久精国产爱| 欧美日韩一区不卡| 亚洲精品一二三区| 国产成人福利片| 日韩一区二区免费电影| 亚洲超碰精品一区二区| 色悠久久久久综合欧美99| 日本一区二区免费在线观看视频 | 国产区在线观看成人精品| 日韩成人一级片| 欧美日韩免费高清一区色橹橹| 国产清纯白嫩初高生在线观看91| 久久国产尿小便嘘嘘尿| 在线播放中文字幕一区| 午夜精品久久久久久久| 欧洲一区二区av| 亚洲精品第一国产综合野| av综合在线播放|