diff --git a/public/signH5/1.html b/public/signH5/1.html new file mode 100644 index 000000000..f4eb26b1a --- /dev/null +++ b/public/signH5/1.html @@ -0,0 +1,715 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/signH5/anysignWebInterface.js b/public/signH5/anysignWebInterface.js new file mode 100644 index 000000000..364db17d3 --- /dev/null +++ b/public/signH5/anysignWebInterface.js @@ -0,0 +1,718 @@ +/** + * Created by fengbo on 14-7-4. + */ + + +document.write(""); +document.write(""); + +document.write(""); +document.write(""); +document.write(""); + +document.write(""); + +document.write(""); +document.write(""); +document.write(""); +document.write(""); + +document.write(""); +document.write(""); +// document.write(""); +document.write(""); + +var core; + +function AnySignApi() +{ + //functions return value +var RESULT_OK = 0; //操作成功 +var RESULT_ERROR = -1; //操作失败 +var EC_API_NOT_INITED = 1; //接口未初始化错误 +var EC_WRONG_CONTEXT_ID = 2; //context_id传值错误 +var EC_NATIVE_EXCEPTION = 3; //浏览器内部错误,可至Android/sdcard/AnySign/lastCrash.txt中查询具体错误 +var EC_TEMPLATE_NOT_SET = 4; //当没有配置模板时试图调用签名时弹出,因为不能对空数据做签名 +var EC_COMMENT_ALREADY_SHOW = 5; //批注框已经弹出 + +//constants +var CALLBACK_TYPE_SIGNATURE = 10; //签名框点击确认之后的回调,回调中包含签名快照 +var CALLBACK_TYPE_DIALOG_CANCEL = 11; //点击签名框"取消"按钮时的回调,同时也会触发dismiss回调 +var CALLBACK_TYPE_COMMENTSIGN = 12; //批注签名框点击确认之后的回调,回调中包含签名快照 +var CALLBACK_TYPE_GETVERSION = 13; //获得版本号 +var CALLBACK_TYPE_START_RECORDING = 14; +var CALLBACK_TYPE_STOP_RECORDING = 15; + + /** + * 初始化签名对象,通常从打开客户端到关闭客户端,中间只需要初始化一次。 + * 要求回调函数至少有3个参数,参数定义如下面callback参数定义 + * @param callback Function with 3 params(int context_id, int callback_type, String data) + * @param channel Function with 3 params(int context_id, int callback_type, String data) + * @returns {boolean} 是否初始化成功以及是否回调函数参数满足要求 + */ + this.initAnySignApi = function(callback,channel) + { + if(callback && (callback instanceof Function) && callback.length >= 3) + { + core = new anysignWebImpl(); + core._initAnySignApi(callback, channel); + return true; + } + else + { + return false; + } + } + + this.addDataObj = function(context_id, dataConfig) + { + if(!dataConfig instanceof DataConfig) + { + return false; + } + + return core._addDataObj(context_id, dataConfig); + } + + + + /** + * 配置一个签名,context_id区间为[20,30),20~29为普通签名,30~39为多字批示。 + * 根据signatureConfig配置签字相应属性。 + * @param context_id 签字对象唯一标识 + * @param signatureConfig 签字配置信息 + * @returns {boolean} + */ + this.addSignatureObj = function(context_id, signatureConfig) + { + if(!signatureConfig instanceof SignatureConfig) + return false; + + return core._addSignatureObj(context_id, signatureConfig); + } + + + /** + * 配置一个批注签名,context_id区间为[30,40),[300,400),20~29为普通签名,30~39为多字批示。 + * 根据signatureConfig配置签字相应属性。 + * @param context_id 签字对象唯一标识 + * @param signatureConfig 签字配置信息 + * @returns {boolean} + */ + this.addCommentObj = function(context_id, signatureConfig) + { + if(!signatureConfig instanceof SignatureConfig) + return false; + + return core._addCommentObj(context_id, signatureConfig); + } + + + + /** + + *添加证据接口 + + */ + + this.addEvidence = function(context_id, content, format, bioType,index) + + { + + return core._addEvidence(context_id, content, format, bioType,index); + + } + + /** + * 添加证据hash值 + * content:为Hash计算之后的值 + */ + this.addEvidenceHash = function(context_id, content, format, bioType,index) + { + return core._addEvidenceHash(context_id, content, format, bioType,index); + } + + + /** + * 配置一个公司签章 + * @param signatureConfig 公司签章对象 + * @returns {boolean} + */ + this.addCachetObj = function(cachetConfig) + { + if(!(cachetConfig instanceof CachetConfig)) + { + return false; + } + + return core._addChachetObj(cachetConfig); + } + + /** + * 暂未实现 + * 配置一个拍照对象,在#commitConfig()之前可以调用,context_id区间为[50,1000) + * @param context_ids 对象id数组,适用于多个相同配置的签字对象 + * @param photoConfig 照片的配置信息 + * @returns {boolean} 是否添加成功:true:成功;false:配置文件格式错误、context_ids不是数组或者长度为0 + */ + this.addPhotoObj = function(context_id, photoConfig) + { + if(!(photoConfig instanceof PhotoConfig)) + return false; + + return true; + } + + /** + * 暂未实现 + * 配置一个多媒体对象,在#commitConfig()之前可以调用,context_id区间为[50,1000) + * @param context_ids 对象id数组,适用于多个相同配置的签字对象 + * @param mediaConfig 多媒体的配置信息 + * @returns {boolean} 是否添加成功:true:成功;false:配置文件格式错误、context_ids不是数组或者长度为0 + */ + this.addMediaObj = function(context_id, mediaConfig) + { + if(!(mediaConfig instanceof MediaConfig)) + return false; + + return true; + } + + /** + * 设置表单数据,每次业务都需要set一次 + * @param template_type 签名所用的模板id, 即context id + * @param contentUtf8Str 表单数据,类型为Utf8字符串 + * @param template_serial 模板序列号 + * @param businessId 业务工单号 + * @returns {*} 是否设置成功 + */ + this.setTemplate = function(template_type, contentUtf8Str, businessId, template_serial) + { + if(core) + return core._setTemplate(template_type, contentUtf8Str, businessId, template_serial); + else + return false; + } + + /** + * 设置表单数据,每次业务都需要set一次 + * @param template_type 签名所用的模板id, 即context id + * @param orgData 表单数据,类型为Utf8字符串,传入原文即可 + * @returns {*} 是否设置成功 + */ + this.setOrgData = function(template_type, orgData) + { + if(core) + return core._setOrgData(template_type, orgData); + else + return false; + } + + this.setTID = function(tid) + { + return core._setTID(tid); + } + + /** + * + * @param context_id + * @param data utf8字符串或者uint8Array数组 + * @returns {*} 是否设置成功 + */ + this.setData = function(context_id, data) + { + return core._setData(context_id, data); + } + + /** + * 弹出根据context_id区分的普通、批示签名 + * @param context_id + * @return 是否成功弹出:成功:0 错误:相应EC错误码定义 + */ + this.showSignatureDialog = function(context_id) + { + return core._showSignatureDialog(context_id); + } + //单字签名 + this.showSingleSignDialog = function(context_id){ + return core._showSingleSignDialog(context_id); + } + + /** + * 弹出根据context_id区分的普通、批示签名 + * @param context_id + * @return 是否成功弹出:成功:0 错误:相应EC错误码定义 + */ + this.showCommentDialog = function(context_id) + { + return core._showCommentDialog(context_id); + } + + this.setIdentifyCallBack = function(callBack){ + return core._setIdentifyCallBack(callBack); + } + + + + /** + * 提交更改,一旦调用,在本次签名流程中不允许再设置表单数据(setTableData)和签名、拍照配置等信息 + */ + this.commitConfig = function() + { + return core._commitConfig(); + } + + /** + * 重新配置Api,调用之后可以设置表单数据(setTableData)和签名、拍照配置等信息 + * 注:前一次业务的签名、拍照等数据会被清空 + */ + this.resetConfig = function() + { + return core._resetConfig(); + } + + /** + * 一次业务完成(签名、拍照均做完)后,调用此接口返回签名状态位参数 + * @return 0 1 2 + */ + this.getSignatureStatus = function() + { + return core._getSignatureStatus(); + } + + /** + * 一次业务完成(签名、拍照均做完)后,调用此接口返回批注状态位参数 + * @return 0 1 2 + */ + this.getCommentStatus = function() + { + return core._getCommentStatus(); + } + + /** + * 一次业务完成(签名、拍照均做完)后,调用此接口判断上传诗句是否准备就绪 + * @return ture false + */ + this.isReadyToUpload = function() + { + return core._isReadyToUpload(); + } + + /** + * 一次业务完成(签名、拍照均做完)后,调用此接口获取须上传至信手书服务器的业务加密数据 + * PDF/HTML/XML模板签名 + * @return 加密的业务数据。 + */ + this.getUploadDataGram = function() + { + return core._getUploadDataGram(); + } + + /** + * 一次业务完成(签名、拍照均做完)后,调用此接口获取须上传至信手书服务器的业务加密数据 + * 数据签名 + * @return 加密的业务数据。 + */ + this.getUploadDataGramForText = function() + { + return core._getUploadDataGramForText(); + } + +// /** +// * 保存当前的数据 +// * @return 加密的业务数据。 +// */ +// this.saveBusiness = function(encKey) +// { +// return core._saveBusinessSession(encKey); +// } +// /** +// * 恢复之前保存的加密业务数据 +// */ +// this.restoreBusiness = function(encData, desKey) +// { +// return core._restoreBusinessSession(encData, desKey); +// } + + /** + * 获得版本信息 + * @param null + * @returns null + */ + this.getVersion = function() + { + return "AnySign_V1.3.3_Web_2.4.7"; + } + + /** + * 获取操作系统信息,格式为"操作系统名##版本号",如"android##4.1.2"、"ios##7.1.2" + * @returns {*} + */ + this.getOSInfo = function() + { + return core._getOSInfo(); + } +} + + /** + * 信手书数据容器,用于存放证据信息等数据 + * @constructor + */ + function DataConfig() + { + this.cid = 0; + this.name = null;//此数据项的名称 + this.format = null; + this.nessesary = true;//此DataObj是否为必须,即如果此DataObj数据为空,当nessesary为true时,getEncodedSignData会报错返空,isReadyToUpload返回false + } + + + /** + * 签名配置,配合AnySignApi实例的addSignatureObj函数为此次签名事务添加一个签名 + * @param signer 签名人,参考Signer定义 + * @param signRule 签名规则,参考SignRule_Tid等SignRule定义 + * @constructor + */ +function SignatureConfig(signer, signRule) +{ + if(!signer || !signRule) + { + throw "SignatureConfig constructor parameter signer or signRule could not be null."; + } + + if(!(signRule instanceof SignRule_KeyWord) && !(signRule instanceof SignRule_Tid) && !(signRule instanceof SignRule_XYZ) + && !(signRule instanceof SignRule_KeyWordV2) && !(signRule instanceof SignRule_KeyWordV3)) + { + throw "SignatureConfig constructor parameter signRule invalid, should be instance of SignRule_KeyWord or SignRule_Tid or SignRule_XYZ"; + } + + this.signer = signer;//签名人信息,为必填项 + + this.signRule = signRule;//签名放置到文档中的规则,如位置,大小等,为必填项 + + this.cid = 0; + this.title = "请投保人刘伟签名";//签字输入有效,签字框标题 + this.titleSpanFromOffset = 4;//当为普通签名时有效,表示title中需要放大显示字体的数组起始index + this.titleSpanToOffset = 5;//当为普通签名时有效,表示title中需要放大显示字体的数组结束index + + this.isTSS = false; + this.nessesary = false;//是否为必签项 + this.singleWidth = 500;//(只针对签名)生成的签字最大宽度(不排除实际签名宽度小于此值),单位像素 + this.singleHeight = 500;//(只针对签名)生成的签字最大高度(不排除实际签名高度小于此值),单位像素 + this.penColor = "#000000";//RGB,默认为黑色,每通道为0~255的16进制值,如#ffffff为白色 + this.signature_stroke_width = 7.5;//签名笔划粗细 + this.signature_max_times = 3;//签名手写识别错误上限 + this.signatureImgRatio = 1.0;//签名图片清晰度 + + this.timeTag = null;//签名人信息,为必填项, 1:时间在上、2:时间在下、3:时间在右 + this.isdistinguish = false;//是否开启识别 + this.ocrCapture = null;//识别参数 + +} + +/** + * 批注的配置信息 + * @param signer + * @param signRule + * @constructor + */ +function CommentConfig(signer, signRule) +{ + if(!signer || !signRule) + { + throw "CommentConfig constructor parameter signer or signRule could not be null."; + } + + if(!(signRule instanceof SignRule_KeyWord) && !(signRule instanceof SignRule_Tid) && !(signRule instanceof SignRule_XYZ) + && !(signRule instanceof SignRule_KeyWordV2) && !(signRule instanceof SignRule_KeyWordV3)) + { + throw "SignatureConfig constructor parameter signRule invalid, should be instance of SignRule_KeyWord or SignRule_Tid or SignRule_XYZ"; + } + + this.signer = signer;//签名人信息,为必填项 + this.signRule = signRule;//签名放置到文档中的规则,如位置,大小等,为必填项 + this.cid = 30;//批注索引值 + this.commitment = "本人已阅读保险条款、产品说明书和投保提示书,了解本产品的特点和保单利益的不确定性。"; + this.mass_words_in_single_line = 25;//批注图片每行多少字 + this.mass_word_height = 75;//每个字的大小的高 + this.mass_word_width = 50;//每个字的大小的宽 + this.penColor = "#000000";//RGB,默认为黑色,每通道为0~255的16进制值,如#ffffff为白色 + + this.comment_stroke_width = 7.5;//批注笔划粗细 + this.nessesary = false;//是否为必签项 + this.isdistinguish = false;//是否开启识别 + this.comment_max_times = 3;//批注手写识别错误上限 + this.commentImgRatio = 1.0;//批注图片清晰度 + + this.ocrCapture = null;//识别参数 + this.isShowBgText = true;//是否显示背景字 + this.currentEditBarTextColor = "#FF0000";//提示字的颜色 + this.mass_dlg_type = CommentInputType.Normal;//判断批注类型,不同类型打开不同的批注界面 + +} + + +function OCRCapture() +{ + this.text = "a"; + + this.IPAdress = ""; + + this.appID = ""; + + this.serviceID = ""; + + this.resolution = 80; + + this.language = Language.CHS; + + this.count = 10; +} + +/** + * 单位签章对象,配合AnySignApi实例的addCachetObj配置一个单位签章 + * @param signer 签名人,参考Signer + * @param signRule 签名规则,参考SignRule_KeyWord和SignRule_Tid + * @param isTss bool, 是否加盖时间戳,默认为false + * @constructor + */ +function CachetConfig(signer, signRule, isTss) +{ + if(!(signer instanceof Signer)) + { + throw "CachetConfig constructor parameter signer invalid"; + } + this.Signer = signer; + + if(!(signRule instanceof SignRule_KeyWord) && !(signRule instanceof SignRule_Tid) && !(signRule instanceof SignRule_XYZ) + && !(signRule instanceof SignRule_KeyWordV2) && !(signRule instanceof SignRule_KeyWordV3)) + { + throw "CachetConfig constructor parameter signRule invalid, should be instance of SignRule_KeyWord or SignRule_Tid or SignRule_XYZ"; + } + this.SignRule = signRule; + + this.IsTSS = isTss; +} + + +/** + * 关键字定位方式,寻找PDF中的关键字,根据关键字位置放置签名图片 + * @param keyword 关键字 + * @param keyWordAlignMethod 签字图片和关键字位置关系:等于1时,签字图片和关键字矩形重心重合 + * 等于2时,签字图片位于关键字正下方,中心线对齐;等于3时,签字图片位于关键字正右方,中心线对齐; + * 等于4时,签字图片左上角和关键字右下角重合,可能额外附加偏移量,详见构造函数的offset参数 + * @param keyWordOffset 当keyWordAlignMethod非零时,额外附加的偏移量,单位pt + * @param pageNo 全文第几个关键字,0为全部关键字都签,负数为从后往前数 + * @param KWIndex 与pageNo相同,为全文第几个关键字,0为全部关键字都签,负数为从后往前数 + * @constructor + * 注:SignRule_KeyWord建议客户不要再使用,使用SignRule_KeyWordV2 + */ +var SignRule_KeyWord = function(keyword, keyWordAlignMethod, keyWordOffset, pageNo, KWIndex) +{ + if(!keyword || keyword.length === 0) + { + throw "SignRule_KeyWordV2 constructor parameter keyword could not be null or empty"; + } + + if(keyWordAlignMethod !== 1 && keyWordAlignMethod !== 2 && keyWordAlignMethod !== 3 && keyWordAlignMethod != 4) + { + throw "SignRule_KeyWord constructor parameter keyWordAlignMethod invalid, should be one of '1' '2' '3' '4'"; + } + + this.RuleType = "0"; + + if(!isNaN(pageNo) && !isNaN(keyWordOffset) && !isNaN(KWIndex)) + { + this.KWRule = {KW:keyword, KWPos:keyWordAlignMethod, KWOffset:keyWordOffset, Pageno:pageNo,KWIndex:KWIndex, XOffset:0, YOffset:0}; + } +} + + + +/** + *根据关键字定位签名位置 + * @param keyWord 关键字字面值 + * @param xOffset X轴偏移量,适配关键字和规则 + * @param yOffset Y轴偏移量,适配关键字和规则 + * @param pageNo 全文第几个关键字,0为全部关键字都签,负数为从后往前数 + * @param KWIndex 与pageNo相同,为全文第几个关键字,0为全部关键字都签,负数为从后往前数 + * @constructor 批注暂不支持 + */ +var SignRule_KeyWordV2 = function(keyword, xOffset, yOffset, pageNo, KWIndex){ + if(!keyword || keyword.length === 0) + { + throw "SignRule_KeyWordV2 constructor parameter keyword could not be null or empty"; + } + this.RuleType = "0"; + + if(!isNaN(pageNo) && !isNaN(KWIndex)) + { + this.KWRule = {KW:keyword, KWPos: 0,KWOffset:0,XOffset:xOffset, YOffset:yOffset, Pageno :pageNo,KWIndex:KWIndex}; + } + +} + +/** + * 使用服务器规则配置签名 + * @param tid 服务器端生成的配置规则 + * @constructor + */ +var SignRule_Tid = function(tid) +{ + if(!tid || tid.length === 0) + { + throw "SignRule_Tid constructor parameter tid could not be null or empty"; + } + + this.RuleType = "2"; + + this.Tid = tid; +} + +/** + * 根据坐标定位签名方式 + * @param left 签名图片最左边坐标值,相对于PDF当页最左下角(0,0)点,向上和向右分别为X轴、Y轴正方向 + * @param top 签名图片顶边坐标值,相对于PDF当页最左下角(0,0)点,向上和向右分别为X轴、Y轴正方向 + * @param right 签名图片最右边坐标值,相对于PDF当页最左下角(0,0)点,向上和向右分别为X轴、Y轴正方向 + * @param bottom 签名图片底边坐标值,相对于PDF当页最左下角(0,0)点,向上和向右分别为X轴、Y轴正方向 + * @param pageNo 签名在PDF中的页码,从1开始 + * @param unit 坐标系单位,目前支持"dp"和"pt" + * @constructor + */ +var SignRule_XYZ = function(left, top, right, bottom, pageNo, unit) +{ + if(isNaN(left) || isNaN(top) || isNaN(right) || isNaN(bottom) || isNaN(pageNo)) + { + throw "SignRule_XYZ constructor parameter invalid, only float or int permitted"; + } + + if(right < left) + { + throw "SignRule_XYZ constructor left must be less than right" + } + + if(top < bottom) + { + throw "SignRule_XYZ constructor top must not be less than bottom" + } + + if(!unit || (unit !== "pt" && unit !== "dp")) + { + throw "SignRule_XYZ constructor parameter unit can only be 'dp' or 'pt'"; + } + + this.RuleType = "1"; + + this.XYZRule = {Left:left, Top:top, Right:right, Bottom:bottom, Pageno:pageNo, Unit:unit}; +} + +var Signer = function(name, id_num, Signer_Type) +{ + if(!name || !id_num || name.length === 0 || id_num.length === 0) + { + throw "Signer constructor parameter name and id could not be null or empty"; + } + + this.UName = name; + + this.IDNumber = id_num; + + if (Signer_Type) { + this.IDType = Signer_Type; + } else { + this.IDType = "1"; + } +} + +var TimeTag = function(position, format) +{ + if(!position || !format || position.length === 0 || format.length === 0) + { + throw "TimeTag constructor parameter { and position could not be null or empty"; + } + + this.Pos = position;//1:时间在上、2:时间在下、3:时间在右 + + this.Format = format; +} + +//用于DataConfig的format项,当此项为多媒体时使用,其它情况format项为null即可 +var DataFormat = +{ + IMAGE_GIF : "image/gif", + IMAGE_JPEG : "image/jpeg", + IMAGE_PNG : "image/png", + MEDIA_AU : "media/au", + MEDIA_AIFF : "media/aiff", + MEDIA_WAVE : "media/wave", + MEDIA_MIDI : "media/midi", + MEDIA_MP4 : "media/mp4", + MEDIA_M4V : "media/m4v", + MEDIA_3G2 : "media/3g2", + MEDIA_3GP2 : "media/3gp2", + MEDIA_3GP : "media/3gp", + MEDIA_3GPP : "media/3gpp", + ANYSIGN_SCRIPT : "anysign/script", + SCRIPT_PNG : "script/png", + REMARK_PNG : "remark/png", + STRING_TXT : "string/txt", + ZIP : "zip" +} + +var TemplateType = +{ + TEXT: 0, + XML : 10, + HTML : 11, + PDF : 12, + JSON : 13, + PRESERVED : 19 +}; + +var EncAlgType = +{ + EncAlg : "RSA" +}; + +var BioType = +{ + /** 签名人居民身份证正面 **/ + PHOTO_SIGNER_IDENTITY_CARD_FRONT : 0, + /** 签名人居民身份证背面 **/ + PHOTO_SIGNER_IDENTITY_CARD_BACK : 1, + /** 签署动作视频 **/ + VIDEO_SIGNER_ACTION : 2, + /** 其他视频 **/ + VIDEO_SIGNER_OTHER : 3, + /** 签名人复述录音 **/ + SOUND_SIGNER_RETELL : 4, + /** 签名人自定义录音 **/ + SOUND_SIGNER_OTHER : 5, + /** 签名人当前位置 **/ + SIGNER_POSITION : 6, + /** 签名人面部正面照 **/ + PHOTO_SIGNER_FACE : 1000, + /** 签名人其他证件照 **/ + PHOTO_SIGNER_CARD : 1020, + /** 签名动作照片 **/ + PHOTO_SIGNER_ACTION : 1040, + /** 签名现场环境照片 **/ + PHOTO_SIGNER_ENVIRONMENT : 1060, + /** 其他类型的照片 **/ + PHOTO_SIGNER_OTHER : 1600, + /** 其他类型的证据,包括字符串和文本 **/ + SIGNER_OTHER : 5000 +}; + +var Language = +{ + CHS : 1, + CHT : 2 +}; + +var CommentInputType = +{ + Scrollable : "scrollable", + Normal : "normal", + WhiteBoard : "whiteBoard" +} diff --git a/public/signH5/css/canvas_css.css b/public/signH5/css/canvas_css.css new file mode 100644 index 000000000..39947f3ae --- /dev/null +++ b/public/signH5/css/canvas_css.css @@ -0,0 +1,186 @@ + + +#tmp_canvas { + position: absolute; + left: 0px; right: 100%; + top: 0px; + cursor: crosshair; +} + + +.orange { + color: #fef4e9; + border: solid 1px #da7c0c; + background: #f78d1d; + background: -webkit-gradient(linear, left top, left bottom, from(#faa51a), + to(#f47a20) ); + background: -moz-linear-gradient(top, #faa51a, #f47a20); + filter: progid : DXImageTransform . Microsoft . + gradient(startColorstr = '#faa51a', endColorstr = '#f47a20'); +} +.orange:hover { + background: #f47c20; + background: -webkit-gradient(linear, left top, left bottom, from(#f88e11), + to(#f06015) ); + background: -moz-linear-gradient(top, #f88e11, #f06015); + filter: progid : DXImageTransform . Microsoft . + gradient(startColorstr = '#f88e11', endColorstr = '#f06015'); +} + +.orange:active { + color: #fcd3a5; + background: -webkit-gradient(linear, left top, left bottom, from(#f47a20), + to(#faa51a) ); + background: -moz-linear-gradient(top, #f47a20, #faa51a); + filter: progid : DXImageTransform . Microsoft . + gradient(startColorstr = '#f47a20', endColorstr = '#faa51a'); +} +.button { + display: inline-block; + zoom: 1; /* zoom and *display = ie7 hack for display:inline-block */ * + /*display: inline;*/ + display:table-cell; + vertical-align: baseline; + margin: 0 2px; + outline: none; + cursor: pointer; + text-align: center; + text-decoration: none; + padding: .5em 2em .55em; + text-shadow: 0 1px 1px rgba(0, 0, 0, .3); + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + border-radius: .5em; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .2); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .2); + box-shadow: 0 1px 2px rgba(0, 0, 0, .2); +} + + +#mesWindow{ + + z-index:8; + + -webkit-border-radius: .5em; + -moz-border-radius:.5em; + border-radius:.5em; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .2); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .2); + box-shadow: 0 1px 2px rgba(0, 0, 0, .2); + background:#fff; + border-radius: .5em; + + width: 80%; + position: absolute; + left: 10%; + top: 30%; +} + +#mesWindowTop{ + background-color: rgba(147, 152, 168, 0.20); + border-bottom:#eee 1px solid; + margin-left:4px; + padding:3px; + font-weight:bold; + text-align:center; + font-size:12px; +} + +#mesWindowContent{ + background-color: rgba(147, 152, 168, 0.20); + border-bottom: #d6d6d6 1px solid; + text-align:center; + font-size:12px; + padding: 60px 20px 60px 20px +} + +#mesWindow input{ + text-align:center; + font-size:13px; +} + +#mesWindowBottom{ + background-color: rgba(147, 152, 168, 0.20); + text-align: center; + padding: 10px 10px 10px 10px +} +#single_anysignCanvas{ + background: url(../image/qianming.png); + background-repeat: no-repeat; + position: absolute; +} +#single_signTitle{ + color: #E5E5E5; + text-align: center; + position: absolute; +} + +#comment_canvas{ + background: url(../image/chaolu.png); + background-repeat: no-repeat; + position: absolute; +} +#signTitle{ + color: #E5E5E5; + text-align: center; + position: absolute; +} +.single_tmpcanvascss{ + border:1px solid #888888 +} + +.button_new{ + /*width: 49.5%;*/ + + /*height: 35px;*/ + background: #ff722e; + text-align: center; + /*line-height: 35px;*/ + display: inline; + float: left; + font-size: 14pt!important; + text-decoration: none; + padding: 10px 20px; + border-radius: 10px; + color: #fff; +} +.single_tmpcanvascss{ + border:1px solid #888888 +} +.tmpcanvascss{ + border:1px solid #888888 +} +.btnContainer { + text-align: center; + font-size: 40pt; + width: 100%; + clear: both; + position: relative; + margin-top: 10; + /*bottom: 10;*/ +} +.comment_titlecss { + font-size: 20px; + clear: both +} + + +.signImagecss { + -webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none; + overflow: scroll; + border: 1px solid #888888/*rgb(229, 229, 229)*/ +} +#leftView{ + float: left; + clear: none; +} +#pizhuDiv{width:100%; border-top:#D5D5D5 1px solid; clear: both;} +.pzCss{float:left; text-align: center; border-right: #D5D5D5 1px solid; border-bottom: #D5D5D5 1px solid; color: #D5D5D5; position: relative;} +.canvasCss{width:100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 2;} + +.select_p{ + color: red; +} +.mass_anysign_p{ + cursor:pointer; +} \ No newline at end of file diff --git a/public/signH5/css/mw480Portrait.css b/public/signH5/css/mw480Portrait.css new file mode 100644 index 000000000..65581f185 --- /dev/null +++ b/public/signH5/css/mw480Portrait.css @@ -0,0 +1,56 @@ +#anysign_title { + font-size : 20pt; + margin: 0 0 0 0; + vertical-align: middle; + text-align: center; + display: table-cell; +} + +#anysign_title_single { + font-size : 20pt; + margin: 0 0 0 0; + vertical-align: middle; + text-align: center; + display: table-cell; +} + +#btnOK { + font-size : 10pt; +} + +#btnClear { + font-size : 10pt; +} + +#btnCancel { + font-size : 10pt; +} + +#btnBack { + font-size : 10pt; +} + +#btnContainerOuter +{ + margin: 0 0 0 0; + text-align: center; + vertical-align: middle; + display: table-cell; +} + +#btnContainerInner +{ +} + +#container { + border: 1px solid gray; + height: 70%; + width: 99%; + position: relative; +} + +#dialog { + + /*border:1px solid rgba(0,0,0, 0.4);*/ + border-radius:2px; +} \ No newline at end of file diff --git a/public/signH5/css/plugin.css b/public/signH5/css/plugin.css new file mode 100644 index 000000000..971453009 --- /dev/null +++ b/public/signH5/css/plugin.css @@ -0,0 +1,68 @@ +.fonts { + font-family: 'Arial Normal', 'Arial'; + font-weight: 400; + font-style: normal; + font-size: 20px; + color: #333333; + text-align: center; + line-height: normal; +} + +body { + font-size: 12px; + /*background: #333;*/ + font-family: 'Revalia', cursive, arial; +} + +#main { + width: 800px; + height: 480px; + background: #FFF; + color: #333; + border: 2px solid #FFF; + box-shadow: 0px 0px 10px #CCC; + border-radius: 5px; +} + +#main #mycamera { + height: 400px; + width: 100%; +} + +#main image { + margin-bottom: 50px; + background: #F8F8F8; + border-radius: 10px; + box-shadow: 0px 0px 5px #888; +} + +#main ul { + list-style: none; + margin: 0; + padding: 0; +} + +#main .photobooth { + border: 1px solid #ccc; + border-radius: 5px; +} + +.inputstyle { + width: 180px; + /*cursor: pointer;*/ + /*font-size: 15px;*/ + outline: medium none; + position: absolute; + z-index: 100; + /*filter:alpha(opacity=0);*/ + /*-moz-opacity:0;*/ + /*opacity:0;*/ + /*left:300px; + top: 0px;*/ +} + +.btn { + background: transparent; + color: blue; + border-style: none; +} \ No newline at end of file diff --git a/public/signH5/css/sp.css b/public/signH5/css/sp.css new file mode 100644 index 000000000..de061d4a7 --- /dev/null +++ b/public/signH5/css/sp.css @@ -0,0 +1,57 @@ +#main { +height:1800px; +padding-top:0px; +text-align:center; +} +#fullbg { +background-color:gray; +left:0; +opacity:0.5; +position:absolute; +top:0; +z-index:3; +filter:alpha(opacity=50); +-moz-opacity:0.5; +-khtml-opacity:0.5; +} +#dialog { +background-color:#fff; +/*border:1px solid rgba(0,0,0, 0.4);*/ +height:100%; +left:0; +top:0; +/*margin:-200px 0 0 -200px; */ + +position:fixed !important; /* 浮动对话框 */ +position:absolute; + +width:100%; +z-index:5; +border-radius:5px; +display:none; + + /* + -webkit-transform:rotate(90deg); + -moz-transform:rotate(90deg); + -o-transform:rotate(90deg); + -ms-transform:rotate(90deg); + */ +} +#dialog p { +margin:0 0 12px; +height:24px; +line-height:24px; +background:#CCCCCC; +} +#dialog p.close { +text-align:right; +padding-right:10px; +} +#dialog p.close a { +color:#fff; +text-decoration:none; +} + +.shanshuo{animation:shanshuo 1s infinite;-webkit-animation:shanshuo 1s infinite; display: none;} +@keyframes shanshuo{0%{opacity: 1}100%{opacity: 0}} +@-webkit-keyframes shanshuo{0%{ -webkit-opacity: 1}100%{ -webkit-opacity: 0}} diff --git a/public/signH5/css/sw1024.css b/public/signH5/css/sw1024.css new file mode 100644 index 000000000..b82621f55 --- /dev/null +++ b/public/signH5/css/sw1024.css @@ -0,0 +1,45 @@ + +#anysign_title { + font-size : 30pt; + margin: 0 0 0 0; + vertical-align: middle; + text-align: center; + display: table-cell; +} + +#btnOK { + font-size : 25pt; +} + +#btnClear { + font-size : 25pt; +} + +#btnCancel { + font-size : 25pt; +} + +#btnContainerOuter +{ + margin: 0 0 0 0; + text-align: center; + vertical-align: middle; + display: table-cell; +} + +#btnContainerInner +{ +} + +#container { + border: 2px solid gray; + height: 70%; + width: 99%; + position: relative; +} + +#dialog { + + /*border:2px solid rgba(0,0,0, 0.4);*/ + border-radius:2px; +} \ No newline at end of file diff --git a/public/signH5/image/bi.png b/public/signH5/image/bi.png new file mode 100644 index 000000000..9c5132c18 Binary files /dev/null and b/public/signH5/image/bi.png differ diff --git a/public/signH5/image/chaolu.png b/public/signH5/image/chaolu.png new file mode 100644 index 000000000..e3f12a0ec Binary files /dev/null and b/public/signH5/image/chaolu.png differ diff --git a/public/signH5/image/image.png b/public/signH5/image/image.png new file mode 100644 index 000000000..25f3b51a6 Binary files /dev/null and b/public/signH5/image/image.png differ diff --git a/public/signH5/image/meter.png b/public/signH5/image/meter.png new file mode 100644 index 000000000..511f99afc Binary files /dev/null and b/public/signH5/image/meter.png differ diff --git a/public/signH5/image/qianming.png b/public/signH5/image/qianming.png new file mode 100644 index 000000000..1572e57a2 Binary files /dev/null and b/public/signH5/image/qianming.png differ diff --git a/public/signH5/libs/CryptoJS v3.1.2/components/aes-min.js b/public/signH5/libs/CryptoJS v3.1.2/components/aes-min.js new file mode 100644 index 000000000..8b34064d3 --- /dev/null +++ b/public/signH5/libs/CryptoJS v3.1.2/components/aes-min.js @@ -0,0 +1,10 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +(function(){for(var q=CryptoJS,x=q.lib.BlockCipher,r=q.algo,j=[],y=[],z=[],A=[],B=[],C=[],s=[],u=[],v=[],w=[],g=[],k=0;256>k;k++)g[k]=128>k?k<<1:k<<1^283;for(var n=0,l=0,k=0;256>k;k++){var f=l^l<<1^l<<2^l<<3^l<<4,f=f>>>8^f&255^99;j[n]=f;y[f]=n;var t=g[n],D=g[t],E=g[D],b=257*g[f]^16843008*f;z[n]=b<<24|b>>>8;A[n]=b<<16|b>>>16;B[n]=b<<8|b>>>24;C[n]=b;b=16843009*E^65537*D^257*t^16843008*n;s[f]=b<<24|b>>>8;u[f]=b<<16|b>>>16;v[f]=b<<8|b>>>24;w[f]=b;n?(n=t^g[g[g[E^t]]],l^=g[g[l]]):n=l=1}var F=[0,1,2,4,8, +16,32,64,128,27,54],r=r.AES=x.extend({_doReset:function(){for(var c=this._key,e=c.words,a=c.sigBytes/4,c=4*((this._nRounds=a+6)+1),b=this._keySchedule=[],h=0;h>>32-p[b],a=a+r|0,t=r,r=j,j=h<<10|h>>>22,h=g,g=a,a=u+e[v+q[b]]|0,a=16>b?a+((k^(l|~m))+d[0]):32>b?a+((k&m|l&~m)+d[1]):48>b?a+(((k|~l)^m)+d[2]):64>b?a+((k&l|~k&m)+d[3]):a+((k^l^m)+d[4]),a|=0,a=a< >>0?1:0),b=b+c,j=j+u+(b>>>0 >>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<
+l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
+(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b< >>2]|=(B[b>>>2]>>>24-8*(b%4)&255)<<24-8*((f+b)%4);else if(65535 >>0?1:0);R=m.low=R+I;m.high=ea+U+(R>>>0>>0?1:0);
+S=L.low=S+J;L.high=fa+V+(S>>>0 >>0?1:0);T=m.low=T+J;m.high=fa+W+(T>>>0 >>6*(3-d)&63));if(l=c.charAt(64))for(;e.length%4;)e.push(l);return e.join("")},parse:function(e){var l=e.length,p=this._map,c=p.charAt(64);c&&(c=e.indexOf(c),-1!=c&&(l=c));for(var c=[],s=0,b=0;b<
+l;b++)if(b%4){var d=p.indexOf(e.charAt(b-1))<<2*(b%4),a=p.indexOf(e.charAt(b))>>>6-2*(b%4);c[s>>>2]|=(d|a)<<24-8*(s%4);s++}return k.create(c,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
+(function(q){function k(a,b,c,d,m,n,r){a=a+(b&c|~b&d)+m+r;return(a< >>2]&255}};e.BlockCipher=d.extend({cfg:d.cfg.extend({mode:a,padding:u}),reset:function(){d.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
+this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var w=e.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),a=(k.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?p.create([1398893684,
+1701076831]).concat(a).concat(b):b).toString(s)},parse:function(a){a=s.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=p.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return w.create({ciphertext:a,salt:c})}},v=e.SerializableCipher=l.extend({cfg:l.extend({format:a}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var e=a.createEncryptor(c,d);b=e.finalize(b);e=e.cfg;return w.create({ciphertext:b,key:c,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding,blockSize:a.blockSize,formatter:d.format})},
+decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),k=(k.kdf={}).OpenSSL={execute:function(a,c,d,e){e||(e=p.random(8));a=b.create({keySize:c+d}).compute(a,e);d=p.create(a.words.slice(c),4*d);a.sigBytes=4*c;return w.create({key:a,iv:d,salt:e})}},H=e.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:k}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);c=d.kdf.execute(c,
+a.keySize,a.ivSize);d.iv=c.iv;a=v.encrypt.call(this,a,b,c.key,d);a.mixIn(c);return a},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);c=d.kdf.execute(c,a.keySize,a.ivSize,b.salt);d.iv=c.iv;return v.decrypt.call(this,a,b,c.key,d)}})}();
+(function(){function q(){for(var b=this._X,d=this._C,a=0;8>a;a++)p[a]=d[a];d[0]=d[0]+1295307597+this._b|0;d[1]=d[1]+3545052371+(d[0]>>>0 >>0?1:0)|0;d[2]=d[2]+886263092+(d[1]>>>0 >>0?1:0)|0;d[3]=d[3]+1295307597+(d[2]>>>0 >>0?1:0)|0;d[4]=d[4]+3545052371+(d[3]>>>0 >>0?1:0)|0;d[5]=d[5]+886263092+(d[4]>>>0 >>0?1:0)|0;d[6]=d[6]+1295307597+(d[5]>>>0 >>0?1:0)|0;d[7]=d[7]+3545052371+(d[6]>>>0 >>0?1:0)|0;this._b=d[7]>>>0 >>0?1:0;for(a=0;8>a;a++){var e=b[a]+d[a],k=e&65535,
+l=e>>>16;c[a]=((k*k>>>17)+k*l>>>15)+l*l^((e&4294901760)*e|0)+((e&65535)*e|0)}b[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0;b[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0;b[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0;b[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0;b[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0;b[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0;b[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0;b[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var k=CryptoJS,e=k.lib.StreamCipher,l=[],p=[],c=[],s=k.algo.RabbitLegacy=
+e.extend({_doReset:function(){for(var b=this._key.words,c=this.cfg.iv,a=this._X=[b[0],b[3]<<16|b[2]>>>16,b[1],b[0]<<16|b[3]>>>16,b[2],b[1]<<16|b[0]>>>16,b[3],b[2]<<16|b[1]>>>16],b=this._C=[b[2]<<16|b[2]>>>16,b[0]&4294901760|b[1]&65535,b[3]<<16|b[3]>>>16,b[1]&4294901760|b[2]&65535,b[0]<<16|b[0]>>>16,b[2]&4294901760|b[3]&65535,b[1]<<16|b[1]>>>16,b[3]&4294901760|b[0]&65535],e=this._b=0;4>e;e++)q.call(this);for(e=0;8>e;e++)b[e]^=a[e+4&7];if(c){var a=c.words,c=a[0],a=a[1],c=(c<<8|c>>>24)&16711935|(c<<
+24|c>>>8)&4278255360,a=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,e=c>>>16|a&4294901760,k=a<<16|c&65535;b[0]^=c;b[1]^=e;b[2]^=a;b[3]^=k;b[4]^=c;b[5]^=e;b[6]^=a;b[7]^=k;for(e=0;4>e;e++)q.call(this)}},_doProcessBlock:function(b,c){var a=this._X;q.call(this);l[0]=a[0]^a[5]>>>16^a[3]<<16;l[1]=a[2]^a[7]>>>16^a[5]<<16;l[2]=a[4]^a[1]>>>16^a[7]<<16;l[3]=a[6]^a[3]>>>16^a[1]<<16;for(a=0;4>a;a++)l[a]=(l[a]<<8|l[a]>>>24)&16711935|(l[a]<<24|l[a]>>>8)&4278255360,b[c+a]^=l[a]},blockSize:4,ivSize:2});k.RabbitLegacy=
+e._createHelper(s)})();
diff --git a/public/signH5/libs/CryptoJS v3.1.2/rollups/rabbit.js b/public/signH5/libs/CryptoJS v3.1.2/rollups/rabbit.js
new file mode 100644
index 000000000..5ea717ed4
--- /dev/null
+++ b/public/signH5/libs/CryptoJS v3.1.2/rollups/rabbit.js
@@ -0,0 +1,36 @@
+/*
+CryptoJS v3.1.2
+code.google.com/p/crypto-js
+(c) 2009-2013 by Jeff Mott. All rights reserved.
+code.google.com/p/crypto-js/wiki/License
+*/
+var CryptoJS=CryptoJS||function(q,k){var e={},l=e.lib={},p=function(){},c=l.Base={extend:function(a){p.prototype=this;var b=new p;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
+s=l.WordArray=c.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=k?b:4*a.length},toString:function(a){return(a||d).stringify(this)},concat:function(a){var b=this.words,m=a.words,n=this.sigBytes;a=a.sigBytes;this.clamp();if(n%4)for(var r=0;r>>2]|=(m[r>>>2]>>>24-8*(r%4)&255)<<24-8*((n+r)%4);else if(65535 >>6*(3-d)&63));if(l=c.charAt(64))for(;e.length%4;)e.push(l);return e.join("")},parse:function(e){var l=e.length,p=this._map,c=p.charAt(64);c&&(c=e.indexOf(c),-1!=c&&(l=c));for(var c=[],s=0,b=0;b<
+l;b++)if(b%4){var d=p.indexOf(e.charAt(b-1))<<2*(b%4),a=p.indexOf(e.charAt(b))>>>6-2*(b%4);c[s>>>2]|=(d|a)<<24-8*(s%4);s++}return k.create(c,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
+(function(q){function k(a,b,c,d,m,n,r){a=a+(b&c|~b&d)+m+r;return(a< >>2]&255}};e.BlockCipher=d.extend({cfg:d.cfg.extend({mode:a,padding:t}),reset:function(){d.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
+this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var w=e.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),a=(k.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?p.create([1398893684,
+1701076831]).concat(a).concat(b):b).toString(s)},parse:function(a){a=s.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=p.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return w.create({ciphertext:a,salt:c})}},v=e.SerializableCipher=l.extend({cfg:l.extend({format:a}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var e=a.createEncryptor(c,d);b=e.finalize(b);e=e.cfg;return w.create({ciphertext:b,key:c,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding,blockSize:a.blockSize,formatter:d.format})},
+decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),k=(k.kdf={}).OpenSSL={execute:function(a,c,d,e){e||(e=p.random(8));a=b.create({keySize:c+d}).compute(a,e);d=p.create(a.words.slice(c),4*d);a.sigBytes=4*c;return w.create({key:a,iv:d,salt:e})}},H=e.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:k}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);c=d.kdf.execute(c,
+a.keySize,a.ivSize);d.iv=c.iv;a=v.encrypt.call(this,a,b,c.key,d);a.mixIn(c);return a},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);c=d.kdf.execute(c,a.keySize,a.ivSize,b.salt);d.iv=c.iv;return v.decrypt.call(this,a,b,c.key,d)}})}();
+(function(){function q(){for(var b=this._X,d=this._C,a=0;8>a;a++)p[a]=d[a];d[0]=d[0]+1295307597+this._b|0;d[1]=d[1]+3545052371+(d[0]>>>0 >>0?1:0)|0;d[2]=d[2]+886263092+(d[1]>>>0 >>0?1:0)|0;d[3]=d[3]+1295307597+(d[2]>>>0 >>0?1:0)|0;d[4]=d[4]+3545052371+(d[3]>>>0 >>0?1:0)|0;d[5]=d[5]+886263092+(d[4]>>>0 >>0?1:0)|0;d[6]=d[6]+1295307597+(d[5]>>>0 >>0?1:0)|0;d[7]=d[7]+3545052371+(d[6]>>>0 >>0?1:0)|0;this._b=d[7]>>>0 >>0?1:0;for(a=0;8>a;a++){var e=b[a]+d[a],k=e&65535,
+l=e>>>16;c[a]=((k*k>>>17)+k*l>>>15)+l*l^((e&4294901760)*e|0)+((e&65535)*e|0)}b[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0;b[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0;b[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0;b[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0;b[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0;b[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0;b[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0;b[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}var k=CryptoJS,e=k.lib.StreamCipher,l=[],p=[],c=[],s=k.algo.Rabbit=
+e.extend({_doReset:function(){for(var b=this._key.words,c=this.cfg.iv,a=0;4>a;a++)b[a]=(b[a]<<8|b[a]>>>24)&16711935|(b[a]<<24|b[a]>>>8)&4278255360;for(var e=this._X=[b[0],b[3]<<16|b[2]>>>16,b[1],b[0]<<16|b[3]>>>16,b[2],b[1]<<16|b[0]>>>16,b[3],b[2]<<16|b[1]>>>16],b=this._C=[b[2]<<16|b[2]>>>16,b[0]&4294901760|b[1]&65535,b[3]<<16|b[3]>>>16,b[1]&4294901760|b[2]&65535,b[0]<<16|b[0]>>>16,b[2]&4294901760|b[3]&65535,b[1]<<16|b[1]>>>16,b[3]&4294901760|b[0]&65535],a=this._b=0;4>a;a++)q.call(this);for(a=0;8>
+a;a++)b[a]^=e[a+4&7];if(c){var a=c.words,c=a[0],a=a[1],c=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360,a=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,e=c>>>16|a&4294901760,k=a<<16|c&65535;b[0]^=c;b[1]^=e;b[2]^=a;b[3]^=k;b[4]^=c;b[5]^=e;b[6]^=a;b[7]^=k;for(a=0;4>a;a++)q.call(this)}},_doProcessBlock:function(b,c){var a=this._X;q.call(this);l[0]=a[0]^a[5]>>>16^a[3]<<16;l[1]=a[2]^a[7]>>>16^a[5]<<16;l[2]=a[4]^a[1]>>>16^a[7]<<16;l[3]=a[6]^a[3]>>>16^a[1]<<16;for(a=0;4>a;a++)l[a]=(l[a]<<8|l[a]>>>24)&
+16711935|(l[a]<<24|l[a]>>>8)&4278255360,b[c+a]^=l[a]},blockSize:4,ivSize:2});k.Rabbit=e._createHelper(s)})();
diff --git a/public/signH5/libs/CryptoJS v3.1.2/rollups/rc4.js b/public/signH5/libs/CryptoJS v3.1.2/rollups/rc4.js
new file mode 100644
index 000000000..aba420f5e
--- /dev/null
+++ b/public/signH5/libs/CryptoJS v3.1.2/rollups/rc4.js
@@ -0,0 +1,33 @@
+/*
+CryptoJS v3.1.2
+code.google.com/p/crypto-js
+(c) 2009-2013 by Jeff Mott. All rights reserved.
+code.google.com/p/crypto-js/wiki/License
+*/
+var CryptoJS=CryptoJS||function(s,l){var e={},n=e.lib={},p=function(){},b=n.Base={extend:function(c){p.prototype=this;var a=new p;c&&a.mixIn(c);a.hasOwnProperty("init")||(a.init=function(){a.$super.init.apply(this,arguments)});a.init.prototype=a;a.$super=this;return a},create:function(){var c=this.extend();c.init.apply(c,arguments);return c},init:function(){},mixIn:function(c){for(var a in c)c.hasOwnProperty(a)&&(this[a]=c[a]);c.hasOwnProperty("toString")&&(this.toString=c.toString)},clone:function(){return this.init.prototype.extend(this)}},
+d=n.WordArray=b.extend({init:function(c,a){c=this.words=c||[];this.sigBytes=a!=l?a:4*c.length},toString:function(c){return(c||q).stringify(this)},concat:function(c){var a=this.words,m=c.words,f=this.sigBytes;c=c.sigBytes;this.clamp();if(f%4)for(var r=0;r >>2]&255}};e.BlockCipher=q.extend({cfg:q.cfg.extend({mode:a,padding:u}),reset:function(){q.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
+this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var w=e.CipherParams=n.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),a=(l.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?p.create([1398893684,
+1701076831]).concat(a).concat(b):b).toString(d)},parse:function(a){a=d.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=p.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return w.create({ciphertext:a,salt:c})}},c=e.SerializableCipher=n.extend({cfg:n.extend({format:a}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var e=a.createEncryptor(c,d);b=e.finalize(b);e=e.cfg;return w.create({ciphertext:b,key:c,iv:e.iv,algorithm:a,mode:e.mode,padding:e.padding,blockSize:a.blockSize,formatter:d.format})},
+decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),l=(l.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=p.random(8));a=t.create({keySize:b+c}).compute(a,d);c=p.create(a.words.slice(b),4*c);a.sigBytes=4*b;return w.create({key:a,iv:c,salt:d})}},G=e.PasswordBasedCipher=c.extend({cfg:c.cfg.extend({kdf:l}),encrypt:function(a,b,d,e){e=this.cfg.extend(e);d=e.kdf.execute(d,
+a.keySize,a.ivSize);e.iv=d.iv;a=c.encrypt.call(this,a,b,d.key,e);a.mixIn(d);return a},decrypt:function(a,b,d,e){e=this.cfg.extend(e);b=this._parse(b,e.format);d=e.kdf.execute(d,a.keySize,a.ivSize,b.salt);e.iv=d.iv;return c.decrypt.call(this,a,b,d.key,e)}})}();
+(function(){function s(){for(var b=this._S,d=this._i,e=this._j,q=0,a=0;4>a;a++){var d=(d+1)%256,e=(e+b[d])%256,l=b[d];b[d]=b[e];b[e]=l;q|=b[(b[d]+b[e])%256]<<24-8*a}this._i=d;this._j=e;return q}var l=CryptoJS,e=l.lib.StreamCipher,n=l.algo,p=n.RC4=e.extend({_doReset:function(){for(var b=this._key,d=b.words,b=b.sigBytes,e=this._S=[],l=0;256>l;l++)e[l]=l;for(var a=l=0;256>l;l++){var n=l%b,a=(a+e[l]+(d[n>>>2]>>>24-8*(n%4)&255))%256,n=e[l];e[l]=e[a];e[a]=n}this._i=this._j=0},_doProcessBlock:function(b,
+d){b[d]^=s.call(this)},keySize:8,ivSize:0});l.RC4=e._createHelper(p);n=n.RC4Drop=p.extend({cfg:p.cfg.extend({drop:192}),_doReset:function(){p._doReset.call(this);for(var b=this.cfg.drop;0>>2]|=(h[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
+this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,
+1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},
+decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,
+b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();
+(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,
+16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>
+8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r
>>2]|=(c[b>>>2]>>>24-8*(b%4)&255)<<24-8*((e+b)%4);else if(65535