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

📄 libdes.doc

📁 早期freebsd实现
💻 DOC
字号:
	How to use the Kerberos encryption library.			Revised		10/15/85	spm1)	The following include file is needed:		/projects/auth/include/des.h	(VAX)	---------------					(PC8086)2)	The encryption library that should be linked to is:		/projects/auth/lib/libdes.a		(VAX)|	/projects/auth/ibm/lib/libdes.a	(PC8086 cross-compilation environment)3)	For each key that may be simultaneously active,	allocate (either compile or malloc) a "Key_schedule" struct, 	defined in "des.h"4)	Create key schedules, as needed, prior to using the encryption	routines, via "des_set_key()".5)  Setup the input and output areas.  Make sure to note the restrictions	on lengths being multiples of eight bytes.6)	Invoke the encryption/decryption routines, "ecb_encrypt()"	 or "cbc_encrypt()"7)	To generate a cryptographic checksum, use "cbc_cksum()"/*	----------------------------------------------------------------	*/		Routine Interfaces--/*	-----------------------------------------------------------------	*/int	des_set_key(k,schedule)		C_Block			*k;		Key_schedule	schedule;	Calculates a key schedule from (all) eight bytes of the input key, and	puts it into the indicated "Key_schedule" struct;	Make sure to pass valid eight bytes, no padding or other processing	it done.	The key schedule is then used in subsequent encryption/decryption	operations.  Many key schedules may be created and cached for later	use.	The user is responsible to clear keys and schedules no longer needed	to prevent their disclosure.|	Checks the parity of the key provided, to make sure it is odd per|	FIPS spec.  Returns 0 value for key ok, 1 for key_parity error./*	----------------------------------------------------------------	*/	int	ecb_encrypt(input,output,schedule,encrypt)		C_Block			*input;		/* ptr to eight byte input value */		C_Block			*output;	/* ptr to eight byte output value */		int				encrypt;	/* 0 ==> decrypt, else encrypt */		Key_schedule	schedule;	/* addr of key schedule */This is the low level routine that encrypts or decrypts a single 8-byteblock in electronic code book mode.  Always transforms the inputdata into the output data.If encrypt is non-zero, the input (cleartext) is encrypted into theoutput (ciphertext) using the specified key_schedule, pre-set via "des_set_key".If encrypt is zero, the input (now ciphertext) is decrypted intothe output (now cleartext).Input and output may be the same space.Does not return any meaningful value.  Void is not used for compatibilitywith other compilers./*	--------------------------------------------------------------	*/int		cbc_encrypt(input,output,length,schedule,ivec,encrypt)		C_Block			*input;		/* ptr to input data */		C_Block			*output;	/* ptr to output data */		int				length;		/* desired length, in bytes */		Key_schedule	schedule;		/* addr of precomputed schedule */		C_Block			*ivec;		/* pointer to 8 byte initialization									 * vector									 */		int				encrypt		/* 0 ==> decrypt; else encrypt*/	If encrypt is non-zero, the routine cipher-block-chain encrypts	the INPUT (cleartext) into the OUTPUT (ciphertext) using the provided	key schedule and initialization vector.  If the length is not an integral	multiple of eight bytes, the last block is copied to a temp and zero 	filled (highest addresses).  The output is ALWAYS an integral multiple	of eight bytes.	If encrypt is zero, the routine cipher-block chain decrypts the INPUT	(ciphertext) into the OUTPUT (cleartext) using the provided key schedule	and	initialization vector.	Decryption ALWAYS operates on integral	multiples of 8 bytes, so will round the length provided up to the	appropriate	multiple. Consequently,	it will always produce the rounded-up	number of bytes of output cleartext. The application must determine if	the output cleartext was zero-padded due to cleartext lengths not integral	multiples of 8.	No errors or meaningful value are returned.  Void is not used for	compatibility with other compilers./* cbc checksum (MAC) only routine  ---------------------------------------- */int		cbc_cksum(input,output,length,schedule,ivec)	C_Block		 	*input;		/* >= length bytes of inputtext	 */	C_Block		 	*output;	/* >= length bytes of outputtext */	int				length;		/* in bytes						*/	Key_schedule	schedule;	/* precomputed key schedule	   */	C_Block			*ivec;		/* 8 bytes of ivec			   */	Produces a cryptographic checksum, 8 bytes, by cipher-block-chain	encrypting the input, discarding the ciphertext output, and only retaining	the last ciphertext 8-byte block.  Uses the provided key schedule and ivec.	The input is effectively zero-padded to an integral multiple of	eight bytes, though the original input is not modified.	No meaningful value is returned.  Void is not used for compatibility	with other compilers./*	random_key ----------------------------------------*/int	random_key(key)	C_Block	*key;	The start for the random number generated is set from the current time	in microseconds, then the random number generator is invoked	to create an eight byte output key (not a schedule).  The key	generated is set to odd parity per FIPS spec.	The caller must	supply space for the output key, pointed to 	by "*key", then after getting a new key, call the des_set_key() 	routine when needed.	No meaningfull value is returned.  Void is not used for compatibility	with other compilers./* string_to_key --------------------------------------------*/int	string_to_key(str,key)	register char		*str;	register C_Block	*key;	This routines converts an arbitrary length, null terminated string	to an 8 byte DES key, with each byte parity set to odd, per FIPS spec.	The algorithm is as follows:|	Take the first 8 bytes and remove the parity (leaving 56 bits).|	Do the same for the second 8 bytes, and the third, etc.  Do this for|	as many sets of 8 bytes as necessary, filling in the remainder of the|	last set with nulls.  Fold the second set back on the first (i.e. bit|	0 over bit 55, and bit 55 over bit 0).  Fold the third over the second|	(bit 0 of the third set is now over bit 0 of the first set).  Repeat|	until you have done this to all sets.  Xor the folded sets.  Break the|	result into 8 7 bit bytes, and generate odd parity for each byte.  You|	now have 64 bits.  Note that DES takes a 64 bit key, and uses only the|	non parity bits./* read_password -------------------------------------------*/read_password(k,prompt,verify)	C_Block	*k;	char *prompt;	int	verify;This routine issues the supplied prompt, turns off echo, if possible, andreads an input string.  If verify is non-zero, it does it again, for usein applications such as changing a password. If verify is non-zero, bothversions are compared, and the input is requested repeatedly until theymatch.  Then, the input string is mapped into a valid DES key, internallyusing the string_to_key routine.  The newly created key is copied to thearea pointed to by parameter "k".  No meaningful value is returned.  If an error occurs trying to manipulatethe terminal echo, the routine forces the process to exit./* get_line ------------------------*/long get_line(p,max)	char	*p;	long	max;Reads input characters from standard input until either a newline appears orelse the max length is reached.  The characters read are stuffed intothe string pointed to, which will always be null terminated.  The newlineis not inserted in the string.  The max parameter includes the byte neededfor the null terminator, so allocate and pass one more than the maximumstring length desired.

⌨️ 快捷键说明

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