亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲国产日韩一区二区| 亚洲va欧美va天堂v国产综合| 91精品国产欧美一区二区18| 6080日韩午夜伦伦午夜伦| 日韩欧美国产电影| 日韩午夜在线观看视频| 国产人伦精品一区二区| 亚洲夂夂婷婷色拍ww47| 久久精品国产77777蜜臀| 成人免费观看视频| 欧美一区二区三区视频免费播放| 久久伊99综合婷婷久久伊| 尤物视频一区二区| 激情久久五月天| 91麻豆高清视频| 精品成人a区在线观看| 亚洲男人电影天堂| 激情深爱一区二区| 欧美性受xxxx黑人xyx性爽| 国产日韩欧美综合在线| 亚洲国产精品一区二区www| 国产不卡视频在线播放| 欧美一级日韩不卡播放免费| 国产精品久久免费看| 久久精品国产99国产精品| 91黄色激情网站| 亚洲国产精品激情在线观看| 蜜桃久久久久久| 欧洲一区在线观看| 亚洲欧美怡红院| 成人一道本在线| 日韩欧美123| 日韩黄色一级片| 色婷婷综合在线| 亚洲欧美在线视频观看| 国产久卡久卡久卡久卡视频精品| 欧美乱妇20p| 亚洲成人在线观看视频| 91浏览器打开| 国产精品三级在线观看| 国产精品中文字幕一区二区三区| 欧美一区二区精美| 亚洲人吸女人奶水| 97久久人人超碰| 日韩一区在线看| 99国产欧美久久久精品| 国产精品免费久久| 成人免费高清在线| 国产丝袜欧美中文另类| 国产福利不卡视频| 国产精品成人免费在线| 欧美日本一区二区三区四区| 麻豆国产精品视频| 欧美国产日本韩| 91国模大尺度私拍在线视频| 免费在线看成人av| 中文字幕国产一区二区| 91久久一区二区| 美女网站视频久久| 国产精品久久99| 在线观看91精品国产麻豆| 黄色精品一二区| 亚洲精品国产高清久久伦理二区| 在线成人免费观看| 国产999精品久久久久久绿帽| 亚洲精品第1页| 久久伊人蜜桃av一区二区| 91在线视频播放地址| 日本不卡在线视频| 日韩美女久久久| 精品少妇一区二区三区日产乱码 | 欧美在线小视频| 狠狠色丁香久久婷婷综合丁香| 国产精品二三区| 337p亚洲精品色噜噜噜| 成人动漫av在线| 麻豆精品视频在线观看免费| 综合色中文字幕| 久久久久久久免费视频了| 欧洲精品一区二区| www.成人网.com| 久久精品二区亚洲w码| 一区二区免费看| 国产欧美日韩在线看| 日韩午夜精品视频| 欧美在线一区二区三区| thepron国产精品| 国内外精品视频| 日本亚洲三级在线| 亚洲国产欧美另类丝袜| 国产精品美女久久久久久久久久久 | 欧美日韩黄色一区二区| 国产成人精品午夜视频免费| 日本色综合中文字幕| 亚洲欧美二区三区| 亚洲国产精品黑人久久久| 精品区一区二区| 4438成人网| 6080yy午夜一二三区久久| 欧美在线观看视频一区二区 | 国产精品国产三级国产aⅴ入口| 精品少妇一区二区三区在线视频| 欧美日本在线看| 欧美精品一级二级| 欧美撒尿777hd撒尿| 欧美中文一区二区三区| 色综合久久久久综合| 色先锋aa成人| 在线视频一区二区免费| 色综合夜色一区| 在线亚洲人成电影网站色www| 99re热这里只有精品视频| 99久久精品免费看| 99国产一区二区三精品乱码| 99re66热这里只有精品3直播 | 亚洲三级在线观看| 中文字幕亚洲区| 亚洲精品国产一区二区精华液| 最新中文字幕一区二区三区| 欧美激情中文字幕| 最近日韩中文字幕| 亚洲免费av网站| 亚洲永久精品国产| 琪琪一区二区三区| 国内精品写真在线观看| 国产精品1024| 色天使色偷偷av一区二区| 色婷婷亚洲婷婷| 欧美一区二区视频在线观看2022| 日韩色在线观看| 国产欧美日韩一区二区三区在线观看| 日本一区二区成人在线| 亚洲精品视频一区| 婷婷中文字幕综合| 狠狠色丁香婷婷综合| 99re8在线精品视频免费播放| 欧美亚洲综合网| 26uuu另类欧美| 中文字幕一区二区三区蜜月| 亚洲图片欧美色图| 韩国中文字幕2020精品| 成人av电影在线| 欧美精品丝袜中出| 欧美韩日一区二区三区四区| 亚洲精品视频在线观看免费| 免费在线观看一区| 成人黄色一级视频| 欧美精品tushy高清| 久久久久久久久久久电影| 一区二区高清视频在线观看| 久久99蜜桃精品| 99久久777色| 日韩亚洲电影在线| 中文字幕一区二区三区av| 国产麻豆视频精品| 色综合一区二区三区| 日韩亚洲欧美高清| 亚洲另类春色校园小说| 精品一区二区三区av| 91成人在线观看喷潮| 久久老女人爱爱| 日韩中文字幕区一区有砖一区| 风间由美一区二区三区在线观看 | 国产日韩成人精品| 天天综合网 天天综合色| 暴力调教一区二区三区| 日韩精品一区二区三区中文不卡| 综合色天天鬼久久鬼色| 韩国av一区二区三区| 欧美日韩一级视频| 亚洲青青青在线视频| 韩国av一区二区三区在线观看| 欧美日韩精品三区| 亚洲欧洲综合另类| 成人综合在线观看| 久久亚洲二区三区| 美女视频免费一区| 在线综合亚洲欧美在线视频 | 欧美精彩视频一区二区三区| 日本午夜一区二区| 91成人网在线| 最新热久久免费视频| 国产精品乡下勾搭老头1| 日韩欧美亚洲国产另类| 亚洲国产视频一区| 欧美性极品少妇| 亚洲精品国产一区二区精华液 | 日韩亚洲欧美综合| 三级成人在线视频| 欧美日韩中文另类| 夜夜嗨av一区二区三区网页 | 日韩精品中文字幕一区二区三区| 亚洲黄色在线视频| 91福利视频网站| 亚洲一区二区视频在线| 色噜噜狠狠色综合欧洲selulu| 日韩一区欧美一区| 91蜜桃婷婷狠狠久久综合9色| 国产精品国产精品国产专区不蜜| 成人动漫一区二区|