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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tokentest.c

?? PGP SDK 包括大范圍的標準加密、數(shù)字簽名和編解碼技術(shù)
?? C
字號:
 /*____________________________________________________________________________
TokenTest.c

Copyright (C) 2003,2004 PGP Corporation
All rights reserved.

FIPS 140-2 Operational Test: Token/Smartcard test

$Id: TokenTest.c 48493 2006-10-12 21:19:56Z vinnie $
____________________________________________________________________________*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "pgpErrors.h"
#include "pgpKeys.h"
#include "pgpMemoryMgr.h" 
#include "pgpUtilities.h"
#include "pgpPublicKey.h"
#include "optest.h"


/* Plain-text test message  */
static 	PGPByte testData[] = {
		0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
		0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
		0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
		0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
		0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
		0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55
	};
 
static  PGPError printTokenInfo(PGPContextRef context, PGPUInt32 tokNum)
 {
	PGPError		err			= kPGPError_NoErr;
	PGPPublicKeyAlgorithm keyGenAlgorithm = kPGPPublicKeyAlgorithm_Invalid;
	PGPUInt32		numPrivKeys;
	PGPUInt32		numPubKeys;
	PGPUInt32		minPinLen;
	PGPUInt32		maxPinLen;
	PGPUInt32		minKeySize;
	PGPUInt32		maxKeySize;
	
	PGPByte			manufacturerID[33];
	PGPByte			model[17];
	PGPByte			serialNumber[80];
	PGPByte			label[80];
	
	PGPSize			sizeout;
	
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_KeyGenAlgorithm ,(PGPUInt32*) &keyGenAlgorithm); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_PrivateKeys ,&numPrivKeys); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_PublicKeys ,&numPubKeys); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_MinPINSize ,&minPinLen); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_MaxPINSize ,&maxPinLen); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_MinKeySize ,&minKeySize); CKERR;
	err = PGPGetTokenInfoNumericProperty(context, tokNum, kPGPTokenProperty_MaxKeySize ,&maxKeySize); CKERR;

	err = PGPGetTokenInfoDataProperty(context, tokNum, 
									kPGPTokenProperty_ManufacturerID, &manufacturerID, sizeof( manufacturerID),&sizeout); CKERR;

	err = PGPGetTokenInfoDataProperty(context, tokNum, 
									kPGPTokenProperty_Model, &model, sizeof( model),&sizeout); CKERR;

	err = PGPGetTokenInfoDataProperty(context, tokNum, 
									kPGPTokenProperty_SerialNumber, &serialNumber, sizeof( serialNumber),&sizeout); CKERR;

	err = PGPGetTokenInfoDataProperty(context, tokNum, 
									kPGPTokenProperty_TokenLabel, &label, sizeof( label), &sizeout); CKERR;


	OPTESTPrintF("\t [%d]\tMfg      : %s\n",tokNum, manufacturerID);
	OPTESTPrintF("\t    \tModel    : %s\n", model);
	OPTESTPrintF("\t    \tSerialNo : %s\n", serialNumber);
	OPTESTPrintF("\t    \tLabel    : %s\n", label);
 	OPTESTPrintF("\t    \tPinLen   : %d < %d\n",minPinLen, maxPinLen );
	OPTESTPrintF("\t    \tKeySize  : %d < %d\n",minKeySize, maxKeySize );
	OPTESTPrintF("\t    \tPrivKeys : %d\n",numPrivKeys );
	OPTESTPrintF("\t    \tPubKeys  : %d\n",numPubKeys);
	OPTESTPrintF("\t    \tGenKeyAlg: %s\n",key_algor_table(keyGenAlgorithm));
 	
done:
	return err;
}


	
static PGPError listAvailableTokens( PGPContextRef context, PGPUInt32* keys, PGPUInt32* tokens, TokenTestFlags testFlags)
{
	PGPError		err			= kPGPError_NoErr;
	PGPKeyDBRef		keyDB	 	= kInvalidPGPKeyDBRef;
	PGPKeyIterRef	iter	 	= kInvalidPGPKeyIterRef;
	PGPKeyDBObjRef	theKey		= kInvalidPGPKeyDBObjRef;
 	PGPBoolean		hadChanges;
	PGPUInt32		numKeys		= 0;
	PGPUInt32		numTokens   = 0;
	PGPUInt32		i;
	
	/* create a temp key database to read the token keys into */
	err = PGPNewKeyDB( context, &keyDB  ); CKERR;

	/* make an iterator */
	err = PGPNewKeyIterFromKeyDB( keyDB, &iter); CKERR;
	
	/* sync the keys into the database */
	err = PGPSyncTokenKeys( context, -1, keyDB, &hadChanges);
 	
	/* get a count of what we have */
	err = PGPCountTokens(context, &numTokens ); CKERR;
 	err = PGPCountKeysInKeyDB(keyDB, &numKeys); CKERR;
	    	
	OPTESTPrintF("\t%d token%s found\n", numTokens, numTokens==1?"":"s");
  	for(i = 0; i < numTokens; i++)
	{
		err = printTokenInfo(context, i); CKERR;
	}
	
	/* check passphrase */
	if(gTokenUserPIN)
	{
		OPTESTPrintF("\n");
		for(i = 0; i < numTokens; i++)
		{
			OPTESTPrintF("\tChecking Token %d Passphrase: \"%s\"\n",i,gTokenUserPIN);
			err = PGPTokenPassphraseIsValid(context, i, (PGPByte*)gTokenUserPIN, strlen(gTokenUserPIN)); CKERR;
 		}
	}
	
 	if(numKeys)
	{
		OPTESTPrintF("\n\t%d key%s from tokens\n",numKeys, numKeys==1?"":"s");
		
	 	err = PGPKeyIterRewind(iter, kPGPKeyDBObjType_Key); CKERR;
	
		/* Iterate through each key */
		for(i = 1;  IsntPGPError( PGPKeyIterNextKeyDBObj( iter, kPGPKeyDBObjType_Key, &theKey) ); i++)
		{
			char	header[32];
 			sprintf(header, "     [%d] ", i);
			
			if(gVerbose_flag)
			{
				printKeyDetails(header,FALSE,theKey);
				OPTESTPrintF("\n");
			}
			else
				printKeyInfo(header,theKey);
				
		if( (testFlags & kTokenTestFlags_KeyTest)
			&& gTokenUserPIN != NULL 
			&& (canKeyDecrypt(theKey) || canKeySignMessages(theKey)))
			{
				OPTESTPrintF("\t     ");
				err =  TestKeyCertificate(context, theKey,  (PGPByte*) gTokenUserPIN,
							   testData, sizeof(testData),
							   testData, sizeof(testData), 
							   NULL, 0 ); CKERR;
				OPTESTPrintF("\n");
 
 			}
 		}
 	}
	
 	if(keys) *keys = numKeys;
	if(tokens) *tokens = numTokens;
	
 done:

 	if( PGPKeyIterRefIsValid( iter ) )
		PGPFreeKeyIter( iter );
		
 	if( PGPKeyDBRefIsValid( keyDB ) )
		PGPFreeKeyDB( keyDB );
      
	  return err;
}
 

	

static PGPError formatToken(PGPContextRef context, PGPUInt32 tokNum, char *SO, char *PIN )
{
 	PGPError		err					= kPGPError_NoErr;

	if(!SO  || (strlen(SO) == 0) || !PIN  || (strlen(PIN) == 0))
			FAIL("Can not format a token without SO and User PIN\n");

	OPTESTPrintF("\n\tFormating Token %d\n\t  PIN0 = \"%s\"\n\t  PIN1 = \"%s\"\n", tokNum, SO ,PIN );
	err = 	PGPFormatToken( context, tokNum,  (PGPByte*)SO, strlen(SO),  (PGPByte*)PIN,  strlen(PIN)); CKERR
	OPTESTPrintF("\n");

  done:
      return err;
}



static PGPError wipeToken(PGPContextRef context, PGPUInt32 tokNum, char *PIN )
{
 	PGPError		err					= kPGPError_NoErr;

	if( !PIN  || (strlen(PIN) == 0))
 			FAIL("Can not Wipe a token without User PIN\n");

	OPTESTPrintF("\n\tWiping Token %d  PIN = \"%s\"\n", tokNum ,PIN );
	err = 	PGPWipeToken( context, tokNum,  (PGPByte*)PIN, strlen(PIN) ); CKERR
	OPTESTPrintF("\n");

  done:
      return err;
}


static PGPError genKeyOnToken(PGPContextRef context, PGPUInt32 tokNum, char *PIN )
{
 	PGPError		err			= kPGPError_NoErr;
	PGPKeyDBRef		keyDB		= kInvalidPGPKeyDBRef;
	PGPKeyDBObjRef  key		   = kInvalidPGPKeyDBObjRef;
 	PGPKeyDBObjRef  subkey     = kInvalidPGPKeyDBObjRef;
	char			*keyName   = "Token Generated test key";
	
	if( !PIN  || (strlen(PIN) == 0))
		FAIL("Can not Generate key on a token without User PIN\n");

	err = PGPNewKeyDB( context, &keyDB  ); CKERR;

	OPTESTPrintF("\tPGPGenerateKey() on token %d\n", tokNum);  
		err = PGPGenerateKey( context, &key,
				PGPOKeyGenParams( context,kPGPPublicKeyAlgorithm_RSA, 1024),
				PGPOKeyGenName( context, (PGPByte*)keyName, strlen(keyName)),
				PGPOTokenNumber(context, tokNum),
				PGPOExpiration(context, 30),
				PGPOKeyDBRef( context, keyDB ),
				PGPOPassphrase( context, PIN ),
				PGPOKeyGenFast( context, TRUE ),
				PGPOKeyFlags( context, kPGPKeyPropertyFlags_UsageSign | kPGPKeyPropertyFlags_UsageEncrypt ),
				PGPOLastOption( context ) ); CKERR;

 	OPTESTPrintF("\tPGPGenerateSubKey()\n"); 
	err = PGPGenerateSubKey( context, &subkey,
			   PGPOKeyGenMasterKey( context, key ),
			   PGPOKeyGenParams( context,kPGPPublicKeyAlgorithm_RSA, 1024),
			   PGPOTokenNumber(context, tokNum),
			   PGPOExpiration(context, 30),
			   PGPOPassphrase( context, PIN ),
			   PGPOKeyGenFast( context, TRUE ),
			   PGPOKeyFlags( context, kPGPKeyPropertyFlags_UsageEncrypt ),
		   PGPOLastOption( context ) ); CKERR;
 
	OPTESTPrintF("\n");

  done:

	if( PGPKeyDBRefIsValid( keyDB ) ) 
		PGPFreeKeyDB( keyDB );

      return err;
}


static PGPError exportKeytoToken(PGPContextRef context, PGPUInt32 tokNum, char *PIN )
{
 	PGPError		err			= kPGPError_NoErr;
	PGPKeyDBRef		keyDB		= kInvalidPGPKeyDBRef;
 	PGPKeyDBObjRef	key			= kInvalidPGPKeyDBObjRef;
	PGPKeyID		theKeyID;
 
		if( !PIN  || (strlen(PIN) == 0))
		FAIL("Can not Export key on to token without User PIN\n");
 
	/* Read in the test keys and get a ref to it */
 	err = importKeys(context,gTestKeysPath, kPGPInputFormat_PGP, &keyDB); CKERR;
  
 	/* Find a key to sign the cert req with */
	err =  PGPNewKeyIDFromString( kOptestCAKeyIDString,  kPGPPublicKeyAlgorithm_Invalid,  &theKeyID); CKERR;
	err =  PGPFindKeyByKeyID( keyDB, &theKeyID, &key); CKERR;
  	OPTESTPrintF("\tExport test key %s to Token %d ", kOptestCAKeyIDString, tokNum);
 
  	err = PGPExport( context,  
			PGPOExportKeyDBObj(context, key),
			PGPOOutputToken(context, tokNum),
  			PGPOPassphrase( context, kOptestCAKeyPassPhrase ),
   			PGPOPassphrase( context, PIN ),
			PGPOLastOption( context ) ); CKERR;
 
	OPTESTPrintF("\n");
	
done:

 	if( PGPKeyDBRefIsValid( keyDB ) ) 
		PGPFreeKeyDB( keyDB );

      return err;
}


/*
 Run Token/SmartCard test
 */
// Athena  "/usr/libexec/SmartCardServices/pkcs11/libASEPKCS11.dylib"


PGPError TestTokens(PGPContextRef context, TokenTestFlags testFlags)
{
	PGPError		err					= kPGPError_NoErr;
	PGPKeyDBRef		keyDB		= kInvalidPGPKeyDBRef;
  	PGPFileSpecRef 	pubKeysFileSpec 	= kInvalidPGPFileSpecRef;
	PGPFileSpecRef  privKeysFileSpec 	= kInvalidPGPFileSpecRef;
	PGPUInt32		numKeys		= 0;
	PGPUInt32		numTokens   = 0;

#if USE_IN_MEMORY_DB
	err = PGPNewKeyDB( context, &keyDB  ); CKERR;
#else
	/* create filerefs to the key DB */
 {
 	char	buffer[256];
 	sprintf(buffer, "%s/tokens.pkr", gOutputDirectory  );
 	err = PGPNewFileSpecFromFullPath(context, buffer, &pubKeysFileSpec); CKERR;
	sprintf(buffer, "%s/tokens.skr", gOutputDirectory  );
 	err = PGPNewFileSpecFromFullPath(context, buffer, &privKeysFileSpec); CKERR;
 	
 	err = PGPOpenKeyDBFile( context,
								kPGPOpenKeyDBFileOptions_Create | kPGPOpenKeyDBFileOptions_Mutable,
								pubKeysFileSpec,
								privKeysFileSpec,
								&keyDB ); CKERR;
	}
 #endif
	
	OPTESTPrintF("\tpkcs11 module: %s\n", gP11Module?gP11Module:"<DEFAULT>");
  	err = PGPSetPKCS11DrvFile(gP11Module); CKERR;
	
	err = listAvailableTokens(context, &numKeys, &numTokens, testFlags); CKERR;

	/* Format Token */
	if((numTokens > 0) && (testFlags & kTokenTestFlags_Format))
	{
		err = formatToken(context, gTokNumber, gTokenSOPIN, gTokenUserPIN); CKERR;
	}
 
	/* Wipe Token Keys */
	if((numTokens > 0) && (testFlags & kTokenTestFlags_Wipe))
	{
		err = wipeToken(context, gTokNumber, gTokenUserPIN); CKERR;
	}

	/* Generate Key on Token */
	if((numTokens > 0) && (testFlags & kTokenTestFlags_Generate))
	{
		err = genKeyOnToken(context, gTokNumber, gTokenUserPIN); CKERR;
	}
	
    	/* Export Key to Token */
	if((numTokens > 0) && (testFlags & kTokenTestFlags_Export))
	{
		err = exportKeytoToken(context, gTokNumber, gTokenUserPIN); CKERR;
	}
 	
	if(testFlags &	(kTokenTestFlags_Generate | kTokenTestFlags_Export))
	{
		OPTESTPrintF("\tRescan Token\n");
		err = listAvailableTokens(context, &numKeys, &numTokens, kTokenTestFlags_KeyTest); CKERR;
 	} 
 	
  done:
  	
	if( PGPFileSpecRefIsValid(pubKeysFileSpec))
		PGPFreeFileSpec(pubKeysFileSpec);
	if( PGPFileSpecRefIsValid(privKeysFileSpec))
		PGPFreeFileSpec(privKeysFileSpec);
	if( PGPKeyDBRefIsValid( keyDB ) ) 
		PGPFreeKeyDB( keyDB );

		
     return err;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美成人激情| 欧美一区二区三区四区五区| 亚洲超碰97人人做人人爱| 欧美videossexotv100| 色综合久久天天| 中文字幕制服丝袜一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 免费在线观看精品| 亚洲国产精品黑人久久久| 欧美日韩国产小视频| aaa国产一区| 精品一区二区在线观看| 一级女性全黄久久生活片免费| 久久久久久毛片| 欧美精品久久一区| 欧美午夜在线一二页| av中文一区二区三区| 国产一区二区电影| 精品一区二区三区免费观看| 三级影片在线观看欧美日韩一区二区| 国产精品久久看| 中文字幕成人在线观看| 欧美精品一区二区久久久| 91精品麻豆日日躁夜夜躁| 一本久久精品一区二区| 不卡的av电影在线观看| 国产成人精品综合在线观看| 免费成人结看片| 五月婷婷综合网| 一区二区日韩av| 亚洲激情图片qvod| 亚洲欧美区自拍先锋| 亚洲日本中文字幕区| 日韩一区中文字幕| 国产精品精品国产色婷婷| 国产精品丝袜久久久久久app| 久久青草国产手机看片福利盒子| 精品剧情v国产在线观看在线| 欧美一级电影网站| 日韩欧美你懂的| 日韩欧美资源站| 日韩精品在线网站| 精品国产精品网麻豆系列| 欧美一卡2卡3卡4卡| 欧美剧情电影在线观看完整版免费励志电影 | 欧美在线视频你懂得| 欧美一级在线观看| 日韩欧美专区在线| 精品av久久707| 日本一区二区三区电影| 国产精品你懂的在线欣赏| 国产精品理伦片| 亚洲人成亚洲人成在线观看图片| 一区二区三区 在线观看视频 | 久久国产欧美日韩精品| 九色|91porny| 日日摸夜夜添夜夜添精品视频| 偷偷要91色婷婷| 日韩av一区二区三区| 久久爱www久久做| 丁香婷婷综合色啪| 色婷婷综合久久久久中文一区二区| 97se亚洲国产综合自在线观| 在线观看日韩一区| 51精品视频一区二区三区| 欧美精品一区二区三区一线天视频| 精品成a人在线观看| 18成人在线观看| 婷婷国产在线综合| 国产综合一区二区| 91看片淫黄大片一级| 欧美精品日韩综合在线| 精品不卡在线视频| 《视频一区视频二区| 亚洲高清三级视频| 国产精品一二二区| 欧美性高清videossexo| 精品欧美久久久| 亚洲啪啪综合av一区二区三区| 一区二区成人在线| 国内国产精品久久| 92国产精品观看| 欧美一级久久久久久久大片| 国产日韩欧美精品在线| 亚洲成人av一区二区三区| 国产一区激情在线| 欧美网站一区二区| 欧美激情综合在线| 亚洲1区2区3区4区| 国产不卡在线播放| 欧美另类变人与禽xxxxx| 久久精品视频免费观看| 日韩精品免费视频人成| 99精品国产99久久久久久白柏| 88在线观看91蜜桃国自产| 中文字幕高清一区| 男人操女人的视频在线观看欧美| va亚洲va日韩不卡在线观看| 欧美一区二区美女| 亚洲视频免费在线| 国产福利一区在线| 欧美一区二区免费观在线| 一区二区三区日韩欧美精品 | 欧美唯美清纯偷拍| 国产精品无遮挡| 日韩有码一区二区三区| 99re热这里只有精品视频| 亚洲精品在线一区二区| 天天影视网天天综合色在线播放| 99精品在线观看视频| 国产亚洲综合在线| 男女男精品网站| 欧美日韩一区二区不卡| 综合久久国产九一剧情麻豆| 成人丝袜视频网| 精品日韩一区二区| 日本在线不卡一区| 欧美系列在线观看| 亚洲人妖av一区二区| 国产91精品欧美| 精品国产91洋老外米糕| 久久精品国产一区二区| 欧美日韩1234| 五月婷婷另类国产| 在线观看免费成人| 亚洲精选一二三| 99久免费精品视频在线观看| 亚洲国产精品精华液2区45| 蜜桃av一区二区| 国产精品一区二区男女羞羞无遮挡| 在线观看91av| 亚洲午夜三级在线| 91黄色免费版| 亚洲欧美视频在线观看| 99精品视频在线观看| 中文字幕精品在线不卡| 高清国产一区二区三区| 国产欧美一区二区三区沐欲| 国产精品综合视频| 久久久亚洲午夜电影| 国产综合成人久久大片91| 精品1区2区在线观看| 国产综合色在线| 中日韩av电影| 99久久精品久久久久久清纯| 国产精品三级视频| 99精品欧美一区二区三区小说 | 精品99999| 国产一区二区不卡| 国产欧美日韩激情| 91在线国内视频| 亚洲一区二区三区四区在线| 欧美吞精做爰啪啪高潮| 首页国产欧美日韩丝袜| 欧美成人一区二区三区在线观看| 精一区二区三区| 国产精品美日韩| 91福利在线播放| 日韩综合小视频| 久久久美女艺术照精彩视频福利播放| 国产99久久久国产精品| 国产精品久久午夜| 欧美日韩国产一级片| 美女一区二区久久| 国产精品进线69影院| 欧美色图天堂网| 激情综合网天天干| 日本一区二区不卡视频| 欧美午夜精品电影| 久久国产精品99久久人人澡| 国产性色一区二区| 欧美手机在线视频| 久久99久久久欧美国产| 国产精品福利一区| 欧美喷水一区二区| 国产精品亚洲第一区在线暖暖韩国 | 久久欧美一区二区| 91欧美激情一区二区三区成人| 午夜精品一区二区三区免费视频 | 精品处破学生在线二十三| 国产成人午夜视频| 玉米视频成人免费看| 精品欧美一区二区久久| 色天使久久综合网天天| 乱中年女人伦av一区二区| 亚洲情趣在线观看| 久久久久久久久久久99999| 色婷婷久久综合| 精品一区二区免费看| 一区二区三区欧美视频| 精品美女在线播放| 欧洲精品一区二区三区在线观看| 久久99精品国产.久久久久久 | 亚洲一区二区三区爽爽爽爽爽| 日韩一级高清毛片| 欧美午夜在线一二页| 成人性生交大片免费看视频在线 | 日韩高清欧美激情| 综合av第一页| 2024国产精品|