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

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

?? crypt_z990.h

?? 優(yōu)龍2410linux2.6.8內(nèi)核源代碼
?? H
字號:
/* * Cryptographic API. * * Support for z990 cryptographic instructions. * *   Copyright (C) 2003 IBM Deutschland GmbH, IBM Corporation *   Author(s): Thomas Spatzier (tspat@de.ibm.com) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * */#ifndef _CRYPTO_ARCH_S390_CRYPT_Z990_H#define _CRYPTO_ARCH_S390_CRYPT_Z990_H#include <asm/errno.h>#define CRYPT_Z990_OP_MASK 0xFF00#define CRYPT_Z990_FUNC_MASK 0x00FF/*z990 cryptographic operations*/enum crypt_z990_operations {	CRYPT_Z990_KM   = 0x0100,	CRYPT_Z990_KMC  = 0x0200,	CRYPT_Z990_KIMD = 0x0300,	CRYPT_Z990_KLMD = 0x0400,	CRYPT_Z990_KMAC = 0x0500};/*function codes for KM (CIPHER MESSAGE) instruction*/enum crypt_z990_km_func {	KM_QUERY            = CRYPT_Z990_KM | 0,	KM_DEA_ENCRYPT      = CRYPT_Z990_KM | 1,	KM_DEA_DECRYPT      = CRYPT_Z990_KM | 1 | 0x80, //modifier bit->decipher	KM_TDEA_128_ENCRYPT = CRYPT_Z990_KM | 2,	KM_TDEA_128_DECRYPT = CRYPT_Z990_KM | 2 | 0x80,	KM_TDEA_192_ENCRYPT = CRYPT_Z990_KM | 3,	KM_TDEA_192_DECRYPT = CRYPT_Z990_KM | 3 | 0x80,};/*function codes for KMC (CIPHER MESSAGE WITH CHAINING) instruction*/enum crypt_z990_kmc_func {	KMC_QUERY            = CRYPT_Z990_KMC | 0,	KMC_DEA_ENCRYPT      = CRYPT_Z990_KMC | 1,	KMC_DEA_DECRYPT      = CRYPT_Z990_KMC | 1 | 0x80, //modifier bit->decipher	KMC_TDEA_128_ENCRYPT = CRYPT_Z990_KMC | 2,	KMC_TDEA_128_DECRYPT = CRYPT_Z990_KMC | 2 | 0x80,	KMC_TDEA_192_ENCRYPT = CRYPT_Z990_KMC | 3,	KMC_TDEA_192_DECRYPT = CRYPT_Z990_KMC | 3 | 0x80,};/*function codes for KIMD (COMPUTE INTERMEDIATE MESSAGE DIGEST) instruction*/enum crypt_z990_kimd_func {	KIMD_QUERY   = CRYPT_Z990_KIMD | 0,	KIMD_SHA_1   = CRYPT_Z990_KIMD | 1,};/*function codes for KLMD (COMPUTE LAST MESSAGE DIGEST) instruction*/enum crypt_z990_klmd_func {	KLMD_QUERY   = CRYPT_Z990_KLMD | 0,	KLMD_SHA_1   = CRYPT_Z990_KLMD | 1,};/*function codes for KMAC (COMPUTE MESSAGE AUTHENTICATION CODE) instruction*/enum crypt_z990_kmac_func {	KMAC_QUERY    = CRYPT_Z990_KMAC | 0,	KMAC_DEA      = CRYPT_Z990_KMAC | 1,	KMAC_TDEA_128 = CRYPT_Z990_KMAC | 2,	KMAC_TDEA_192 = CRYPT_Z990_KMAC | 3};/*status word for z990 crypto instructions' QUERY functions*/struct crypt_z990_query_status {	u64 high;	u64 low;};/* * Standard fixup and ex_table sections for crypt_z990 inline functions. * label 0: the z990 crypto operation * label 1: just after 1 to catch illegal operation exception on non-z990 * label 6: the return point after fixup * label 7: set error value if exception _in_ crypto operation * label 8: set error value if illegal operation exception * [ret] is the variable to receive the error code * [ERR] is the error code value */#ifndef __s390x__#define __crypt_z990_fixup \	".section .fixup,\"ax\" \n"	\	"7:	lhi	%0,%h[e1] \n"	\	"	bras	1,9f \n"	\	"	.long	6b \n"		\	"8:	lhi	%0,%h[e2] \n"	\	"	bras	1,9f \n"	\	"	.long	6b \n"		\	"9:	l	1,0(1) \n"	\	"	br	1 \n"		\	".previous \n"			\	".section __ex_table,\"a\" \n"	\	"	.align	4 \n"		\	"	.long	0b,7b \n"	\	"	.long	1b,8b \n"	\	".previous"#else /* __s390x__ */#define __crypt_z990_fixup \	".section .fixup,\"ax\" \n"	\	"7:	lhi	%0,%h[e1] \n"	\	"	jg	6b \n"		\	"8:	lhi	%0,%h[e2] \n"	\	"	jg	6b \n"		\	".previous\n"			\	".section __ex_table,\"a\" \n"	\	"	.align	8 \n"		\	"	.quad	0b,7b \n"	\	"	.quad	1b,8b \n"	\	".previous"#endif /* __s390x__ *//* * Standard code for setting the result of z990 crypto instructions. * %0: the register which will receive the result * [result]: the register containing the result (e.g. second operand length * to compute number of processed bytes]. */#ifndef __s390x__#define __crypt_z990_set_result \	"	lr	%0,%[result] \n"#else /* __s390x__ */#define __crypt_z990_set_result \	"	lgr	%0,%[result] \n"#endif/* * Executes the KM (CIPHER MESSAGE) operation of the z990 CPU. * @param func: the function code passed to KM; see crypt_z990_km_func * @param param: address of parameter block; see POP for details on each func * @param dest: address of destination memory area * @param src: address of source memory area * @param src_len: length of src operand in bytes * @returns < zero for failure, 0 for the query func, number of processed bytes * 	for encryption/decryption funcs */static inline intcrypt_z990_km(long func, void* param, u8* dest, const u8* src, long src_len){	register long __func asm("0") = func & CRYPT_Z990_FUNC_MASK;	register void* __param asm("1") = param;	register u8* __dest asm("4") = dest;	register const u8* __src asm("2") = src;	register long __src_len asm("3") = src_len;	int ret;	ret = 0;	__asm__ __volatile__ (		"0:	.insn	rre,0xB92E0000,%1,%2 \n" //KM opcode		"1:	brc	1,0b \n" //handle partial completion		__crypt_z990_set_result		"6:	\n"		__crypt_z990_fixup		: "+d" (ret), "+a" (__dest), "+a" (__src),		  [result] "+d" (__src_len)		: [e1] "K" (-EFAULT), [e2] "K" (-ENOSYS), "d" (__func),		  "a" (__param)		: "cc", "memory"	);	if (ret >= 0 && func & CRYPT_Z990_FUNC_MASK){		ret = src_len - ret;	}	return ret;}/* * Executes the KMC (CIPHER MESSAGE WITH CHAINING) operation of the z990 CPU. * @param func: the function code passed to KM; see crypt_z990_kmc_func * @param param: address of parameter block; see POP for details on each func * @param dest: address of destination memory area * @param src: address of source memory area * @param src_len: length of src operand in bytes * @returns < zero for failure, 0 for the query func, number of processed bytes * 	for encryption/decryption funcs */static inline intcrypt_z990_kmc(long func, void* param, u8* dest, const u8* src, long src_len){	register long __func asm("0") = func & CRYPT_Z990_FUNC_MASK;	register void* __param asm("1") = param;	register u8* __dest asm("4") = dest;	register const u8* __src asm("2") = src;	register long __src_len asm("3") = src_len;	int ret;	ret = 0;	__asm__ __volatile__ (		"0:	.insn	rre,0xB92F0000,%1,%2 \n" //KMC opcode		"1:	brc	1,0b \n" //handle partial completion		__crypt_z990_set_result		"6:	\n"		__crypt_z990_fixup		: "+d" (ret), "+a" (__dest), "+a" (__src),		  [result] "+d" (__src_len)		: [e1] "K" (-EFAULT), [e2] "K" (-ENOSYS), "d" (__func),		  "a" (__param)		: "cc", "memory"	);	if (ret >= 0 && func & CRYPT_Z990_FUNC_MASK){		ret = src_len - ret;	}	return ret;}/* * Executes the KIMD (COMPUTE INTERMEDIATE MESSAGE DIGEST) operation * of the z990 CPU. * @param func: the function code passed to KM; see crypt_z990_kimd_func * @param param: address of parameter block; see POP for details on each func * @param src: address of source memory area * @param src_len: length of src operand in bytes * @returns < zero for failure, 0 for the query func, number of processed bytes * 	for digest funcs */static inline intcrypt_z990_kimd(long func, void* param, const u8* src, long src_len){	register long __func asm("0") = func & CRYPT_Z990_FUNC_MASK;	register void* __param asm("1") = param;	register const u8* __src asm("2") = src;	register long __src_len asm("3") = src_len;	int ret;	ret = 0;	__asm__ __volatile__ (		"0:	.insn	rre,0xB93E0000,%1,%1 \n" //KIMD opcode		"1:	brc	1,0b \n" /*handle partical completion of kimd*/		__crypt_z990_set_result		"6:	\n"		__crypt_z990_fixup		: "+d" (ret), "+a" (__src), [result] "+d" (__src_len)		: [e1] "K" (-EFAULT), [e2] "K" (-ENOSYS), "d" (__func),		  "a" (__param)		: "cc", "memory"	);	if (ret >= 0 && (func & CRYPT_Z990_FUNC_MASK)){		ret = src_len - ret;	}	return ret;}/* * Executes the KLMD (COMPUTE LAST MESSAGE DIGEST) operation of the z990 CPU. * @param func: the function code passed to KM; see crypt_z990_klmd_func * @param param: address of parameter block; see POP for details on each func * @param src: address of source memory area * @param src_len: length of src operand in bytes * @returns < zero for failure, 0 for the query func, number of processed bytes * 	for digest funcs */static inline intcrypt_z990_klmd(long func, void* param, const u8* src, long src_len){	register long __func asm("0") = func & CRYPT_Z990_FUNC_MASK;	register void* __param asm("1") = param;	register const u8* __src asm("2") = src;	register long __src_len asm("3") = src_len;	int ret;	ret = 0;	__asm__ __volatile__ (		"0:	.insn	rre,0xB93F0000,%1,%1 \n" //KLMD opcode		"1:	brc	1,0b \n" /*handle partical completion of klmd*/		__crypt_z990_set_result		"6:	\n"		__crypt_z990_fixup		: "+d" (ret), "+a" (__src), [result] "+d" (__src_len)		: [e1] "K" (-EFAULT), [e2] "K" (-ENOSYS), "d" (__func),		  "a" (__param)		: "cc", "memory"	);	if (ret >= 0 && func & CRYPT_Z990_FUNC_MASK){		ret = src_len - ret;	}	return ret;}/* * Executes the KMAC (COMPUTE MESSAGE AUTHENTICATION CODE) operation * of the z990 CPU. * @param func: the function code passed to KM; see crypt_z990_klmd_func * @param param: address of parameter block; see POP for details on each func * @param src: address of source memory area * @param src_len: length of src operand in bytes * @returns < zero for failure, 0 for the query func, number of processed bytes * 	for digest funcs */static inline intcrypt_z990_kmac(long func, void* param, const u8* src, long src_len){	register long __func asm("0") = func & CRYPT_Z990_FUNC_MASK;	register void* __param asm("1") = param;	register const u8* __src asm("2") = src;	register long __src_len asm("3") = src_len;	int ret;	ret = 0;	__asm__ __volatile__ (		"0:	.insn	rre,0xB91E0000,%5,%5 \n" //KMAC opcode		"1:	brc	1,0b \n" /*handle partical completion of klmd*/		__crypt_z990_set_result		"6:	\n"		__crypt_z990_fixup		: "+d" (ret), "+a" (__src), [result] "+d" (__src_len)		: [e1] "K" (-EFAULT), [e2] "K" (-ENOSYS), "d" (__func),		  "a" (__param)		: "cc", "memory"	);	if (ret >= 0 && func & CRYPT_Z990_FUNC_MASK){		ret = src_len - ret;	}	return ret;}/** * Tests if a specific z990 crypto function is implemented on the machine. * @param func:	the function code of the specific function; 0 if op in general * @return	1 if func available; 0 if func or op in general not available */static inline intcrypt_z990_func_available(int func){	int ret;	struct crypt_z990_query_status status = {		.high = 0,		.low = 0	};	switch (func & CRYPT_Z990_OP_MASK){		case CRYPT_Z990_KM:			ret = crypt_z990_km(KM_QUERY, &status, NULL, NULL, 0);			break;		case CRYPT_Z990_KMC:			ret = crypt_z990_kmc(KMC_QUERY, &status, NULL, NULL, 0);			break;		case CRYPT_Z990_KIMD:			ret = crypt_z990_kimd(KIMD_QUERY, &status, NULL, 0);			break;		case CRYPT_Z990_KLMD:			ret = crypt_z990_klmd(KLMD_QUERY, &status, NULL, 0);			break;		case CRYPT_Z990_KMAC:			ret = crypt_z990_kmac(KMAC_QUERY, &status, NULL, 0);			break;		default:			ret = 0;			return ret;	}	if (ret >= 0){		func &= CRYPT_Z990_FUNC_MASK;		func &= 0x7f; //mask modifier bit		if (func < 64){			ret = (status.high >> (64 - func - 1)) & 0x1;		} else {			ret = (status.low >> (128 - func - 1)) & 0x1;		}	} else {		ret = 0;	}	return ret;}#endif // _CRYPTO_ARCH_S390_CRYPT_Z990_H

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区专区| 91国偷自产一区二区开放时间| 国产精品成人免费在线| 91精品欧美综合在线观看最新| www.欧美.com| 丁香婷婷深情五月亚洲| 国产精品一区二区91| 精品污污网站免费看| 欧美视频三区在线播放| 欧美肥大bbwbbw高潮| 日韩视频一区二区在线观看| 日韩精品在线看片z| 精品精品国产高清a毛片牛牛| 日韩一区二区免费高清| 亚洲综合色在线| 日韩电影网1区2区| 韩国视频一区二区| 国产mv日韩mv欧美| 久久久精品免费观看| 国产欧美精品一区二区三区四区| 欧美国产激情一区二区三区蜜月| 亚洲视频小说图片| 日韩高清不卡一区二区三区| 91官网在线免费观看| 成人欧美一区二区三区在线播放| 亚洲午夜久久久久久久久久久| 免费日韩伦理电影| 99久久免费视频.com| 欧美一区二区三区精品| 国产丝袜在线精品| 午夜精品aaa| 成人激情综合网站| 欧美一级日韩免费不卡| 日本不卡123| 日韩美女视频在线| 国产麻豆91精品| 欧美日韩精品一二三区| 中文字幕欧美国产| 成人福利视频在线看| 国产精品久久久久国产精品日日| 成人黄色小视频| 亚洲精品高清在线观看| 国产一区二区三区香蕉| 国产日产欧美一区二区视频| 成人免费看黄yyy456| 日韩亚洲电影在线| 韩国女主播一区| 国产精品久久久久久久久免费相片 | 久久免费美女视频| 国产一区二区在线看| 中文字幕 久热精品 视频在线| 成人av免费在线播放| 一区二区不卡在线播放 | 亚洲免费观看高清完整版在线观看熊 | 亚洲成人av电影在线| 成人午夜免费av| 亚洲免费三区一区二区| 欧美日韩中文一区| 激情丁香综合五月| 最新日韩av在线| 在线播放91灌醉迷j高跟美女 | 国产精品激情偷乱一区二区∴| 91国产视频在线观看| 麻豆一区二区99久久久久| 97久久久精品综合88久久| 午夜不卡av免费| 国产色产综合产在线视频| 91精品1区2区| 国产原创一区二区三区| 一级日本不卡的影视| 精品少妇一区二区三区在线视频| 亚洲成人动漫在线免费观看| 精品免费日韩av| 欧美在线高清视频| 亚洲乱码国产乱码精品精的特点 | 99re视频精品| 久久成人羞羞网站| 精品欧美黑人一区二区三区| 91小宝寻花一区二区三区| 亚洲欧洲国产专区| 日韩欧美精品在线视频| 一本色道久久综合亚洲aⅴ蜜桃| 中文字幕中文乱码欧美一区二区| 欧美猛男男办公室激情| 成人福利视频在线看| 麻豆精品视频在线| 午夜婷婷国产麻豆精品| 国产精品国产三级国产aⅴ入口 | 久久久777精品电影网影网| 欧美日韩一级片在线观看| 成人午夜激情视频| 精品一区在线看| 国产欧美日韩视频在线观看| 91麻豆精品国产91久久久使用方法 | 久久国产麻豆精品| 亚洲成人1区2区| 亚洲精品国产高清久久伦理二区| 国产午夜精品美女毛片视频| 日韩精品一区二区三区在线播放| 欧美亚洲一区二区三区四区| a亚洲天堂av| 成人免费视频caoporn| 国产精品自产自拍| 国产一区二区不卡老阿姨| 奇米综合一区二区三区精品视频| 亚洲成人动漫av| 亚洲成av人综合在线观看| ...中文天堂在线一区| 日本一区免费视频| 欧美国产乱子伦| 国产天堂亚洲国产碰碰| 国产欧美一二三区| 日本一区二区高清| 国产精品伦一区| 欧美性受极品xxxx喷水| 91福利区一区二区三区| 日本高清不卡视频| 欧美日韩一级二级| 欧美日韩精品系列| 日韩欧美国产午夜精品| 欧美变态tickling挠脚心| 2019国产精品| 欧美色图激情小说| 欧美猛男男办公室激情| 91麻豆精品国产91| www激情久久| 国产精品福利在线播放| 自拍av一区二区三区| 一区二区不卡在线播放| 午夜精品福利一区二区三区蜜桃| 琪琪久久久久日韩精品| 国产综合久久久久久久久久久久| 国产91精品一区二区| 一本久久a久久免费精品不卡| 欧美午夜不卡在线观看免费| 欧美精选一区二区| 欧美大胆人体bbbb| 国产精品伦理在线| 五月激情六月综合| 国产在线视频不卡二| 91视视频在线观看入口直接观看www| 91色.com| 欧美xxxx在线观看| 国产精品久久久久久久久免费樱桃 | 日韩一级二级三级精品视频| 2019国产精品| 一区二区三区四区五区视频在线观看 | 久久国产精品无码网站| 波波电影院一区二区三区| 欧美性色黄大片手机版| 精品国内片67194| 一区在线中文字幕| 性久久久久久久久久久久| 国产精品一区二区视频| 91电影在线观看| 久久精品免费在线观看| 天天影视涩香欲综合网| 高清不卡在线观看av| 欧美日韩国产首页| 国产精品三级视频| 日韩高清在线一区| 色婷婷久久久久swag精品| 精品国产一区二区三区av性色| 亚洲精品欧美二区三区中文字幕| 美腿丝袜亚洲一区| 一本到高清视频免费精品| 欧美精品一区二区三区在线播放| 一级女性全黄久久生活片免费| 国产69精品久久久久777| 日韩欧美专区在线| 亚洲综合偷拍欧美一区色| 成人黄色在线视频| 久久久美女毛片| 裸体一区二区三区| 欧美丝袜丝nylons| 一区二区三区免费看视频| 国产成人在线网站| 国产a久久麻豆| 欧美一激情一区二区三区| 伊人开心综合网| 顶级嫩模精品视频在线看| 精品免费视频一区二区| 天天综合色天天综合色h| 欧美在线观看一区二区| 成人欧美一区二区三区在线播放| 国产传媒欧美日韩成人| 日韩欧美亚洲国产另类| 日日摸夜夜添夜夜添精品视频 | 欧美色精品在线视频| 自拍偷在线精品自拍偷无码专区| 国产麻豆精品一区二区| 2023国产一二三区日本精品2022| 蜜臀a∨国产成人精品| 欧美久久久久中文字幕| 亚洲成人免费影院| 9191久久久久久久久久久| 视频一区二区不卡| 欧美一区二区高清| 蜜桃视频一区二区三区| 欧美大片在线观看一区二区|