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

📄 sctint.c

📁 SecuDe是一个由安全应用程序接口组成,对验证机制、证件处理、PEM、X.400报文处理和密钥管理提供支持。SecuDe提供DES、 RSA杂凑函数、密钥生成以及数字签名的生成和核实等多种密码机制。
💻 C
📖 第 1 页 / 共 4 页
字号:
/*-------------------------------------------------------+-----*//*							 | GMD *//*   SYSTEM   STAMOD  -  Version 2.0			 +-----*//*							       *//*-------------------------------------------------------------*//*							       *//*    PACKAGE	SCTINT			VERSION 2.0	       *//*					   DATE November 1991  *//*					     BY Levona Eckstein*//*							       *//*    FILENAME					               *//*	sctint.c		         		       *//*							       *//*    DESCRIPTION					       *//*	SCT - Interface - Module			       *//*							       *//*    EXPORT		    DESCRIPTION 		       *//*	sct_reset()	      Reset SmartCard terminal	       *//*							       *//*	sct_interface()       Send Command / receive response  *//*							       *//*	sct_perror()	      Print error message	       *//*							       *//*	sct_info()	      information about sct/sc	       *//*							       *//*	sct_list()	      list of installed sct's          *//*							       *//*      sct_close()           close port of SCT                *//*							       *//*      sct_secure()          set sessionkey                   *//*							       *//*      sct_setmode()         set security mode DTE-SCT        *//*							       *//*      sct_get_errmsg()      get SCT error message            *//*              					       *//*	sct_errno	      error number		       *//*							       *//*	sct_errmsg	      address of error message	       *//*							       *//*	sct_tester	      send sct-apdu / receive sct_apdu *//*			      (only for sct tester )	       *//*	sctint.h					       *//*							       *//*	sctrc.h 					       *//*							       *//*							       *//*							       *//*    IMPORT		    DESCRIPTION 		       *//*							       *//*	sta_aux_bytestr_free  release byte-buffer	       *//*							       *//*	sta_aux_elemlen       eleminate length field in resp.  *//*							       *//*	SCTcreate	      create S-Command		       *//*							       *//*	SCTerr		      error-handling		       *//*							       *//*	SCTcheck	      check 1 or 3 bytes	       *//*							       *//*	SCTstatus	      send S_STATUS      	       *//*							       *//*	SCTresponse           analyse the response	       *//*							       *//*	get_orgelem	      read org. element out of install *//*			      file			       *//*							       *//*	get_idelem	      read element out of sct-list     *//*							       *//*	cr_sctlist	      create sct-list		       *//*							       *//*     pr_element                print sct-element if TRACE    *//*                                                             *//*	COMinit 	      Port-Initialisation	       *//*							       *//*	COMreset	      Port-Reset		       *//*							       *//*	COMtrans	      Transfer of S-APDU               *//*							       *//*	COMclose	      Close port		       *//*							       *//*  Aenderungen Viebeg Beginn				       *//*   sca_write_SCT_config()	Encrypt and write configuration*//*				data for the specified SCT.    *//*  Aenderungen Viebeg Ende				       *//*							       *//*-------------------------------------------------------------*//*-------------------------------------------------------------*//*   include-Files					       *//*-------------------------------------------------------------*/#include <stdio.h>#ifdef PROCDAT#include "secsc.h"#else#include "sca.h"#endif 	/* PROCDAT */#include "sctint.h"#include "sctrc.h"#include "sctmsg.h"#include "sctmem.h"#include "sctport.h"#include "error.h"		/* transmission module */#ifdef MAC#include "baud.h"#endif/*-------------------------------------------------------------*//*   extern declarations				       *//*-------------------------------------------------------------*/extern unsigned int tp1_err;	/* error-variable from transmission module */extern int      COMinit();extern int      COMreset();extern int      COMtrans();extern int      COMclose();extern struct s_portparam *p_lhead;	/* Begin of sct_list from sctmem.c */extern struct s_portparam *get_idelem();extern int      cr_sctlist();extern int      get_orgelem();extern void     pr_element();extern void     sta_aux_bytestr_free();extern void     sta_aux_elemlen();extern char    *SCTcreate();extern int      SCTerr();extern int      SCTcheck();extern int      SCTstatus();extern int      SCTresponse();#ifdef PROCDATextern int	sca_write_SCT_config();#endif	/* PROCDAT *//*-------------------------------------------------------------*//*   type definitions					       *//*-------------------------------------------------------------*/#ifdef BSD/* #define B19200 14 */#include <sys/ttydev.h>#endif#ifdef SYSTEMV/* #define B19200 14 */#include <sys/ttydev.h>#endif#ifdef __HP__#ifdef SYSV#include <termio.h>#else#include <sgtty.h>#endif#endif#define BITNULL		(BitString *)0/*-------------------------------------------------------------*//*   globale variable definitions			       *//*-------------------------------------------------------------*/unsigned int    sct_errno;	/* error variable		 */char           *sct_errmsg;	/* error message		 *//*-------------------------------------------------------------*//*   lokale Variable definitions			       *//*-------------------------------------------------------------*/#ifdef STREAMstatic BOOL     first = FALSE;	/* FLAG, if Trace-File open	 */FILE           *sct_trfp;	/* Filepointer of trace file    */#endifstatic BOOL     resfirst = FALSE;	/* FLAG, if sct_reset already called */static char     fermat_f4[3] = {'\001', '\000', '\001'};	/* public exponent                  */static int      fermat_f4_len = 3;/*--------------------------------------------------------*//*						    | GMD *//*						    +-----*//* PROC  sct_reset	     VERSION   2.0		  *//*				DATE   November 1991	  *//*				  BY   L.Eckstein,GMD	  *//*							  *//* DESCRIPTION						  *//*  Reset Smartcard Terminal				  *//*  If this function is called the first time, then	  *//*  the installation file will be opened and the	  *//*  sct-list for further use will be created.		  *//*							  *//*  Aenderungen Viebeg Beginn				  *//*							  *//*  Save SCT configuration data in a file		  *//*  Aenderungen Viebeg Ende				  *//*							  *//*							  *//*							  *//*							  *//* IN			     DESCRIPTION		  *//*   sct_id		       SCT identifier		  *//* OUT							  *//*							  *//*							  *//*							  *//* RETURN		     DESCRIPTION		  *//*   0	         	       o.k			  *//*  -1			       error			  *//*							  *//*				ENOSHELL		  *//*                              EOPERR                    *//*			        EEMPTY                    *//*                              EMEMAVAIL                 *//*                              ECLERR                    *//*                              ESIDUNK                   *//*                              ERDERR                    *//*                              EINVARG			  *//*                              ETOOLONG		  *//*                              sw1/sw2 from SCT response *//*                              T1 - ERROR                *//*                                                        *//* CALLED FUNCTIONS					  *//*  cr_sctlist						  *//*  get_idelem						  *//*  get_orgelem						  *//*  COMinit						  *//*  COMclose						  *//*  COMreset						  *//*  sct_interface					  *//*  sta_aux_bytestr_free				  *//*  Aenderungen Viebeg Beginn				       *//*   sca_write_SCT_config()	Encrypt and write configuration *//*				data for the specified SCT.     *//*  Aenderungen Viebeg Ende				       *//*  							  *//*--------------------------------------------------------*/intsct_reset(sct_id)	int             sct_id;	/* SCT identifier 	 */{	/*----------------------------------------------------------*/	/* Definitions					       */	/*----------------------------------------------------------*/	int             i;	struct s_portparam *p_elem;	unsigned int    sw1 = 0;	Bytestring      response;	Request         request;	int             baud;	int             databits;	int             stopbits;	char           *p;	int             div = 19200;	int             index;	int             resetbaud;#ifdef PROCDAT	char           *proc = "sct_reset";#ifdef SECSCTEST	fprintf(stderr, "SECSC-Function: %s\n", proc);#endif#endif 	/* PROCDAT */	/*----------------------------------------------------------*/	/* Statements					       */	/*----------------------------------------------------------*/	/*------------------------------------*/	/* Initialisation			 */	/*------------------------------------*/	sct_errno = 0;#ifdef STREAM	if (!first) {		sct_trfp = fopen("SCTINT.TRC", "wt");		first = TRUE;	};#endif	/*------------------------------------*/	/* Create sct_list			 */	/*------------------------------------*/	if (!resfirst) {	/* create sct-list */		if (cr_sctlist() == -1)			return (S_ERR);		resfirst = TRUE;	};	/*------------------------------------------*/	/* test, if sct_id refers to a sct element  */	/*------------------------------------------*/	if ((p_elem = get_idelem(sct_id)) == PORTNULL)		return (S_ERR);	/* ERROR: sct not in sct-list */#ifdef MEMTRACE	fprintf(sct_trfp, "Element after get_idelem in sct_reset\n");	pr_element(sct_trfp, p_elem);#endif#ifdef PROCDAT	/*	 *  If a previous process has already resetted the SCT and	 *     the SC has already been inserted         *     => don't reset port again	 */	if ((p_elem->sc_request == TRUE) && 	    (p_elem->schistory != NULL) && (strlen(p_elem->schistory) != 0) &&	    (p_elem->port_id > 0)) {		return (S_NOERR);		/* reset already done by a previous process*/	}#endif 	/*PROCDAT */	/*------------------------------------*/	/* set sad, dad in sct_element	 */	/*------------------------------------*/	p_elem->sad = SAD;	p_elem->dad = DAD;	/*------------------------------------*/	/* call COMinit - procedure		 */	/*------------------------------------*/	if (p_elem->port_id > 0)		COMclose(p_elem->port_id);#ifdef TRACE	fprintf(sct_trfp, "CALL get_orgelem in sct_reset before COMinit\n");#endif	if (get_orgelem(sct_id, p_elem) == -1)		return (S_ERR);	if ((COMinit(p_elem)) == -1)		return (SCTerr(sw1, tp1_err));#ifdef SECSCTEST		fprintf(stderr, "(sct_reset) Port: %d for SCT: %d opened\n", p_elem->port_id, sct_id);#endif	/*------------------------------------*/	/* send RESET - Command		 */	/*------------------------------------*/	if (sct_interface(sct_id, S_RESET, &request, &response) == -1)		return (S_ERR);	/*------------------------------------*/	/* set reset-values in p_elem	 */	/*------------------------------------*/	baud = p_elem->baud;	databits = p_elem->databits;	stopbits = p_elem->stopbits;	p = response.bytes;	p_elem->dataformat = *p++;	p_elem->protocoltype = *p++;	p_elem->bwt = *p++;	p_elem->cwt = *p++;	p_elem->chaining = (Chain) * p++;	p_elem->baud = 0;	p_elem->baud = ((((int) *p++) & 0xff) << 8);	p_elem->baud += (((int) *p++) & 0xFF);#ifdef DOS	p_elem->baud = (div / p_elem->baud) * 6;#endif	/*------------------------------------*/	/* release response-buffer		 */	/*------------------------------------*/	sta_aux_bytestr_free(&response);#ifdef BSD	/*------------------------------------*/	/* test baudrate			 */	/*------------------------------------*/	if (p_elem->baud < 2400) {

⌨️ 快捷键说明

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