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

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

?? macosxfilestore.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 2003-2006, Voltage Security, all rights reserved. * Encryption code adapted from Apple's libCdsaCrypt, version 1.0d1 */#include "environment.h"#ifdef HAVE_SECURITY_CSSM_H#include <Security/cssm.h>#define VOLT_UINT64 1#define VOLT_UINT32 1#include <errno.h>#include "vibe.h"#include "base.h"#include "libctx.h"#include "vsstore.h"#include "voltfile.h"#include "defaultstore.h"#include "errorctx.h"#include "stringutil.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <dirent.h>#pragma mark ------ Toolkit AES encrypt/decrypt functions ------static const unsigned int ivLen = 16;  // length of the IV, in bytesint createAlgObjectAndKey(VoltLibCtx *libCtx, VtAlgorithmObject *algObj, VtKeyObject *keyObj, VtItem *keyData, VtItem *ivData){	VtBlockCipherInfo blockCipherInfo;	// Keychain Services variables	const char *serviceName = "Voltage SecureMail Secure Storage";	const UInt32 serviceNameLen = strlen(serviceName) + 1;	const char *accountName = "Voltage SecureMail";	const UInt32 accountNameLen = strlen(accountName) + 1;	OSErr err;	int status;		do	{		blockCipherInfo.cipherInfo = (Pointer)0;		blockCipherInfo.feedback = VtFeedbackCBC;		blockCipherInfo.feedbackInfo = (Pointer)ivData;		blockCipherInfo.padding = VtPaddingPkcs5;		blockCipherInfo.paddingInfo = (Pointer)0;						status = VtCreateAlgorithmObject(libCtx, VtAlgorithmImplAES, (Pointer)&blockCipherInfo, algObj);		if (status != 0)			break;				status = VtCreateKeyObject (libCtx, VtKeyImplDefault, (Pointer)0, keyObj);		if (status != 0)			break;				// Try to get the key data from Keychain Services		err = SecKeychainFindGenericPassword(NULL, serviceNameLen, serviceName, accountNameLen, accountName,											 &keyData->len, &keyData->data, NULL);		// If call was not successful, set status to VT_ERROR_INVALID_STORAGE_CTX and break		if (err != noErr)		{			status = VT_ERROR_INVALID_STORAGE_CTX;			break;		}				status = VtSetKeyParam (*keyObj, VtKeyParamAES, (Pointer)keyData);		if (status != 0)			break;	} while(0);		return status;}int toolkitEncryptAlloc(VoltLibCtx *libCtx, unsigned char *data, unsigned int dataLen, 							unsigned char **encryptedData, unsigned int *encryptedDataLen){	VtRandomObject random = (VtRandomObject)0;	VtAlgorithmObject encryptor = (VtAlgorithmObject)0;	VtKeyObject aesKey = (VtKeyObject)0;	VtItem keyData;	VtItem ivData;	unsigned char *dataWithPrefix = (unsigned char *)0;	unsigned int dataWithPrefixLen = 0;	unsigned int bufferSize;		// Prefix variables	const char *verifyPrefix = "VoltageStore0";	const int verifyPrefixLen = strlen(verifyPrefix);			int status;		do	{		status = VtGetLibCtxParam (libCtx, VtLibCtxParamRandomObj, (Pointer *)&random);		if (status != 0)		  break;		status = VtMalloc(libCtx, ivLen, 0, &ivData.data);		if(status != 0)			break;				ivData.len = ivLen;		status = VtGenerateRandomBytes (random, ivData.data, ivLen);		if (status != 0)		  break;		createAlgObjectAndKey(libCtx, &encryptor, &aesKey, &keyData, &ivData);				// Prepare the data by appending a set prefix at the beginning for validity checking on decrypt				// Allocate a buffer to hold the new data, with the prefix.		dataWithPrefixLen = verifyPrefixLen + dataLen;		status = VtMalloc (libCtx, dataWithPrefixLen, VT_MEMORY_SENSITIVE, (Pointer *)&dataWithPrefix);		if (status != 0)			break;		memcpy(dataWithPrefix, verifyPrefix, verifyPrefixLen);		memcpy(dataWithPrefix + verifyPrefixLen, data, dataLen);				// Perform the actual encryption		status = VtEncryptInit (encryptor, aesKey);		if (status != 0)		  break;		status = VtEncryptFinal (encryptor, (VtRandomObject)0, dataWithPrefix, dataWithPrefixLen,									(unsigned char *)0, 0, &bufferSize);		if (status == 0)		  status = VT_ERROR_GENERAL;		if (status != VT_ERROR_BUFFER_TOO_SMALL)		  break;		// Allocate enough space for the encrypted data, prefixed with the IV data		status = VtMalloc (libCtx, bufferSize + ivLen, VT_MEMORY_SENSITIVE, (Pointer *)encryptedData);		if (status != 0)		  break;				// Write out the IV data as the first ivLen bytes		memcpy(*encryptedData, ivData.data, ivLen);				status = VtEncryptFinal (encryptor, (VtRandomObject)0, dataWithPrefix, dataWithPrefixLen,									(*encryptedData) + ivLen, bufferSize, encryptedDataLen);		if (status != 0)		  break;				// Make sure we account for the bytes we added at the beginning		*encryptedDataLen += ivLen;	} while(0);		VtFree (libCtx, (Pointer *)&ivData.data);	VtFree (libCtx, (Pointer *)&dataWithPrefix);	VtDestroyAlgorithmObject (&encryptor);	SecKeychainItemFreeContent (NULL, keyData.data);	VtDestroyKeyObject (&aesKey);		return (status);	}int toolkitDecryptAlloc(VoltLibCtx *libCtx, unsigned char *data, unsigned int dataLen, 						unsigned char **decryptedData, unsigned int *decryptedDataLen){		VtAlgorithmObject decryptor = (VtAlgorithmObject)0;	VtKeyObject aesKey = (VtKeyObject)0;	VtItem keyData;	VtItem ivData;		unsigned char *decryptedDataWithPrefix = (unsigned char *)0;	unsigned int decryptedDataWithPrefixLen;	unsigned int bufferSize;	// Prefix variables	const char *verifyPrefix = "VoltageStore0";	const int verifyPrefixLen = strlen(verifyPrefix);	int status;	do	{		// Expect the first ivLen bytes to be our ivData		ivData.data = data;		ivData.len = ivLen;				// Update data and dataLen		data = data + ivLen;		dataLen -= ivLen;				status = createAlgObjectAndKey(libCtx, &decryptor, &aesKey, &keyData, &ivData);		if (status != 0)			break;						status = VtDecryptInit (decryptor, aesKey);		if (status != 0)			break;		status = VtDecryptFinal (decryptor, (VtRandomObject)0, data, dataLen, (unsigned char *)0, 0, &bufferSize);		if (status == 0)			status = VT_ERROR_GENERAL;		if (status != VT_ERROR_BUFFER_TOO_SMALL)			break;				status = VtMalloc (libCtx, bufferSize, VT_MEMORY_SENSITIVE, (Pointer *)&decryptedDataWithPrefix);		if (status != 0)			break;				status = VtDecryptFinal (decryptor, (VtRandomObject)0, data, dataLen,									 decryptedDataWithPrefix, bufferSize, &decryptedDataWithPrefixLen);		if (status != 0)			break;				// Check to see if we have the prefix we expect - if so, drop it and copy to final buffer; error if not.		if(memcmp(verifyPrefix, decryptedDataWithPrefix, verifyPrefixLen) == 0)		{			bufferSize = decryptedDataWithPrefixLen - verifyPrefixLen;			status = VtMalloc (libCtx, bufferSize, VT_MEMORY_SENSITIVE, (Pointer *)decryptedData);			if (status != 0)				break;						memcpy(*decryptedData, decryptedDataWithPrefix + verifyPrefixLen, bufferSize);			*decryptedDataLen = bufferSize;		}		else		{			status = VT_ERROR_FILE_READ;			break;		}	} while (0);		VtFree (libCtx, (Pointer *)&decryptedDataWithPrefix);	VtDestroyAlgorithmObject (&decryptor);	SecKeychainItemFreeContent (NULL, keyData.data);	VtDestroyKeyObject (&aesKey);		return (status);}#pragma mark ------ Toolkit functions ------int mIcStoreData (				  VoltStorageCtx *prov,				  unsigned char *data,				  unsigned int dataLen,  				  unsigned char *extraPassword,				  unsigned int extraPasswordLen,   VoltFileCtx *fileCtx,   VoltFileHandle fileHandle   ){	int status;	VoltLibCtx *libCtx = (VoltLibCtx *)(prov->voltObject.libraryCtx);		unsigned char *encryptedData = (unsigned char *)0;	unsigned int encryptedDataLen = 0;		do	{		status = toolkitEncryptAlloc(libCtx, data, dataLen, &encryptedData, &encryptedDataLen);		if(status != 0)			break;				status = fileCtx->CtxWriteFile (fileCtx, fileHandle, encryptedData, encryptedDataLen);  	} while(0);		VtFree(libCtx, (Pointer *)&encryptedData);	return (status);}int mIcLoadDataAlloc (   VoltStorageCtx *prov,   VoltFileCtx *fileCtx,   VoltFileHandle fileHandle,   unsigned char *extraPassword,   unsigned int extraPassowrdLen,   unsigned char **data,   unsigned int *dataLen      ){  int status;   unsigned int contentsLen;  VoltFileInt fileSize;  VoltLibCtx *libCtx = (VoltLibCtx *)(prov->voltObject.libraryCtx);  unsigned char *contents = (unsigned char *)0;    VOLT_DECLARE_FNCT_LINE (fnctLine)  VOLT_DECLARE_ERROR_TYPE (errorType)    *data = (unsigned char *)0;  *dataLen = 0;    do  {    /* Get the data out of the file.     * First, how big is the file? */    VOLT_SET_ERROR_TYPE (errorType, 0)    VOLT_SET_FNCT_LINE (fnctLine)    status = fileCtx->CtxGetFileSize (      fileCtx, fileHandle, (char *)0, &fileSize);    if (status != 0)      break;        /* Allocate the buffer to hold the contents. */    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)    VOLT_SET_FNCT_LINE (fnctLine)    status = VT_ERROR_MEMORY;    contents = (unsigned char *)Z2Malloc (fileSize, VOLT_MEMORY_SENSITIVE);    if (contents == (unsigned char *)0)      break;        /* Get the data. */    VOLT_SET_ERROR_TYPE (errorType, 0)    VOLT_SET_FNCT_LINE (fnctLine)    status = fileCtx->CtxReadFile (      fileCtx, fileHandle, (unsigned int)fileSize, contents, &contentsLen);    if (status != 0 && status != VT_ERROR_FILE_END_OF_FILE)      break;        /* Decrypt the data. */    VOLT_SET_ERROR_TYPE (errorType, 0)	VOLT_SET_FNCT_LINE (fnctLine)	status = toolkitDecryptAlloc(libCtx, contents, contentsLen, data, dataLen);	if(status != 0)		break;  } while (0);    /* Free the contents buffer. */  if (contents != (unsigned char *)0)	  Z2Free (contents);    /*If no error, we're done. */  if (status == 0)    return (0);  /* Log the error */  VOLT_LOG_ERROR ((VtLibCtx)libCtx, status, errorType, fnctLine, "mIcLoadDataAlloc", (char *)0)  return (status);}// ************************************************************#pragma mark -#pragma mark Unchanged from deffilestore.c// ************************************************************int getICDirectory (  VoltLibCtx *libCtx,  unsigned char *buf,  int bufLen  );int VtStorageFileMacOSX (  VtStorageCtx storageCtx,  Pointer info,  unsigned int flag,  int providerNum   ){  int status;  unsigned int pathNameLen, bufferSize, offset;#if VOLT_ALIGNMENT != 1  unsigned int pad;#endif  VoltStorageCtx *ctx = (VoltStorageCtx *)storageCtx;  VtLibCtx libraryCtx = ctx->voltObject.libraryCtx;  VoltLibCtx *libCtx = (VoltLibCtx *)libraryCtx;  unsigned char *buffer = (unsigned char *)0;  unsigned char *pathName = (unsigned char *)0;  VoltDefaultStorageCtx *localCtx =      (VoltDefaultStorageCtx *) 0;  VtFileCtx fCtx = (VtFileCtx)0;    VtFileCtxUseInfo *fInfo = (VtFileCtxUseInfo *) 0;  VOLT_DECLARE_FNCT_LINE (fnctLine)  VOLT_DECLARE_ERROR_TYPE (errorType)  do  {    /* Check the flag, it should be VOLT_STORAGE_CTX_SET_TYPE_FLAG.     */    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)    VOLT_SET_FNCT_LINE (fnctLine)    status = VT_ERROR_INVALID_TYPE;    if (flag != VOLT_STORAGE_CTX_SET_TYPE_FLAG)      break;    /* If the associated info is not NULL pointer, it should be a     * VtFileCtxUseInfo pointer.     */    pathName = (unsigned char *)0;    pathNameLen = 0;    if (info != (Pointer)0)    {      fInfo = (VtFileCtxUseInfo *) info;      pathName = (unsigned char *)fInfo->path;      pathNameLen = Z2Strlen (pathName);      fCtx = fInfo->fileCtx;    }    /* If File Ctx has not been provided by the caller     * Try to use one from the Lib Ctx.     */    status =   VT_ERROR_NO_FILE_CTX;    if( fCtx == (VtFileCtx)0 )     {      fCtx = (VtFileCtx)VoltGetLibCtxInfo (        (VtLibCtx)libCtx, VOLT_LIB_CTX_INFO_TYPE_FILE_CTX);            /* If we still don't have a valid file ctx 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品无码三级在线观看视频| 日韩欧美国产一区二区三区| 日韩亚洲欧美在线| 国产精品毛片无遮挡高清| 亚洲一区二区三区四区在线观看 | 国产精品久久久久影院| 国产麻豆午夜三级精品| 久久久久久9999| 国产激情偷乱视频一区二区三区| 精品国产髙清在线看国产毛片| 免费成人性网站| 精品欧美一区二区三区精品久久| 亚洲自拍都市欧美小说| 欧美在线免费观看视频| 五月婷婷综合网| 56国语精品自产拍在线观看| 日韩电影网1区2区| 精品少妇一区二区三区视频免付费 | 亚洲一二三四区不卡| 在线精品国精品国产尤物884a| 亚洲综合色网站| 欧美日韩中文字幕精品| 视频一区视频二区中文字幕| 欧美日韩国产天堂| 日本sm残虐另类| 精品福利一区二区三区| 粉嫩一区二区三区在线看| 中文字幕亚洲综合久久菠萝蜜| 99久久精品一区| 亚洲一二三四区不卡| 欧美日韩国产片| 蜜桃一区二区三区在线| 2023国产精华国产精品| 成人动漫视频在线| 一二三区精品福利视频| 91精品久久久久久蜜臀| 国模无码大尺度一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 91麻豆福利精品推荐| 亚洲一区二区欧美日韩 | 在线观看欧美黄色| 极品少妇一区二区三区精品视频 | 日本aⅴ精品一区二区三区 | 国产黄人亚洲片| 夜夜精品视频一区二区| 日韩精品最新网址| 99久久99久久综合| 热久久免费视频| 国产精品麻豆视频| 欧美日韩国产精选| 国产不卡在线视频| 偷偷要91色婷婷| 国产精品久久久久久久久久免费看| 欧美吻胸吃奶大尺度电影| 国产在线观看免费一区| 亚洲一区中文在线| 国产亚洲成年网址在线观看| 欧美日韩不卡在线| 成人高清视频在线| 经典三级视频一区| 亚洲亚洲人成综合网络| 国产婷婷色一区二区三区四区| 欧美中文字幕亚洲一区二区va在线| 国产成人精品影院| 秋霞av亚洲一区二区三| 一区二区三区.www| 欧美激情综合网| 欧美成人三级电影在线| 欧洲人成人精品| 国产99久久久精品| 美女视频网站久久| 五月婷婷综合在线| 一区二区三区在线视频观看| 中文字幕乱码久久午夜不卡| 日韩欧美电影一区| 欧美高清精品3d| 在线观看国产精品网站| 99国产精品久久久| 国产成人精品免费| 麻豆91精品91久久久的内涵| 亚洲成av人片一区二区梦乃| 国产精品进线69影院| 国产喂奶挤奶一区二区三区| 欧美大胆人体bbbb| 91精品久久久久久久99蜜桃| 欧美日韩一区小说| 欧美中文一区二区三区| 91成人免费在线| 色综合激情五月| 91麻豆免费在线观看| 国产精品99久| 国产成人丝袜美腿| 国产精品乡下勾搭老头1| 国内国产精品久久| 国产精品资源站在线| 国产一区视频导航| 九九在线精品视频| 国产成人亚洲精品青草天美| 成熟亚洲日本毛茸茸凸凹| 国产成人av一区二区三区在线| 国产美女精品人人做人人爽| 亚洲成av人片在www色猫咪| 亚洲美女在线一区| 亚洲国产一区二区视频| 免费成人结看片| 精品中文av资源站在线观看| 国模少妇一区二区三区| 成人午夜又粗又硬又大| 99re这里只有精品首页| 91传媒视频在线播放| 91精品国产黑色紧身裤美女| 日韩你懂的电影在线观看| 久久综合久久99| 国产精品国产三级国产aⅴ入口| 亚洲欧美一区二区三区极速播放| 久久久国际精品| 亚洲靠逼com| 香蕉加勒比综合久久| 久久精品国产**网站演员| 国产高清精品在线| 成人免费视频免费观看| 色悠悠久久综合| 欧美一区二区三区精品| 国产女主播在线一区二区| 中文字幕一区二区三区四区| 亚洲一区二区三区视频在线| 久久国产日韩欧美精品| 成人黄色小视频| 欧美老年两性高潮| 久久精品一区蜜桃臀影院| 亚洲另类在线一区| 麻豆精品一二三| 91色porny| 日韩欧美一级精品久久| 国产精品色噜噜| 三级一区在线视频先锋| 国产乱码精品一区二区三区av| 色域天天综合网| 久久先锋影音av鲁色资源 | 亚洲伦理在线免费看| 青椒成人免费视频| 不卡欧美aaaaa| 日韩精品一区二区在线| 亚洲人成伊人成综合网小说| 天堂蜜桃91精品| 国产·精品毛片| 91精品国产黑色紧身裤美女| 成人欧美一区二区三区1314| 美女一区二区视频| 欧美日韩午夜影院| 国产精品美女久久久久高潮| 五月天亚洲婷婷| 成人网在线免费视频| 91精品国产高清一区二区三区| 国产精品福利一区二区三区| 麻豆精品在线播放| 欧美日韩久久久久久| 国产精品久久777777| 老司机精品视频线观看86| 在线看国产一区二区| 欧美国产一区视频在线观看| 日本亚洲视频在线| 一本大道av一区二区在线播放| 国产亚洲精品久| 韩国毛片一区二区三区| 欧美精品v国产精品v日韩精品| 亚洲免费av网站| 成人美女视频在线看| 26uuu亚洲婷婷狠狠天堂| 日本最新不卡在线| 在线观看日韩毛片| 亚洲精品中文在线观看| www.亚洲免费av| 久久精品夜色噜噜亚洲aⅴ| 美国十次综合导航| 欧美日韩国产乱码电影| 亚洲一区二区成人在线观看| 97精品电影院| 中文字幕亚洲不卡| 成人一区二区三区视频在线观看| 精品欧美黑人一区二区三区| 免费在线观看成人| 日韩一级免费观看| 久久电影网电视剧免费观看| 欧美综合色免费| 亚洲欧美偷拍三级| 99v久久综合狠狠综合久久| 中文字幕中文在线不卡住| 成人黄色软件下载| 中文字幕一区二区三区在线不卡| 成人小视频免费观看| 最新日韩av在线| 91福利国产成人精品照片| 亚洲综合一二区| 91精品国产综合久久蜜臀 | 性久久久久久久久久久久| 欧美久久久一区| 久久99热这里只有精品| 久久久久久夜精品精品免费| 懂色av一区二区三区免费观看|