⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shift.c

📁 SecuDe是一个由安全应用程序接口组成,对验证机制、证件处理、PEM、X.400报文处理和密钥管理提供支持。SecuDe提供DES、 RSA杂凑函数、密钥生成以及数字签名的生成和核实等多种密码机制。
💻 C
字号:
/* *  SecuDE Release 4.1 (GMD) *//******************************************************************** * Copyright (C) 1991, GMD. All rights reserved.                    * *                                                                  * *                                                                  * *                         NOTICE                                   * *                                                                  * *    Acquisition, use, and distribution of this module             * *    and related materials are subject to restrictions             * *    mentioned in each volume of the documentation.                * *                                                                  * ********************************************************************//* *	shift(OPa,exp2b,result) */#include "arithmetic.h"void _shift(A, exp2b, S)	L_NUMBER        A[], S[];	int             exp2b;{	register int    wordshift;	register int    bitshift;	register int    left = exp2b > 0;	register int    right = exp2b < 0;	register L_NUMBER cnt;	register L_NUMBER *Ap;	register L_NUMBER *Sp;	register int    WLmBITS;	register L_NUMBER dH;	register L_NUMBER dL;	if (right) {		bitshift = (-exp2b) & (WLNG - 1);		WLmBITS = WLNG - bitshift;		wordshift = (-exp2b) >> SWBITS;		cnt = lngofln(A) - wordshift;		if (cnt <= 0) {			lngofln(S) = 0;			return;		}		Sp = S;		Ap = A + wordshift;		lngofln(S) = cnt;		dH = dL = *++Ap;		for (; cnt > 1; cnt--) {			dH = *++Ap;			if (bitshift) {				*++Sp = (dH << WLmBITS) | (dL >> bitshift);				dL = dH;			} else				*++Sp = dH;		}		dH >>= bitshift;		if (dH)			*++Sp = dH;		else			lngofln(S)--;		return;	}	if (left) {		cnt = lngofln(A);		bitshift = (exp2b) & (WLNG - 1);		WLmBITS = WLNG - bitshift;		wordshift = (exp2b) >> SWBITS;		lngofln(S) = wordshift + cnt;		Sp = S + lngofln(S);		Ap = A + cnt;		dH = dL = *Ap;/* sparc arch can't handle shifs with word length !!! */		if (bitshift) {			if (dL >>= WLmBITS) {				lngofln(S)++;				*(Sp + 1) = dL;			}		} else			dL = 0;		for (; cnt > 1; cnt--) {			dL = *--Ap;			if (bitshift)				*Sp-- = (dH << bitshift) | (dL >> WLmBITS);			else				*Sp-- = dH;			dH = dL;		}		*Sp-- = dH << bitshift;		for (; Sp > S; Sp--)			*Sp = 0;		return;	}	trans(A, S);	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -