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

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

?? openbsd_hw.c

?? OpenSSL 0.9.8k 最新版OpenSSL
?? C
字號(hào):
/* 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三四区| 国产精品动漫网站| 9i在线看片成人免费| 亚洲chinese男男1069| 国产日韩v精品一区二区| 3d成人动漫网站| eeuss国产一区二区三区| 美女国产一区二区三区| 亚洲欧美日韩精品久久久久| 精品免费视频.| 欧美三级在线看| 白白色亚洲国产精品| 精一区二区三区| 午夜精品久久久久久久99樱桃| 中文成人av在线| 精品1区2区在线观看| 欧美性猛交一区二区三区精品| 国产成人在线看| 麻豆精品在线播放| 亚洲123区在线观看| 综合在线观看色| 国产精品视频yy9299一区| 精品国产一区二区三区四区四| 在线观看欧美黄色| thepron国产精品| 国产91在线看| 精品一区二区三区香蕉蜜桃| 天天色 色综合| 亚洲一区二区三区影院| 亚洲桃色在线一区| 国产精品国产三级国产普通话蜜臀 | 色哟哟精品一区| 丁香婷婷综合网| 国产成人福利片| 国产裸体歌舞团一区二区| 麻豆精品视频在线观看视频| 午夜一区二区三区视频| 夜色激情一区二区| 亚洲精品视频观看| 一区二区三区在线视频观看58 | 婷婷激情综合网| 亚洲图片自拍偷拍| 亚洲嫩草精品久久| 亚洲私人影院在线观看| 中文字幕一区二区三区在线不卡| 欧美经典一区二区| 亚洲色图视频免费播放| 亚洲精选在线视频| 亚洲成a人片综合在线| 天天亚洲美女在线视频| 日韩电影一区二区三区四区| 欧美aaaaa成人免费观看视频| 男人的j进女人的j一区| 色94色欧美sute亚洲线路一ni| 91网页版在线| 欧美在线免费观看视频| 欧美日韩一区二区三区高清| 欧美精品黑人性xxxx| 日韩一区二区精品葵司在线| 欧美精品一区二区三区一线天视频 | 日本亚洲免费观看| 久久精品国产一区二区| 国产精品99久久久久久久女警 | 日韩一区和二区| 久久综合精品国产一区二区三区| 久久人人超碰精品| 最新不卡av在线| 亚洲成人av资源| 国内精品视频666| av午夜一区麻豆| 欧美日本高清视频在线观看| 日韩免费成人网| 国产精品无遮挡| 亚洲一区二区三区爽爽爽爽爽 | 欧美三级电影在线观看| 日韩女优制服丝袜电影| 国产亚洲女人久久久久毛片| 亚洲少妇最新在线视频| 天天综合色天天综合| 国产精品一区二区三区四区| 91麻豆自制传媒国产之光| 欧美福利视频导航| 国产精品无遮挡| 日本成人中文字幕| 99久久国产免费看| 91麻豆精品91久久久久同性| 日本一区二区免费在线观看视频| 亚洲午夜电影网| 国产suv精品一区二区6| 欧美色中文字幕| 国产日韩欧美不卡| 丝袜美腿成人在线| 成人app在线| 日韩欧美国产精品一区| 亚洲精品一二三| 国产一区二区不卡老阿姨| 91黄色免费观看| 国产视频一区二区在线观看| 天堂在线亚洲视频| bt欧美亚洲午夜电影天堂| 日韩精品在线网站| 亚洲一区二区在线视频| 风间由美中文字幕在线看视频国产欧美 | 成人午夜视频免费看| 91精品国产一区二区三区| ...xxx性欧美| 国产精品综合在线视频| 91麻豆精品国产无毒不卡在线观看| 国产精品不卡一区| 国模娜娜一区二区三区| 欧美精品亚洲二区| 亚洲精品国产视频| 成人午夜在线播放| 久久一区二区三区四区| 日本不卡不码高清免费观看| 一本色道**综合亚洲精品蜜桃冫| 久久蜜臀精品av| 久久99精品久久久久婷婷| 欧美三级韩国三级日本一级| 一区二区三区日韩| 91免费观看在线| 国产精品美女久久久久aⅴ| 久久精工是国产品牌吗| 69久久夜色精品国产69蝌蚪网| 亚洲黄色小视频| 色欲综合视频天天天| 国产精品国产三级国产aⅴ原创| 精品在线播放午夜| 欧美一区二区三区在线视频| 日韩制服丝袜先锋影音| 欧美日韩精品是欧美日韩精品| 亚洲欧美日韩系列| 色婷婷精品久久二区二区蜜臀av| 国产精品九色蝌蚪自拍| 99久久精品免费| 中文字幕日韩av资源站| 99久久综合色| 中文字幕亚洲在| 91色视频在线| 亚洲精品中文字幕乱码三区| 91久久奴性调教| 亚洲午夜免费视频| 欧美日韩国产成人在线免费| 午夜欧美一区二区三区在线播放| 欧美日韩国产首页| 琪琪一区二区三区| 精品免费国产二区三区| 国产一区二区三区黄视频| 久久―日本道色综合久久| 丁香网亚洲国际| 亚洲欧美激情一区二区| 在线观看日韩高清av| 亚洲1区2区3区4区| 日韩欧美一区在线观看| 国产伦精品一区二区三区视频青涩| 国产三级精品在线| 91视频国产资源| 婷婷丁香激情综合| 精品播放一区二区| 99视频一区二区| 亚洲成a人在线观看| 精品久久人人做人人爽| 成人精品视频一区| 亚洲黄色在线视频| 欧美成人video| 成人免费高清在线| 亚洲国产wwwccc36天堂| 日韩欧美国产wwwww| 高清国产午夜精品久久久久久| 亚洲黄色免费网站| 精品久久人人做人人爰| 91在线观看视频| 日本美女一区二区三区| 国产午夜精品一区二区三区四区 | 91精品婷婷国产综合久久| 国内成人自拍视频| 亚洲欧美国产高清| 日韩欧美国产1| 日本精品一区二区三区高清| 日韩国产精品91| 中文欧美字幕免费| 日韩一区二区高清| 成人激情视频网站| 免费黄网站欧美| 亚洲天堂a在线| 精品国产三级电影在线观看| 91亚洲男人天堂| 国模无码大尺度一区二区三区| 亚洲乱码日产精品bd| 亚洲精品在线网站| 欧美日韩亚洲另类| 国产sm精品调教视频网站| 天堂久久久久va久久久久| 国产精品欧美一级免费| 日韩一区二区视频在线观看| 91伊人久久大香线蕉| 国产成人在线免费观看| 日本午夜精品一区二区三区电影| 亚洲欧美在线视频观看| 久久色中文字幕|