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

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

?? openbsd_hw.c

?? openssl包含TLS
?? C
字號:
/* Written by Ben Laurie, 2001 *//* * Copyright (c) 2001 The OpenSSL Project.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */#include <openssl/evp.h>#include <openssl/objects.h>#include <openssl/rsa.h>#include "evp_locl.h"/* This stuff should now all be supported through * crypto/engine/hw_openbsd_dev_crypto.c unless I botched it up */static void *dummy=&dummy;#if 0/* check flag after OpenSSL headers to ensure make depend works */#ifdef OPENSSL_OPENBSD_DEV_CRYPTO#include <fcntl.h>#include <stdio.h>#include <errno.h>#include <sys/ioctl.h>#include <crypto/cryptodev.h>#include <unistd.h>#include <assert.h>/* longest key supported in hardware */#define MAX_HW_KEY	24#define MAX_HW_IV	8#define MD5_DIGEST_LENGTH	16#define MD5_CBLOCK		64static int fd;static int dev_failed;typedef struct session_op session_op;#define CDATA(ctx) EVP_C_DATA(session_op,ctx)static void err(const char *str)    {    fprintf(stderr,"%s: errno %d\n",str,errno);    }static int dev_crypto_init(session_op *ses)    {    if(dev_failed)	return 0;    if(!fd)	{	int cryptodev_fd;        if ((cryptodev_fd=open("/dev/crypto",O_RDWR,0)) < 0)	    {	    err("/dev/crypto");	    dev_failed=1;	    return 0;	    }        if (ioctl(cryptodev_fd,CRIOGET,&fd) == -1)	    {	    err("CRIOGET failed");	    close(cryptodev_fd);	    dev_failed=1;	    return 0;	    }	close(cryptodev_fd);	}    assert(ses);    memset(ses,'\0',sizeof *ses);    return 1;    }static int dev_crypto_cleanup(EVP_CIPHER_CTX *ctx)    {    if(ioctl(fd,CIOCFSESSION,&CDATA(ctx)->ses) == -1)	err("CIOCFSESSION failed");    OPENSSL_free(CDATA(ctx)->key);    return 1;    }static int dev_crypto_init_key(EVP_CIPHER_CTX *ctx,int cipher,			       const unsigned char *key,int klen)    {    if(!dev_crypto_init(CDATA(ctx)))	return 0;    CDATA(ctx)->key=OPENSSL_malloc(MAX_HW_KEY);    assert(ctx->cipher->iv_len <= MAX_HW_IV);    memcpy(CDATA(ctx)->key,key,klen);        CDATA(ctx)->cipher=cipher;    CDATA(ctx)->keylen=klen;    if (ioctl(fd,CIOCGSESSION,CDATA(ctx)) == -1)	{	err("CIOCGSESSION failed");	return 0;	}    return 1;    }static int dev_crypto_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,			     const unsigned char *in,unsigned int inl)    {    struct crypt_op cryp;    unsigned char lb[MAX_HW_IV];    if(!inl)	return 1;    assert(CDATA(ctx));    assert(!dev_failed);    memset(&cryp,'\0',sizeof cryp);    cryp.ses=CDATA(ctx)->ses;    cryp.op=ctx->encrypt ? COP_ENCRYPT : COP_DECRYPT;    cryp.flags=0;    cryp.len=inl;    assert((inl&(ctx->cipher->block_size-1)) == 0);    cryp.src=(caddr_t)in;    cryp.dst=(caddr_t)out;    cryp.mac=0;    if(ctx->cipher->iv_len)	cryp.iv=(caddr_t)ctx->iv;    if(!ctx->encrypt)	memcpy(lb,&in[cryp.len-ctx->cipher->iv_len],ctx->cipher->iv_len);    if(ioctl(fd, CIOCCRYPT, &cryp) == -1)	{	if(errno == EINVAL) /* buffers are misaligned */	    {	    unsigned int cinl=0;	    char *cin=NULL;	    char *cout=NULL;	    /* NB: this can only make cinl != inl with stream ciphers */	    cinl=(inl+3)/4*4;	    if(((unsigned long)in&3) || cinl != inl)		{		cin=OPENSSL_malloc(cinl);		memcpy(cin,in,inl);		cryp.src=cin;		}	    if(((unsigned long)out&3) || cinl != inl)		{		cout=OPENSSL_malloc(cinl);		cryp.dst=cout;		}	    cryp.len=cinl;	    if(ioctl(fd, CIOCCRYPT, &cryp) == -1)		{		err("CIOCCRYPT(2) failed");		printf("src=%p dst=%p\n",cryp.src,cryp.dst);		abort();		return 0;		}			    if(cout)		{		memcpy(out,cout,inl);		OPENSSL_free(cout);		}	    if(cin)		OPENSSL_free(cin);	    }	else 	    {	    	    err("CIOCCRYPT failed");	    abort();	    return 0;	    }	}    if(ctx->encrypt)	memcpy(ctx->iv,&out[cryp.len-ctx->cipher->iv_len],ctx->cipher->iv_len);    else	memcpy(ctx->iv,lb,ctx->cipher->iv_len);    return 1;    }static int dev_crypto_des_ede3_init_key(EVP_CIPHER_CTX *ctx,					const unsigned char *key,					const unsigned char *iv, int enc)    { return dev_crypto_init_key(ctx,CRYPTO_3DES_CBC,key,24); }#define dev_crypto_des_ede3_cbc_cipher dev_crypto_cipherBLOCK_CIPHER_def_cbc(dev_crypto_des_ede3, session_op, NID_des_ede3, 8, 24, 8,		     0, dev_crypto_des_ede3_init_key,		     dev_crypto_cleanup, 		     EVP_CIPHER_set_asn1_iv,		     EVP_CIPHER_get_asn1_iv,		     NULL)static int dev_crypto_rc4_init_key(EVP_CIPHER_CTX *ctx,					const unsigned char *key,					const unsigned char *iv, int enc)    { return dev_crypto_init_key(ctx,CRYPTO_ARC4,key,16); }static const EVP_CIPHER r4_cipher=    {    NID_rc4,    1,16,0,	/* FIXME: key should be up to 256 bytes */    EVP_CIPH_VARIABLE_LENGTH,    dev_crypto_rc4_init_key,    dev_crypto_cipher,    dev_crypto_cleanup,    sizeof(session_op),    NULL,    NULL,    NULL    };const EVP_CIPHER *EVP_dev_crypto_rc4(void)    { return &r4_cipher; }typedef struct    {    session_op sess;    char *data;    int len;    unsigned char md[EVP_MAX_MD_SIZE];    } MD_DATA;static int dev_crypto_init_digest(MD_DATA *md_data,int mac)    {    if(!dev_crypto_init(&md_data->sess))	return 0;    md_data->len=0;    md_data->data=NULL;    md_data->sess.mac=mac;    if (ioctl(fd,CIOCGSESSION,&md_data->sess) == -1)	{	err("CIOCGSESSION failed");	return 0;	}    return 1;    }static int dev_crypto_cleanup_digest(MD_DATA *md_data)    {    if (ioctl(fd,CIOCFSESSION,&md_data->sess.ses) == -1)	{	err("CIOCFSESSION failed");	return 0;	}    return 1;    }/* FIXME: if device can do chained MACs, then don't accumulate *//* FIXME: move accumulation to the framework */static int dev_crypto_md5_init(EVP_MD_CTX *ctx)    { return dev_crypto_init_digest(ctx->md_data,CRYPTO_MD5); }static int do_digest(int ses,unsigned char *md,const void *data,int len)    {    struct crypt_op cryp;    static unsigned char md5zero[16]=	{	0xd4,0x1d,0x8c,0xd9,0x8f,0x00,0xb2,0x04,	0xe9,0x80,0x09,0x98,0xec,0xf8,0x42,0x7e	};    /* some cards can't do zero length */    if(!len)	{	memcpy(md,md5zero,16);	return 1;	}    memset(&cryp,'\0',sizeof cryp);    cryp.ses=ses;    cryp.op=COP_ENCRYPT;/* required to do the MAC rather than check it */    cryp.len=len;    cryp.src=(caddr_t)data;    cryp.dst=(caddr_t)data; // FIXME!!!    cryp.mac=(caddr_t)md;    if(ioctl(fd, CIOCCRYPT, &cryp) == -1)	{	if(errno == EINVAL) /* buffer is misaligned */	    {	    char *dcopy;	    dcopy=OPENSSL_malloc(len);	    memcpy(dcopy,data,len);	    cryp.src=dcopy;	    cryp.dst=cryp.src; // FIXME!!!	    if(ioctl(fd, CIOCCRYPT, &cryp) == -1)		{		err("CIOCCRYPT(MAC2) failed");		abort();		return 0;		}	    OPENSSL_free(dcopy);	    }	else	    {	    err("CIOCCRYPT(MAC) failed");	    abort();	    return 0;	    }	}    //    printf("done\n");    return 1;    }static int dev_crypto_md5_update(EVP_MD_CTX *ctx,const void *data,				 unsigned long len)    {    MD_DATA *md_data=ctx->md_data;    if(ctx->flags&EVP_MD_CTX_FLAG_ONESHOT)	return do_digest(md_data->sess.ses,md_data->md,data,len);    md_data->data=OPENSSL_realloc(md_data->data,md_data->len+len);    memcpy(md_data->data+md_data->len,data,len);    md_data->len+=len;    return 1;    }	static int dev_crypto_md5_final(EVP_MD_CTX *ctx,unsigned char *md)    {    int ret;    MD_DATA *md_data=ctx->md_data;    if(ctx->flags&EVP_MD_CTX_FLAG_ONESHOT)	{	memcpy(md,md_data->md,MD5_DIGEST_LENGTH);	ret=1;	}    else	{	ret=do_digest(md_data->sess.ses,md,md_data->data,md_data->len);	OPENSSL_free(md_data->data);	md_data->data=NULL;	md_data->len=0;	}    return ret;    }static int dev_crypto_md5_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from)    {    const MD_DATA *from_md=from->md_data;    MD_DATA *to_md=to->md_data;    // How do we copy sessions?    assert(from->digest->flags&EVP_MD_FLAG_ONESHOT);    to_md->data=OPENSSL_malloc(from_md->len);    memcpy(to_md->data,from_md->data,from_md->len);    return 1;    }static int dev_crypto_md5_cleanup(EVP_MD_CTX *ctx)    {    return dev_crypto_cleanup_digest(ctx->md_data);    }static const EVP_MD md5_md=    {    NID_md5,    NID_md5WithRSAEncryption,    MD5_DIGEST_LENGTH,    EVP_MD_FLAG_ONESHOT,	// XXX: set according to device info...    dev_crypto_md5_init,    dev_crypto_md5_update,    dev_crypto_md5_final,    dev_crypto_md5_copy,    dev_crypto_md5_cleanup,    EVP_PKEY_RSA_method,    MD5_CBLOCK,    sizeof(MD_DATA),    };const EVP_MD *EVP_dev_crypto_md5(void)    { return &md5_md; }#endif#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线五月| 国产99精品视频| 国产成人鲁色资源国产91色综| 97久久人人超碰| 精品国产91亚洲一区二区三区婷婷| 亚洲欧洲精品一区二区三区不卡| 蜜桃一区二区三区四区| 色伊人久久综合中文字幕| 久久九九99视频| 日韩影院免费视频| 日本精品视频一区二区| 国产精品九色蝌蚪自拍| 国产精品一区二区无线| 日韩免费在线观看| 日韩av中文在线观看| 欧洲亚洲精品在线| 最近日韩中文字幕| 成人福利视频网站| 国产日韩欧美精品电影三级在线| 六月婷婷色综合| 69久久99精品久久久久婷婷| 亚洲国产精品久久久久秋霞影院| 精品日韩欧美在线| 视频一区欧美日韩| 欧美日韩一区二区三区在线看| 亚洲人成网站在线| 99久久久国产精品免费蜜臀| 国产欧美精品国产国产专区| 国产成人亚洲综合a∨婷婷图片| 精品福利一区二区三区| 国内成+人亚洲+欧美+综合在线| 91麻豆精品91久久久久同性| 天天色天天操综合| 欧美一卡二卡三卡四卡| 麻豆国产欧美日韩综合精品二区| 日韩三级电影网址| 久久超碰97人人做人人爱| 欧美成人三级电影在线| 精油按摩中文字幕久久| 欧美精品一区二区三区视频| 国产精品一区二区果冻传媒| 国产精品美女视频| 日本精品一级二级| 亚洲国产视频网站| 日韩欧美资源站| 国产99精品在线观看| 综合久久久久综合| 欧美日韩成人综合在线一区二区| 日韩国产欧美在线观看| 精品av久久707| 波多野结衣中文一区| 亚洲影院在线观看| 欧美一级电影网站| 国产一区在线视频| **性色生活片久久毛片| 欧美丝袜丝交足nylons图片| 青青草国产成人99久久| 国产日韩精品视频一区| 色综合久久久久久久久| 美女看a上一区| 国产精品日产欧美久久久久| 欧美日韩精品一区二区天天拍小说| 男女性色大片免费观看一区二区| 国产亚洲午夜高清国产拍精品| 色综合网色综合| 国产麻豆精品久久一二三| 中文在线一区二区| 欧美丰满美乳xxx高潮www| 国产一区二区在线观看视频| 亚洲欧美经典视频| 日韩精品一区二区三区在线| 91网站最新网址| 蜜桃久久久久久久| 亚洲激情男女视频| 久久久99精品免费观看不卡| 日韩一区二区在线观看| 亚洲综合色自拍一区| 精品久久免费看| 欧美影片第一页| 国产99精品国产| 捆绑调教美女网站视频一区| 亚洲精品欧美激情| 久久精品视频网| 欧美高清视频在线高清观看mv色露露十八 | 国产精品18久久久久久久久| 亚洲日本在线视频观看| 欧美成人免费网站| 在线观看视频91| 成人综合在线网站| 美女免费视频一区| 亚洲.国产.中文慕字在线| 国产精品久久毛片| 久久综合九色综合97_久久久| 欧美日韩一级二级| 一本到三区不卡视频| 懂色av噜噜一区二区三区av| 美女免费视频一区| 婷婷夜色潮精品综合在线| 亚洲精选视频在线| 中文字幕亚洲一区二区va在线| 精品91自产拍在线观看一区| 91精品一区二区三区在线观看| 日本高清不卡一区| 一本久道久久综合中文字幕| 成人av午夜影院| 成人午夜大片免费观看| 国产成人精品三级麻豆| 国产一区二区三区四| 丁香六月久久综合狠狠色| 国内成人自拍视频| 国产乱码精品一区二区三区忘忧草| 日本vs亚洲vs韩国一区三区二区 | www日韩大片| 精品国产乱码久久久久久牛牛| 91精品婷婷国产综合久久竹菊| 欧美日韩一区中文字幕| 欧美日韩在线不卡| 欧美日韩成人高清| 91精品国产综合久久久久久| 欧美老女人第四色| 欧美精品 日韩| 欧美一区2区视频在线观看| 日韩视频一区二区三区在线播放| 欧美一区二区在线视频| 欧美成人在线直播| 精品国内二区三区| 国产情人综合久久777777| 国产精品天干天干在观线| 中文字幕在线观看一区| 一区二区三区四区不卡在线| 偷偷要91色婷婷| 麻豆久久久久久久| 国产91精品精华液一区二区三区 | 91久久精品一区二区三区| 91亚洲国产成人精品一区二三| 99国产精品视频免费观看| 欧美系列一区二区| 91精品一区二区三区在线观看| 亚洲精品在线网站| 国产精品理论片在线观看| 亚洲在线视频网站| 免费看欧美女人艹b| 国产91露脸合集magnet| 91久久线看在观草草青青| 91精品国产欧美一区二区18| 久久久亚洲精品一区二区三区 | 99久久精品费精品国产一区二区| 91福利在线免费观看| 日韩欧美在线1卡| 亚洲国产精品99久久久久久久久| 亚洲一区二区三区在线看| 美女一区二区三区| 99久久精品国产导航| 欧美日韩aaaaa| 国产精品美女一区二区三区| 日韩成人一级片| av高清久久久| 26uuu精品一区二区在线观看| 亚洲精品久久久蜜桃| 精品一区二区免费看| 欧美主播一区二区三区| 久久欧美一区二区| 午夜欧美电影在线观看| 成人激情免费网站| 欧美大肚乱孕交hd孕妇| 亚洲精品乱码久久久久久日本蜜臀| 激情综合色综合久久综合| 欧美色综合影院| 中文字幕一区二区三区在线观看| 蜜臀久久久久久久| 91成人网在线| 久久精品一区二区| 日本v片在线高清不卡在线观看| 色婷婷综合五月| 国产精品乱码一区二区三区软件| 蜜桃av噜噜一区二区三区小说| 欧美天天综合网| 亚洲精品中文在线观看| 成人毛片在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 天天爽夜夜爽夜夜爽精品视频| 色网综合在线观看| 国产精品成人一区二区三区夜夜夜| 国产专区综合网| 日韩精品中文字幕一区二区三区 | 亚洲精品一二三四区| 成人av资源在线观看| 国产午夜精品一区二区三区四区 | 亚洲午夜私人影院| 99国产精品国产精品久久| 国产精品美女久久久久久久久久久| 激情综合五月婷婷| 久久这里只有精品视频网| 久久99日本精品| 精品久久久网站| 国产精品综合一区二区三区| 久久亚洲私人国产精品va媚药| 蓝色福利精品导航| 久久久久国产精品麻豆ai换脸 | 国产视频在线观看一区二区三区|