2754 lines
94 KiB
C
2754 lines
94 KiB
C
/***************************************************************************
|
||
* 文件: DCSH_SAE_1.h
|
||
*
|
||
* 功能说明: 动联动态安全认证引擎1.0头文件
|
||
*
|
||
* 版权所有:上海动联信息技术有限公司
|
||
*
|
||
* 作者: 杨波
|
||
* 时间: 2008年5月13日
|
||
* 地点: 上海 动联
|
||
*
|
||
***************************************************************************/
|
||
/*-------------------------------------------------------------------------
|
||
*修改记录*
|
||
*修改时间* *修改内容*
|
||
*
|
||
-------------------------------------------------------------------------
|
||
*备注:
|
||
* 此头文件内只允许申明,不可定义
|
||
* 此头文件内所有改动均需详细说明
|
||
*
|
||
-------------------------------------------------------------------------*/
|
||
|
||
|
||
|
||
#ifndef _DCSH_SAE_1_H
|
||
#define _DCSH_SAE_1_H
|
||
|
||
|
||
#ifdef DCSHCOREAPI_EXPORTS
|
||
#define DCSHCOREAPI_API __declspec(dllexport)
|
||
#else
|
||
#define DCSHCOREAPI_API __declspec(dllimport)
|
||
#endif
|
||
/*
|
||
|
||
#define DCSHCOREAPI_API
|
||
*/
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define int8 char
|
||
#define int16 short
|
||
#define int32 long
|
||
#define uint8 unsigned char
|
||
#define uint16 unsigned short
|
||
#define uint32 unsigned int
|
||
#define uint unsigned int
|
||
#define BYTE unsigned char
|
||
#define WORD unsigned short
|
||
#define DWORD unsigned long
|
||
#define UCHAR unsigned char
|
||
#define UINT unsigned int
|
||
#define LONG long
|
||
#define ULONG unsigned long
|
||
#define VOID void
|
||
#define PVOID void *
|
||
|
||
#ifndef TRUE
|
||
#define TRUE 1
|
||
#define FALSE 0
|
||
#endif
|
||
|
||
//动态认证引擎的系统默认值
|
||
#define SYSTEMPIN "888888" /* 系统默认的PIN*/
|
||
#define TOTALSECONDS 0x47791200 /* 2008年1月1日00点00时00分,流失的秒*/
|
||
#define DCPVTLEN 232 /* 私有数据长度*/
|
||
#define SEEDLEN 16 /* 种子的长度,建议使用128位,经常用于密钥*/
|
||
#define EX_SEEDLEN 4 /* 种子的扩展,支持20字节*/
|
||
#define MAXSEEDLEN 20 /* 系统支持的最大种子长度,建议64,目前使用20*/
|
||
#define MAXOFFSETSECONDS 43200 /* (12*60*60)秒, 偏移量超过12小时,无论是否认证通过,应该永久禁用*/
|
||
#define ONEDAYSECONDS 86400 /* (24*60*60)秒, 一天的秒数,用于获得动态口令 */
|
||
#define TWOWEEKSECONDS 1209600 /* (14*24*60*60)秒,相距2周未登陆,则窗口自动扩展1,但最大不超过大窗口*/
|
||
#define ONEWEEKSECONDS 604800 /* (7*24*60*60)秒,相距1周未登陆,动联需要时间补偿*/
|
||
#define MAXRESYNCHTIMES 1000 //事件型令牌重新同步最大寻找次数
|
||
//事件型令牌在重新同不是分两种方式:
|
||
//1、计数从1开始,到MAXRESYNCHTIMES 中寻找
|
||
//2、从当前最后一次有效计数,到MAXRESYNCHTIMES中寻找
|
||
#define SM3HASHSTRINGLENGTH 64 //SM3算法的令牌的明文组装空间,格式参考《时间同步一次性口令认证系统标准0702》
|
||
#define DATETIMESTRINGLEN 13 //SM3算法的日期转换,12字节,最末尾第13字节为间隔的商
|
||
#define THANDELTATIMES 3 //前一次使用的时间至少是此次时间差的3倍,用于时间补偿
|
||
#define GETTOKENCODESTRHEAD "%010u:%03u:%03u:%010u:" //"起始时间:令牌间隔:动态口令长度:动态口令个数:动态口令集合"
|
||
|
||
|
||
/*定义算法*/
|
||
#define ALGORITHM_SHA1 0x01 /* 产生20字节摘要 */
|
||
#define ALGORITHM_RC6 0x02 /* 块加密,速度快*/
|
||
#define ALGORITHM_SM3 0x03 /* SM3,类似SHA1,复旦微电子 */
|
||
#define ALGORITHM_AES 0x04 /* 块加密,标准算法*/
|
||
#define ALGORITHM_ATM 0x00 /* 支持ATM机方式的挑战应答,带时间*/
|
||
#define ALGORITHM_ATM_MD5 0x05 /* 支持ATM机方式的挑战应答,带时间,用户口令使用MD5摘要*/
|
||
#define ALGORITHM_ATM_SHA1 0x06 /* 支持ATM机方式的挑战应答,带时间,用户口令使用SHA1摘要*/
|
||
#define ALGORITHM_HMAC 0x08 /* OTP,产生20字节摘要 */
|
||
#define ALGORITHM_YQ 0x10 /* AES,使用新的截取方式 */
|
||
#define ALGORITHM_COS 0x20 /* HMAC,cos的sim卡方式 */
|
||
#define ALGORITHM_ASP 0x30 /* 卓望SIM卡令牌,使用HMAC */
|
||
#define ALGORITHM_UNI 0x07 /* 联通SIM卡令牌,使用HMAC,但是截取规则不一样 */
|
||
#define ALGORITHM_TOTP 0x09 /* 工商银行使用的时间型OTP,OTP的时候等同ALGORITHM_HMAC,挑战则追加时间 */
|
||
#define ALGORITHM_SSM3 0x11 /* SM3算法,国密办刚公开,软算法,依然采用原先的规则 */
|
||
|
||
#define STRLENLOGID 48 /*LoginId的长度*/
|
||
#define STRLENAME 24 /*UserName的长度*/
|
||
#define GMTSTRLEN 24 /*时间字符的长度 GMT 2008-05-14 04:09:22*/
|
||
#define URGENCYPWLEN 20 /*紧急密码的最大长度*/
|
||
|
||
#define DCSH_MIN_PIN_LEN 4 /*Pin的最小长度*/
|
||
#define DCSH_MAX_PIN_LEN 8 /*Pin的最大长度*/
|
||
#define DCSH_PIN_LEN 12 /*Pin的长度空间,限制为4-8*/
|
||
#define DCSH_SN_LEN 12 /*序列号最大长度*/
|
||
#define DCSH_PRN_LEN 12 /*tokencode最大长度*/
|
||
#define DCSH_RESPONSE_LEN 16 /*用户响应码,可能包含PIN*/
|
||
#define DCSH_CHALLENGE_LEN 16 /*挑战码,建议8字节*/
|
||
#define UNLOCKCODELEN 8 /*解锁码的长度为8个数字*/
|
||
#define HMACQUESTIONLEN 8 /*挑战应答,HMAC算法的question长度一定为8*/
|
||
#define HOSTBYTELEN 12 /*取12个字节,使用最后4/6位*/
|
||
#define UNICOMMODLEN 1000 /*取摸,获得3个数字,不足则前端补零 */
|
||
#define UNICOMNUMBER 3 /*每个Short取模后最大数字为3个*/
|
||
|
||
#define OCRASUITE "OCRA-1:HOTP-SHA1-6:QN08" /* 挑战应答的规则 */
|
||
#define OCRASUITE_ICBC "OCRA-1:HOTP-SHA1-6:QA64-T" /* 工商银行挑战应答时间型令牌的规则 */
|
||
#define SM3OCRASUITE "OCRA-1:HOTP-SM3-8:QN08" /* SM3算法的挑战应答规则 */
|
||
|
||
//令牌类型
|
||
#define DCSH_TOKEN_TYPE_TIME 0 /*时间类型的令牌*/
|
||
#define DCSH_TOKEN_TYPE_EVENT 1 /*事件类型的令牌*/
|
||
#define DCSH_TOKEN_TYPE_MOBILE 2 /*手机类型的令牌, 动联专用*/
|
||
|
||
//令牌的应用类型
|
||
#define DCSH_HARDWARE_TOKEN_DC 1 /*动联生产的硬件令牌*/ //目前我们在做的,专门特指K5令牌
|
||
#define DCSH_HARDWARE_TOKEN_DC_EX 2 /*动联生产的令牌和 其他厂商的扩展*/
|
||
//主要使用了另一种传递参数方式
|
||
//支持杭州驭强的令牌 --AES
|
||
//支持cos的SIM卡令牌 --COS
|
||
//支持复旦微电子的SM3令牌,可能成为行业标准 --SM3
|
||
//动联自己的令牌
|
||
//卓望和联通的SIM卡令牌
|
||
|
||
#define DCSH_HARDWARE_TOKEN_CHR 3 /*异步类型的硬件令牌*/ //挑战应答,RSA有一款
|
||
#define DCSH_SOFTWARE_TOKEN_DC 4 /*动联生产的软件令牌*/ //标志位区分,等同于DCSH_HARDWARE_TOKEN_DC_EX
|
||
#define DCSH_SOFTWARE_TOKEN_PHONE 5 /*手机令牌 */ //标志位区分,等同于DCSH_HARDWARE_TOKEN_DC_EX
|
||
#define DCSH_SOFTWARE_TOKEN_CHR 6 /*异步类型的软件令牌*/ //用于手机异步令牌
|
||
#define DCSH_SOFTWARE_TOKEN_SMS 7 /*短信类型的软件令牌*/ //短信令牌
|
||
#define DCSH_HARDWARE_TOKEN_COVER 8 /*刮刮卡令牌*/
|
||
#define DCSH_HARDWARE_TOKEN_ATM 9 /*属于异步类型的令牌*/ //为银行ATM输入用户密码到令牌上
|
||
#define DCSH_SOFTWARE_TOKEN_ATM 10 /*属于异步软件令牌*/ //为银行ATM软件令牌,可用于手机和软件
|
||
#define DCSH_HARDWARE_TOKEN_SIM 11 /*卓望和联通的SIM卡令牌也单独列为应用类型,也可属于DC_EX*/
|
||
#define DCSH_HARDWARE_TOKEN_GETDC 12 /*K5 该令牌类型支持获取动态口令,建议该类型不用于认证*/
|
||
#define DCSH_HARDWARE_TOKEN_GETEX 13 /*K8 该令牌类型支持获取动态口令,建议该类型不用于认证*/
|
||
|
||
|
||
//认证类型
|
||
#define DCSH_PRN_TYPE 0 /*直接使用tokencode认证*/
|
||
#define DCSH_PASSCODE_TYPE 1 /*带PIN的tokencode认证 */
|
||
#define DCSH_CHALLENGE_RESPONSE_TYPE 2 /*挑战响应的认证方式 */
|
||
#define DCSH_PASSCODE_NEXT_TYPE 3 /*需要返回下一个tokencode的认证方式*/
|
||
#define DCSH_SMS_GETPRN_TYPE 4 /*短消息认证,获得tokencode*/
|
||
#define DCSH_SMS_PRN_TYPE 5 /*短消息认证,认证tokencode*/
|
||
#define DCSH_MSCHAP2_PASSCODE_TYPE 6 /*使用MS-Chap v2的认证方式,由引擎计算tokencode来验证*/
|
||
#define DCSH_MSCHAP2_CHANGE_PW_TYPE 7 /*修改令牌的PIN码*/
|
||
#define DCSH_SIGN_PRN_TYPE 8 /*数字签名的动态认证方式*/
|
||
#define DCSH_GET_SIGN_PRN_TYPE 9 /*获得签名口令,可用于短信数字签名方式*/
|
||
#define DCSH_COVER_GET_HOSTCODE_TYPE 10 /*获得刮刮卡的当前计数的主机码*/
|
||
#define DCSH_COVER_HOST_PRN_TYPE 11 /*刮刮卡码认证,包含主机字符 动态口令 PIN*/
|
||
#define DCSH_CHALLENGE_RESPONSE_ATM_TYPE 12 /*ATM用户密码的挑战应答认证模式,用户密码支持摘要算法 */
|
||
|
||
//认证状态,认证模式
|
||
#define DCSH_LOGON_STATE_FIRST_LOGIN 1
|
||
#define DCSH_LOGON_STATE_NORMAL 2
|
||
#define DCSH_LOGON_STATE_NEXT_TOKENCODE 3
|
||
#define DCSH_LOGON_STATE_NEXT_TOKENCODE_2 4
|
||
|
||
#define DCSH_MAX_PINTIMES 3 /*最大Pin输入错误次数*/
|
||
#define DCSH_MAX_THRESOLD 10 /*最大tokencode错误次数,超过进入next模式*/
|
||
#define DCSH_MAX_REPEATED 5 /*允许重放次数,超过则禁用*/
|
||
|
||
#define ICBC_ACTIVECHECKCODELEN 12 /* 工行令牌种子激活码的长度12,前6激活,后6校验 */
|
||
#define ICBC_ACTIVECODELEN 6 /* 工行令牌种子真正激活码6 */
|
||
#define ICBC_ACTIVECODECALCLEN 8 /* 工行令牌种子真正激活码6带入运算时的真实长度8 */
|
||
#define ICBC_CHECKCODELEN 6 /* 工行令牌种子真正校验码长度6 */
|
||
#define ICBC_PINLOCKCODELEN 8 /* 工行令牌PIN输入错误锁定后锁定码长度 */
|
||
#define ICBC_PINUNLOCKCODELEN 6 /* 工行令牌解锁码长度 */
|
||
|
||
|
||
#define DCSHEMSUCCESS 0 //验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
#define DCSHEMFIRST 1 //第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
#define DCSHEMBADARG 2 //参数错误,参数可能为空指针
|
||
#define DCSHEMBADREC 3 //严重错误!PDATA内部数据有问题,如签名等
|
||
#define DCSHEMPRNLEN 4 //Tokencode的长度错误
|
||
#define DCSHEMTIMRNG 5 //passcode时间错误,不在生命期限内
|
||
#define DCSHEMNOTASSIGNED 6 //令牌还没有分配
|
||
#define DCSHEMDISABLE 7 //令牌处于禁用状态
|
||
#define DCSHEMFOREVERDISABLE 8 //令牌被永久禁用,可能是时间偏移超过12小时
|
||
#define DCSHEMNOPIN 9 //没有输入pin码
|
||
#define DCSHEMPINLEN 10 //输入的PIN长度错误
|
||
#define DCSHEMBADPIN 11 //输入错误的PIN
|
||
#define DCSHEMSTOLEN 12 //因为PIN错误次数到达极限,默认为丢失
|
||
#define DCSHEMOUTWIND 13 //在任何窗口内找不到tokencode,可能需要再同步
|
||
#define DCSHEMREPPRN 14 //这是重放,需要小心,应该立即记录,并提醒管理员
|
||
#define DCSHEMREPDISABLE 15 //重放到一定的次数则禁用
|
||
#define DCSHEMNEXTPRN 16 //进入Next的模式
|
||
#define DCSHEMTHRESHOLDNXT 17 //输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
#define DCSHEMBADNEX 18 //在Next模式下输入错了tokencode
|
||
#define DCSHEMNEXTDISABLE 19 //在Next模式下输入错误次数到达极限,被禁用
|
||
#define DCSHEMSYN1OK 20 //重新同步模式下,第一次匹配tokencode已经找到
|
||
#define DCSHEMFIRSTDISABLE 21 //在First模式下,多次输入失败,则禁用
|
||
#define DCSHEMBADNEX2 22 //在Next2下输入错误的tokencode
|
||
#define DCSHEMBADINPUT 23 //文件无法打开
|
||
#define DCSHEMNOMEM 24 //读取BIN文件,没有足够的内存空间
|
||
#define DCSHEMBADINPFIL 25 //BIN的文件内容错误,严重错误
|
||
#define DCSHEMBADSIG 26 //BIN文件签名错误,严重错误
|
||
#define DCSHEMEMPNAME 27 //文件名称错误
|
||
#define DCSHEMKEYPAIRERR 28 //密钥对创建失败
|
||
#define DCSHEMCERTERR 29 //根证书创建失败
|
||
#define DCSHEMSEEDERR 30 //创建种子失败
|
||
#define DCSHEMREADPUBKEYERR 31 //读取公钥失败
|
||
#define DCSHEMPUBKEYENCERR 32 //公钥加密失败
|
||
#define DCSHEMREADSEEDERR 33 //读根种子文件失败
|
||
#define DCSHEMREADPRIKEYERR 34 //读根私钥失败
|
||
#define DCSHEMPRIKEYDECERR 35 //根私钥解密失败
|
||
#define DCSHEMREADPKCS10ERR 36 //读取PKCS#10文件错误
|
||
#define DCSHEMTOKENTYPE 37 //错误的令牌应用类型
|
||
#define DCSHEMREADROOTCERTERR 38 //读取根证书失败
|
||
#define DCSHEMDECROOTCERTERR 39 //解析根证书失败
|
||
#define DCSHEMDECPKCS10ERR 40 //解析PKCS#10失败
|
||
#define DCSHEMUSERCERTERR 41 //创建用户证书失败
|
||
#define DCSHEMVERSIGDATAERR 42 //验证签名错误,严重错误
|
||
#define DCSHEMDECEVPDATAERR 43 //解密数字信封错误,严重错误
|
||
#define DCSHEMREADUSERCERTERR 44 //读取用户证书失败
|
||
#define DCSHEMDECUSERCERTERR 45 //解析用户证书失败
|
||
#define DCSHEMEVPDATAERR 46 //制作数字信封失败
|
||
#define DCSHEMSIGDATAERR 47 //制作数字签名失败
|
||
#define DCSHEMREADSEEDFILEERR 48 //读取种子文件失败
|
||
#define DCSHEMPKCS10ERR 49 //创建PKCS#10失败
|
||
#define DCSHEMBADFILETYPE 50 //错误的种子文件类型
|
||
#define DCSHEMRESPONSEERR 51 //挑战认证验证失败
|
||
#define DCSHEMBADTYPE 52 //错误的令牌类型
|
||
#define DCSHEMSNASSIGNED 53 //指定的序列号已经分配,且已经使用
|
||
#define DCSHEMBADURGENCYPW 54 //紧急密码错误
|
||
#define DCSHEMSMSBADPRN 55 //短消息认证,错误的动态口令
|
||
#define DCSHEMSMSTIMEOUT 56 //口令正确,但已经超时
|
||
#define DCSHEMBADGETURGENCYPW 57 //获取紧急密码失败
|
||
#define DCSHEMPKI128 58 //CryptoAPI在公钥加密时偶尔会丢失1字节
|
||
#define DCSHEMLICDEVSNERR 59 //授权,版权控制时设备序列号错误
|
||
#define DCSHEMLICDATEEND 60 //授权,授权文件设定的有效期结束
|
||
#define DCSHEMLICEKEYERR 61 //授权,eKey内部的版权信息错误,严重
|
||
#define DCSHEMLICUSBERROR 62 //授权,usb读eKey错误,设备原因,严重
|
||
#define DCSHEMMSCHAPV2ERROR 63 //ms chap v2 认证,客户端提交nt_response错误
|
||
#define DCSHEMMSCHAPV2ERRORPW 64 //ms chap v2 修改口令,口令存在异常
|
||
#define DCSHEMDEVSNERR 65 //授权,eKey序列号不匹配
|
||
#define DCSHEMDEVFILEERROR 66 //ekey内部文件不存在
|
||
#define DCSHEMFORCESYNTYPE 67 //强制同步的类型错误,应该是只能是事件型
|
||
#define DCSHEMNOTCOVERTYPE 68 //不是刮刮卡令牌类型,不能生成卡片
|
||
#define DCSHEMOVERCOVERNUM 69 //种子生成卡片口令的数量大于最大配置
|
||
#define DCSHEMLASTCOVERNUM 70 //最后一个覆盖区不用于认证,而是用于换卡
|
||
#define DCSHEMCOVERNOTUSED 71 //当前的覆盖区还没有用于认证
|
||
#define DCSHEMMUSTGETCOVER 72 //刮刮卡认证必须先获得主机字符
|
||
#define DCSHEMHOSTCODEERRO 73 //主机字符错误
|
||
#define DCSHEMCOVERCODEERR 74 //覆盖区域的动态口令错误
|
||
#define DCSHEMERRORTODISABLE 75 //多次认证错误,导致令牌被禁用
|
||
#define DCSHEMUPDATECODEERR 76 //刮刮卡更换码错误,即最后一个刮刮卡码错误
|
||
#define DCSHEMBASE64CODEERR 77 //base64编解码错误
|
||
#define DCSHEMURGPWDERR 78 //更改服务码失败
|
||
#define DCSHEMMODIFYSNERR 79 //修改序列号时,序列号输入错误
|
||
#define DCSHEMPCIOPENERR 80 //打开PCI SJK0817E加密卡失败
|
||
#define DCSHEMPCISESSIONERR 81 //创建会话失败,可能PCI中断,也可能达到最大会话数
|
||
#define DCSHEMPCISM3ERR 82 //SM3算法内部错误
|
||
#define DCSHEMNOSUPPORT 83 //该系统不支持该算法,目前SM3仅用于windows
|
||
#define DCSHEMFORCECOUNTERLESS 84 //客户端强制同步服务端计数器时,计数器小于服务器已经使用的
|
||
#define DCSHEMSHECADLLERR 85 //加载sheca的开发接口失败
|
||
#define DCSHEMSHECAKEYERR 86 //驱动sheca的usb-eKey操作异常
|
||
#define DCSHEMPCIOPERERR 87 //加密卡运算操作失败
|
||
#define DCSHEMICBCVALUEERR 88 //工行进行种子异或的数据交验失败
|
||
#define DCSHEMICBCHAVEXOR 89 //工行的种子数据已经异或得到了新的种子数据
|
||
#define DCSHEMSEEDLENERR 90 //种子长度错误,可能是工行的种子有问题
|
||
#define DCSHEMACTIVELENERR 91 //激活码长度错误,6数字,运算长度为8,补0x00,0x00
|
||
#define DCSHEMCHECKLENERR 92 //校验码长度错误,6数字
|
||
#define DCSHEMACTIVCHECKERR 93 //激活校验码错误,12数字
|
||
#define DCSHEMBIGTIMELENERR 94 //运算的时间,大头自序,长度错误
|
||
#define DCSHEMCHANLENERR 95 //挑战的字符串长度错误,工行必须小于64
|
||
#define DCSHENUNLOCKPINERR 96 //令牌解锁码的字符串长度错误,8数字
|
||
#define DCSHENOUTONEDAY 97 //获取动态口令,时间型,超过了24小时
|
||
#define DCSHENOUTMAXCOUNTER 98 //获取动态口令,事件型,超过了1000个
|
||
|
||
|
||
typedef struct CARDREC
|
||
{
|
||
char ucSerialNumber[DCSH_SN_LEN]; /* Token序列号字符表示 */
|
||
char ucUrgencyPassWord[URGENCYPWLEN]; /* 紧急密码 */
|
||
char ucSeedNumber[32]; /* 种子转换的26个数字 */
|
||
} TOKENCARDRECORD, *PTTOKENCARDRECORD;
|
||
|
||
|
||
typedef struct DCSHPDATA {
|
||
unsigned int ulSerialNumber; /* Token序列号 */
|
||
char ucSerialNumber[DCSH_SN_LEN];/* Token序列号字符表示 */
|
||
unsigned int ulPRNLen; /* Tokencode的长度 */
|
||
unsigned int ulInterval; /* 时间间隔,产生tokencode */
|
||
unsigned int ulBirth; /* 出生日期,从 1/1/2008 */
|
||
unsigned int ulDeath; /* 有效期,秒,从 1/1/2008 */
|
||
char cTokenType; /* Token类型 */
|
||
char cIsHardwareToken; /* 是不是硬件 */
|
||
char cAlgorithmSData; /* 算法,私有数据的加密算法 */
|
||
char cAlgorithmToken; /* 算法,tokencode的产生算法*/
|
||
|
||
int iState; /* 状态值,这个非常重要的字段*/
|
||
char cEnabled; /* 是否可用,第一判断要素 */
|
||
char cAssigned; /* 是否分配,第一判断要素 */
|
||
char cNextPRNMode; /* NextToekn模式 */
|
||
char cPINDisabled; /* PIN是否使用 */
|
||
|
||
unsigned int ulLastlogin; /* 最近登陆时间,无论成功失败,秒,从 1/1/2008 */
|
||
|
||
char ucUserLoginID[STRLENLOGID]; /* */
|
||
char ucUserFirstName[STRLENAME]; /* */
|
||
char ucUserLastName[STRLENAME]; /* */
|
||
|
||
int iMaxBadPins; /* Pin优于tokencode认证,每次登陆成功前最大错误次数,超过则disable */
|
||
int iNextTokencodeModeThreshold; /* tokenode错误的极限值,超过该值,则进入Next Token模式 */
|
||
int iMaxRepeateds; /* 监测重放攻击极限值,反复提交先前的tokencode,或者同一时间提交tokencode则理解为重放,达到极限值则禁用 */
|
||
int iMaxBadNextTokencodes; /* 在Next模式下,允许最大错误次数 */
|
||
|
||
int iPrecision; /* 精度,离ulLastSuccessLogin每隔一个月累加精度秒 */
|
||
|
||
int iLargeWindowSeconds; /* 秒 */
|
||
int iMediumWindowSeconds; /* 秒 */
|
||
int iSmallWindowSeconds; /* 秒 */
|
||
|
||
char ucTokenTypeString[8]; /* 令牌的类型描述 */
|
||
int iSeedLen; /* 种子长度,如果是0,则默认为16 */
|
||
char ucReserved[4]; /* 保留字段 */
|
||
unsigned char ucPrivateData[DCPVTLEN]; /* 加密数据-种子 pin等 */
|
||
} TOKENRECORDDATA, *PTTOKENRECORDDATA; /* 424字节 Base64为568字节*/
|
||
|
||
typedef struct DCSHSAE_TOKENRECORD_INFO {
|
||
unsigned int ulSerialNumber; /* Token序列号 */
|
||
char ucSerialNumber[DCSH_SN_LEN];/* Token序列号字符表示 */
|
||
unsigned int ulPRNLen; /* Tokencode的长度 */
|
||
unsigned int ulInterval; /* 时间间隔,产生tokencode */
|
||
unsigned int ulBirth; /* 出生日期,从 1/1/2008 */
|
||
unsigned int ulDeath; /* 有效期,秒,从 1/1/2008 */
|
||
char cTokenType; /* Token类型 */
|
||
char cIsHardwareToken; /* 是不是硬件 */
|
||
char cAlgorithmSData; /* 算法,私有数据的加密算法 */
|
||
char cAlgorithmToken; /* 算法,tokencode的产生算法*/
|
||
|
||
int iState; /* 状态值,这个非常重要的字段*/
|
||
char cEnabled; /* 是否可用,第一判断要素 */
|
||
char cAssigned; /* 是否分配,第一判断要素 */
|
||
char cNextPRNMode; /* NextToekn模式 */
|
||
char cPINDisabled; /* PIN是否使用 */
|
||
|
||
unsigned int ulLastlogin; /* 最近登陆时间,无论成功失败,秒,从 1/1/2008 */
|
||
|
||
char ucUserLoginID[STRLENLOGID]; /* */
|
||
char ucUserFirstName[STRLENAME]; /* */
|
||
char ucUserLastName[STRLENAME]; /* */
|
||
|
||
int iMaxBadPins; /* Pin优于tokencode认证,每次登陆成功前最大错误次数,超过则disable */
|
||
int iNextTokencodeModeThreshold; /* tokenode错误的极限值,超过该值,则进入Next Token模式 */
|
||
int iMaxRepeateds; /* 监测重放攻击极限值,反复提交先前的tokencode,或者同一时间提交tokencode则理解为重放,达到极限值则禁用 */
|
||
int iMaxBadNextTokencodes; /* 在Next模式下,允许最大错误次数 */
|
||
|
||
int iPrecision; /* 精度,离ulLastSuccessLogin每隔一个月累加精度秒 */
|
||
|
||
int iLargeWindowSeconds; /* 秒 */
|
||
int iMediumWindowSeconds; /* 秒 */
|
||
int iSmallWindowSeconds; /* 秒 */
|
||
|
||
char ucTokenTypeString[8]; /* 令牌的类型描述 */
|
||
int iSeedLen; /* 种子长度,如果是0,则默认为16 */
|
||
char ucReserved[4]; /* 保留字段 */
|
||
} TOKENPUBLICINFO, *PTTOKENPUBLICINFO; /* 192字节 */
|
||
|
||
typedef struct {
|
||
LONG type; /* PASSCODE_TYPE/PASSCODE_NEXT_TYPE */
|
||
ULONG passc_time; /* passcodetime */
|
||
char prn[DCSH_PRN_LEN]; /* tokencode */
|
||
char pin[DCSH_PIN_LEN]; /* pin码 */
|
||
char nextPrn[DCSH_PRN_LEN]; /* PASSCODE_NEXT_TYPE输出,下一个tokencode */
|
||
} DCSHPASSCODE;
|
||
|
||
typedef struct {
|
||
LONG type; /* PRN_TYPE */
|
||
ULONG passc_time; /* passcodetime */
|
||
char prn[DCSH_PRN_LEN]; /* tokencode */
|
||
} DCSHPRN;
|
||
|
||
typedef struct {
|
||
LONG type; /* CHALLENGE_RESPONSE_TYPE */
|
||
ULONG passc_time; /* passcodetime */
|
||
char challenge[DCSH_CHALLENGE_LEN]; /* 挑战码 */
|
||
char response[DCSH_RESPONSE_LEN]; /* 响应码 */
|
||
} DCSHCHALLENGE_RESPONSE;
|
||
|
||
typedef struct {
|
||
LONG type; /* CHALLENGE_RESPONSE_ATM_TYPE */
|
||
ULONG passc_time; /* passcodetime */
|
||
int iPasswdAlg; /* 用户输入密码的摘要算法,0表示直接使用*/
|
||
char challenge[DCSH_CHALLENGE_LEN]; /* 挑战码 */
|
||
char response[DCSH_RESPONSE_LEN]; /* 响应码 */
|
||
} DCSHCHALLENGE_RESPONSE_ATM;
|
||
|
||
typedef struct {
|
||
LONG type; /* DCSH_SMS_GETPRN_TYPE/DCSH_SMS_PRN_TYPE */
|
||
ULONG valid_time; /* 有效时间,秒 */
|
||
char prn[DCSH_PRN_LEN]; /* tokencode,返回/验证 */
|
||
} DCSHSMSPRN;
|
||
|
||
/* RFC 2548 MSCHAPV2 Response Vendor type = 25 */
|
||
/* RFC 2759 Section 8 Provides Pseudocode and details */
|
||
#define DCSH_CHALLENGE_LENGTH 16
|
||
#define DCSH_USERNAME_LENGTH 128
|
||
#define DCSH_RESPONSERECEIVED_LENGTH 24
|
||
#define DCSH_RESPONSE_LENGTH 42
|
||
#define DCSH_ENCRYPTED_NEWPW_LENGTH 516
|
||
#define DCSH_PASSWORD_LENGTH 256
|
||
#define DCSH_ENCRYPTED_OLDPWHASH_LENGTH 16
|
||
/* struct to be used with type set to DCSH_MSCHAP2_PASSCODE_TYPE */
|
||
/* allow to pass required parameters for mschapv2 auth */
|
||
typedef struct {
|
||
LONG type;
|
||
ULONG passc_time;
|
||
/* IN::RFC 2759 Section 8.1 */
|
||
unsigned char authenticatorChallenge[DCSH_CHALLENGE_LENGTH];
|
||
unsigned char peerChallenge[DCSH_CHALLENGE_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.1 null terminated string of size less or equal to 128*/
|
||
char userName[DCSH_USERNAME_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.1 Result of*/
|
||
/* GenerateNTResponse(authenticatorChallenge, peerChallenge, userName, Passcode) */
|
||
/* note:: Passcode is used to generate this value */
|
||
unsigned char responseReceived[DCSH_RESPONSERECEIVED_LENGTH];
|
||
|
||
/* OUT::RFC 2759 Section 8.7 Output from*/
|
||
/* GenerateAuthenticatorResponse(Passcode, responseRecieved, peerChallenge, authenticatorChallenge, userName)*/
|
||
/* note::Passcode is used to generate this value */
|
||
char authenticatorResponse[DCSH_RESPONSE_LENGTH];
|
||
} DCSHMSCHAP2_PASSCODE;
|
||
|
||
/* struct to be used with type set to DCSH_MSCHAP2_CHANGE_PW_TYPE */
|
||
/* allow to pass required parameters for to change password with mschapv2 auth */
|
||
typedef struct {
|
||
LONG type;
|
||
ULONG passc_time;
|
||
|
||
/* IN::RFC 2759 Section 8.1 */
|
||
unsigned char authenticatorChallenge[DCSH_CHALLENGE_LENGTH];
|
||
unsigned char peerChallenge[DCSH_CHALLENGE_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.1 null terminated string of size less or equal to 128*/
|
||
char userName[DCSH_USERNAME_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.1 Result of */
|
||
/* GenerateNTResponse(authChallenge, peerChallenge, userName, NewPin) */
|
||
/* note:: NewPin is used to generate this value */
|
||
unsigned char responseReceived[DCSH_RESPONSERECEIVED_LENGTH];
|
||
|
||
/* OUT::RFC 2759 Section 8.7 Output from */
|
||
/* GenerateAuthenticatorResponse(NewPin, responseRecieved, peerChallenge, authenticatorChallenge, userName)*/
|
||
/* note:: NewPin is used to generate this value */
|
||
unsigned char authenticatorResponse[DCSH_RESPONSE_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.9 provides detail on how to calculate this value*/
|
||
unsigned char encryptedNewPasword[DCSH_ENCRYPTED_NEWPW_LENGTH];
|
||
|
||
/* IN::RFC 2759 Section 8.12 provides detail on how to calculate this value*/
|
||
unsigned char encryptedOldPasswordHashed[DCSH_ENCRYPTED_OLDPWHASH_LENGTH];
|
||
} DCSHMSCHAP2_CHANGE_PW;
|
||
|
||
typedef struct
|
||
{
|
||
LONG type; /* DCSH_SIGN_PRN_TYPE / DCSH_GET_SIGN_PRN_TYPE */
|
||
ULONG passc_time; /* passcodetime */
|
||
char key1[20]; /* 第一个关键信息,建议6个数字 */
|
||
char key2[20]; /* 第二个关键信息,建议6个数字 */
|
||
char key3[20]; /* 第三个关键信息,建议6个数字 */
|
||
char prn[DCSH_PRN_LEN]; /* DCSH_SIGN_PRN_TYPE 为认证数字签名的动态口令*/
|
||
/* DCSH_GET_SIGN_PRN_TYPE 为获得签名动态口令*/
|
||
char pin[DCSH_PIN_LEN]; /* pin码 */
|
||
} DCSH_SIGN_PASSCODE; //数字签名的认证类型
|
||
|
||
typedef struct
|
||
{
|
||
LONG type; /*DCSH_COVER_GET_HOSTCODE_TYPE / DCSH_COVER_HOST_PRN_TYPE*/
|
||
ULONG passc_time; /*系统时间*/
|
||
char cHostCode[DCSH_PRN_LEN]; /*主机字符*/ //认证时提交,获得时返回
|
||
char cTokenCode[DCSH_PRN_LEN]; /*动态口令*/ //获得时实用
|
||
char pin[DCSH_PRN_LEN]; /*pin码*/ //认证时使用
|
||
int iCurrentCount; /*当前计数器*///获得时使用返回
|
||
} DCSH_COVER_PASSCODE; //刮刮卡认证类型
|
||
|
||
/*联合类型,用于上述类型的认证*/
|
||
typedef union {
|
||
LONG type;
|
||
DCSHPASSCODE passcode;
|
||
DCSHCHALLENGE_RESPONSE challengeResponse;
|
||
DCSHPRN prn;
|
||
DCSHSMSPRN smsprn;
|
||
DCSHMSCHAP2_PASSCODE mschap2;
|
||
DCSHMSCHAP2_CHANGE_PW mschap2pw;
|
||
DCSH_SIGN_PASSCODE sigprn;
|
||
DCSH_COVER_PASSCODE coverprn;
|
||
DCSHCHALLENGE_RESPONSE_ATM chapATM;
|
||
} DCSHCODE2CHECK, *PT_DCSHCODE2CHECK;
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetPasscodeTime
|
||
**
|
||
**功能描述: 根据系统时间取得当前令牌需要的时间UTC,相对于2008/1/1的秒数
|
||
**
|
||
**参数说明:
|
||
void [] -
|
||
**
|
||
**返回类型: LONG
|
||
** 返回整型,秒
|
||
**
|
||
**
|
||
**其他说明: 在进行引擎认证时,必须调用此函数提供的时间
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API LONG DCSHSAGetPasscodeTime (void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetPasscodeTimeOTP
|
||
**
|
||
**功能描述: 获取系统的秒,相对于1970/1/1
|
||
**
|
||
**参数说明:
|
||
ULONG PasscodeTime [in / ] - DCSHSAGetPasscodeTime 获得的时间
|
||
**
|
||
**返回类型: LONG
|
||
** 返回整型,秒
|
||
**
|
||
**
|
||
**其他说明: 在进行OTP认证时,调用该接口获得时间:秒
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API LONG DCSHSAGetPasscodeTimeOTP (ULONG PasscodeTime);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAFmtTime
|
||
**
|
||
**功能描述: 把认证引擎使用的时间转换为字符串 "GMT 2008-05-14 04:09:22"
|
||
**
|
||
**参数说明:
|
||
LONG tod [in / ] - 引擎时间,秒
|
||
char *outstr [in / out] - 输出字符串,外部分配空间,长度为 GMTSTRLEN
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 成功转换
|
||
** EMBADARG 参数错误,可能outstr为空指针
|
||
**
|
||
**其他说明: 时间为GMT时间,并不是UTC时间,注意时区
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAFmtTime (LONG tod, char *outstr);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetUserLogin
|
||
**
|
||
**功能描述: 分配令牌给用户,令牌的第一个操作应该是分配
|
||
** 分配用户时将重置令牌PIN码,但是令牌自身的状态位和计数器不改变
|
||
** 可以反复分配
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包,不得修改
|
||
char *name [in / ] - 用户名称
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 成功
|
||
** EMBADARG 参数错误,可能为空指针,也可能name的长度大于STRLENLOGID
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetUserLogin(PTTOKENRECORDDATA pdata ,char *name);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetTokenCodeLength
|
||
**
|
||
**功能描述: 重新设置动态口令的长度,最大不超过DCSH_PRN_LEN,最小没有限制
|
||
** 因为RFC取Long型,最大值以4字节表示,所以实际长度不可能超过10个数字
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata
|
||
int iLen [in / ] - 新的长度,应该不大于DCSH_PRN_LEN
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 成功
|
||
** EMBADARG 参数错误,可能为空指针,也可能iLen大于DCSH_PRN_LEN
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**
|
||
**其他说明: 建议在 4 - 8之间
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-18 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetTokenCodeLength(PTTOKENRECORDDATA pdata , int iLen);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAEnableToken
|
||
**
|
||
**功能描述: 让已经分配的令牌启用,同时清除计数器和Next模式,必须在令牌分配之后才能启用
|
||
** 启用操作将清除所有状态位和计数器,但是不清除重放和最后认证时间
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *pin [in / ] - pin,如果是NULL或者长度为0,则强制设置SYSTEMPIN
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置可用成功
|
||
** EMBADARG 参数错误,pdata可能为空指针,也可能pin长度大于MAX_PIN_LEN小于MIN_PIN_LEN
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMNOTASSIGNED 还没有分配用户
|
||
** EMPINLEN pin的长度有问题,应该 4<=pinlen<=8
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**其他说明: 调用该函数前应该先调用DCSHSASetUserLogin
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAEnableToken (PTTOKENRECORDDATA pdata, char *pin);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSADisableToken
|
||
**
|
||
**功能描述: 禁用一个令牌
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置禁用成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMDISABLE 已经设置为禁用了
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**
|
||
**其他说明: 任何时候禁用令牌应该调用该函数,而不得胡乱修改
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSADisableToken (PTTOKENRECORDDATA pdata);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetPinMaxErrors
|
||
**
|
||
**功能描述: 设置或更改PIN错误的最大次数,设置时不考虑状态位
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
int iPinErrs [in / ] - 最大错误次数
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置pin成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
**
|
||
**其他说明: 在禁用之前修改最大值有作用,如果禁用后,也可以修改,但在启用后起作用
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetPinMaxErrors (PTTOKENRECORDDATA pdata, int iPinErrs);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetPin
|
||
**
|
||
**功能描述: 给一个已分配可用的令牌设置PIN,同时清除所有计数器和Next模式,不清除重放和时间
|
||
** 注意,也不修改状态位,被禁用的将依然禁用
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *pin [in / ] - pin,如果是NULL或者长度为0,则强制设置SYSTEMPIN
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置pin成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMDISABLE 为禁用状态
|
||
** EMPINLEN pin的长度有问题,应该 4<=pinlen<=8
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**其他说明: 在成功登陆后,应提供用户修改PIN的地方
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetPin (PTTOKENRECORDDATA pdata, char *pin);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetPinDisabledFlag
|
||
**
|
||
**功能描述: 设置是否使用PIN的标志位,1 禁用 0 启用
|
||
** 未启用的令牌不能设置
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
int b [in / ] - 1 禁用PIN认证,0 使用PIN认证
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置Flag成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
** EMDISABLE 为禁用状态,不可设置
|
||
** EMFOREVERDISABLE 永久禁用
|
||
**
|
||
**
|
||
**其他说明: 建议使用PIN认证
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetPinDisabledFlag (PTTOKENRECORDDATA pdata,int b);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetNextTokencodeModeThreshold
|
||
**
|
||
**功能描述: 设置tokencode错误最大值,达到这个数后,则进入next模式
|
||
** 未启用的令牌不可设置
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
int index [in / ] - 最大tokencode错误极限值
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置Threshol成功
|
||
** EMBADARG 参数错误,pdata可能为空指针,或者index错了(1-10之间)
|
||
** EMDISABLE 为禁用状态,不可设置
|
||
**
|
||
**
|
||
**其他说明: 现在放开了最大10的限制,可设置任意大
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetNextTokencodeModeThreshold (PTTOKENRECORDDATA pdata, int index);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetTokenInfo
|
||
**
|
||
**功能描述: 获取令牌的详细信息
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / ] - 引擎数据包
|
||
PTTOKENSECRETDATA tokenInfo [in / out] - 详细信息,外面分配空间
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置Threshol成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
** EMBADREC PDATA内部数据有问题,如签名等
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetTokenInfo (PTTOKENRECORDDATA pdata, PTTOKENPUBLICINFO tokenInfo);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAUpdateTokenSeed
|
||
**
|
||
**功能描述: 认证引擎内部创建种子,并更新pdata内的原有种子,注意,这将导致种子文件失效
|
||
更新种子后的令牌将作为全新的令牌,走Firt模式
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata数据结构
|
||
int iBitLen [in / ] - 种子的位长,128或者160
|
||
char *cSeed [in / out] - 种子字符串,base64字符串,注意"==",真实长度为cSeedLen
|
||
int *cSeedLen [in / out] - base64种子的字符串长度
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 设置种子成功
|
||
** EMBADARG 参数错误,pdata可能为空指针
|
||
**
|
||
**
|
||
**其他说明: 动联的种子生成有严格的规则,涉及到算法和加密卡;
|
||
同时pdata结构和序列号/种子有密切关联,用于防伪;
|
||
更新种子将是的严格的规则和防伪校验失效;
|
||
另,使用者需要注意,一旦更新后,将导致种子文件BIN失效;
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-2-4 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAUpdateTokenSeed (PTTOKENRECORDDATA pdata, int iBitLen, char *cSeed, int *cSeedLen);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckPasscode
|
||
**
|
||
**功能描述: 动态口令认证
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *prn [in / ] - tokencode
|
||
char *pin [in / ] - pin
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMNOPIN 没有输入pin码
|
||
** EMPINLEN 输入的PIN长度错误
|
||
** EMBADPIN 输入错误的PIN
|
||
** EMSTOLEN 因为PIN错误次数到达极限,默认为丢失
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMREPPRN 这是重放,需要小心,应该立即记录,并提醒管理员
|
||
** EMREPDISABLE 重放到一定的次数则禁用
|
||
** EMNEXTPRN 进入Next的模式
|
||
** EMTHRESHOLDNXT 输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
** EMBADNEX 在Next模式下输入错了tokencode
|
||
** EMNEXTDISABLE 在Next模式下输入错误次数到达极限,被禁用
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**
|
||
**其他说明: 最重要的认证接口,特别需要注意返回值
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-15 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckPasscode (ULONG passc_time, PTTOKENRECORDDATA pdata, char *prn, char *pin);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckATMTokenCode
|
||
**
|
||
**功能描述: ATM令牌的认证接口,需要注意用户密码的转换
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 时间
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata
|
||
int iPasswdAlg [in / ] - 对用户口令的算法
|
||
char *atmpassword [in / ] - 用户口令,也可能是摘要数据
|
||
char *prn [in / ] - 动态口令
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMNOPIN 没有输入pin码
|
||
** EMPINLEN 输入的PIN长度错误
|
||
** EMBADPIN 输入错误的PIN
|
||
** EMSTOLEN 因为PIN错误次数到达极限,默认为丢失
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMREPPRN 这是重放,需要小心,应该立即记录,并提醒管理员
|
||
** EMREPDISABLE 重放到一定的次数则禁用
|
||
** EMNEXTPRN 进入Next的模式
|
||
** EMTHRESHOLDNXT 输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
** EMBADNEX 在Next模式下输入错了tokencode
|
||
** EMNEXTDISABLE 在Next模式下输入错误次数到达极限,被禁用
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-12-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckATMTokenCode (ULONG passc_time, PTTOKENRECORDDATA pdata, int iPasswdAlg, char *atmpassword /*用户密码作为challenge*/, char *prn);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckSIGPasscode
|
||
**
|
||
**功能描述: 签名动态口令认证,外带三个关键信息,必须为数字
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 当前系统时间
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata
|
||
char *key1 [in / ] - 关键信息1,建议6个数字
|
||
char *key2 [in / ] - 关键信息2,建议6个数字
|
||
char *key3 [in / ] - 关键信息3,建议6个数字
|
||
char *prn [in / ] - 动态口令
|
||
char *pin [in / ] - 令牌PIN码
|
||
**
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMNOPIN 没有输入pin码
|
||
** EMPINLEN 输入的PIN长度错误
|
||
** EMBADPIN 输入错误的PIN
|
||
** EMSTOLEN 因为PIN错误次数到达极限,默认为丢失
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMREPPRN 这是重放,需要小心,应该立即记录,并提醒管理员
|
||
** EMREPDISABLE 重放到一定的次数则禁用
|
||
** EMNEXTPRN 进入Next的模式
|
||
** EMTHRESHOLDNXT 输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
** EMBADNEX 在Next模式下输入错了tokencode
|
||
** EMNEXTDISABLE 在Next模式下输入错误次数到达极限,被禁用
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-2-12 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckSIGPasscode (ULONG passc_time, PTTOKENRECORDDATA pdata, char *key1, char *key2, char *key3, char *prn, char *pin);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetSIGPasscode
|
||
**
|
||
**功能描述: 获取签名动态口令,内部使用
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 系统时间
|
||
PTTOKENRECORDDATA pdata [in / ] - pdata
|
||
char *key1 [in / ] - 关键信息1
|
||
char *key2 [in / ] - 关键信息2
|
||
char *key3 [in / ] - 关键信息3
|
||
char *prn [in / out] - 动态口令,外部分配空间,并初始化
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-2-12 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetSIGPasscode (ULONG passc_time, PTTOKENRECORDDATA pdata, char *key1, char *key2, char *key3, char *prn);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckUrgencyPassWord
|
||
**
|
||
**功能描述: 检测紧急口令,跳过所有的状态位检测,区分大小写
|
||
** 没有分配的令牌不允许使用紧急口令
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / ] - PDATA
|
||
char *ucUrgencyPassWord [in / ] - 紧急口令,16字符
|
||
**
|
||
**返回类型: int
|
||
** EMBADARG 参数错误
|
||
** EMBADURGENCYPW 紧急口令认证失败
|
||
** EMSUCCESS 紧急口令认证成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-7-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckUrgencyPassWord (PTTOKENRECORDDATA pdata, char *ucUrgencyPassWord);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetUrgencyPassWord
|
||
**
|
||
**功能描述: 获取紧急口令,跳过所有的状态位检测
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / ] - PDATA
|
||
char *ucUrgencyPassWord [in / out] - 紧急口令,16字符,外部分配空间
|
||
**
|
||
**返回类型: int
|
||
** EMBADARG 参数错误
|
||
** EMBADGETURGENCYPW 紧急口令认证失败
|
||
** EMSUCCESS 获取成功
|
||
**
|
||
**其他说明: 已经修改,在未分配的情况下也允许得到紧急口令
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-7-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetUrgencyPassWord (PTTOKENRECORDDATA pdata, char *ucUrgencyPassWord);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASetUrgencyPassWord
|
||
**
|
||
**功能描述: 设置新的服务码,由引擎内部设置,设置成功后,返回新的服务码
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata
|
||
char *ucNewUrgencyPassWord [in / out] - 输出新的服务码,16个字节,建议外部分配20字节的空间
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMURGPWDERR 更改服务码失败
|
||
** DCSHEMSUCCESS 更改服务码成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-10-27 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASetUrgencyPassWord (PTTOKENRECORDDATA pdata, char *ucNewUrgencyPassWord);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckTokenvalue
|
||
**
|
||
**功能描述: 相当于FirstLogin,但是不修改任何数据,也不判断标志位
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - 时间,DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENDATA pdata [in / ] - 引擎数据包
|
||
char *prn [in / ] - tokencode
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 检查通过
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckTokenvalue (ULONG passc_time, PTTOKENRECORDDATA pdata, char *prn);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAResynchTokenEx
|
||
**
|
||
**功能描述: 重新同步,非常大的计算量,12小时内寻找
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - 时间,DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *prn [in / ] - tokencode
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 重新同步
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMSYN1OK 重新同步模式下,第一次匹配tokencode已经找到
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**其他说明: 重新同步对“永久失效”有作用
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAResynchTokenEx (ULONG passc_time, PTTOKENRECORDDATA pdata, char *prn);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAInitBINRead
|
||
**
|
||
**功能描述: 打开BIN文件,进行格式分解,返回空间和总记录数
|
||
**
|
||
**参数说明:
|
||
const char *InputFile [in / ] - 文件名称
|
||
int **inpfil [in / out] - 解密的空间,使用DCSHSAExitBINRead释放
|
||
int *iRecoeds [in / out] - 总共的记录数
|
||
char *cType [in / out] - 种子文件的类型
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 成功
|
||
** EMEMPNAME 文件名称错误
|
||
** EMBADINPUT 文件无法打开
|
||
** EMNOMEM 没有足够的内存空间
|
||
** EMBADINPFIL BIN的文件内容错误,严重错误
|
||
** EMBADSIG 文件签名错误,严重错误
|
||
** EMBADFILETYPE 错误的种子文件类型
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAInitBINRead (const char *InputFile, void **inpfil, unsigned int *iRecoeds, char *cType);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAReadBINRec
|
||
**
|
||
**功能描述: 从解密的数据中读取记录
|
||
**
|
||
**参数说明:
|
||
char *userPriKeyPath[in / ] - 用户私要文件
|
||
void *inpfil [in / ] - 解密的数据块
|
||
PTTOKENDATA pdata [in / out] - 组装成PDATA
|
||
int i [in / ] - 记录的索引号,从0开始
|
||
char cType [in / out] - 种子文件的类型
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 关闭成功
|
||
** EMBADARG 错误的参数,可能是空指针
|
||
** EMBADFILETYPE 种子文件的类型错误
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAReadBINRec (char *userPriKeyPath, void *inpfil, PTTOKENRECORDDATA pdata, unsigned int i, char cType);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAExitBINRead
|
||
**
|
||
**功能描述: 清除BIN文件解密的内存空间
|
||
**
|
||
**参数说明:
|
||
void *fc [in / ] - 空间地址
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 关闭成功
|
||
** EMBADARG 参数错误,可能是空指针
|
||
**
|
||
**
|
||
**其他说明: 用于释放接口内部的内存空间,其他地方也可以使用
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAExitBINRead (void *fc);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHMakeTokenRecord -- 测试用
|
||
**
|
||
**功能描述: 手工制作一个PDATA,SDATA
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 初始化的数据
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-17 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void DCSHSAMakeTokenRecord(PTTOKENRECORDDATA pdata);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHMakeTokenRecordEvent -- 测试用
|
||
**
|
||
**功能描述: 手工制作一个PDATA,SDATA
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 初始化的数据
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-17 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void DCSHSAMakeTokenRecordEvent(PTTOKENRECORDDATA pdata);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHMakeTokenRecordMobile -- 测试用
|
||
**
|
||
**功能描述: 创建一个手机令牌,特指动联专用的
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 初始化的数据
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void DCSHSAMakeTokenRecordMobile(PTTOKENRECORDDATA pdata);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSASplitBINFile
|
||
**
|
||
**功能描述: 分割种子文件,支持加密格式,也支持数字信封格式
|
||
**
|
||
**参数说明:
|
||
char *pSeedFile [in / ] - 种子文件路径
|
||
unsigned int iNumber [in / ] - 分割多少个出来
|
||
**
|
||
**返回类型: int
|
||
** EMREADSEEDFILEERR 读取种子文件失败
|
||
** EMBADFILETYPE 种子文件类型错误
|
||
** EMSUCCESS 成功
|
||
**
|
||
**其他说明: 源文件保留,创建拆分的两个文件
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-6-12 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASplitBINFile (char *pSeedFile, unsigned int iNumber);
|
||
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGenerateUrgencyPassWord (16字节的紧急口令)
|
||
**
|
||
**功能描述: 生成高质量的随机数,然后对该随机数进行Base64编码,截取16字节,作为紧急口令
|
||
**
|
||
**参数说明:
|
||
char *ucUrgencyPassWord [in / out] - 外部分配空间,返回紧急口令字符,建议20个字节空间
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMSEEDERR BBS计算随机数时错误,可重新尝试
|
||
** DCSHEMSUCCESS 创建紧急口令成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-7-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGenerateUrgencyPassWord(char *ucUrgencyPassWord);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetChallenge
|
||
**
|
||
**功能描述: 产生一个指定长度的随机数作为挑战码
|
||
**
|
||
**参数说明:
|
||
unsigned char *randomData [in / out] - 随机数,挑战码,外部分配空间
|
||
int iNumBytes [in / ] - 要求的随机数长度,最好是8
|
||
**
|
||
**返回类型: int
|
||
** EMBADARG 参数错误
|
||
** EMSEEDERR 随机数产生错误
|
||
** EMSUCCESS 成功
|
||
**
|
||
**其他说明: 增加了返回全0的判断,如果发现是0,则可以重新尝试
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-6-23 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetChallenge(char *randomData, int iNumBytes);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckCredential,兼容各种令牌的统一认证接口,比CheckPasscode更兼容
|
||
**
|
||
**功能描述: 兼容单一的tokencode认证
|
||
兼容PIN码+tokencode认证
|
||
兼容PIN码+tokencode认证,并且在成功后获取下一个正确的tokencode返回
|
||
兼容挑战响应模式认证
|
||
兼容SIM卡令牌
|
||
兼容COS等其他卡商的令牌
|
||
兼容ATM令牌认证
|
||
兼容刮挂卡令牌认证
|
||
兼容MS-Chap V2的认证方式
|
||
兼容短信令牌
|
||
兼容签名认证
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / out] - 公用数据结构
|
||
PT_CODE2CHECK ptCode2Check [in / out] - 根据各种类型组装的数据结构
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMNOPIN 没有输入pin码
|
||
** EMPINLEN 输入的PIN长度错误
|
||
** EMBADPIN 输入错误的PIN
|
||
** EMSTOLEN 因为PIN错误次数到达极限,默认为丢失
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMREPPRN 这是重放,需要小心,应该立即记录,并提醒管理员
|
||
** EMREPDISABLE 重放到一定的次数则禁用
|
||
** EMNEXTPRN 进入Next的模式
|
||
** EMTHRESHOLDNXT 输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
** EMBADNEX 在Next模式下输入错了tokencode
|
||
** EMNEXTDISABLE 在Next模式下输入错误次数到达极限,被禁用
|
||
** EMBADTYPE 错误的令牌类型
|
||
** EMRESPONSEERR 挑战认证方式认证失败
|
||
**
|
||
**其他说明: 请参考联合类型PT_DCSHCODE2CHECK详细说明
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-6-23 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckCredential (PTTOKENRECORDDATA pdata, PT_DCSHCODE2CHECK ptCode2Check);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: ReadCardInfoFromFile
|
||
**
|
||
**功能描述: 读取令牌刮卡信息的文件,请参考PTTOKENCARDRECORD结构体
|
||
**
|
||
**参数说明:
|
||
char *CardFileName [in / ] - 文件名称
|
||
PTTOKENCARDRECORD *pTokenCardRecord [in / out] - 数据块,内部分配空间,DCSHSAExitBINRead释放
|
||
int *iCounter [in / out] - 总记录数
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 成功
|
||
** EMBADARG 失败,可能参数传递错误
|
||
**
|
||
**其他说明: pTokenCardRecord的内存空间请使用DCSHSAExitBINRead释放
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-8-5 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAReadCardInformation (char *CardFileName, PTTOKENCARDRECORD *pTokenCardRecord, int *iCounter);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetSMSPasscode
|
||
**
|
||
**功能描述: 获取短消息认证的动态口令,同时设置该口令的有效时间
|
||
**
|
||
**参数说明:
|
||
LONG valid_time [in / ] - 有效时间,单位秒
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *prn [in / out] - 返回的tokencode,外部分配数组
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-8-15 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetSMSPasscode (ULONG valid_time, PTTOKENRECORDDATA pdata, char *prn);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckSMSPasscode
|
||
**
|
||
**功能描述: 认证短信动态口令,在有效时间内
|
||
**
|
||
**参数说明:
|
||
PTTOKENDATA pdata [in / ] - 引擎数据包
|
||
char *prn [in / ] - 返回的tokencode,外部分配数组
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMSMSTIMEOUT 超时,但口令正确
|
||
** EMSMSBADPRN 口令错误
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-8-15 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckSMSPasscode (PTTOKENRECORDDATA pdata, char *prn);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckPasscodeEx,建议使用DCSHSACheckCredential方法
|
||
**
|
||
**功能描述: 这是一个简便的认证接口,根据组合方式,也可以进行认证
|
||
扩展的、统一的认证接口
|
||
如果是 时间、事件、手机 认证,则 prn=tokencode,NULL,0
|
||
如果是 异步认证(如手机), 则 prn=response,challenge=challenge,0
|
||
如果是短信认证,获得动态口令,则 prn=外部数组,NULL,valid_time=有效时间(秒)
|
||
认证动态口令,则 prn=tokencode,NULL,0
|
||
如果是ATM令牌,需要传递算法, 则 prn=动态口令,challenge=挑战码(用户口令,也可能使摘要),valid_time=算法(ALGORITHM_ATM/MD5/SH1)
|
||
如果是刮刮卡令牌,只进行认证,则 prn=动态口令,challenge=主机码,valid_time=0)
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - 引擎数据包
|
||
char *prn [in / out] - 根据要求存放tokencode,或者响应码,或者返回值,参考上访说明
|
||
char *challenge [in / ] - 异步模式,则为挑战码,参考上访说明
|
||
ULONG valid_time [in / ] - 获得短信口令,存放有效时间,秒,参考上访说明
|
||
**
|
||
**返回类型: int
|
||
**
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMTOKENTYPE 错误的令牌应用类型
|
||
**
|
||
**
|
||
**其他说明: 注意,本接口不支持带PIN的认证
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-9-3 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckPasscodeEx (PTTOKENRECORDDATA pdata, char *prn, char *challenge, ULONG valid_time);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAMsChap2CheckAndMakeResponse
|
||
**
|
||
**功能描述: MS CHAP V2,对客户端提交的nt_response进行认证
|
||
|
||
请查看DCSHMSCHAP2_PASSCODE结构,请查看RFC2759
|
||
|
||
引擎支持MS CHAP v2,但引擎内除了PIN和动态口令,没有用户名、服务端挑战码、客户端挑战码等
|
||
所以,要求调用该接口的时候必须送入
|
||
|
||
返回的AuthenticatorResponse是这样的格式“S=0123456789ABCDEF0123456789ABCDEF01234567”
|
||
**
|
||
**参数说明:
|
||
DCSHMSCHAP2_PASSCODE *pDCSHMSCHAP2Block [in / out] - 结构内包含了MS Chap V2的各个字段,AuthenticatorResponse由该函数生成
|
||
char *cMsChap2Password [in / ] - 口令,注意:
|
||
如果启用PIN,则口令应该为“动态口令+PIN码“
|
||
如果不启用PIN,则口令就是”动态口令“
|
||
|
||
注意,用户应用也应该如此编排
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMMSCHAPV2ERROR mschapv2认证客户端提交的响应码错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-2-5 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAMsChap2CheckAndMakeResponse(DCSHMSCHAP2_PASSCODE *pDCSHMSCHAP2Block, char *cMsChap2Password);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckPasscodeMsChap2
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
unsigned char *pMsChap2Block[in / out] - DCSHMSCHAP2_PASSCODE类型的block
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
|
||
** EMPRNLEN Tokencode的长度错误
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMNOPIN 没有输入pin码
|
||
** EMPINLEN 输入的PIN长度错误
|
||
** EMBADPIN 输入错误的PIN
|
||
** EMSTOLEN 因为PIN错误次数到达极限,默认为丢失
|
||
** EMOUTWIND 在任何窗口内找不到tokencode,可能需要再同步
|
||
** EMREPPRN 这是重放,需要小心,应该立即记录,并提醒管理员
|
||
** EMREPDISABLE 重放到一定的次数则禁用
|
||
** EMNEXTPRN 进入Next的模式
|
||
** EMTHRESHOLDNXT 输入tokencode的错误次数到达极限,以后进入NEXT模式
|
||
** EMBADNEX 在Next模式下输入错了tokencode
|
||
** EMNEXTDISABLE 在Next模式下输入错误次数到达极限,被禁用
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**
|
||
**其他说明:
|
||
ms-chap v2的认证方式是得不到用户的PIN码和动态口令的
|
||
于是,我们必须从引擎中得到这些,然后逆过程计算响应码,进行比较
|
||
此时,我们就会发现无法检测重放
|
||
对于这个问题,我们只能恰当的判断:
|
||
1、我们总是记住最后4次正确的tokencode
|
||
2、如果这次验证和历史的tokencode相同,则认为重放
|
||
3、如果在窗口内扫描,一旦发现与历史tokencode相同,则跳过
|
||
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-5-15 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckPasscodeMsChap2 (ULONG passc_time, PTTOKENRECORDDATA pdata, unsigned char *pMsChap2Block/*DCSHMSCHAP2_PASSCODE类型的block*/);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAMsChap2ChangePassword
|
||
**
|
||
**功能描述: MS CHAP V2,解密得到新口令,并验证新口令
|
||
|
||
请查看DCSHMSCHAP2_CHANGE_PW结构,请查看RFC2759
|
||
|
||
修改口令之前先要完成认证
|
||
|
||
认证通过后再解密新口令,并且验证新口令是否正确
|
||
|
||
返回的AuthenticatorResponse是这样的格式“S=0123456789ABCDEF0123456789ABCDEF01234567”
|
||
**
|
||
**参数说明:
|
||
DCSHMSCHAP2_CHANGE_PW *pDCSHMSCHAP2Blockpw[in / ] - 结构内包含了MS Chap V2的各个字段,AuthenticatorResponse由该函数生成
|
||
char *oldPinAndTokencode [in / ] - 口令,注意:
|
||
如果启用PIN,则口令应该为“动态口令+PIN码“
|
||
如果不启用PIN,则口令就是”动态口令“
|
||
|
||
注意,用户应用也应该如此编排
|
||
** char *newpin [in / out] - 新口令
|
||
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMMSCHAPV2ERRORPW mschapv2客户端提交的新口令校验异常
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-2-5 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAMsChap2ChangePassword(DCSHMSCHAP2_CHANGE_PW *pMsChap2Blockpw, char *oldPinAndTokencode, char *newpin);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAChangePINCodeMsChap2
|
||
**
|
||
**功能描述: ms chap v2 更改口令
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENRECORDDATA pdata [in / ] - 引擎数据包
|
||
unsigned char *pMsChap2Blockpw [in / out] - 参考DCSHMSCHAP2_CHANGE_PW结构,将返回authenticatorResponse
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-2-5 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAChangePINCodeMsChap2 (ULONG passc_time, PTTOKENRECORDDATA pdata, unsigned char *pMsChap2Blockpw/*DCSHMSCHAP2_CHANGE_PW类型的block*/);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAForceSynchronizeEventCounter
|
||
**
|
||
**功能描述: 强制同步事件型令牌的计数器
|
||
** 在某种情况下,需要获得服务端当前的计数器,然后累加一个常量,作为强制的同步的参数,要求客户端强制修改计数器等于这个参数
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - 引擎数据包
|
||
unsigned int CounterAdd [in / ] - 一个常量,建议大于100小于1000;
|
||
unsigned int *SrvCounter [in / out] - 设置当前令牌的计数器的值,并且返回该值
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMFORCESYNTYPE 强制同步令牌类型错误,不是事件型
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-6-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAForceSynchronizeEventCounter(PTTOKENRECORDDATA pdata, unsigned int CounterAdd, unsigned int *SrvCounter );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAForceSynchronizeEventCounterReverse
|
||
**
|
||
**功能描述: 根据客户端的计数器强制同步服务器中计数器
|
||
计数器更改的时候,不允许服务器的计数器往小修改,客户端提交的计数器必须大于服务器的计数器
|
||
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - 引擎数据包
|
||
unsigned int ClientCounter [in / ] - 客户端的计数器
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMFORCESYNTYPE 强制同步令牌类型错误,不是事件型
|
||
** DCSHEMFORCECOUNTERLESS 不允许使用客户端的小值修改服务端的大值
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-1-27 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAForceSynchronizeEventCounterReverse(PTTOKENRECORDDATA pdata, unsigned int ClientCounter );
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAUnlockPinpadToken
|
||
**
|
||
**功能描述: 输出K8锁定的解锁码,带pad的令牌在多次输入pin失败后会锁定,此时提供屏幕的数字和序列号,可到服务端进行“获取解锁码”
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / ] - 引擎数据包
|
||
char *cChallenge [in / ] - 令牌锁定后,屏幕上的8位数字
|
||
char *cUnLockCode [in / out] - 解锁码,8位数字
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-7-29 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAUnlockPinpadToken(PTTOKENRECORDDATA pdata, char *cChallenge, char *cUnLockCode);
|
||
|
||
/*
|
||
基本的两大类型:[时间型Time] [事件型Event(手机令牌是事件型)]
|
||
|
||
基本的两种介质:[硬件(SIM卡是硬件)] [软件(手机上的是软件)]
|
||
|
||
动联的令牌种类:[普通令牌K5旧 K3新] [短信令牌] [手机令牌] [软件令牌]
|
||
|
||
令牌的应用模式:[普通认证模式] [主机认证模式] [挑战应答模式] [数字签名模式] [MSChapV2模式]
|
||
|
||
每个模式都有自己的认证接口
|
||
|
||
上面的关系是层层叠加的,动联的K8令牌就是时间型的硬件K3令牌,同时支持了挑战应答和数字签名模式
|
||
|
||
举例:短信令牌可以是时间类型的,也可以是事件类型的
|
||
短信令牌传统意义上是软件介质,如果要认为硬件的,也可以
|
||
短信令牌的应用模式是获取再认证,这个就等同于普通认证模式
|
||
短信令牌也可以支持其他模式,只要调用接口就可以
|
||
就如同K5令牌完全可以支持数字签名模式,只不过K5没有键盘而已
|
||
|
||
这个举例说明四层结构都是层层叠加方式的,最终应用以接口调用和实际令牌决定
|
||
|
||
*/
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetCoverHostCode
|
||
**
|
||
**功能描述: 获得当前的计数器对应的主机字符和动态口令,返回主机字符和当前使用的次数
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 系统时间
|
||
PTTOKENRECORDDATA pdata [in / ] - pdata
|
||
char *cHostCode [in / out] - 主机字符,外部分配空间
|
||
int *iCurrentUseCount [in / out] - 当前使用的次数
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMNOTCOVERTYPE 不是刮刮卡类型的令牌
|
||
** DCSHEMOVERCOVERNUM 达到最大值,刮刮卡可能是用到最后一个了
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetCoverHostCode (ULONG passc_time, PTTOKENRECORDDATA pdata, char *cHostCode, int *iCurrentUseCount);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckCoverTokenCode
|
||
**
|
||
**功能描述: 认证覆盖区的动态口令,需要传递主机字符和动态口令,如果启用了PIN,还需要传递PIN
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 当前系统时间
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata
|
||
char *cHostCode [in / ] - 主机字符
|
||
char *cTokenCode [in / ] - 覆盖区动态口令
|
||
char *pin [in / ] - pin码
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMNOTCOVERTYPE 不是刮刮卡类型
|
||
** DCSHEMMUSTGETCOVER 认证之前应该获得主机字符
|
||
** DCSHEMOVERCOVERNUM 不认证最大值和以后的
|
||
** DCSHEMHOSTCODEERRO 主机字符错误
|
||
** DCSHEMERRORTODISABLE 动态口令错误太多次,被禁用
|
||
** DCSHEMCOVERCODEERR 覆盖区动态口令错误
|
||
** DCSHEMSUCCESS 认证通过
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-14 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckCoverTokenCode (ULONG passc_time, PTTOKENRECORDDATA pdata, char *cHostCode, char *cTokenCode, char *pin);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAUpdateNewCoverCard
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
ULONG passc_time [in / ] - 系统时间
|
||
PTTOKENRECORDDATA pdataO [in / out] - 旧卡pdata
|
||
char *cHostCodeO [in / ] - 主机字符
|
||
char *cTokenCodeO [in / ] - 动态口令
|
||
char *pinO [in / ] - pin
|
||
PTTOKENRECORDDATA pdataN [in / out] - 新卡pdata
|
||
char *cHostCodeN [in / ] - 主机字符
|
||
char *cTokenCodeN [in / ] - 动态口令
|
||
char *pinN [in / ] - pin
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMNOTCOVERTYPE 不是刮刮卡类型
|
||
** DCSHEMMUSTGETCOVER 认证之前应该获得主机字符
|
||
** DCSHEMOVERCOVERNUM 不认证最大值和以后的
|
||
** DCSHEMHOSTCODEERRO 主机字符错误
|
||
** DCSHEMERRORTODISABLE 动态口令错误太多次,被禁用
|
||
** DCSHEMCOVERCODEERR 覆盖区动态口令错误
|
||
** DCSHEMSUCCESS 认证通过,可以更新
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAUpdateNewCoverCard (ULONG passc_time, PTTOKENRECORDDATA pdataO, char *cHostCodeO, char *cTokenCodeO, char *pinO,
|
||
PTTOKENRECORDDATA pdataN, char *cHostCodeN, char *cTokenCodeN, char *pinN);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAXORStringTo8Char
|
||
**
|
||
**功能描述: 把字符串通过异或转化为8字节,原则是8字节分组,对应的位置异或
|
||
**
|
||
**参数说明:
|
||
const char *cBuffer [in / ] - 原始字符串,长度不限
|
||
unsigned char *cDDWBUffer [in / out] - 输出的8字节,必须外部提供8字节空间,且初始化0
|
||
**
|
||
**返回类型: int
|
||
** EMBADARG 参数错误,参数可能是空指针,或者算法值不对
|
||
** EMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
** 小于等于8字节的字符串则直接copy
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-12-8 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAXORStringTo8Char (const char *cBuffer, unsigned char *cDDWBUffer);
|
||
|
||
|
||
|
||
//---------------------------------客户订制的开发接口------------------------------------//
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckPasscode_for_hexin
|
||
**
|
||
**功能描述: 专门为核心定制的认证接口
|
||
该接口中,返回值DCSHEMSUCCESS和DCSHEMFIRST是正确的,其他的统统的认为是错误
|
||
返回值同时返回偏移量的变化和update的建议,其中:
|
||
DCSHEMFIRST返回值必须update;
|
||
DCSHEMSUCCESS时,我们认为offset变化了就应该update,但决定权由核心控制;但是注意,当iAdjustStep接近小窗口最大值时,必须update;
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - DCSHSAGetPasscodeTime取得时间
|
||
PTTOKENDATA pdata [in / out] - 引擎数据包
|
||
char *prn [in / ] - tokencode
|
||
char *pin [in / ] - pin
|
||
int *iAdjustStep [in / out] - 此次认证调整的偏移量,可能是0,也可能是正数,也可能是负数
|
||
int *iAdviseUpdate [in / out] - 动联建议是否Update,0-表示不需要,1-表示需要
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
** 其他值统统认为失败
|
||
|
||
** DCSHSACheckPasscode的返回值相同。
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-1-4 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckPasscode_for_hexin (ULONG passc_time, PTTOKENRECORDDATA pdata, char *prn, char *pin, int *iAdjustStep, int *iAdviseUpdate);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAModifyTokenDataWindow
|
||
**
|
||
**功能描述: 修改种子数据的认证窗口
|
||
** 建议:
|
||
1、券商、游戏 设置成为 时间型(120,300,600),事件型(2,5,10)
|
||
2、银行、企业 设置成为 时间型(60,180,300),事件型( 1,3,5)
|
||
**
|
||
** 该操作会清除所有状态位和认证模式
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata,种子数据
|
||
int iSmallWindowSeconds [in / ] - 新的小窗口
|
||
int iMediumWindowSeconds [in / ] - 新的中窗口
|
||
int iLargeWindowSeconds [in / ] - 新的大窗口
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 修改成功,必须返回必须保存PDATA到数据库
|
||
** 其他的返回值都是失败
|
||
**
|
||
**其他说明: 该接口属于逼迫得以使用,客户在订购令牌时,应该预先向厂商提出令牌的详细策略需求。
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-8-4 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAModifyTokenDataWindow (PTTOKENRECORDDATA pdata, int iSmallWindowSeconds, int iMediumWindowSeconds, int iLargeWindowSeconds);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckPasscode_for_City9
|
||
**
|
||
**功能描述: 专门为九城定制的认证接口
|
||
该接口中,返回值DCSHEMSUCCESS和DCSHEMFIRST是正确的,其他的统统的认为是错误
|
||
返回值同时返回偏移量的变化和update的建议,其中:
|
||
DCSHEMFIRST返回值必须update;
|
||
DCSHEMSUCCESS时,我们认为offset变化了就应该update,但决定权由九城控制;但是注意,当iAdjustStep接近小窗口最大值时,必须update;
|
||
**
|
||
**参数说明:
|
||
char *pdataBase64 [in / out] - 引擎数据包的base64字符串
|
||
char *prn [in / ] - tokencode
|
||
char *pin [in / ] - pin
|
||
int *iAdjustStep [in / out] - 此次认证调整的偏移量,可能是0,也可能是正数,也可能是负数
|
||
int *iAdviseUpdate [in / out] - 动联建议是否Update,0-表示不需要,1-表示需要
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMFIRST 第一次使用令牌登陆,成功,等同于EMSUCCESS
|
||
** 其他值统统认为失败
|
||
|
||
** DCSHSACheckPasscode的返回值相同。
|
||
**
|
||
**
|
||
**其他说明:
|
||
** 内部调用了取系统UTC时间
|
||
** 内部对状态位进行了重置操作
|
||
** 为了降低客户应用的数据库操作,提供了Update数据库的建议
|
||
** 如果外部用户有错误锁定操作,所有非正确返回值都可以不保存数据库
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-1-24 杨波 Created
|
||
2010-6-24 杨波 对pdata的数据进行了Base64转换
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckPasscode_for_City9 ( char *pdataBase64, char *prn, char *pin, int *iAdjustStep, int *iAdviseUpdate);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAInitPdata_for_City9
|
||
**
|
||
**功能描述: 为9城定制的种子数据初始化的接口,其功能就是 分配/启用/禁用PIN
|
||
**
|
||
**参数说明:
|
||
char *pdataBase64 [in / out] - 引擎数据包的base64字符串
|
||
**
|
||
**返回类型:
|
||
** EMBADARG 参数错误,参数可能是空指针,或者算法值不对
|
||
** EMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-1-25 杨波 Created
|
||
2010-6-24 杨波 对pdata的数据进行了Base64转换
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAInitPdata_for_City9 ( char *pdataBase64);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAResynchTokenEx_for_City9
|
||
**
|
||
**功能描述: 为9城定制的重新同步接口
|
||
**
|
||
**参数说明:
|
||
char *pdataBase64 [in / out] - 引擎数据包的base64字符串
|
||
char *prn1 [in / ] - 第一个动态口令
|
||
char *prn2 [in / ] - 连续的第二个动态口令
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMSUCCESS 同步成功
|
||
** 其它值参考返回信息列表
|
||
**
|
||
**
|
||
**其他说明: 只有当返回DCSHEMSUCCESS时,才需要Update数据库
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-8-12 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAResynchTokenEx_for_City9(char *pdataBase64, char *prn1, char *prn2);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetCustomTokenPasscode
|
||
**
|
||
**功能描述: 获取定制类型令牌的认证的动态口令,用于DCSH_HARDWARE_TOKEN_GET类型的令牌
|
||
目前为恒生定制接口, 将来会增加策略控制,如时间不会回逆获取
|
||
|
||
注意,一旦获取动态口令后,该动态口令不可用于动联系统认证
|
||
First获取后,将设置为Normal,当作第一次已经被使用
|
||
Normal获取后依然是Normal
|
||
Next/Next2获取后,还原成Normal
|
||
**
|
||
**参数说明:
|
||
LONG passc_time [in / ] - DCSHSAGetPasscodeTime取得时间
|
||
char *pdatabase64 [in / out] - 引擎数据包的base64字符串
|
||
char *prn [in / out] - 返回的tokencode,外部分配数组
|
||
**
|
||
**返回类型: int
|
||
** EMSUCCESS 验证通过,除了EMBADREC,所有的返回必须保存PDATA到数据库
|
||
** EMBADARG 参数错误,参数可能为空指针
|
||
** EMBADREC 严重错误!PDATA内部数据有问题,如签名等
|
||
** EMTIMRNG passcode时间错误,不在生命期限内
|
||
** EMNOTASSIGNED 令牌还没有分配
|
||
** EMDISABLE 令牌处于禁用状态
|
||
** EMFOREVERDISABLE 令牌被永久禁用,可能是时间偏移超过12小时
|
||
** EMBADTYPE 错误的令牌类型
|
||
**
|
||
**
|
||
**其他说明: 建议每一次获得动态口令后都应该保存pdatabase64,如果对性能有要求,也可以不保存
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-3-28 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetCustomTokenPasscode (ULONG passc_time, char *pdataBase64, char *prn);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSABase64Encode
|
||
**
|
||
**功能描述: 对二进制流进行编码,形成可见字符
|
||
**
|
||
**参数说明:
|
||
unsigned char * binaryDataPtr [in / ] - 二进制流
|
||
int binaryDataLength [in / ] - 二进制流长度
|
||
char * stringData [in / out] - 可见字符串,外部分配空间
|
||
int *stringDataLength [in / out] - 可见字符串长度
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMSUCCESS 成功
|
||
** DCSHEMBASE64CODEERR 失败
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-19 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSABase64Encode( unsigned char * binaryDataPtr, int binaryDataLength, char * stringData ,int *stringDataLength );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSABase64Decode
|
||
**
|
||
**功能描述: 对base64编码进行解码,获得二进制流
|
||
**
|
||
**参数说明:
|
||
char * stringData [in / ] - 可见字符串
|
||
int stringDataLen [in / ] - 可见字符串长度
|
||
unsigned char * binaryDataPtr [in / out] - 二进制流,外部分配空间
|
||
int * binaryDataLength [in / out] - 二进制流的长度
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMSUCCESS 成功
|
||
** DCSHEMBASE64CODEERR 失败
|
||
**
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-8-19 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSABase64Decode( char * stringData, int stringDataLen, unsigned char * binaryDataPtr, int * binaryDataLength );
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAUpdateNewSeedForICBC
|
||
**
|
||
**功能描述: 更新种子数据,工行使用了身份证码的数字与种子重新异或后,得到新的种子
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - 种子数据
|
||
char *cID [in / ] - 异或的数字,应该是9byte
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数错误
|
||
** DCSHEMICBCHAVEXOR 已经异或过了
|
||
** DCSHEMSUCCESS 成功
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-11-19 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAUpdateNewSeedForICBC(PTTOKENRECORDDATA pdata, char *cID );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAICBCActiveUnlockAlg
|
||
**
|
||
**功能描述: 工行令牌的种子二次变形算法和令牌解锁算法
|
||
**
|
||
**参数说明:
|
||
BYTE *bSeed [in / ] - 种子,变形之前为老种子,变形之后为新种子,20字节
|
||
int iSeedLen [in / ] - 种子长度,工行固定为20字节,固定为20
|
||
char *cChallengeCode [in / ] - 挑战码,变形时为激活码6数字,后补0x00,0x00,解锁时为解锁码8数字
|
||
int iChallengeCodeLen [in / ] - 挑战码的长度,固定为8
|
||
char *cResponseCode [in / out] - 响应码,即校验码或者解锁码,外部分配空间
|
||
int iResponseCodeLen [in / ] - 响应码长度,固定为6
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMCHECKLENERR 指定的响应码长度错误
|
||
** DCSHEMACTIVELENERR 挑战码的长度错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明: 建议对Msg的数据长度补齐8Byte
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-12-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAICBCActiveUnlockAlg( BYTE *bSeed, int iSeedLen, char *cChallengeCode, int iChallengeCodeLen, char *cResponseCode, int iResponseCodeLen );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAICBCGenerateNewSeedAlg
|
||
**
|
||
**功能描述: 工行令牌变形得到新种子算法,需要输入激活码和校验码
|
||
**
|
||
**参数说明:
|
||
BYTE *bSeed [in / ] - 种子数据,20字节
|
||
int iSeedLen [in / ] - 种子长度,20
|
||
char *cChallengeCode [in / ] - 激活码,激活码为6个数字,输入时后补0x00,0x00
|
||
int iChallengeCodeLen [in / ] - 激活码的长度,8
|
||
char *cResponseCode [in / ] - 校验码,6数字字符
|
||
int iResponseCodeLen [in / ] - 校验码的长度6
|
||
BYTE *bNewSeed [in / out] - 新的种子,外部分配空间,至少20字节
|
||
int *iNewSeedLen [in / out] - 新种子长度,20
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMCHECKLENERR 指定的响应码长度错误
|
||
** DCSHEMACTIVELENERR 挑战码的长度错误
|
||
** DCSHEMACTIVCHECKERR 激活码校验失败,不进行变形
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-12-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAICBCGenerateNewSeedAlg( BYTE *bSeed, int iSeedLen, char *cChallengeCode, int iChallengeCodeLen, char *cResponseCode, int iResponseCodeLen , BYTE *bNewSeed, int *iNewSeedLen);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAICBCTimeTokeAlg
|
||
**
|
||
**功能描述: 工行的时间型动态口令算法
|
||
**
|
||
**参数说明:
|
||
BYTE *bSeed [in / ] - 种子,20字节
|
||
int iSeedLen [in / ] - 种子长度,20
|
||
BYTE *bTokenTime [in / ] - 时间数据,注意大头字序,8字节
|
||
int iTokenTimeLen [in / ] - 时间数据长度,固定为8
|
||
char *cTokenCode [in / out] - 动态口令,6数字字符,外部分配空间
|
||
int iTokenCodeLen [in / ] - 动态口令长度,固定为6
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMPRNLEN 动态口令长度错误
|
||
** DCSHEMBIGTIMELENERR 大头字序的时间长度错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-12-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAICBCTimeTokeAlg( BYTE *bSeed, int iSeedLen, BYTE *bTokenTime, int iTokenTimeLen, char *cTokenCode, int iTokenCodeLen );
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAICBCChallengeResponseAlg
|
||
**
|
||
**功能描述: 工行的时间挑战应答型动态口令算法
|
||
**
|
||
**参数说明:
|
||
BYTE *bSeed [in / ] - 种子,20字节
|
||
int iSeedLen [in / ] - 种子长度,20
|
||
BYTE *bTokenTime [in / ] - 时间数据,大头字序,8字节
|
||
int iTokenTimeLen [in / ] - 时间长度,固定为8
|
||
char *cResponse [in / ] - 挑战问题,字符串
|
||
unsigned int iResponseLen [in / ] - 最大长度64
|
||
char *cTokenCode [in / out] - 动态口令,6数字字符,外部分配空间
|
||
int iTokenCodeLen [in / ] - 动态口令长度,固定为6
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMPRNLEN 动态口令长度错误
|
||
** DCSHEMBIGTIMELENERR 大头字序的时间长度错误
|
||
** DCSHEMCHANLENERR 挑战问题的的长度大于64,错误
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-12-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAICBCChallengeResponseAlg( BYTE *bSeed, int iSeedLen, BYTE *bTokenTime, int iTokenTimeLen, char *cResponse, unsigned int iResponseLen, char *cTokenCode, int iTokenCodeLen );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAICBCPinLockedAlg
|
||
**
|
||
**功能描述: 工行令牌的PIN输入错误的锁定码产生算法
|
||
**
|
||
**参数说明:
|
||
BYTE *bSeed [in / ] - 种子数据,20字节
|
||
int iSeedLen [in / ] - 种子长度,20
|
||
BYTE *bTokenTime [in / ] - 时间数据,大头字序,8字节
|
||
int iTokenTimeLen [in / ] - 时间数据长度,8
|
||
char *cPin [in / ] - 令牌的PIN码,6数字字符,后补0x00,0x00
|
||
unsigned int iPinLen [in / ] - PIN码长度,8
|
||
char *cPinLockedCode [in / out] - 令牌的锁定码,8数字字符
|
||
int iPinLockedCodeLen [in / ] - 锁定码长度,8
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMPRNLEN 动态口令长度错误
|
||
** DCSHEMBIGTIMELENERR 大头字序的时间长度错误
|
||
** DCSHEMCHANLENERR 挑战问题的的长度大于64,错误
|
||
** DCSHEMPINLEN Pin码长度错误
|
||
** DCSHENUNLOCKPINERR 令牌解锁码的字符串长度错误,8数字
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-12-22 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAICBCPinLockedAlg( BYTE *bSeed, int iSeedLen, BYTE *bTokenTime, int iTokenTimeLen, char *cPin, unsigned int iPinLen, char *cPinLockedCode, int iPinLockedCodeLen );
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAConvertICBCTokenSeed
|
||
**
|
||
**功能描述: 第一次使用时转换原始的种子数据
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] - pdata数据
|
||
char *cActiveCode [in / ] - 激活码,12个数字
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMPRNLEN 动态口令长度错误
|
||
** DCSHEMBIGTIMELENERR 大头字序的时间长度错误
|
||
** DCSHEMCHANLENERR 挑战问题的的长度大于64,错误
|
||
** DCSHEMPINLEN Pin码长度错误
|
||
** DCSHENUNLOCKPINERR 令牌解锁码的字符串长度错误,8数字
|
||
** DCSHEMSUCCESS 成功**
|
||
**
|
||
**其他说明: 激活码被保存在ucUserLastName中
|
||
原始种子被保存在ucUserFirstName种
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAConvertICBCTokenSeed(PTTOKENRECORDDATA pdata, char *cActiveCode );
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAGetICBCActiveCode
|
||
**
|
||
**功能描述: 转换之前获得激活码,12个数字
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / ] - pdata
|
||
char *cActiveCode [in / out] - 令牌激活码,12个数字,外部应送入12以上的空间
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMBADARG 参数送入了空指针
|
||
** DCSHEMSEEDLENERR 种子长度错误
|
||
** DCSHEMPRNLEN 动态口令长度错误
|
||
** DCSHEMBIGTIMELENERR 大头字序的时间长度错误
|
||
** DCSHEMCHANLENERR 挑战问题的的长度大于64,错误
|
||
** DCSHEMPINLEN Pin码长度错误
|
||
** DCSHENUNLOCKPINERR 令牌解锁码的字符串长度错误,8数字
|
||
** DCSHEMSUCCESS 成功
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAGetICBCActiveCode(PTTOKENRECORDDATA pdata, char *cActiveCode );
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: SM3
|
||
**
|
||
**功能描述: 国密刚公开的SM3算法
|
||
**
|
||
**参数说明:
|
||
unsigned char *Block [in / ] - SM3的单个块运算
|
||
unsigned int ulBlock [in / ] - 单个块长度,固定为64
|
||
unsigned char *bSM3HashValue [in / out] - SM3摘要
|
||
**
|
||
**返回类型: int
|
||
**
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-10 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSASM3(unsigned char *Block, unsigned int ulBlock, unsigned char *bSM3HashValue);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateTimeTokencodeRange -- 测试专用
|
||
**
|
||
**功能描述: 创建一段时间范围内的动态口令
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateTimeTokencodeRange(PTTOKENRECORDDATA pdata);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateTimeTokencode -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateTimeTokencode(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateTimeTokencode_Host -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateTimeTokencode_Host(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateEventTokencode -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateEventTokencode(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateChallengeResponsecode -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateChallengeResponsecode(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateTimeTokencodeSig -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateTimeTokencodeSig(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateTimeTokencodeATM -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateTimeTokencodeATM(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestCreateEventTokencodeATM -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
void [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestCreateEventTokencodeATM(void);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestPrintCardInfo -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
char *CardFileName [in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestPrintCardInfo(char *CardFileName);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHChangeTokenSeed -- 测试专用
|
||
**
|
||
**功能描述:
|
||
**
|
||
**参数说明:
|
||
PTTOKENRECORDDATA pdata [in / out] -
|
||
**
|
||
**返回类型: int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2011-1-11 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAChangeTokenSeed(PTTOKENRECORDDATA pdata);
|
||
|
||
|
||
#if OS_SELECT_WINDOWS
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckShecaCert
|
||
**
|
||
**功能描述: 接入上海CA的开发包,此接口初始化eKey,并读取证书信息,以用来检测eKey的正常
|
||
**
|
||
**参数说明:
|
||
char *cPrikeyPassword [in / ] - 私钥的密钥
|
||
char* pCertInfoFile [in / out] - 证书的一些信息,保存到文件
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMSHECADLLERR 上海CA的接口不存在,请按装上海CA的证书管理器
|
||
** DCSHEMSHECAKEYERR eKey操作失败,请检查eKey是否正常
|
||
** DCSHEMSUCCESS 成功,可以打印证书信息
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-9-2 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckShecaCert (char *cPrikeyPassword, char* pCertInfoFile);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSACheckSJK0817E
|
||
**
|
||
**功能描述: 检测华正天网的加密卡是否正常,并且进行了加解密运算,SM1
|
||
**
|
||
**参数说明:
|
||
[in / out] -
|
||
**
|
||
**返回类型: int
|
||
** DCSHEMPCIOPENERR 加密卡初始化失败
|
||
** DCSHEMPCISESSIONERR 创建连接失败
|
||
** DCSHEMPCIOPERERR 加密卡运算失败
|
||
** DCSHEMSUCCESS 成功
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-9-2 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSACheckSJK0817E ();
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: DCSHSAMakePubkeyEncRecord
|
||
**
|
||
**功能描述: 用户的公钥加密会话密钥数据
|
||
**
|
||
**参数说明:
|
||
char *userCertPath [in / ] - 用户证书的路径
|
||
unsigned char *pRecordData [in / ] - 会话密钥,16字节
|
||
unsigned int RecordDataLen [in / ] - 数据长度,16
|
||
unsigned char *pEvpSigData [in / out] - 加密的数据,128字节,外部分配空间
|
||
unsigned int EvpSigDataLen [in / out] - 加密的数据长度,应该是128
|
||
**
|
||
**返回类型: int
|
||
** EMREADUSERCERTERR 读取用户证书失败
|
||
** EMDECUSERCERTERR 解析用户证书失败
|
||
** EMSUCCESS 成功
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2008-6-12 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int DCSHSAMakePubkeyEncRecord (char *userCertPath, unsigned char *pRecordData, unsigned int RecordDataLen, unsigned char *pEvpSigData, unsigned int *EvpSigDataLen);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestRandom
|
||
**
|
||
**功能描述: 真随机数测试
|
||
**
|
||
**参数说明:
|
||
int iNumber [in / ] - 次数
|
||
**
|
||
**返回类型: DCSHCOREAPI_API int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-9-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int TestRandom(int iNumber);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestSM1
|
||
**
|
||
**功能描述: SM1算法测试
|
||
**
|
||
**参数说明:
|
||
int iNumber [in / ] - 次数
|
||
**
|
||
**返回类型: DCSHCOREAPI_API int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-9-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int TestSM1(int iNumber);
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestSM3
|
||
**
|
||
**功能描述: SM3算法测试
|
||
**
|
||
**参数说明:
|
||
int iNumber [in / ] - 次数
|
||
**
|
||
**返回类型: DCSHCOREAPI_API int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2010-9-7 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int TestSM3(int iNumber);
|
||
|
||
#endif
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestTokenCodeNumberIndex
|
||
**
|
||
**功能描述: 使用10个不同的种子,每个种子从tokentime=i*60计算10000个tokencode,
|
||
对10000个tokencode进行数字统计,计算0-9数字出现的频率
|
||
**
|
||
**参数说明:
|
||
int iAlgID [in / ] - 算法
|
||
**
|
||
**返回类型: int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-1-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int TestTokenCodeNumberIndex(int iAlgID);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestTokenCodeDoubleIdx
|
||
**
|
||
**功能描述: 设定5个时间点,在每个点随机创建若干个种子,并且在这时间点上计算tokencode
|
||
对若干个tokencode进行逐个比对,进行重复计数
|
||
“若干个”为传递参数,可指定
|
||
**
|
||
**参数说明:
|
||
int seedCount [in / ] - 每个时间点,创建seedCount个种子,计算seedCount个动态口令
|
||
** int iAlgID [in / ] - 算法
|
||
**返回类型: int
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-1-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API int TestTokenCodeDoubleIdx(int seedCount, int iAlgID);
|
||
|
||
|
||
/******************************************************************************
|
||
**
|
||
**函数名称: TestTokenCodePrefect
|
||
**
|
||
**功能描述: 测试验证动态口令的性能,1000000次验证
|
||
直接命中,计算1次
|
||
偏移1,计算2次
|
||
偏移3,计算6次
|
||
偏移5,计算10次
|
||
**
|
||
**参数说明:
|
||
[in / out] -
|
||
**
|
||
**返回类型: void
|
||
** [添加返回值说明]
|
||
**
|
||
**
|
||
**其他说明:
|
||
**
|
||
**历史: 日期 作者 行为
|
||
2009-1-16 杨波 Created
|
||
******************************************************************************/
|
||
DCSHCOREAPI_API void TestTokenCodePrefect(int MAXCYCLETEST, int iAlgID);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
|
||
|