1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462 |
- var navigator2 = {
- appName: 'Netscape',
- userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
- };
- var window2 = {
- ASN1 : null,
- Base64 : null,
- Hex : null,
- crypto : null,
- href : null
- };
- var KJUR = null;
- if (typeof YAHOO == "undefined" || !YAHOO) {
- var YAHOO = {};
- }
- YAHOO.namespace = function() {
- var b = arguments,
- g = null,
- e, c, f;
- for (e = 0; e < b.length; e = e + 1) {
- f = ("" + b[e]).split(".");
- g = YAHOO;
- for (c = (f[0] == "YAHOO") ? 1 : 0; c < f.length; c = c + 1) {
- g[f[c]] = g[f[c]] || {};
- g = g[f[c]];
- }
- }
- return g;
- };
- YAHOO.log = function(d, a, c) {
- var b = YAHOO.widget.Logger;
- if (b && b.log) {
- return b.log(d, a, c);
- } else {
- return false;
- }
- };
- YAHOO.register = function(a, f, e) {
- var k = YAHOO.env.modules,
- c, j, h, g, d;
- if (!k[a]) {
- k[a] = {
- versions: [],
- builds: []
- };
- }
- c = k[a];
- j = e.version;
- h = e.build;
- g = YAHOO.env.listeners;
- c.name = a;
- c.version = j;
- c.build = h;
- c.versions.push(j);
- c.builds.push(h);
- c.mainClass = f;
- for (d = 0; d < g.length; d = d + 1) {
- g[d](c);
- }
- if (f) {
- f.VERSION = j;
- f.BUILD = h;
- } else {
- YAHOO.log("mainClass is undefined for module " + a, "warn");
- }
- };
- YAHOO.env = YAHOO.env || {
- modules: [],
- listeners: []
- };
- YAHOO.env.getVersion = function(a) {
- return YAHOO.env.modules[a] || null;
- };
- YAHOO.env.parseUA = function(d) {
- var e = function(i) {
- var j = 0;
- return parseFloat(i.replace(/\./g,
- function() {
- return (j++==1) ? "": ".";
- }));
- },
- h = navigator2,
- g = {
- ie: 0,
- opera: 0,
- gecko: 0,
- webkit: 0,
- chrome: 0,
- mobile: null,
- air: 0,
- ipad: 0,
- iphone: 0,
- ipod: 0,
- ios: null,
- android: 0,
- webos: 0,
- caja: h && h.cajaVersion,
- secure: false,
- os: null
- },
- c = d || (navigator2 && navigator2.userAgent),
- f = window2 && window2.location,
- b = f && f.href,
- a;
- g.secure = b && (b.toLowerCase().indexOf("https") === 0);
- if (c) {
- if ((/windows|win32/i).test(c)) {
- g.os = "windows";
- } else {
- if ((/macintosh/i).test(c)) {
- g.os = "macintosh";
- } else {
- if ((/rhino/i).test(c)) {
- g.os = "rhino";
- }
- }
- }
- if ((/KHTML/).test(c)) {
- g.webkit = 1;
- }
- a = c.match(/AppleWebKit\/([^\s]*)/);
- if (a && a[1]) {
- g.webkit = e(a[1]);
- if (/ Mobile\//.test(c)) {
- g.mobile = "Apple";
- a = c.match(/OS ([^\s]*)/);
- if (a && a[1]) {
- a = e(a[1].replace("_", "."));
- }
- g.ios = a;
- g.ipad = g.ipod = g.iphone = 0;
- a = c.match(/iPad|iPod|iPhone/);
- if (a && a[0]) {
- g[a[0].toLowerCase()] = g.ios;
- }
- } else {
- a = c.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/);
- if (a) {
- g.mobile = a[0];
- }
- if (/webOS/.test(c)) {
- g.mobile = "WebOS";
- a = c.match(/webOS\/([^\s]*);/);
- if (a && a[1]) {
- g.webos = e(a[1]);
- }
- }
- if (/ Android/.test(c)) {
- g.mobile = "Android";
- a = c.match(/Android ([^\s]*);/);
- if (a && a[1]) {
- g.android = e(a[1]);
- }
- }
- }
- a = c.match(/Chrome\/([^\s]*)/);
- if (a && a[1]) {
- g.chrome = e(a[1]);
- } else {
- a = c.match(/AdobeAIR\/([^\s]*)/);
- if (a) {
- g.air = a[0];
- }
- }
- }
- if (!g.webkit) {
- a = c.match(/Opera[\s\/]([^\s]*)/);
- if (a && a[1]) {
- g.opera = e(a[1]);
- a = c.match(/Version\/([^\s]*)/);
- if (a && a[1]) {
- g.opera = e(a[1]);
- }
- a = c.match(/Opera Mini[^;]*/);
- if (a) {
- g.mobile = a[0];
- }
- } else {
- a = c.match(/MSIE\s([^;]*)/);
- if (a && a[1]) {
- g.ie = e(a[1]);
- } else {
- a = c.match(/Gecko\/([^\s]*)/);
- if (a) {
- g.gecko = 1;
- a = c.match(/rv:([^\s\)]*)/);
- if (a && a[1]) {
- g.gecko = e(a[1]);
- }
- }
- }
- }
- }
- }
- return g;
- };
- YAHOO.env.ua = YAHOO.env.parseUA(); (function() {
- YAHOO.namespace("util", "widget", "example");
- if ("undefined" !== typeof YAHOO_config) {
- var b = YAHOO_config.listener,
- a = YAHOO.env.listeners,
- d = true,
- c;
- if (b) {
- for (c = 0; c < a.length; c++) {
- if (a[c] == b) {
- d = false;
- break;
- }
- }
- if (d) {
- a.push(b);
- }
- }
- }
- })();
- YAHOO.lang = YAHOO.lang || {}; (function() {
- var f = YAHOO.lang,
- a = Object.prototype,
- c = "[object Array]",
- h = "[object Function]",
- i = "[object Object]",
- b = [],
- g = {
- "&": "&",
- "<": "<",
- ">": ">",
- '"': """,
- "'": "'",
- "/": "/",
- "`": "`"
- },
- d = ["toString", "valueOf"],
- e = {
- isArray: function(j) {
- return a.toString.apply(j) === c;
- },
- isBoolean: function(j) {
- return typeof j === "boolean";
- },
- isFunction: function(j) {
- return (typeof j === "function") || a.toString.apply(j) === h;
- },
- isNull: function(j) {
- return j === null;
- },
- isNumber: function(j) {
- return typeof j === "number" && isFinite(j);
- },
- isObject: function(j) {
- return (j && (typeof j === "object" || f.isFunction(j))) || false;
- },
- isString: function(j) {
- return typeof j === "string";
- },
- isUndefined: function(j) {
- return typeof j === "undefined";
- },
- _IEEnumFix: (YAHOO.env.ua.ie) ?
- function(l, k) {
- var j, n, m;
- for (j = 0; j < d.length; j = j + 1) {
- n = d[j];
- m = k[n];
- if (f.isFunction(m) && m != a[n]) {
- l[n] = m;
- }
- }
- }: function() {},
- escapeHTML: function(j) {
- return j.replace(/[&<>"'\/`]/g,
- function(k) {
- return g[k];
- });
- },
- extend: function(m, n, l) {
- if (!n || !m) {
- throw new Error("extend failed, please check that " + "all dependencies are included.");
- }
- var k = function() {},
- j;
- k.prototype = n.prototype;
- m.prototype = new k();
- m.prototype.constructor = m;
- m.superclass = n.prototype;
- if (n.prototype.constructor == a.constructor) {
- n.prototype.constructor = n;
- }
- if (l) {
- for (j in l) {
- if (f.hasOwnProperty(l, j)) {
- m.prototype[j] = l[j];
- }
- }
- f._IEEnumFix(m.prototype, l);
- }
- },
- augmentObject: function(n, m) {
- if (!m || !n) {
- throw new Error("Absorb failed, verify dependencies.");
- }
- var j = arguments,
- l, o, k = j[2];
- if (k && k !== true) {
- for (l = 2; l < j.length; l = l + 1) {
- n[j[l]] = m[j[l]];
- }
- } else {
- for (o in m) {
- if (k || !(o in n)) {
- n[o] = m[o];
- }
- }
- f._IEEnumFix(n, m);
- }
- return n;
- },
- augmentProto: function(m, l) {
- if (!l || !m) {
- throw new Error("Augment failed, verify dependencies.");
- }
- var j = [m.prototype, l.prototype],
- k;
- for (k = 2; k < arguments.length; k = k + 1) {
- j.push(arguments[k]);
- }
- f.augmentObject.apply(this, j);
- return m;
- },
- dump: function(j, p) {
- var l, n, r = [],
- t = "{...}",
- k = "f(){...}",
- q = ", ",
- m = " => ";
- if (!f.isObject(j)) {
- return j + "";
- } else {
- if (j instanceof Date || ("nodeType" in j && "tagName" in j)) {
- return j;
- } else {
- if (f.isFunction(j)) {
- return k;
- }
- }
- }
- p = (f.isNumber(p)) ? p: 3;
- if (f.isArray(j)) {
- r.push("[");
- for (l = 0, n = j.length; l < n; l = l + 1) {
- if (f.isObject(j[l])) {
- r.push((p > 0) ? f.dump(j[l], p - 1) : t);
- } else {
- r.push(j[l]);
- }
- r.push(q);
- }
- if (r.length > 1) {
- r.pop();
- }
- r.push("]");
- } else {
- r.push("{");
- for (l in j) {
- if (f.hasOwnProperty(j, l)) {
- r.push(l + m);
- if (f.isObject(j[l])) {
- r.push((p > 0) ? f.dump(j[l], p - 1) : t);
- } else {
- r.push(j[l]);
- }
- r.push(q);
- }
- }
- if (r.length > 1) {
- r.pop();
- }
- r.push("}");
- }
- return r.join("");
- },
- substitute: function(x, y, E, l) {
- var D, C, B, G, t, u, F = [],
- p,
- z = x.length,
- A = "dump",
- r = " ",
- q = "{",
- m = "}",
- n,
- w;
- for (;;) {
- D = x.lastIndexOf(q, z);
- if (D < 0) {
- break;
- }
- C = x.indexOf(m, D);
- if (D + 1 > C) {
- break;
- }
- p = x.substring(D + 1, C);
- G = p;
- u = null;
- B = G.indexOf(r);
- if (B > -1) {
- u = G.substring(B + 1);
- G = G.substring(0, B);
- }
- t = y[G];
- if (E) {
- t = E(G, t, u);
- }
- if (f.isObject(t)) {
- if (f.isArray(t)) {
- t = f.dump(t, parseInt(u, 10));
- } else {
- u = u || "";
- n = u.indexOf(A);
- if (n > -1) {
- u = u.substring(4);
- }
- w = t.toString();
- if (w === i || n > -1) {
- t = f.dump(t, parseInt(u, 10));
- } else {
- t = w;
- }
- }
- } else {
- if (!f.isString(t) && !f.isNumber(t)) {
- t = "~-" + F.length + "-~";
- F[F.length] = p;
- }
- }
- x = x.substring(0, D) + t + x.substring(C + 1);
- if (l === false) {
- z = D - 1;
- }
- }
- for (D = F.length - 1; D >= 0; D = D - 1) {
- x = x.replace(new RegExp("~-" + D + "-~"), "{" + F[D] + "}", "g");
- }
- return x;
- },
- trim: function(j) {
- try {
- return j.replace(/^\s+|\s+$/g, "");
- } catch(k) {
- return j;
- }
- },
- merge: function() {
- var n = {},
- k = arguments,
- j = k.length,
- m;
- for (m = 0; m < j; m = m + 1) {
- f.augmentObject(n, k[m], true);
- }
- return n;
- },
- later: function(t, k, u, n, p) {
- t = t || 0;
- k = k || {};
- var l = u,
- s = n,
- q, j;
- if (f.isString(u)) {
- l = k[u];
- }
- if (!l) {
- throw new TypeError("method undefined");
- }
- if (!f.isUndefined(n) && !f.isArray(s)) {
- s = [n];
- }
- q = function() {
- l.apply(k, s || b);
- };
- j = (p) ? setInterval(q, t) : setTimeout(q, t);
- return {
- interval: p,
- cancel: function() {
- if (this.interval) {
- clearInterval(j);
- } else {
- clearTimeout(j);
- }
- }
- };
- },
- isValue: function(j) {
- return (f.isObject(j) || f.isString(j) || f.isNumber(j) || f.isBoolean(j));
- }
- };
- f.hasOwnProperty = (a.hasOwnProperty) ?
- function(j, k) {
- return j && j.hasOwnProperty && j.hasOwnProperty(k);
- }: function(j, k) {
- return ! f.isUndefined(j[k]) && j.constructor.prototype[k] !== j[k];
- };
- e.augmentObject(f, e, true);
- YAHOO.util.Lang = f;
- f.augment = f.augmentProto;
- YAHOO.augment = f.augmentProto;
- YAHOO.extend = f.extend;
- })();
- YAHOO.register("yahoo", YAHOO, {
- version: "2.9.0",
- build: "2800"
- });
- var CryptoJS = CryptoJS || (function(e, g) {
- var a = {};
- var b = a.lib = {};
- var j = b.Base = (function() {
- function n() {}
- return {
- extend: function(p) {
- n.prototype = this;
- var o = new n();
- if (p) {
- o.mixIn(p)
- }
- if (!o.hasOwnProperty("init")) {
- o.init = function() {
- o.$super.init.apply(this, arguments)
- }
- }
- o.init.prototype = o;
- o.$super = this;
- return o
- },
- create: function() {
- var o = this.extend();
- o.init.apply(o, arguments);
- return o
- },
- init: function() {},
- mixIn: function(p) {
- for (var o in p) {
- if (p.hasOwnProperty(o)) {
- this[o] = p[o]
- }
- }
- if (p.hasOwnProperty("toString")) {
- this.toString = p.toString
- }
- },
- clone: function() {
- return this.init.prototype.extend(this)
- }
- }
- } ());
- var l = b.WordArray = j.extend({
- init: function(o, n) {
- o = this.words = o || [];
- if (n != g) {
- this.sigBytes = n
- } else {
- this.sigBytes = o.length * 4
- }
- },
- toString: function(n) {
- return (n || h).stringify(this)
- },
- concat: function(t) {
- var q = this.words;
- var p = t.words;
- var n = this.sigBytes;
- var s = t.sigBytes;
- this.clamp();
- if (n % 4) {
- for (var r = 0; r < s; r++) {
- var o = (p[r >>> 2] >>> (24 - (r % 4) * 8)) & 255;
- q[(n + r) >>> 2] |= o << (24 - ((n + r) % 4) * 8)
- }
- } else {
- for (var r = 0; r < s; r += 4) {
- q[(n + r) >>> 2] = p[r >>> 2]
- }
- }
- this.sigBytes += s;
- return this
- },
- clamp: function() {
- var o = this.words;
- var n = this.sigBytes;
- o[n >>> 2] &= 4294967295 << (32 - (n % 4) * 8);
- o.length = e.ceil(n / 4)
- },
- clone: function() {
- var n = j.clone.call(this);
- n.words = this.words.slice(0);
- return n
- },
- random: function(p) {
- var o = [];
- for (var n = 0; n < p; n += 4) {
- o.push((e.random() * 4294967296) | 0)
- }
- return new l.init(o, p)
- }
- });
- var m = a.enc = {};
- var h = m.Hex = {
- stringify: function(p) {
- var r = p.words;
- var o = p.sigBytes;
- var q = [];
- for (var n = 0; n < o; n++) {
- var s = (r[n >>> 2] >>> (24 - (n % 4) * 8)) & 255;
- q.push((s >>> 4).toString(16));
- q.push((s & 15).toString(16))
- }
- return q.join("")
- },
- parse: function(p) {
- var n = p.length;
- var q = [];
- for (var o = 0; o < n; o += 2) {
- q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << (24 - (o % 8) * 4)
- }
- return new l.init(q, n / 2)
- }
- };
- var d = m.Latin1 = {
- stringify: function(q) {
- var r = q.words;
- var p = q.sigBytes;
- var n = [];
- for (var o = 0; o < p; o++) {
- var s = (r[o >>> 2] >>> (24 - (o % 4) * 8)) & 255;
- n.push(String.fromCharCode(s))
- }
- return n.join("")
- },
- parse: function(p) {
- var n = p.length;
- var q = [];
- for (var o = 0; o < n; o++) {
- q[o >>> 2] |= (p.charCodeAt(o) & 255) << (24 - (o % 4) * 8)
- }
- return new l.init(q, n)
- }
- };
- var c = m.Utf8 = {
- stringify: function(n) {
- try {
- return decodeURIComponent(escape(d.stringify(n)))
- } catch(o) {
- throw new Error("Malformed UTF-8 data")
- }
- },
- parse: function(n) {
- return d.parse(unescape(encodeURIComponent(n)))
- }
- };
- var i = b.BufferedBlockAlgorithm = j.extend({
- reset: function() {
- this._data = new l.init();
- this._nDataBytes = 0
- },
- _append: function(n) {
- if (typeof n == "string") {
- n = c.parse(n)
- }
- this._data.concat(n);
- this._nDataBytes += n.sigBytes
- },
- _process: function(w) {
- var q = this._data;
- var x = q.words;
- var n = q.sigBytes;
- var t = this.blockSize;
- var v = t * 4;
- var u = n / v;
- if (w) {
- u = e.ceil(u)
- } else {
- u = e.max((u | 0) - this._minBufferSize, 0)
- }
- var s = u * t;
- var r = e.min(s * 4, n);
- if (s) {
- for (var p = 0; p < s; p += t) {
- this._doProcessBlock(x, p)
- }
- var o = x.splice(0, s);
- q.sigBytes -= r
- }
- return new l.init(o, r)
- },
- clone: function() {
- var n = j.clone.call(this);
- n._data = this._data.clone();
- return n
- },
- _minBufferSize: 0
- });
- var f = b.Hasher = i.extend({
- cfg: j.extend(),
- init: function(n) {
- this.cfg = this.cfg.extend(n);
- this.reset()
- },
- reset: function() {
- i.reset.call(this);
- this._doReset()
- },
- update: function(n) {
- this._append(n);
- this._process();
- return this
- },
- finalize: function(n) {
- if (n) {
- this._append(n)
- }
- var o = this._doFinalize();
- return o
- },
- blockSize: 512 / 32,
- _createHelper: function(n) {
- return function(p, o) {
- return new n.init(o).finalize(p)
- }
- },
- _createHmacHelper: function(n) {
- return function(p, o) {
- return new k.HMAC.init(n, o).finalize(p)
- }
- }
- });
- var k = a.algo = {};
- return a
- } (Math));
- (function(g) {
- var a = CryptoJS,
- f = a.lib,
- e = f.Base,
- h = f.WordArray,
- a = a.x64 = {};
- a.Word = e.extend({
- init: function(b, c) {
- this.high = b;
- this.low = c
- }
- });
- a.WordArray = e.extend({
- init: function(b, c) {
- b = this.words = b || [];
- this.sigBytes = c != g ? c: 8 * b.length
- },
- toX32: function() {
- for (var b = this.words,
- c = b.length,
- a = [], d = 0; d < c; d++) {
- var e = b[d];
- a.push(e.high);
- a.push(e.low)
- }
- return h.create(a, this.sigBytes)
- },
- clone: function() {
- for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) c[d] = c[d].clone();
- return b
- }
- })
- })();
- CryptoJS.lib.Cipher ||
- function(u) {
- var g = CryptoJS,
- f = g.lib,
- k = f.Base,
- l = f.WordArray,
- q = f.BufferedBlockAlgorithm,
- r = g.enc.Base64,
- v = g.algo.EvpKDF,
- n = f.Cipher = q.extend({
- cfg: k.extend(),
- createEncryptor: function(a, b) {
- return this.create(this._ENC_XFORM_MODE, a, b)
- },
- createDecryptor: function(a, b) {
- return this.create(this._DEC_XFORM_MODE, a, b)
- },
- init: function(a, b, c) {
- this.cfg = this.cfg.extend(c);
- this._xformMode = a;
- this._key = b;
- this.reset()
- },
- reset: function() {
- q.reset.call(this);
- this._doReset()
- },
- process: function(a) {
- this._append(a);
- return this._process()
- },
- finalize: function(a) {
- a && this._append(a);
- return this._doFinalize()
- },
- keySize: 4,
- ivSize: 4,
- _ENC_XFORM_MODE: 1,
- _DEC_XFORM_MODE: 2,
- _createHelper: function(a) {
- return {
- encrypt: function(b, c, d) {
- return ("string" == typeof c ? s: j).encrypt(a, b, c, d)
- },
- decrypt: function(b, c, d) {
- return ("string" == typeof c ? s: j).decrypt(a, b, c, d)
- }
- }
- }
- });
- f.StreamCipher = n.extend({
- _doFinalize: function() {
- return this._process(!0)
- },
- blockSize: 1
- });
- var m = g.mode = {},
- t = function(a, b, c) {
- var d = this._iv;
- d ? this._iv = u: d = this._prevBlock;
- for (var e = 0; e < c; e++) a[b + e] ^= d[e]
- },
- h = (f.BlockCipherMode = k.extend({
- createEncryptor: function(a, b) {
- return this.Encryptor.create(a, b)
- },
- createDecryptor: function(a, b) {
- return this.Decryptor.create(a, b)
- },
- init: function(a, b) {
- this._cipher = a;
- this._iv = b
- }
- })).extend();
- h.Encryptor = h.extend({
- processBlock: function(a, b) {
- var c = this._cipher,
- d = c.blockSize;
- t.call(this, a, b, d);
- c.encryptBlock(a, b);
- this._prevBlock = a.slice(b, b + d)
- }
- });
- h.Decryptor = h.extend({
- processBlock: function(a, b) {
- var c = this._cipher,
- d = c.blockSize,
- e = a.slice(b, b + d);
- c.decryptBlock(a, b);
- t.call(this, a, b, d);
- this._prevBlock = e
- }
- });
- m = m.CBC = h;
- h = (g.pad = {}).Pkcs7 = {
- pad: function(a, b) {
- for (var c = 4 * b,
- c = c - a.sigBytes % c,
- d = c << 24 | c << 16 | c << 8 | c,
- e = [], f = 0; f < c; f += 4) e.push(d);
- c = l.create(e, c);
- a.concat(c)
- },
- unpad: function(a) {
- a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
- }
- };
- f.BlockCipher = n.extend({
- cfg: n.cfg.extend({
- mode: m,
- padding: h
- }),
- reset: function() {
- n.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 p = f.CipherParams = k.extend({
- init: function(a) {
- this.mixIn(a)
- },
- toString: function(a) {
- return (a || this.formatter).stringify(this)
- }
- }),
- m = (g.format = {}).OpenSSL = {
- stringify: function(a) {
- var b = a.ciphertext;
- a = a.salt;
- return (a ? l.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 = l.create(b.slice(2, 4));
- b.splice(0, 4);
- a.sigBytes -= 16
- }
- return p.create({
- ciphertext: a,
- salt: c
- })
- }
- },
- j = f.SerializableCipher = k.extend({
- cfg: k.extend({
- format: m
- }),
- 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 p.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
- }
- }),
- g = (g.kdf = {}).OpenSSL = {
- execute: function(a, b, c, d) {
- d || (d = l.random(8));
- a = v.create({
- keySize: b + c
- }).compute(a, d);
- c = l.create(a.words.slice(b), 4 * c);
- a.sigBytes = 4 * b;
- return p.create({
- key: a,
- iv: c,
- salt: d
- })
- }
- },
- s = f.PasswordBasedCipher = j.extend({
- cfg: j.cfg.extend({
- kdf: g
- }),
- 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 = j.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 j.decrypt.call(this, a, b, c.key, d)
- }
- })
- } ();
- (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 < c; h++) if (h < a) b[h] = e[h];
- else {
- var d = b[h - 1];
- h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24);
- b[h] = b[h - a] ^ d
- }
- e = this._invKeySchedule = [];
- for (a = 0; a < c; a++) h = c - a,
- d = a % 4 ? b[h] : b[h - 4],
- e[a] = 4 > a || 4 >= h ? d: s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]]
- },
- encryptBlock: function(c, e) {
- this._doCryptBlock(c, e, this._keySchedule, z, A, B, C, j)
- },
- decryptBlock: function(c, e) {
- var a = c[e + 1];
- c[e + 1] = c[e + 3];
- c[e + 3] = a;
- this._doCryptBlock(c, e, this._invKeySchedule, s, u, v, w, y);
- a = c[e + 1];
- c[e + 1] = c[e + 3];
- c[e + 3] = a
- },
- _doCryptBlock: function(c, e, a, b, h, d, j, m) {
- for (var n = this._nRounds,
- f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++],
- r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++],
- s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++],
- p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++],
- f = q,
- g = r,
- k = s;
- q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];
- r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];
- s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];
- p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];
- c[e] = q;
- c[e + 1] = r;
- c[e + 2] = s;
- c[e + 3] = p
- },
- keySize: 8
- });
- q.AES = x._createHelper(r)
- })();
- (function() {
- function j(b, c) {
- var a = (this._lBlock >>> b ^ this._rBlock) & c;
- this._rBlock ^= a;
- this._lBlock ^= a << b
- }
- function l(b, c) {
- var a = (this._rBlock >>> b ^ this._lBlock) & c;
- this._lBlock ^= a;
- this._rBlock ^= a << b
- }
- var h = CryptoJS,
- e = h.lib,
- n = e.WordArray,
- e = e.BlockCipher,
- g = h.algo,
- q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],
- p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],
- r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
- s = [{
- "0": 8421888,
- 268435456 : 32768,
- 536870912 : 8421378,
- 805306368 : 2,
- 1073741824 : 512,
- 1342177280 : 8421890,
- 1610612736 : 8389122,
- 1879048192 : 8388608,
- 2147483648 : 514,
- 2415919104 : 8389120,
- 2684354560 : 33280,
- 2952790016 : 8421376,
- 3221225472 : 32770,
- 3489660928 : 8388610,
- 3758096384 : 0,
- 4026531840 : 33282,
- 134217728 : 0,
- 402653184 : 8421890,
- 671088640 : 33282,
- 939524096 : 32768,
- 1207959552 : 8421888,
- 1476395008 : 512,
- 1744830464 : 8421378,
- 2013265920 : 2,
- 2281701376 : 8389120,
- 2550136832 : 33280,
- 2818572288 : 8421376,
- 3087007744 : 8389122,
- 3355443200 : 8388610,
- 3623878656 : 32770,
- 3892314112 : 514,
- 4160749568 : 8388608,
- 1 : 32768,
- 268435457 : 2,
- 536870913 : 8421888,
- 805306369 : 8388608,
- 1073741825 : 8421378,
- 1342177281 : 33280,
- 1610612737 : 512,
- 1879048193 : 8389122,
- 2147483649 : 8421890,
- 2415919105 : 8421376,
- 2684354561 : 8388610,
- 2952790017 : 33282,
- 3221225473 : 514,
- 3489660929 : 8389120,
- 3758096385 : 32770,
- 4026531841 : 0,
- 134217729 : 8421890,
- 402653185 : 8421376,
- 671088641 : 8388608,
- 939524097 : 512,
- 1207959553 : 32768,
- 1476395009 : 8388610,
- 1744830465 : 2,
- 2013265921 : 33282,
- 2281701377 : 32770,
- 2550136833 : 8389122,
- 2818572289 : 514,
- 3087007745 : 8421888,
- 3355443201 : 8389120,
- 3623878657 : 0,
- 3892314113 : 33280,
- 4160749569 : 8421378
- },
- {
- "0": 1074282512,
- 16777216 : 16384,
- 33554432 : 524288,
- 50331648 : 1074266128,
- 67108864 : 1073741840,
- 83886080 : 1074282496,
- 100663296 : 1073758208,
- 117440512 : 16,
- 134217728 : 540672,
- 150994944 : 1073758224,
- 167772160 : 1073741824,
- 184549376 : 540688,
- 201326592 : 524304,
- 218103808 : 0,
- 234881024 : 16400,
- 251658240 : 1074266112,
- 8388608 : 1073758208,
- 25165824 : 540688,
- 41943040 : 16,
- 58720256 : 1073758224,
- 75497472 : 1074282512,
- 92274688 : 1073741824,
- 109051904 : 524288,
- 125829120 : 1074266128,
- 142606336 : 524304,
- 159383552 : 0,
- 176160768 : 16384,
- 192937984 : 1074266112,
- 209715200 : 1073741840,
- 226492416 : 540672,
- 243269632 : 1074282496,
- 260046848 : 16400,
- 268435456 : 0,
- 285212672 : 1074266128,
- 301989888 : 1073758224,
- 318767104 : 1074282496,
- 335544320 : 1074266112,
- 352321536 : 16,
- 369098752 : 540688,
- 385875968 : 16384,
- 402653184 : 16400,
- 419430400 : 524288,
- 436207616 : 524304,
- 452984832 : 1073741840,
- 469762048 : 540672,
- 486539264 : 1073758208,
- 503316480 : 1073741824,
- 520093696 : 1074282512,
- 276824064 : 540688,
- 293601280 : 524288,
- 310378496 : 1074266112,
- 327155712 : 16384,
- 343932928 : 1073758208,
- 360710144 : 1074282512,
- 377487360 : 16,
- 394264576 : 1073741824,
- 411041792 : 1074282496,
- 427819008 : 1073741840,
- 444596224 : 1073758224,
- 461373440 : 524304,
- 478150656 : 0,
- 494927872 : 16400,
- 511705088 : 1074266128,
- 528482304 : 540672
- },
- {
- "0": 260,
- 1048576 : 0,
- 2097152 : 67109120,
- 3145728 : 65796,
- 4194304 : 65540,
- 5242880 : 67108868,
- 6291456 : 67174660,
- 7340032 : 67174400,
- 8388608 : 67108864,
- 9437184 : 67174656,
- 10485760 : 65792,
- 11534336 : 67174404,
- 12582912 : 67109124,
- 13631488 : 65536,
- 14680064 : 4,
- 15728640 : 256,
- 524288 : 67174656,
- 1572864 : 67174404,
- 2621440 : 0,
- 3670016 : 67109120,
- 4718592 : 67108868,
- 5767168 : 65536,
- 6815744 : 65540,
- 7864320 : 260,
- 8912896 : 4,
- 9961472 : 256,
- 11010048 : 67174400,
- 12058624 : 65796,
- 13107200 : 65792,
- 14155776 : 67109124,
- 15204352 : 67174660,
- 16252928 : 67108864,
- 16777216 : 67174656,
- 17825792 : 65540,
- 18874368 : 65536,
- 19922944 : 67109120,
- 20971520 : 256,
- 22020096 : 67174660,
- 23068672 : 67108868,
- 24117248 : 0,
- 25165824 : 67109124,
- 26214400 : 67108864,
- 27262976 : 4,
- 28311552 : 65792,
- 29360128 : 67174400,
- 30408704 : 260,
- 31457280 : 65796,
- 32505856 : 67174404,
- 17301504 : 67108864,
- 18350080 : 260,
- 19398656 : 67174656,
- 20447232 : 0,
- 21495808 : 65540,
- 22544384 : 67109120,
- 23592960 : 256,
- 24641536 : 67174404,
- 25690112 : 65536,
- 26738688 : 67174660,
- 27787264 : 65796,
- 28835840 : 67108868,
- 29884416 : 67109124,
- 30932992 : 67174400,
- 31981568 : 4,
- 33030144 : 65792
- },
- {
- "0": 2151682048,
- 65536 : 2147487808,
- 131072 : 4198464,
- 196608 : 2151677952,
- 262144 : 0,
- 327680 : 4198400,
- 393216 : 2147483712,
- 458752 : 4194368,
- 524288 : 2147483648,
- 589824 : 4194304,
- 655360 : 64,
- 720896 : 2147487744,
- 786432 : 2151678016,
- 851968 : 4160,
- 917504 : 4096,
- 983040 : 2151682112,
- 32768 : 2147487808,
- 98304 : 64,
- 163840 : 2151678016,
- 229376 : 2147487744,
- 294912 : 4198400,
- 360448 : 2151682112,
- 425984 : 0,
- 491520 : 2151677952,
- 557056 : 4096,
- 622592 : 2151682048,
- 688128 : 4194304,
- 753664 : 4160,
- 819200 : 2147483648,
- 884736 : 4194368,
- 950272 : 4198464,
- 1015808 : 2147483712,
- 1048576 : 4194368,
- 1114112 : 4198400,
- 1179648 : 2147483712,
- 1245184 : 0,
- 1310720 : 4160,
- 1376256 : 2151678016,
- 1441792 : 2151682048,
- 1507328 : 2147487808,
- 1572864 : 2151682112,
- 1638400 : 2147483648,
- 1703936 : 2151677952,
- 1769472 : 4198464,
- 1835008 : 2147487744,
- 1900544 : 4194304,
- 1966080 : 64,
- 2031616 : 4096,
- 1081344 : 2151677952,
- 1146880 : 2151682112,
- 1212416 : 0,
- 1277952 : 4198400,
- 1343488 : 4194368,
- 1409024 : 2147483648,
- 1474560 : 2147487808,
- 1540096 : 64,
- 1605632 : 2147483712,
- 1671168 : 4096,
- 1736704 : 2147487744,
- 1802240 : 2151678016,
- 1867776 : 4160,
- 1933312 : 2151682048,
- 1998848 : 4194304,
- 2064384 : 4198464
- },
- {
- "0": 128,
- 4096 : 17039360,
- 8192 : 262144,
- 12288 : 536870912,
- 16384 : 537133184,
- 20480 : 16777344,
- 24576 : 553648256,
- 28672 : 262272,
- 32768 : 16777216,
- 36864 : 537133056,
- 40960 : 536871040,
- 45056 : 553910400,
- 49152 : 553910272,
- 53248 : 0,
- 57344 : 17039488,
- 61440 : 553648128,
- 2048 : 17039488,
- 6144 : 553648256,
- 10240 : 128,
- 14336 : 17039360,
- 18432 : 262144,
- 22528 : 537133184,
- 26624 : 553910272,
- 30720 : 536870912,
- 34816 : 537133056,
- 38912 : 0,
- 43008 : 553910400,
- 47104 : 16777344,
- 51200 : 536871040,
- 55296 : 553648128,
- 59392 : 16777216,
- 63488 : 262272,
- 65536 : 262144,
- 69632 : 128,
- 73728 : 536870912,
- 77824 : 553648256,
- 81920 : 16777344,
- 86016 : 553910272,
- 90112 : 537133184,
- 94208 : 16777216,
- 98304 : 553910400,
- 102400 : 553648128,
- 106496 : 17039360,
- 110592 : 537133056,
- 114688 : 262272,
- 118784 : 536871040,
- 122880 : 0,
- 126976 : 17039488,
- 67584 : 553648256,
- 71680 : 16777216,
- 75776 : 17039360,
- 79872 : 537133184,
- 83968 : 536870912,
- 88064 : 17039488,
- 92160 : 128,
- 96256 : 553910272,
- 100352 : 262272,
- 104448 : 553910400,
- 108544 : 0,
- 112640 : 553648128,
- 116736 : 16777344,
- 120832 : 262144,
- 124928 : 537133056,
- 129024 : 536871040
- },
- {
- "0": 268435464,
- 256 : 8192,
- 512 : 270532608,
- 768 : 270540808,
- 1024 : 268443648,
- 1280 : 2097152,
- 1536 : 2097160,
- 1792 : 268435456,
- 2048 : 0,
- 2304 : 268443656,
- 2560 : 2105344,
- 2816 : 8,
- 3072 : 270532616,
- 3328 : 2105352,
- 3584 : 8200,
- 3840 : 270540800,
- 128 : 270532608,
- 384 : 270540808,
- 640 : 8,
- 896 : 2097152,
- 1152 : 2105352,
- 1408 : 268435464,
- 1664 : 268443648,
- 1920 : 8200,
- 2176 : 2097160,
- 2432 : 8192,
- 2688 : 268443656,
- 2944 : 270532616,
- 3200 : 0,
- 3456 : 270540800,
- 3712 : 2105344,
- 3968 : 268435456,
- 4096 : 268443648,
- 4352 : 270532616,
- 4608 : 270540808,
- 4864 : 8200,
- 5120 : 2097152,
- 5376 : 268435456,
- 5632 : 268435464,
- 5888 : 2105344,
- 6144 : 2105352,
- 6400 : 0,
- 6656 : 8,
- 6912 : 270532608,
- 7168 : 8192,
- 7424 : 268443656,
- 7680 : 270540800,
- 7936 : 2097160,
- 4224 : 8,
- 4480 : 2105344,
- 4736 : 2097152,
- 4992 : 268435464,
- 5248 : 268443648,
- 5504 : 8200,
- 5760 : 270540808,
- 6016 : 270532608,
- 6272 : 270540800,
- 6528 : 270532616,
- 6784 : 8192,
- 7040 : 2105352,
- 7296 : 2097160,
- 7552 : 0,
- 7808 : 268435456,
- 8064 : 268443656
- },
- {
- "0": 1048576,
- 16 : 33555457,
- 32 : 1024,
- 48 : 1049601,
- 64 : 34604033,
- 80 : 0,
- 96 : 1,
- 112 : 34603009,
- 128 : 33555456,
- 144 : 1048577,
- 160 : 33554433,
- 176 : 34604032,
- 192 : 34603008,
- 208 : 1025,
- 224 : 1049600,
- 240 : 33554432,
- 8 : 34603009,
- 24 : 0,
- 40 : 33555457,
- 56 : 34604032,
- 72 : 1048576,
- 88 : 33554433,
- 104 : 33554432,
- 120 : 1025,
- 136 : 1049601,
- 152 : 33555456,
- 168 : 34603008,
- 184 : 1048577,
- 200 : 1024,
- 216 : 34604033,
- 232 : 1,
- 248 : 1049600,
- 256 : 33554432,
- 272 : 1048576,
- 288 : 33555457,
- 304 : 34603009,
- 320 : 1048577,
- 336 : 33555456,
- 352 : 34604032,
- 368 : 1049601,
- 384 : 1025,
- 400 : 34604033,
- 416 : 1049600,
- 432 : 1,
- 448 : 0,
- 464 : 34603008,
- 480 : 33554433,
- 496 : 1024,
- 264 : 1049600,
- 280 : 33555457,
- 296 : 34603009,
- 312 : 1,
- 328 : 33554432,
- 344 : 1048576,
- 360 : 1025,
- 376 : 34604032,
- 392 : 33554433,
- 408 : 34603008,
- 424 : 0,
- 440 : 34604033,
- 456 : 1049601,
- 472 : 1024,
- 488 : 33555456,
- 504 : 1048577
- },
- {
- "0": 134219808,
- 1 : 131072,
- 2 : 134217728,
- 3 : 32,
- 4 : 131104,
- 5 : 134350880,
- 6 : 134350848,
- 7 : 2048,
- 8 : 134348800,
- 9 : 134219776,
- 10 : 133120,
- 11 : 134348832,
- 12 : 2080,
- 13 : 0,
- 14 : 134217760,
- 15 : 133152,
- 2147483648 : 2048,
- 2147483649 : 134350880,
- 2147483650 : 134219808,
- 2147483651 : 134217728,
- 2147483652 : 134348800,
- 2147483653 : 133120,
- 2147483654 : 133152,
- 2147483655 : 32,
- 2147483656 : 134217760,
- 2147483657 : 2080,
- 2147483658 : 131104,
- 2147483659 : 134350848,
- 2147483660 : 0,
- 2147483661 : 134348832,
- 2147483662 : 134219776,
- 2147483663 : 131072,
- 16 : 133152,
- 17 : 134350848,
- 18 : 32,
- 19 : 2048,
- 20 : 134219776,
- 21 : 134217760,
- 22 : 134348832,
- 23 : 131072,
- 24 : 0,
- 25 : 131104,
- 26 : 134348800,
- 27 : 134219808,
- 28 : 134350880,
- 29 : 133120,
- 30 : 2080,
- 31 : 134217728,
- 2147483664 : 131072,
- 2147483665 : 2048,
- 2147483666 : 134348832,
- 2147483667 : 133152,
- 2147483668 : 32,
- 2147483669 : 134348800,
- 2147483670 : 134217728,
- 2147483671 : 134219808,
- 2147483672 : 134350880,
- 2147483673 : 134217760,
- 2147483674 : 134219776,
- 2147483675 : 0,
- 2147483676 : 133120,
- 2147483677 : 2080,
- 2147483678 : 131104,
- 2147483679 : 134350848
- }],
- t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
- m = g.DES = e.extend({
- _doReset: function() {
- for (var b = this._key.words,
- c = [], a = 0; 56 > a; a++) {
- var f = q[a] - 1;
- c[a] = b[f >>> 5] >>> 31 - f % 32 & 1
- }
- b = this._subKeys = [];
- for (f = 0; 16 > f; f++) {
- for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6,
- d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;
- d[0] = d[0] << 1 | d[0] >>> 31;
- for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;
- d[7] = d[7] << 5 | d[7] >>> 27
- }
- c = this._invSubKeys = [];
- for (a = 0; 16 > a; a++) c[a] = b[15 - a]
- },
- encryptBlock: function(b, c) {
- this._doCryptBlock(b, c, this._subKeys)
- },
- decryptBlock: function(b, c) {
- this._doCryptBlock(b, c, this._invSubKeys)
- },
- _doCryptBlock: function(b, c, a) {
- this._lBlock = b[c];
- this._rBlock = b[c + 1];
- j.call(this, 4, 252645135);
- j.call(this, 16, 65535);
- l.call(this, 2, 858993459);
- l.call(this, 8, 16711935);
- j.call(this, 1, 1431655765);
- for (var f = 0; 16 > f; f++) {
- for (var d = a[f], e = this._lBlock, h = this._rBlock, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];
- this._lBlock = h;
- this._rBlock = e ^ g
- }
- a = this._lBlock;
- this._lBlock = this._rBlock;
- this._rBlock = a;
- j.call(this, 1, 1431655765);
- l.call(this, 8, 16711935);
- l.call(this, 2, 858993459);
- j.call(this, 16, 65535);
- j.call(this, 4, 252645135);
- b[c] = this._lBlock;
- b[c + 1] = this._rBlock
- },
- keySize: 2,
- ivSize: 2,
- blockSize: 2
- });
- h.DES = e._createHelper(m);
- g = g.TripleDES = e.extend({
- _doReset: function() {
- var b = this._key.words;
- this._des1 = m.createEncryptor(n.create(b.slice(0, 2)));
- this._des2 = m.createEncryptor(n.create(b.slice(2, 4)));
- this._des3 = m.createEncryptor(n.create(b.slice(4, 6)))
- },
- encryptBlock: function(b, c) {
- this._des1.encryptBlock(b, c);
- this._des2.decryptBlock(b, c);
- this._des3.encryptBlock(b, c)
- },
- decryptBlock: function(b, c) {
- this._des3.decryptBlock(b, c);
- this._des2.encryptBlock(b, c);
- this._des1.decryptBlock(b, c)
- },
- keySize: 6,
- ivSize: 2,
- blockSize: 2
- });
- h.TripleDES = e._createHelper(g)
- })();
- (function() {
- var h = CryptoJS,
- j = h.lib.WordArray;
- h.enc.Base64 = {
- stringify: function(b) {
- var e = b.words,
- f = b.sigBytes,
- c = this._map;
- b.clamp();
- b = [];
- for (var a = 0; a < f; a += 3) for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));
- if (e = c.charAt(64)) for (; b.length % 4;) b.push(e);
- return b.join("")
- },
- parse: function(b) {
- var e = b.length,
- f = this._map,
- c = f.charAt(64);
- c && (c = b.indexOf(c), -1 != c && (e = c));
- for (var c = [], a = 0, d = 0; d < e; d++) if (d % 4) {
- var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),
- h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);
- c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);
- a++
- }
- return j.create(c, a)
- },
- _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
- }
- })();
- (function(E) {
- function h(a, f, g, j, p, h, k) {
- a = a + (f & g | ~f & j) + p + k;
- return (a << h | a >>> 32 - h) + f
- }
- function k(a, f, g, j, p, h, k) {
- a = a + (f & j | g & ~j) + p + k;
- return (a << h | a >>> 32 - h) + f
- }
- function l(a, f, g, j, h, k, l) {
- a = a + (f ^ g ^ j) + h + l;
- return (a << k | a >>> 32 - k) + f
- }
- function n(a, f, g, j, h, k, l) {
- a = a + (g ^ (f | ~j)) + h + l;
- return (a << k | a >>> 32 - k) + f
- }
- for (var r = CryptoJS,
- q = r.lib,
- F = q.WordArray,
- s = q.Hasher,
- q = r.algo,
- a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;
- q = q.MD5 = s.extend({
- _doReset: function() {
- this._hash = new F.init([1732584193, 4023233417, 2562383102, 271733878])
- },
- _doProcessBlock: function(m, f) {
- for (var g = 0; 16 > g; g++) {
- var j = f + g,
- p = m[j];
- m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360
- }
- var g = this._hash.words,
- j = m[f + 0],
- p = m[f + 1],
- q = m[f + 2],
- r = m[f + 3],
- s = m[f + 4],
- t = m[f + 5],
- u = m[f + 6],
- v = m[f + 7],
- w = m[f + 8],
- x = m[f + 9],
- y = m[f + 10],
- z = m[f + 11],
- A = m[f + 12],
- B = m[f + 13],
- C = m[f + 14],
- D = m[f + 15],
- b = g[0],
- c = g[1],
- d = g[2],
- e = g[3],
- b = h(b, c, d, e, j, 7, a[0]),
- e = h(e, b, c, d, p, 12, a[1]),
- d = h(d, e, b, c, q, 17, a[2]),
- c = h(c, d, e, b, r, 22, a[3]),
- b = h(b, c, d, e, s, 7, a[4]),
- e = h(e, b, c, d, t, 12, a[5]),
- d = h(d, e, b, c, u, 17, a[6]),
- c = h(c, d, e, b, v, 22, a[7]),
- b = h(b, c, d, e, w, 7, a[8]),
- e = h(e, b, c, d, x, 12, a[9]),
- d = h(d, e, b, c, y, 17, a[10]),
- c = h(c, d, e, b, z, 22, a[11]),
- b = h(b, c, d, e, A, 7, a[12]),
- e = h(e, b, c, d, B, 12, a[13]),
- d = h(d, e, b, c, C, 17, a[14]),
- c = h(c, d, e, b, D, 22, a[15]),
- b = k(b, c, d, e, p, 5, a[16]),
- e = k(e, b, c, d, u, 9, a[17]),
- d = k(d, e, b, c, z, 14, a[18]),
- c = k(c, d, e, b, j, 20, a[19]),
- b = k(b, c, d, e, t, 5, a[20]),
- e = k(e, b, c, d, y, 9, a[21]),
- d = k(d, e, b, c, D, 14, a[22]),
- c = k(c, d, e, b, s, 20, a[23]),
- b = k(b, c, d, e, x, 5, a[24]),
- e = k(e, b, c, d, C, 9, a[25]),
- d = k(d, e, b, c, r, 14, a[26]),
- c = k(c, d, e, b, w, 20, a[27]),
- b = k(b, c, d, e, B, 5, a[28]),
- e = k(e, b, c, d, q, 9, a[29]),
- d = k(d, e, b, c, v, 14, a[30]),
- c = k(c, d, e, b, A, 20, a[31]),
- b = l(b, c, d, e, t, 4, a[32]),
- e = l(e, b, c, d, w, 11, a[33]),
- d = l(d, e, b, c, z, 16, a[34]),
- c = l(c, d, e, b, C, 23, a[35]),
- b = l(b, c, d, e, p, 4, a[36]),
- e = l(e, b, c, d, s, 11, a[37]),
- d = l(d, e, b, c, v, 16, a[38]),
- c = l(c, d, e, b, y, 23, a[39]),
- b = l(b, c, d, e, B, 4, a[40]),
- e = l(e, b, c, d, j, 11, a[41]),
- d = l(d, e, b, c, r, 16, a[42]),
- c = l(c, d, e, b, u, 23, a[43]),
- b = l(b, c, d, e, x, 4, a[44]),
- e = l(e, b, c, d, A, 11, a[45]),
- d = l(d, e, b, c, D, 16, a[46]),
- c = l(c, d, e, b, q, 23, a[47]),
- b = n(b, c, d, e, j, 6, a[48]),
- e = n(e, b, c, d, v, 10, a[49]),
- d = n(d, e, b, c, C, 15, a[50]),
- c = n(c, d, e, b, t, 21, a[51]),
- b = n(b, c, d, e, A, 6, a[52]),
- e = n(e, b, c, d, r, 10, a[53]),
- d = n(d, e, b, c, y, 15, a[54]),
- c = n(c, d, e, b, p, 21, a[55]),
- b = n(b, c, d, e, w, 6, a[56]),
- e = n(e, b, c, d, D, 10, a[57]),
- d = n(d, e, b, c, u, 15, a[58]),
- c = n(c, d, e, b, B, 21, a[59]),
- b = n(b, c, d, e, s, 6, a[60]),
- e = n(e, b, c, d, z, 10, a[61]),
- d = n(d, e, b, c, q, 15, a[62]),
- c = n(c, d, e, b, x, 21, a[63]);
- g[0] = g[0] + b | 0;
- g[1] = g[1] + c | 0;
- g[2] = g[2] + d | 0;
- g[3] = g[3] + e | 0
- },
- _doFinalize: function() {
- var a = this._data,
- f = a.words,
- g = 8 * this._nDataBytes,
- j = 8 * a.sigBytes;
- f[j >>> 5] |= 128 << 24 - j % 32;
- var h = E.floor(g / 4294967296);
- f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;
- f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;
- a.sigBytes = 4 * (f.length + 1);
- this._process();
- a = this._hash;
- f = a.words;
- for (g = 0; 4 > g; g++) j = f[g],
- f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;
- return a
- },
- clone: function() {
- var a = s.clone.call(this);
- a._hash = this._hash.clone();
- return a
- }
- });
- r.MD5 = s._createHelper(q);
- r.HmacMD5 = s._createHmacHelper(q)
- })(Math);
- (function() {
- var k = CryptoJS,
- b = k.lib,
- m = b.WordArray,
- l = b.Hasher,
- d = [],
- b = k.algo.SHA1 = l.extend({
- _doReset: function() {
- this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
- },
- _doProcessBlock: function(n, p) {
- for (var a = this._hash.words,
- e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) {
- if (16 > c) d[c] = n[p + c] | 0;
- else {
- var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16];
- d[c] = g << 1 | g >>> 31
- }
- g = (e << 5 | e >>> 27) + b + d[c];
- g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514);
- b = j;
- j = h;
- h = f << 30 | f >>> 2;
- f = e;
- e = g
- }
- a[0] = a[0] + e | 0;
- a[1] = a[1] + f | 0;
- a[2] = a[2] + h | 0;
- a[3] = a[3] + j | 0;
- a[4] = a[4] + b | 0
- },
- _doFinalize: function() {
- var b = this._data,
- d = b.words,
- a = 8 * this._nDataBytes,
- e = 8 * b.sigBytes;
- d[e >>> 5] |= 128 << 24 - e % 32;
- d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296);
- d[(e + 64 >>> 9 << 4) + 15] = a;
- b.sigBytes = 4 * d.length;
- this._process();
- return this._hash
- },
- clone: function() {
- var b = l.clone.call(this);
- b._hash = this._hash.clone();
- return b
- }
- });
- k.SHA1 = l._createHelper(b);
- k.HmacSHA1 = l._createHmacHelper(b)
- })();
- (function(k) {
- for (var g = CryptoJS,
- h = g.lib,
- v = h.WordArray,
- j = h.Hasher,
- h = g.algo,
- s = [], t = [], u = function(q) {
- return 4294967296 * (q - (q | 0)) | 0
- },
- l = 2, b = 0; 64 > b;) {
- var d;
- a: {
- d = l;
- for (var w = k.sqrt(d), r = 2; r <= w; r++) if (! (d % r)) {
- d = !1;
- break a
- }
- d = !0
- }
- d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++);
- l++
- }
- var n = [],
- h = h.SHA256 = j.extend({
- _doReset: function() {
- this._hash = new v.init(s.slice(0))
- },
- _doProcessBlock: function(q, h) {
- for (var a = this._hash.words,
- c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) {
- if (16 > e) n[e] = q[h + e] | 0;
- else {
- var m = n[e - 15],
- p = n[e - 2];
- n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16]
- }
- m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e];
- p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b);
- l = j;
- j = g;
- g = f;
- f = k + m | 0;
- k = b;
- b = d;
- d = c;
- c = m + p | 0
- }
- a[0] = a[0] + c | 0;
- a[1] = a[1] + d | 0;
- a[2] = a[2] + b | 0;
- a[3] = a[3] + k | 0;
- a[4] = a[4] + f | 0;
- a[5] = a[5] + g | 0;
- a[6] = a[6] + j | 0;
- a[7] = a[7] + l | 0
- },
- _doFinalize: function() {
- var d = this._data,
- b = d.words,
- a = 8 * this._nDataBytes,
- c = 8 * d.sigBytes;
- b[c >>> 5] |= 128 << 24 - c % 32;
- b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296);
- b[(c + 64 >>> 9 << 4) + 15] = a;
- d.sigBytes = 4 * b.length;
- this._process();
- return this._hash
- },
- clone: function() {
- var b = j.clone.call(this);
- b._hash = this._hash.clone();
- return b
- }
- });
- g.SHA256 = j._createHelper(h);
- g.HmacSHA256 = j._createHmacHelper(h)
- })(Math);
- (function() {
- var b = CryptoJS,
- d = b.lib.WordArray,
- a = b.algo,
- c = a.SHA256,
- a = a.SHA224 = c.extend({
- _doReset: function() {
- this._hash = new d.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
- },
- _doFinalize: function() {
- var a = c._doFinalize.call(this);
- a.sigBytes -= 4;
- return a
- }
- });
- b.SHA224 = c._createHelper(a);
- b.HmacSHA224 = c._createHmacHelper(a)
- })();
- (function() {
- function a() {
- return d.create.apply(d, arguments)
- }
- for (var n = CryptoJS,
- r = n.lib.Hasher,
- e = n.x64,
- d = e.Word,
- T = e.WordArray,
- e = n.algo,
- ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], v = [], w = 0; 80 > w; w++) v[w] = a();
- e = e.SHA512 = r.extend({
- _doReset: function() {
- this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924, 725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)])
- },
- _doProcessBlock: function(a, d) {
- for (var f = this._hash.words,
- F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) {
- var s = v[m];
- if (16 > m) var j = s.high = a[d + 2 * m] | 0,
- b = s.low = a[d + 2 * m + 1] | 0;
- else {
- var j = v[m - 15],
- b = j.high,
- p = j.low,
- j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7,
- p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25),
- u = v[m - 2],
- b = u.high,
- c = u.low,
- u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6,
- c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26),
- b = v[m - 7],
- W = b.high,
- t = v[m - 16],
- q = t.high,
- t = t.low,
- b = p + b.low,
- j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0),
- b = b + c,
- j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0),
- b = b + t,
- j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0);
- s.high = j;
- s.low = b
- }
- var W = l & R ^ ~l & S,
- t = h & C ^ ~h & D,
- s = k & z ^ k & A ^ z & A,
- T = g & x ^ g & y ^ x & y,
- p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7),
- u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7),
- c = ea[m],
- fa = c.high,
- da = c.low,
- c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)),
- q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0),
- c = c + t,
- q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0),
- c = c + da,
- q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0),
- c = c + b,
- q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0),
- b = u + T,
- s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0),
- V = S,
- E = D,
- S = R,
- D = C,
- R = l,
- C = h,
- h = B + c | 0,
- l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0,
- U = A,
- B = y,
- A = z,
- y = x,
- z = k,
- x = g,
- g = c + b | 0,
- k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0
- }
- J = F.low = J + g;
- F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0);
- K = e.low = K + x;
- e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0);
- L = n.low = L + y;
- n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0);
- M = r.low = M + B;
- r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0);
- N = G.low = N + h;
- G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0);
- O = H.low = O + C;
- H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0);
- P = I.low = P + D;
- I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0);
- Q = f.low = Q + E;
- f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0)
- },
- _doFinalize: function() {
- var a = this._data,
- d = a.words,
- f = 8 * this._nDataBytes,
- e = 8 * a.sigBytes;
- d[e >>> 5] |= 128 << 24 - e % 32;
- d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296);
- d[(e + 128 >>> 10 << 5) + 31] = f;
- a.sigBytes = 4 * d.length;
- this._process();
- return this._hash.toX32()
- },
- clone: function() {
- var a = r.clone.call(this);
- a._hash = this._hash.clone();
- return a
- },
- blockSize: 32
- });
- n.SHA512 = r._createHelper(e);
- n.HmacSHA512 = r._createHmacHelper(e)
- })();
- (function() {
- var c = CryptoJS,
- a = c.x64,
- b = a.Word,
- e = a.WordArray,
- a = c.algo,
- d = a.SHA512,
- a = a.SHA384 = d.extend({
- _doReset: function() {
- this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231, 1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)])
- },
- _doFinalize: function() {
- var a = d._doFinalize.call(this);
- a.sigBytes -= 16;
- return a
- }
- });
- c.SHA384 = d._createHelper(a);
- c.HmacSHA384 = d._createHmacHelper(a)
- })();
- (function() {
- var q = CryptoJS,
- d = q.lib,
- n = d.WordArray,
- p = d.Hasher,
- d = q.algo,
- x = n.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]),
- y = n.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]),
- z = n.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]),
- A = n.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]),
- B = n.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),
- C = n.create([1352829926, 1548603684, 1836072691, 2053994217, 0]),
- d = d.RIPEMD160 = p.extend({
- _doReset: function() {
- this._hash = n.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
- },
- _doProcessBlock: function(e, v) {
- for (var b = 0; 16 > b; b++) {
- var c = v + b,
- f = e[c];
- e[c] = (f << 8 | f >>> 24) & 16711935 | (f << 24 | f >>> 8) & 4278255360
- }
- var c = this._hash.words,
- f = B.words,
- d = C.words,
- n = x.words,
- q = y.words,
- p = z.words,
- w = A.words,
- t, g, h, j, r, u, k, l, m, s;
- u = t = c[0];
- k = g = c[1];
- l = h = c[2];
- m = j = c[3];
- s = r = c[4];
- for (var a, b = 0; 80 > b; b += 1) a = t + e[v + n[b]] | 0,
- a = 16 > b ? a + ((g ^ h ^ j) + f[0]) : 32 > b ? a + ((g & h | ~g & j) + f[1]) : 48 > b ? a + (((g | ~h) ^ j) + f[2]) : 64 > b ? a + ((g & j | h & ~j) + f[3]) : a + ((g ^ (h | ~j)) + f[4]),
- a |= 0,
- a = a << p[b] | a >>> 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 << w[b] | a >>> 32 - w[b],
- a = a + s | 0,
- u = s,
- s = m,
- m = l << 10 | l >>> 22,
- l = k,
- k = a;
- a = c[1] + h + m | 0;
- c[1] = c[2] + j + s | 0;
- c[2] = c[3] + r + u | 0;
- c[3] = c[4] + t + k | 0;
- c[4] = c[0] + g + l | 0;
- c[0] = a
- },
- _doFinalize: function() {
- var e = this._data,
- d = e.words,
- b = 8 * this._nDataBytes,
- c = 8 * e.sigBytes;
- d[c >>> 5] |= 128 << 24 - c % 32;
- d[(c + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;
- e.sigBytes = 4 * (d.length + 1);
- this._process();
- e = this._hash;
- d = e.words;
- for (b = 0; 5 > b; b++) c = d[b],
- d[b] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
- return e
- },
- clone: function() {
- var d = p.clone.call(this);
- d._hash = this._hash.clone();
- return d
- }
- });
- q.RIPEMD160 = p._createHelper(d);
- q.HmacRIPEMD160 = p._createHmacHelper(d)
- })(Math);
- /*
- CryptoJS v3.1.2 hmac.js
- code.google.com/p/crypto-js
- (c) 2009-2013 by Jeff Mott. All rights reserved.
- code.google.com/p/crypto-js/wiki/License
- */
- (function() {
- var c = CryptoJS,
- k = c.enc.Utf8;
- c.algo.HMAC = c.lib.Base.extend({
- init: function(a, b) {
- a = this._hasher = new a.init;
- "string" == typeof b && (b = k.parse(b));
- var c = a.blockSize,
- e = 4 * c;
- b.sigBytes > e && (b = a.finalize(b));
- b.clamp();
- for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, j = g.words, d = 0; d < c; d++) h[d] ^= 1549556828,
- j[d] ^= 909522486;
- f.sigBytes = g.sigBytes = e;
- this.reset()
- },
- reset: function() {
- var a = this._hasher;
- a.reset();
- a.update(this._iKey)
- },
- update: function(a) {
- this._hasher.update(a);
- return this
- },
- finalize: function(a) {
- var b = this._hasher;
- a = b.finalize(a);
- b.reset();
- return b.finalize(this._oKey.clone().concat(a))
- }
- })
- })();
- /*
- CryptoJS v3.1.2 pbkdf2-min.js
- code.google.com/p/crypto-js
- (c) 2009-2013 by Jeff Mott. All rights reserved.
- code.google.com/p/crypto-js/wiki/License
- */
- (function() {
- var b = CryptoJS,
- a = b.lib,
- d = a.Base,
- m = a.WordArray,
- a = b.algo,
- q = a.HMAC,
- l = a.PBKDF2 = d.extend({
- cfg: d.extend({
- keySize: 4,
- hasher: a.SHA1,
- iterations: 1
- }),
- init: function(a) {
- this.cfg = this.cfg.extend(a)
- },
- compute: function(a, b) {
- for (var c = this.cfg,
- f = q.create(c.hasher, a), g = m.create(), d = m.create([1]), l = g.words, r = d.words, n = c.keySize, c = c.iterations; l.length < n;) {
- var h = f.update(b).finalize(d);
- f.reset();
- for (var j = h.words,
- s = j.length,
- k = h,
- p = 1; p < c; p++) {
- k = f.finalize(k);
- f.reset();
- for (var t = k.words,
- e = 0; e < s; e++) j[e] ^= t[e]
- }
- g.concat(h);
- r[0]++
- }
- g.sigBytes = 4 * n;
- return g
- }
- });
- b.PBKDF2 = function(a, b, c) {
- return l.create(c).compute(a, b)
- }
- })();
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var b64pad = "=";
- function hex2b64(d) {
- var b;
- var e;
- var a = "";
- for (b = 0; b + 3 <= d.length; b += 3) {
- e = parseInt(d.substring(b, b + 3), 16);
- a += b64map.charAt(e >> 6) + b64map.charAt(e & 63)
- }
- if (b + 1 == d.length) {
- e = parseInt(d.substring(b, b + 1), 16);
- a += b64map.charAt(e << 2)
- } else {
- if (b + 2 == d.length) {
- e = parseInt(d.substring(b, b + 2), 16);
- a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4)
- }
- }
- if (b64pad) {
- while ((a.length & 3) > 0) {
- a += b64pad
- }
- }
- return a
- }
- function b64tohex(f) {
- var d = "";
- var e;
- var b = 0;
- var c;
- var a;
- for (e = 0; e < f.length; ++e) {
- if (f.charAt(e) == b64pad) {
- break
- }
- a = b64map.indexOf(f.charAt(e));
- if (a < 0) {
- continue
- }
- if (b == 0) {
- d += int2char(a >> 2);
- c = a & 3;
- b = 1
- } else {
- if (b == 1) {
- d += int2char((c << 2) | (a >> 4));
- c = a & 15;
- b = 2
- } else {
- if (b == 2) {
- d += int2char(c);
- d += int2char(a >> 2);
- c = a & 3;
- b = 3
- } else {
- d += int2char((c << 2) | (a >> 4));
- d += int2char(a & 15);
- b = 0
- }
- }
- }
- }
- if (b == 1) {
- d += int2char(c << 2)
- }
- return d
- }
- function b64toBA(e) {
- var d = b64tohex(e);
- var c;
- var b = new Array();
- for (c = 0; 2 * c < d.length; ++c) {
- b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16)
- }
- return b
- };
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- var dbits;
- var canary = 244837814094590;
- var j_lm = ((canary & 16777215) == 15715070);
- function BigInteger(e, d, f) {
- if (e != null) {
- if ("number" == typeof e) {
- this.fromNumber(e, d, f)
- } else {
- if (d == null && "string" != typeof e) {
- this.fromString(e, 256)
- } else {
- this.fromString(e, d)
- }
- }
- }
- }
- function nbi() {
- return new BigInteger(null)
- }
- function am1(f, a, b, e, h, g) {
- while (--g >= 0) {
- var d = a * this[f++] + b[e] + h;
- h = Math.floor(d / 67108864);
- b[e++] = d & 67108863
- }
- return h
- }
- function am2(f, q, r, e, o, a) {
- var k = q & 32767,
- p = q >> 15;
- while (--a >= 0) {
- var d = this[f] & 32767;
- var g = this[f++] >> 15;
- var b = p * d + g * k;
- d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823);
- o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30);
- r[e++] = d & 1073741823
- }
- return o
- }
- function am3(f, q, r, e, o, a) {
- var k = q & 16383,
- p = q >> 14;
- while (--a >= 0) {
- var d = this[f] & 16383;
- var g = this[f++] >> 14;
- var b = p * d + g * k;
- d = k * d + ((b & 16383) << 14) + r[e] + o;
- o = (d >> 28) + (b >> 14) + p * g;
- r[e++] = d & 268435455
- }
- return o
- }
- if (j_lm && (navigator2.appName == "Microsoft Internet Explorer")) {
- BigInteger.prototype.am = am2;
- dbits = 30
- } else {
- if (j_lm && (navigator2.appName != "Netscape")) {
- BigInteger.prototype.am = am1;
- dbits = 26
- } else {
- BigInteger.prototype.am = am3;
- dbits = 28
- }
- }
- BigInteger.prototype.DB = dbits;
- BigInteger.prototype.DM = ((1 << dbits) - 1);
- BigInteger.prototype.DV = (1 << dbits);
- var BI_FP = 52;
- BigInteger.prototype.FV = Math.pow(2, BI_FP);
- BigInteger.prototype.F1 = BI_FP - dbits;
- BigInteger.prototype.F2 = 2 * dbits - BI_FP;
- var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
- var BI_RC = new Array();
- var rr, vv;
- rr = "0".charCodeAt(0);
- for (vv = 0; vv <= 9; ++vv) {
- BI_RC[rr++] = vv
- }
- rr = "a".charCodeAt(0);
- for (vv = 10; vv < 36; ++vv) {
- BI_RC[rr++] = vv
- }
- rr = "A".charCodeAt(0);
- for (vv = 10; vv < 36; ++vv) {
- BI_RC[rr++] = vv
- }
- function int2char(a) {
- return BI_RM.charAt(a)
- }
- function intAt(b, a) {
- var d = BI_RC[b.charCodeAt(a)];
- return (d == null) ? -1 : d
- }
- function bnpCopyTo(b) {
- for (var a = this.t - 1; a >= 0; --a) {
- b[a] = this[a]
- }
- b.t = this.t;
- b.s = this.s
- }
- function bnpFromInt(a) {
- this.t = 1;
- this.s = (a < 0) ? -1 : 0;
- if (a > 0) {
- this[0] = a
- } else {
- if (a < -1) {
- this[0] = a + this.DV
- } else {
- this.t = 0
- }
- }
- }
- function nbv(a) {
- var b = nbi();
- b.fromInt(a);
- return b
- }
- function bnpFromString(h, c) {
- var e;
- if (c == 16) {
- e = 4
- } else {
- if (c == 8) {
- e = 3
- } else {
- if (c == 256) {
- e = 8
- } else {
- if (c == 2) {
- e = 1
- } else {
- if (c == 32) {
- e = 5
- } else {
- if (c == 4) {
- e = 2
- } else {
- this.fromRadix(h, c);
- return
- }
- }
- }
- }
- }
- }
- this.t = 0;
- this.s = 0;
- var g = h.length,
- d = false,
- f = 0;
- while (--g >= 0) {
- var a = (e == 8) ? h[g] & 255 : intAt(h, g);
- if (a < 0) {
- if (h.charAt(g) == "-") {
- d = true
- }
- continue
- }
- d = false;
- if (f == 0) {
- this[this.t++] = a
- } else {
- if (f + e > this.DB) {
- this[this.t - 1] |= (a & ((1 << (this.DB - f)) - 1)) << f;
- this[this.t++] = (a >> (this.DB - f))
- } else {
- this[this.t - 1] |= a << f
- }
- }
- f += e;
- if (f >= this.DB) {
- f -= this.DB
- }
- }
- if (e == 8 && (h[0] & 128) != 0) {
- this.s = -1;
- if (f > 0) {
- this[this.t - 1] |= ((1 << (this.DB - f)) - 1) << f
- }
- }
- this.clamp();
- if (d) {
- BigInteger.ZERO.subTo(this, this)
- }
- }
- function bnpClamp() {
- var a = this.s & this.DM;
- while (this.t > 0 && this[this.t - 1] == a) {--this.t
- }
- }
- function bnToString(c) {
- if (this.s < 0) {
- return "-" + this.negate().toString(c)
- }
- var e;
- if (c == 16) {
- e = 4
- } else {
- if (c == 8) {
- e = 3
- } else {
- if (c == 2) {
- e = 1
- } else {
- if (c == 32) {
- e = 5
- } else {
- if (c == 4) {
- e = 2
- } else {
- return this.toRadix(c)
- }
- }
- }
- }
- }
- var g = (1 << e) - 1,
- l,
- a = false,
- h = "",
- f = this.t;
- var j = this.DB - (f * this.DB) % e;
- if (f-->0) {
- if (j < this.DB && (l = this[f] >> j) > 0) {
- a = true;
- h = int2char(l)
- }
- while (f >= 0) {
- if (j < e) {
- l = (this[f] & ((1 << j) - 1)) << (e - j);
- l |= this[--f] >> (j += this.DB - e)
- } else {
- l = (this[f] >> (j -= e)) & g;
- if (j <= 0) {
- j += this.DB; --f
- }
- }
- if (l > 0) {
- a = true
- }
- if (a) {
- h += int2char(l)
- }
- }
- }
- return a ? h: "0"
- }
- function bnNegate() {
- var a = nbi();
- BigInteger.ZERO.subTo(this, a);
- return a
- }
- function bnAbs() {
- return (this.s < 0) ? this.negate() : this
- }
- function bnCompareTo(b) {
- var d = this.s - b.s;
- if (d != 0) {
- return d
- }
- var c = this.t;
- d = c - b.t;
- if (d != 0) {
- return (this.s < 0) ? -d: d
- }
- while (--c >= 0) {
- if ((d = this[c] - b[c]) != 0) {
- return d
- }
- }
- return 0
- }
- function nbits(a) {
- var c = 1,
- b;
- if ((b = a >>> 16) != 0) {
- a = b;
- c += 16
- }
- if ((b = a >> 8) != 0) {
- a = b;
- c += 8
- }
- if ((b = a >> 4) != 0) {
- a = b;
- c += 4
- }
- if ((b = a >> 2) != 0) {
- a = b;
- c += 2
- }
- if ((b = a >> 1) != 0) {
- a = b;
- c += 1
- }
- return c
- }
- function bnBitLength() {
- if (this.t <= 0) {
- return 0
- }
- return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
- }
- function bnpDLShiftTo(c, b) {
- var a;
- for (a = this.t - 1; a >= 0; --a) {
- b[a + c] = this[a]
- }
- for (a = c - 1; a >= 0; --a) {
- b[a] = 0
- }
- b.t = this.t + c;
- b.s = this.s
- }
- function bnpDRShiftTo(c, b) {
- for (var a = c; a < this.t; ++a) {
- b[a - c] = this[a]
- }
- b.t = Math.max(this.t - c, 0);
- b.s = this.s
- }
- function bnpLShiftTo(j, e) {
- var b = j % this.DB;
- var a = this.DB - b;
- var g = (1 << a) - 1;
- var f = Math.floor(j / this.DB),
- h = (this.s << b) & this.DM,
- d;
- for (d = this.t - 1; d >= 0; --d) {
- e[d + f + 1] = (this[d] >> a) | h;
- h = (this[d] & g) << b
- }
- for (d = f - 1; d >= 0; --d) {
- e[d] = 0
- }
- e[f] = h;
- e.t = this.t + f + 1;
- e.s = this.s;
- e.clamp()
- }
- function bnpRShiftTo(g, d) {
- d.s = this.s;
- var e = Math.floor(g / this.DB);
- if (e >= this.t) {
- d.t = 0;
- return
- }
- var b = g % this.DB;
- var a = this.DB - b;
- var f = (1 << b) - 1;
- d[0] = this[e] >> b;
- for (var c = e + 1; c < this.t; ++c) {
- d[c - e - 1] |= (this[c] & f) << a;
- d[c - e] = this[c] >> b
- }
- if (b > 0) {
- d[this.t - e - 1] |= (this.s & f) << a
- }
- d.t = this.t - e;
- d.clamp()
- }
- function bnpSubTo(d, f) {
- var e = 0,
- g = 0,
- b = Math.min(d.t, this.t);
- while (e < b) {
- g += this[e] - d[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- if (d.t < this.t) {
- g -= d.s;
- while (e < this.t) {
- g += this[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- g += this.s
- } else {
- g += this.s;
- while (e < d.t) {
- g -= d[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- g -= d.s
- }
- f.s = (g < 0) ? -1 : 0;
- if (g < -1) {
- f[e++] = this.DV + g
- } else {
- if (g > 0) {
- f[e++] = g
- }
- }
- f.t = e;
- f.clamp()
- }
- function bnpMultiplyTo(c, e) {
- var b = this.abs(),
- f = c.abs();
- var d = b.t;
- e.t = d + f.t;
- while (--d >= 0) {
- e[d] = 0
- }
- for (d = 0; d < f.t; ++d) {
- e[d + b.t] = b.am(0, f[d], e, d, 0, b.t)
- }
- e.s = 0;
- e.clamp();
- if (this.s != c.s) {
- BigInteger.ZERO.subTo(e, e)
- }
- }
- function bnpSquareTo(d) {
- var a = this.abs();
- var b = d.t = 2 * a.t;
- while (--b >= 0) {
- d[b] = 0
- }
- for (b = 0; b < a.t - 1; ++b) {
- var e = a.am(b, a[b], d, 2 * b, 0, 1);
- if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) {
- d[b + a.t] -= a.DV;
- d[b + a.t + 1] = 1
- }
- }
- if (d.t > 0) {
- d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1)
- }
- d.s = 0;
- d.clamp()
- }
- function bnpDivRemTo(n, h, g) {
- var w = n.abs();
- if (w.t <= 0) {
- return
- }
- var k = this.abs();
- if (k.t < w.t) {
- if (h != null) {
- h.fromInt(0)
- }
- if (g != null) {
- this.copyTo(g)
- }
- return
- }
- if (g == null) {
- g = nbi()
- }
- var d = nbi(),
- a = this.s,
- l = n.s;
- var v = this.DB - nbits(w[w.t - 1]);
- if (v > 0) {
- w.lShiftTo(v, d);
- k.lShiftTo(v, g)
- } else {
- w.copyTo(d);
- k.copyTo(g)
- }
- var p = d.t;
- var b = d[p - 1];
- if (b == 0) {
- return
- }
- var o = b * (1 << this.F1) + ((p > 1) ? d[p - 2] >> this.F2: 0);
- var A = this.FV / o,
- z = (1 << this.F1) / o,
- x = 1 << this.F2;
- var u = g.t,
- s = u - p,
- f = (h == null) ? nbi() : h;
- d.dlShiftTo(s, f);
- if (g.compareTo(f) >= 0) {
- g[g.t++] = 1;
- g.subTo(f, g)
- }
- BigInteger.ONE.dlShiftTo(p, f);
- f.subTo(d, d);
- while (d.t < p) {
- d[d.t++] = 0
- }
- while (--s >= 0) {
- var c = (g[--u] == b) ? this.DM: Math.floor(g[u] * A + (g[u - 1] + x) * z);
- if ((g[u] += d.am(0, c, g, s, 0, p)) < c) {
- d.dlShiftTo(s, f);
- g.subTo(f, g);
- while (g[u] < --c) {
- g.subTo(f, g)
- }
- }
- }
- if (h != null) {
- g.drShiftTo(p, h);
- if (a != l) {
- BigInteger.ZERO.subTo(h, h)
- }
- }
- g.t = p;
- g.clamp();
- if (v > 0) {
- g.rShiftTo(v, g)
- }
- if (a < 0) {
- BigInteger.ZERO.subTo(g, g)
- }
- }
- function bnMod(b) {
- var c = nbi();
- this.abs().divRemTo(b, null, c);
- if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) {
- b.subTo(c, c)
- }
- return c
- }
- function Classic(a) {
- this.m = a
- }
- function cConvert(a) {
- if (a.s < 0 || a.compareTo(this.m) >= 0) {
- return a.mod(this.m)
- } else {
- return a
- }
- }
- function cRevert(a) {
- return a
- }
- function cReduce(a) {
- a.divRemTo(this.m, null, a)
- }
- function cMulTo(a, c, b) {
- a.multiplyTo(c, b);
- this.reduce(b)
- }
- function cSqrTo(a, b) {
- a.squareTo(b);
- this.reduce(b)
- }
- Classic.prototype.convert = cConvert;
- Classic.prototype.revert = cRevert;
- Classic.prototype.reduce = cReduce;
- Classic.prototype.mulTo = cMulTo;
- Classic.prototype.sqrTo = cSqrTo;
- function bnpInvDigit() {
- if (this.t < 1) {
- return 0
- }
- var a = this[0];
- if ((a & 1) == 0) {
- return 0
- }
- var b = a & 3;
- b = (b * (2 - (a & 15) * b)) & 15;
- b = (b * (2 - (a & 255) * b)) & 255;
- b = (b * (2 - (((a & 65535) * b) & 65535))) & 65535;
- b = (b * (2 - a * b % this.DV)) % this.DV;
- return (b > 0) ? this.DV - b: -b
- }
- function Montgomery(a) {
- this.m = a;
- this.mp = a.invDigit();
- this.mpl = this.mp & 32767;
- this.mph = this.mp >> 15;
- this.um = (1 << (a.DB - 15)) - 1;
- this.mt2 = 2 * a.t
- }
- function montConvert(a) {
- var b = nbi();
- a.abs().dlShiftTo(this.m.t, b);
- b.divRemTo(this.m, null, b);
- if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) {
- this.m.subTo(b, b)
- }
- return b
- }
- function montRevert(a) {
- var b = nbi();
- a.copyTo(b);
- this.reduce(b);
- return b
- }
- function montReduce(a) {
- while (a.t <= this.mt2) {
- a[a.t++] = 0
- }
- for (var c = 0; c < this.m.t; ++c) {
- var b = a[c] & 32767;
- var d = (b * this.mpl + (((b * this.mph + (a[c] >> 15) * this.mpl) & this.um) << 15)) & a.DM;
- b = c + this.m.t;
- a[b] += this.m.am(0, d, a, c, 0, this.m.t);
- while (a[b] >= a.DV) {
- a[b] -= a.DV;
- a[++b]++
- }
- }
- a.clamp();
- a.drShiftTo(this.m.t, a);
- if (a.compareTo(this.m) >= 0) {
- a.subTo(this.m, a)
- }
- }
- function montSqrTo(a, b) {
- a.squareTo(b);
- this.reduce(b)
- }
- function montMulTo(a, c, b) {
- a.multiplyTo(c, b);
- this.reduce(b)
- }
- Montgomery.prototype.convert = montConvert;
- Montgomery.prototype.revert = montRevert;
- Montgomery.prototype.reduce = montReduce;
- Montgomery.prototype.mulTo = montMulTo;
- Montgomery.prototype.sqrTo = montSqrTo;
- function bnpIsEven() {
- return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
- }
- function bnpExp(h, j) {
- if (h > 4294967295 || h < 1) {
- return BigInteger.ONE
- }
- var f = nbi(),
- a = nbi(),
- d = j.convert(this),
- c = nbits(h) - 1;
- d.copyTo(f);
- while (--c >= 0) {
- j.sqrTo(f, a);
- if ((h & (1 << c)) > 0) {
- j.mulTo(a, d, f)
- } else {
- var b = f;
- f = a;
- a = b
- }
- }
- return j.revert(f)
- }
- function bnModPowInt(b, a) {
- var c;
- if (b < 256 || a.isEven()) {
- c = new Classic(a)
- } else {
- c = new Montgomery(a)
- }
- return this.exp(b, c)
- }
- BigInteger.prototype.copyTo = bnpCopyTo;
- BigInteger.prototype.fromInt = bnpFromInt;
- BigInteger.prototype.fromString = bnpFromString;
- BigInteger.prototype.clamp = bnpClamp;
- BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
- BigInteger.prototype.drShiftTo = bnpDRShiftTo;
- BigInteger.prototype.lShiftTo = bnpLShiftTo;
- BigInteger.prototype.rShiftTo = bnpRShiftTo;
- BigInteger.prototype.subTo = bnpSubTo;
- BigInteger.prototype.multiplyTo = bnpMultiplyTo;
- BigInteger.prototype.squareTo = bnpSquareTo;
- BigInteger.prototype.divRemTo = bnpDivRemTo;
- BigInteger.prototype.invDigit = bnpInvDigit;
- BigInteger.prototype.isEven = bnpIsEven;
- BigInteger.prototype.exp = bnpExp;
- BigInteger.prototype.toString = bnToString;
- BigInteger.prototype.negate = bnNegate;
- BigInteger.prototype.abs = bnAbs;
- BigInteger.prototype.compareTo = bnCompareTo;
- BigInteger.prototype.bitLength = bnBitLength;
- BigInteger.prototype.mod = bnMod;
- BigInteger.prototype.modPowInt = bnModPowInt;
- BigInteger.ZERO = nbv(0);
- BigInteger.ONE = nbv(1);
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- function bnClone() {
- var a = nbi();
- this.copyTo(a);
- return a
- }
- function bnIntValue() {
- if (this.s < 0) {
- if (this.t == 1) {
- return this[0] - this.DV
- } else {
- if (this.t == 0) {
- return - 1
- }
- }
- } else {
- if (this.t == 1) {
- return this[0]
- } else {
- if (this.t == 0) {
- return 0
- }
- }
- }
- return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
- }
- function bnByteValue() {
- return (this.t == 0) ? this.s: (this[0] << 24) >> 24
- }
- function bnShortValue() {
- return (this.t == 0) ? this.s: (this[0] << 16) >> 16
- }
- function bnpChunkSize(a) {
- return Math.floor(Math.LN2 * this.DB / Math.log(a))
- }
- function bnSigNum() {
- if (this.s < 0) {
- return - 1
- } else {
- if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {
- return 0
- } else {
- return 1
- }
- }
- }
- function bnpToRadix(c) {
- if (c == null) {
- c = 10
- }
- if (this.signum() == 0 || c < 2 || c > 36) {
- return "0"
- }
- var f = this.chunkSize(c);
- var e = Math.pow(c, f);
- var i = nbv(e),
- j = nbi(),
- h = nbi(),
- g = "";
- this.divRemTo(i, j, h);
- while (j.signum() > 0) {
- g = (e + h.intValue()).toString(c).substr(1) + g;
- j.divRemTo(i, j, h)
- }
- return h.intValue().toString(c) + g
- }
- function bnpFromRadix(m, h) {
- this.fromInt(0);
- if (h == null) {
- h = 10
- }
- var f = this.chunkSize(h);
- var g = Math.pow(h, f),
- e = false,
- a = 0,
- l = 0;
- for (var c = 0; c < m.length; ++c) {
- var k = intAt(m, c);
- if (k < 0) {
- if (m.charAt(c) == "-" && this.signum() == 0) {
- e = true
- }
- continue
- }
- l = h * l + k;
- if (++a >= f) {
- this.dMultiply(g);
- this.dAddOffset(l, 0);
- a = 0;
- l = 0
- }
- }
- if (a > 0) {
- this.dMultiply(Math.pow(h, a));
- this.dAddOffset(l, 0)
- }
- if (e) {
- BigInteger.ZERO.subTo(this, this)
- }
- }
- function bnpFromNumber(f, e, h) {
- if ("number" == typeof e) {
- if (f < 2) {
- this.fromInt(1)
- } else {
- this.fromNumber(f, h);
- if (!this.testBit(f - 1)) {
- this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this)
- }
- if (this.isEven()) {
- this.dAddOffset(1, 0)
- }
- while (!this.isProbablePrime(e)) {
- this.dAddOffset(2, 0);
- if (this.bitLength() > f) {
- this.subTo(BigInteger.ONE.shiftLeft(f - 1), this)
- }
- }
- }
- } else {
- var d = new Array(),
- g = f & 7;
- d.length = (f >> 3) + 1;
- e.nextBytes(d);
- if (g > 0) {
- d[0] &= ((1 << g) - 1)
- } else {
- d[0] = 0
- }
- this.fromString(d, 256)
- }
- }
- function bnToByteArray() {
- var b = this.t,
- c = new Array();
- c[0] = this.s;
- var e = this.DB - (b * this.DB) % 8,
- f,
- a = 0;
- if (b-->0) {
- if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) {
- c[a++] = f | (this.s << (this.DB - e))
- }
- while (b >= 0) {
- if (e < 8) {
- f = (this[b] & ((1 << e) - 1)) << (8 - e);
- f |= this[--b] >> (e += this.DB - 8)
- } else {
- f = (this[b] >> (e -= 8)) & 255;
- if (e <= 0) {
- e += this.DB; --b
- }
- }
- if ((f & 128) != 0) {
- f |= -256
- }
- if (a == 0 && (this.s & 128) != (f & 128)) {++a
- }
- if (a > 0 || f != this.s) {
- c[a++] = f
- }
- }
- }
- return c
- }
- function bnEquals(b) {
- return (this.compareTo(b) == 0)
- }
- function bnMin(b) {
- return (this.compareTo(b) < 0) ? this: b
- }
- function bnMax(b) {
- return (this.compareTo(b) > 0) ? this: b
- }
- function bnpBitwiseTo(c, h, e) {
- var d, g, b = Math.min(c.t, this.t);
- for (d = 0; d < b; ++d) {
- e[d] = h(this[d], c[d])
- }
- if (c.t < this.t) {
- g = c.s & this.DM;
- for (d = b; d < this.t; ++d) {
- e[d] = h(this[d], g)
- }
- e.t = this.t
- } else {
- g = this.s & this.DM;
- for (d = b; d < c.t; ++d) {
- e[d] = h(g, c[d])
- }
- e.t = c.t
- }
- e.s = h(this.s, c.s);
- e.clamp()
- }
- function op_and(a, b) {
- return a & b
- }
- function bnAnd(b) {
- var c = nbi();
- this.bitwiseTo(b, op_and, c);
- return c
- }
- function op_or(a, b) {
- return a | b
- }
- function bnOr(b) {
- var c = nbi();
- this.bitwiseTo(b, op_or, c);
- return c
- }
- function op_xor(a, b) {
- return a ^ b
- }
- function bnXor(b) {
- var c = nbi();
- this.bitwiseTo(b, op_xor, c);
- return c
- }
- function op_andnot(a, b) {
- return a & ~b
- }
- function bnAndNot(b) {
- var c = nbi();
- this.bitwiseTo(b, op_andnot, c);
- return c
- }
- function bnNot() {
- var b = nbi();
- for (var a = 0; a < this.t; ++a) {
- b[a] = this.DM & ~this[a]
- }
- b.t = this.t;
- b.s = ~this.s;
- return b
- }
- function bnShiftLeft(b) {
- var a = nbi();
- if (b < 0) {
- this.rShiftTo( - b, a)
- } else {
- this.lShiftTo(b, a)
- }
- return a
- }
- function bnShiftRight(b) {
- var a = nbi();
- if (b < 0) {
- this.lShiftTo( - b, a)
- } else {
- this.rShiftTo(b, a)
- }
- return a
- }
- function lbit(a) {
- if (a == 0) {
- return - 1
- }
- var b = 0;
- if ((a & 65535) == 0) {
- a >>= 16;
- b += 16
- }
- if ((a & 255) == 0) {
- a >>= 8;
- b += 8
- }
- if ((a & 15) == 0) {
- a >>= 4;
- b += 4
- }
- if ((a & 3) == 0) {
- a >>= 2;
- b += 2
- }
- if ((a & 1) == 0) {++b
- }
- return b
- }
- function bnGetLowestSetBit() {
- for (var a = 0; a < this.t; ++a) {
- if (this[a] != 0) {
- return a * this.DB + lbit(this[a])
- }
- }
- if (this.s < 0) {
- return this.t * this.DB
- }
- return - 1
- }
- function cbit(a) {
- var b = 0;
- while (a != 0) {
- a &= a - 1; ++b
- }
- return b
- }
- function bnBitCount() {
- var c = 0,
- a = this.s & this.DM;
- for (var b = 0; b < this.t; ++b) {
- c += cbit(this[b] ^ a)
- }
- return c
- }
- function bnTestBit(b) {
- var a = Math.floor(b / this.DB);
- if (a >= this.t) {
- return (this.s != 0)
- }
- return ((this[a] & (1 << (b % this.DB))) != 0)
- }
- function bnpChangeBit(c, b) {
- var a = BigInteger.ONE.shiftLeft(c);
- this.bitwiseTo(a, b, a);
- return a
- }
- function bnSetBit(a) {
- return this.changeBit(a, op_or)
- }
- function bnClearBit(a) {
- return this.changeBit(a, op_andnot)
- }
- function bnFlipBit(a) {
- return this.changeBit(a, op_xor)
- }
- function bnpAddTo(d, f) {
- var e = 0,
- g = 0,
- b = Math.min(d.t, this.t);
- while (e < b) {
- g += this[e] + d[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- if (d.t < this.t) {
- g += d.s;
- while (e < this.t) {
- g += this[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- g += this.s
- } else {
- g += this.s;
- while (e < d.t) {
- g += d[e];
- f[e++] = g & this.DM;
- g >>= this.DB
- }
- g += d.s
- }
- f.s = (g < 0) ? -1 : 0;
- if (g > 0) {
- f[e++] = g
- } else {
- if (g < -1) {
- f[e++] = this.DV + g
- }
- }
- f.t = e;
- f.clamp()
- }
- function bnAdd(b) {
- var c = nbi();
- this.addTo(b, c);
- return c
- }
- function bnSubtract(b) {
- var c = nbi();
- this.subTo(b, c);
- return c
- }
- function bnMultiply(b) {
- var c = nbi();
- this.multiplyTo(b, c);
- return c
- }
- function bnSquare() {
- var a = nbi();
- this.squareTo(a);
- return a
- }
- function bnDivide(b) {
- var c = nbi();
- this.divRemTo(b, c, null);
- return c
- }
- function bnRemainder(b) {
- var c = nbi();
- this.divRemTo(b, null, c);
- return c
- }
- function bnDivideAndRemainder(b) {
- var d = nbi(),
- c = nbi();
- this.divRemTo(b, d, c);
- return new Array(d, c)
- }
- function bnpDMultiply(a) {
- this[this.t] = this.am(0, a - 1, this, 0, 0, this.t); ++this.t;
- this.clamp()
- }
- function bnpDAddOffset(b, a) {
- if (b == 0) {
- return
- }
- while (this.t <= a) {
- this[this.t++] = 0
- }
- this[a] += b;
- while (this[a] >= this.DV) {
- this[a] -= this.DV;
- if (++a >= this.t) {
- this[this.t++] = 0
- }++this[a]
- }
- }
- function NullExp() {}
- function nNop(a) {
- return a
- }
- function nMulTo(a, c, b) {
- a.multiplyTo(c, b)
- }
- function nSqrTo(a, b) {
- a.squareTo(b)
- }
- NullExp.prototype.convert = nNop;
- NullExp.prototype.revert = nNop;
- NullExp.prototype.mulTo = nMulTo;
- NullExp.prototype.sqrTo = nSqrTo;
- function bnPow(a) {
- return this.exp(a, new NullExp())
- }
- function bnpMultiplyLowerTo(b, f, e) {
- var d = Math.min(this.t + b.t, f);
- e.s = 0;
- e.t = d;
- while (d > 0) {
- e[--d] = 0
- }
- var c;
- for (c = e.t - this.t; d < c; ++d) {
- e[d + this.t] = this.am(0, b[d], e, d, 0, this.t)
- }
- for (c = Math.min(b.t, f); d < c; ++d) {
- this.am(0, b[d], e, d, 0, f - d)
- }
- e.clamp()
- }
- function bnpMultiplyUpperTo(b, e, d) {--e;
- var c = d.t = this.t + b.t - e;
- d.s = 0;
- while (--c >= 0) {
- d[c] = 0
- }
- for (c = Math.max(e - this.t, 0); c < b.t; ++c) {
- d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e)
- }
- d.clamp();
- d.drShiftTo(1, d)
- }
- function Barrett(a) {
- this.r2 = nbi();
- this.q3 = nbi();
- BigInteger.ONE.dlShiftTo(2 * a.t, this.r2);
- this.mu = this.r2.divide(a);
- this.m = a
- }
- function barrettConvert(a) {
- if (a.s < 0 || a.t > 2 * this.m.t) {
- return a.mod(this.m)
- } else {
- if (a.compareTo(this.m) < 0) {
- return a
- } else {
- var b = nbi();
- a.copyTo(b);
- this.reduce(b);
- return b
- }
- }
- }
- function barrettRevert(a) {
- return a
- }
- function barrettReduce(a) {
- a.drShiftTo(this.m.t - 1, this.r2);
- if (a.t > this.m.t + 1) {
- a.t = this.m.t + 1;
- a.clamp()
- }
- this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
- this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
- while (a.compareTo(this.r2) < 0) {
- a.dAddOffset(1, this.m.t + 1)
- }
- a.subTo(this.r2, a);
- while (a.compareTo(this.m) >= 0) {
- a.subTo(this.m, a)
- }
- }
- function barrettSqrTo(a, b) {
- a.squareTo(b);
- this.reduce(b)
- }
- function barrettMulTo(a, c, b) {
- a.multiplyTo(c, b);
- this.reduce(b)
- }
- Barrett.prototype.convert = barrettConvert;
- Barrett.prototype.revert = barrettRevert;
- Barrett.prototype.reduce = barrettReduce;
- Barrett.prototype.mulTo = barrettMulTo;
- Barrett.prototype.sqrTo = barrettSqrTo;
- function bnModPow(q, f) {
- var o = q.bitLength(),
- h,
- b = nbv(1),
- v;
- if (o <= 0) {
- return b
- } else {
- if (o < 18) {
- h = 1
- } else {
- if (o < 48) {
- h = 3
- } else {
- if (o < 144) {
- h = 4
- } else {
- if (o < 768) {
- h = 5
- } else {
- h = 6
- }
- }
- }
- }
- }
- if (o < 8) {
- v = new Classic(f)
- } else {
- if (f.isEven()) {
- v = new Barrett(f)
- } else {
- v = new Montgomery(f)
- }
- }
- var p = new Array(),
- d = 3,
- s = h - 1,
- a = (1 << h) - 1;
- p[1] = v.convert(this);
- if (h > 1) {
- var A = nbi();
- v.sqrTo(p[1], A);
- while (d <= a) {
- p[d] = nbi();
- v.mulTo(A, p[d - 2], p[d]);
- d += 2
- }
- }
- var l = q.t - 1,
- x, u = true,
- c = nbi(),
- y;
- o = nbits(q[l]) - 1;
- while (l >= 0) {
- if (o >= s) {
- x = (q[l] >> (o - s)) & a
- } else {
- x = (q[l] & ((1 << (o + 1)) - 1)) << (s - o);
- if (l > 0) {
- x |= q[l - 1] >> (this.DB + o - s)
- }
- }
- d = h;
- while ((x & 1) == 0) {
- x >>= 1; --d
- }
- if ((o -= d) < 0) {
- o += this.DB; --l
- }
- if (u) {
- p[x].copyTo(b);
- u = false
- } else {
- while (d > 1) {
- v.sqrTo(b, c);
- v.sqrTo(c, b);
- d -= 2
- }
- if (d > 0) {
- v.sqrTo(b, c)
- } else {
- y = b;
- b = c;
- c = y
- }
- v.mulTo(c, p[x], b)
- }
- while (l >= 0 && (q[l] & (1 << o)) == 0) {
- v.sqrTo(b, c);
- y = b;
- b = c;
- c = y;
- if (--o < 0) {
- o = this.DB - 1; --l
- }
- }
- }
- return v.revert(b)
- }
- function bnGCD(c) {
- var b = (this.s < 0) ? this.negate() : this.clone();
- var h = (c.s < 0) ? c.negate() : c.clone();
- if (b.compareTo(h) < 0) {
- var e = b;
- b = h;
- h = e
- }
- var d = b.getLowestSetBit(),
- f = h.getLowestSetBit();
- if (f < 0) {
- return b
- }
- if (d < f) {
- f = d
- }
- if (f > 0) {
- b.rShiftTo(f, b);
- h.rShiftTo(f, h)
- }
- while (b.signum() > 0) {
- if ((d = b.getLowestSetBit()) > 0) {
- b.rShiftTo(d, b)
- }
- if ((d = h.getLowestSetBit()) > 0) {
- h.rShiftTo(d, h)
- }
- if (b.compareTo(h) >= 0) {
- b.subTo(h, b);
- b.rShiftTo(1, b)
- } else {
- h.subTo(b, h);
- h.rShiftTo(1, h)
- }
- }
- if (f > 0) {
- h.lShiftTo(f, h)
- }
- return h
- }
- function bnpModInt(e) {
- if (e <= 0) {
- return 0
- }
- var c = this.DV % e,
- b = (this.s < 0) ? e - 1 : 0;
- if (this.t > 0) {
- if (c == 0) {
- b = this[0] % e
- } else {
- for (var a = this.t - 1; a >= 0; --a) {
- b = (c * b + this[a]) % e
- }
- }
- }
- return b
- }
- function bnModInverse(f) {
- var j = f.isEven();
- if ((this.isEven() && j) || f.signum() == 0) {
- return BigInteger.ZERO
- }
- var i = f.clone(),
- h = this.clone();
- var g = nbv(1),
- e = nbv(0),
- l = nbv(0),
- k = nbv(1);
- while (i.signum() != 0) {
- while (i.isEven()) {
- i.rShiftTo(1, i);
- if (j) {
- if (!g.isEven() || !e.isEven()) {
- g.addTo(this, g);
- e.subTo(f, e)
- }
- g.rShiftTo(1, g)
- } else {
- if (!e.isEven()) {
- e.subTo(f, e)
- }
- }
- e.rShiftTo(1, e)
- }
- while (h.isEven()) {
- h.rShiftTo(1, h);
- if (j) {
- if (!l.isEven() || !k.isEven()) {
- l.addTo(this, l);
- k.subTo(f, k)
- }
- l.rShiftTo(1, l)
- } else {
- if (!k.isEven()) {
- k.subTo(f, k)
- }
- }
- k.rShiftTo(1, k)
- }
- if (i.compareTo(h) >= 0) {
- i.subTo(h, i);
- if (j) {
- g.subTo(l, g)
- }
- e.subTo(k, e)
- } else {
- h.subTo(i, h);
- if (j) {
- l.subTo(g, l)
- }
- k.subTo(e, k)
- }
- }
- if (h.compareTo(BigInteger.ONE) != 0) {
- return BigInteger.ZERO
- }
- if (k.compareTo(f) >= 0) {
- return k.subtract(f)
- }
- if (k.signum() < 0) {
- k.addTo(f, k)
- } else {
- return k
- }
- if (k.signum() < 0) {
- return k.add(f)
- } else {
- return k
- }
- }
- var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];
- var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];
- function bnIsProbablePrime(e) {
- var d, b = this.abs();
- if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) {
- for (d = 0; d < lowprimes.length; ++d) {
- if (b[0] == lowprimes[d]) {
- return true
- }
- }
- return false
- }
- if (b.isEven()) {
- return false
- }
- d = 1;
- while (d < lowprimes.length) {
- var a = lowprimes[d],
- c = d + 1;
- while (c < lowprimes.length && a < lplim) {
- a *= lowprimes[c++]
- }
- a = b.modInt(a);
- while (d < c) {
- if (a % lowprimes[d++] == 0) {
- return false
- }
- }
- }
- return b.millerRabin(e)
- }
- function bnpMillerRabin(f) {
- var g = this.subtract(BigInteger.ONE);
- var c = g.getLowestSetBit();
- if (c <= 0) {
- return false
- }
- var h = g.shiftRight(c);
- f = (f + 1) >> 1;
- if (f > lowprimes.length) {
- f = lowprimes.length
- }
- var b = nbi();
- for (var e = 0; e < f; ++e) {
- b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);
- var l = b.modPow(h, this);
- if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) {
- var d = 1;
- while (d++<c && l.compareTo(g) != 0) {
- l = l.modPowInt(2, this);
- if (l.compareTo(BigInteger.ONE) == 0) {
- return false
- }
- }
- if (l.compareTo(g) != 0) {
- return false
- }
- }
- }
- return true
- }
- BigInteger.prototype.chunkSize = bnpChunkSize;
- BigInteger.prototype.toRadix = bnpToRadix;
- BigInteger.prototype.fromRadix = bnpFromRadix;
- BigInteger.prototype.fromNumber = bnpFromNumber;
- BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
- BigInteger.prototype.changeBit = bnpChangeBit;
- BigInteger.prototype.addTo = bnpAddTo;
- BigInteger.prototype.dMultiply = bnpDMultiply;
- BigInteger.prototype.dAddOffset = bnpDAddOffset;
- BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
- BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
- BigInteger.prototype.modInt = bnpModInt;
- BigInteger.prototype.millerRabin = bnpMillerRabin;
- BigInteger.prototype.clone = bnClone;
- BigInteger.prototype.intValue = bnIntValue;
- BigInteger.prototype.byteValue = bnByteValue;
- BigInteger.prototype.shortValue = bnShortValue;
- BigInteger.prototype.signum = bnSigNum;
- BigInteger.prototype.toByteArray = bnToByteArray;
- BigInteger.prototype.equals = bnEquals;
- BigInteger.prototype.min = bnMin;
- BigInteger.prototype.max = bnMax;
- BigInteger.prototype.and = bnAnd;
- BigInteger.prototype.or = bnOr;
- BigInteger.prototype.xor = bnXor;
- BigInteger.prototype.andNot = bnAndNot;
- BigInteger.prototype.not = bnNot;
- BigInteger.prototype.shiftLeft = bnShiftLeft;
- BigInteger.prototype.shiftRight = bnShiftRight;
- BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
- BigInteger.prototype.bitCount = bnBitCount;
- BigInteger.prototype.testBit = bnTestBit;
- BigInteger.prototype.setBit = bnSetBit;
- BigInteger.prototype.clearBit = bnClearBit;
- BigInteger.prototype.flipBit = bnFlipBit;
- BigInteger.prototype.add = bnAdd;
- BigInteger.prototype.subtract = bnSubtract;
- BigInteger.prototype.multiply = bnMultiply;
- BigInteger.prototype.divide = bnDivide;
- BigInteger.prototype.remainder = bnRemainder;
- BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
- BigInteger.prototype.modPow = bnModPow;
- BigInteger.prototype.modInverse = bnModInverse;
- BigInteger.prototype.pow = bnPow;
- BigInteger.prototype.gcd = bnGCD;
- BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
- BigInteger.prototype.square = bnSquare;
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- function Arcfour() {
- this.i = 0;
- this.j = 0;
- this.S = new Array()
- }
- function ARC4init(d) {
- var c, a, b;
- for (c = 0; c < 256; ++c) {
- this.S[c] = c
- }
- a = 0;
- for (c = 0; c < 256; ++c) {
- a = (a + this.S[c] + d[c % d.length]) & 255;
- b = this.S[c];
- this.S[c] = this.S[a];
- this.S[a] = b
- }
- this.i = 0;
- this.j = 0
- }
- function ARC4next() {
- var a;
- this.i = (this.i + 1) & 255;
- this.j = (this.j + this.S[this.i]) & 255;
- a = this.S[this.i];
- this.S[this.i] = this.S[this.j];
- this.S[this.j] = a;
- return this.S[(a + this.S[this.i]) & 255]
- }
- Arcfour.prototype.init = ARC4init;
- Arcfour.prototype.next = ARC4next;
- function prng_newstate() {
- return new Arcfour()
- }
- var rng_psize = 256;
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- var rng_state;
- var rng_pool;
- var rng_pptr;
- function rng_seed_int(a) {
- rng_pool[rng_pptr++] ^= a & 255;
- rng_pool[rng_pptr++] ^= (a >> 8) & 255;
- rng_pool[rng_pptr++] ^= (a >> 16) & 255;
- rng_pool[rng_pptr++] ^= (a >> 24) & 255;
- if (rng_pptr >= rng_psize) {
- rng_pptr -= rng_psize
- }
- }
- function rng_seed_time() {
- rng_seed_int(new Date().getTime())
- }
- if (rng_pool == null) {
- rng_pool = new Array();
- rng_pptr = 0;
- var t;
- if (window2.crypto && window2.crypto.getRandomValues) {
- var ua = new Uint8Array(32);
- window2.crypto.getRandomValues(ua);
- for (t = 0; t < 32; ++t) {
- rng_pool[rng_pptr++] = ua[t]
- }
- }
- if (navigator2.appName == "Netscape" && navigator2.appVersion < "5" && window2.crypto && window2.crypto.random) {
- var z = window2.crypto.random(32);
- for (t = 0; t < z.length; ++t) {
- rng_pool[rng_pptr++] = z.charCodeAt(t) & 255
- }
- }
- while (rng_pptr < rng_psize) {
- t = Math.floor(65536 * Math.random());
- rng_pool[rng_pptr++] = t >>> 8;
- rng_pool[rng_pptr++] = t & 255
- }
- rng_pptr = 0;
- rng_seed_time()
- }
- function rng_get_byte() {
- if (rng_state == null) {
- rng_seed_time();
- rng_state = prng_newstate();
- rng_state.init(rng_pool);
- for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {
- rng_pool[rng_pptr] = 0
- }
- rng_pptr = 0
- }
- return rng_state.next()
- }
- function rng_get_bytes(b) {
- var a;
- for (a = 0; a < b.length; ++a) {
- b[a] = rng_get_byte()
- }
- }
- function SecureRandom() {}
- SecureRandom.prototype.nextBytes = rng_get_bytes;
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- function parseBigInt(b, a) {
- return new BigInteger(b, a)
- }
- function linebrk(c, d) {
- var a = "";
- var b = 0;
- while (b + d < c.length) {
- a += c.substring(b, b + d) + "\n";
- b += d
- }
- return a + c.substring(b, c.length)
- }
- function byte2Hex(a) {
- if (a < 16) {
- return "0" + a.toString(16)
- } else {
- return a.toString(16)
- }
- }
- function pkcs1pad2(e, h) {
- if (h < e.length + 11) {
- alert("Message too long for RSA");
- return null
- }
- var g = new Array();
- var d = e.length - 1;
- while (d >= 0 && h > 0) {
- var f = e.charCodeAt(d--);
- if (f < 128) {
- g[--h] = f
- } else {
- if ((f > 127) && (f < 2048)) {
- g[--h] = (f & 63) | 128;
- g[--h] = (f >> 6) | 192
- } else {
- g[--h] = (f & 63) | 128;
- g[--h] = ((f >> 6) & 63) | 128;
- g[--h] = (f >> 12) | 224
- }
- }
- }
- g[--h] = 0;
- var b = new SecureRandom();
- var a = new Array();
- while (h > 2) {
- a[0] = 0;
- while (a[0] == 0) {
- b.nextBytes(a)
- }
- g[--h] = a[0]
- }
- g[--h] = 2;
- g[--h] = 0;
- return new BigInteger(g)
- }
- function oaep_mgf1_arr(c, a, e) {
- var b = "",
- d = 0;
- while (b.length < a) {
- b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])));
- d += 1
- }
- return b
- }
- function oaep_pad(q, a, f, l) {
- var c = KJUR.crypto.MessageDigest;
- var o = KJUR.crypto.Util;
- var b = null;
- if (!f) {
- f = "sha1"
- }
- if (typeof f === "string") {
- b = c.getCanonicalAlgName(f);
- l = c.getHashLength(b);
- f = function(i) {
- return hextorstr(o.hashString(i, b))
- }
- }
- if (q.length + 2 * l + 2 > a) {
- throw "Message too long for RSA"
- }
- var k = "",
- e;
- for (e = 0; e < a - q.length - 2 * l - 2; e += 1) {
- k += "\x00"
- }
- var h = f("") + k + "\x01" + q;
- var g = new Array(l);
- new SecureRandom().nextBytes(g);
- var j = oaep_mgf1_arr(g, h.length, f);
- var p = [];
- for (e = 0; e < h.length; e += 1) {
- p[e] = h.charCodeAt(e) ^ j.charCodeAt(e)
- }
- var m = oaep_mgf1_arr(p, g.length, f);
- var d = [0];
- for (e = 0; e < g.length; e += 1) {
- d[e + 1] = g[e] ^ m.charCodeAt(e)
- }
- return new BigInteger(d.concat(p))
- }
- function RSAKey() {
- this.n = null;
- this.e = 0;
- this.d = null;
- this.p = null;
- this.q = null;
- this.dmp1 = null;
- this.dmq1 = null;
- this.coeff = null
- }
- function RSASetPublic(b, a) {
- this.isPublic = true;
- this.isPrivate = false;
- if (typeof b !== "string") {
- this.n = b;
- this.e = a
- } else {
- if (b != null && a != null && b.length > 0 && a.length > 0) {
- this.n = parseBigInt(b, 16);
- this.e = parseInt(a, 16)
- } else {
- throw "Invalid RSA public key"
- }
- }
- }
- function RSADoPublic(a) {
- return a.modPowInt(this.e, this.n)
- }
- function RSAEncrypt(d) {
- var a = pkcs1pad2(d, (this.n.bitLength() + 7) >> 3);
- if (a == null) {
- return null
- }
- var e = this.doPublic(a);
- if (e == null) {
- return null
- }
- var b = e.toString(16);
- if ((b.length & 1) == 0) {
- return b
- } else {
- return "0" + b
- }
- }
- function RSAEncryptOAEP(f, e, b) {
- var a = oaep_pad(f, (this.n.bitLength() + 7) >> 3, e, b);
- if (a == null) {
- return null
- }
- var g = this.doPublic(a);
- if (g == null) {
- return null
- }
- var d = g.toString(16);
- if ((d.length & 1) == 0) {
- return d
- } else {
- return "0" + d
- }
- }
- RSAKey.prototype.doPublic = RSADoPublic;
- RSAKey.prototype.setPublic = RSASetPublic;
- RSAKey.prototype.encrypt = RSAEncrypt;
- RSAKey.prototype.encryptOAEP = RSAEncryptOAEP;
- RSAKey.prototype.type = "RSA";
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- function pkcs1unpad2(g, j) {
- var a = g.toByteArray();
- var f = 0;
- while (f < a.length && a[f] == 0) {++f
- }
- if (a.length - f != j - 1 || a[f] != 2) {
- return null
- }++f;
- while (a[f] != 0) {
- if (++f >= a.length) {
- return null
- }
- }
- var e = "";
- while (++f < a.length) {
- var h = a[f] & 255;
- if (h < 128) {
- e += String.fromCharCode(h)
- } else {
- if ((h > 191) && (h < 224)) {
- e += String.fromCharCode(((h & 31) << 6) | (a[f + 1] & 63)); ++f
- } else {
- e += String.fromCharCode(((h & 15) << 12) | ((a[f + 1] & 63) << 6) | (a[f + 2] & 63));
- f += 2
- }
- }
- }
- return e
- }
- function oaep_mgf1_str(c, a, e) {
- var b = "",
- d = 0;
- while (b.length < a) {
- b += e(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]));
- d += 1
- }
- return b
- }
- function oaep_unpad(o, b, g, p) {
- var e = KJUR.crypto.MessageDigest;
- var r = KJUR.crypto.Util;
- var c = null;
- if (!g) {
- g = "sha1"
- }
- if (typeof g === "string") {
- c = e.getCanonicalAlgName(g);
- p = e.getHashLength(c);
- g = function(d) {
- return hextorstr(r.hashString(d, c))
- }
- }
- o = o.toByteArray();
- var h;
- for (h = 0; h < o.length; h += 1) {
- o[h] &= 255
- }
- while (o.length < b) {
- o.unshift(0)
- }
- o = String.fromCharCode.apply(String, o);
- if (o.length < 2 * p + 2) {
- throw "Cipher too short"
- }
- var f = o.substr(1, p);
- var s = o.substr(p + 1);
- var q = oaep_mgf1_str(s, p, g);
- var k = [],
- h;
- for (h = 0; h < f.length; h += 1) {
- k[h] = f.charCodeAt(h) ^ q.charCodeAt(h)
- }
- var l = oaep_mgf1_str(String.fromCharCode.apply(String, k), o.length - p, g);
- var j = [];
- for (h = 0; h < s.length; h += 1) {
- j[h] = s.charCodeAt(h) ^ l.charCodeAt(h)
- }
- j = String.fromCharCode.apply(String, j);
- if (j.substr(0, p) !== g("")) {
- throw "Hash mismatch"
- }
- j = j.substr(p);
- var a = j.indexOf("\x01");
- var m = (a != -1) ? j.substr(0, a).lastIndexOf("\x00") : -1;
- if (m + 1 != a) {
- throw "Malformed data"
- }
- return j.substr(a + 1)
- }
- function RSASetPrivate(c, a, b) {
- this.isPrivate = true;
- if (typeof c !== "string") {
- this.n = c;
- this.e = a;
- this.d = b
- } else {
- if (c != null && a != null && c.length > 0 && a.length > 0) {
- this.n = parseBigInt(c, 16);
- this.e = parseInt(a, 16);
- this.d = parseBigInt(b, 16)
- } else {
- alert("Invalid RSA private key")
- }
- }
- }
- function RSASetPrivateEx(g, d, e, c, b, a, h, f) {
- this.isPrivate = true;
- this.isPublic = false;
- if (g == null) {
- throw "RSASetPrivateEx N == null"
- }
- if (d == null) {
- throw "RSASetPrivateEx E == null"
- }
- if (g.length == 0) {
- throw "RSASetPrivateEx N.length == 0"
- }
- if (d.length == 0) {
- throw "RSASetPrivateEx E.length == 0"
- }
- if (g != null && d != null && g.length > 0 && d.length > 0) {
- this.n = parseBigInt(g, 16);
- this.e = parseInt(d, 16);
- this.d = parseBigInt(e, 16);
- this.p = parseBigInt(c, 16);
- this.q = parseBigInt(b, 16);
- this.dmp1 = parseBigInt(a, 16);
- this.dmq1 = parseBigInt(h, 16);
- this.coeff = parseBigInt(f, 16)
- } else {
- alert("Invalid RSA private key in RSASetPrivateEx")
- }
- }
- function RSAGenerate(b, i) {
- var a = new SecureRandom();
- var f = b >> 1;
- this.e = parseInt(i, 16);
- var c = new BigInteger(i, 16);
- for (;;) {
- for (;;) {
- this.p = new BigInteger(b - f, 1, a);
- if (this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {
- break
- }
- }
- for (;;) {
- this.q = new BigInteger(f, 1, a);
- if (this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {
- break
- }
- }
- if (this.p.compareTo(this.q) <= 0) {
- var h = this.p;
- this.p = this.q;
- this.q = h
- }
- var g = this.p.subtract(BigInteger.ONE);
- var d = this.q.subtract(BigInteger.ONE);
- var e = g.multiply(d);
- if (e.gcd(c).compareTo(BigInteger.ONE) == 0) {
- this.n = this.p.multiply(this.q);
- this.d = c.modInverse(e);
- this.dmp1 = this.d.mod(g);
- this.dmq1 = this.d.mod(d);
- this.coeff = this.q.modInverse(this.p);
- break
- }
- }
- this.isPrivate = true
- }
- function RSADoPrivate(a) {
- if (this.p == null || this.q == null) {
- return a.modPow(this.d, this.n)
- }
- var c = a.mod(this.p).modPow(this.dmp1, this.p);
- var b = a.mod(this.q).modPow(this.dmq1, this.q);
- while (c.compareTo(b) < 0) {
- c = c.add(this.p)
- }
- return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b)
- }
- function RSADecrypt(b) {
- var d = parseBigInt(b, 16);
- var a = this.doPrivate(d);
- if (a == null) {
- return null
- }
- return pkcs1unpad2(a, (this.n.bitLength() + 7) >> 3)
- }
- function RSADecryptOAEP(e, d, b) {
- var f = parseBigInt(e, 16);
- var a = this.doPrivate(f);
- if (a == null) {
- return null
- }
- return oaep_unpad(a, (this.n.bitLength() + 7) >> 3, d, b)
- }
- RSAKey.prototype.doPrivate = RSADoPrivate;
- RSAKey.prototype.setPrivate = RSASetPrivate;
- RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
- RSAKey.prototype.generate = RSAGenerate;
- RSAKey.prototype.decrypt = RSADecrypt;
- RSAKey.prototype.decryptOAEP = RSADecryptOAEP;
- /*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
- */
- function ECFieldElementFp(b, a) {
- this.x = a;
- this.q = b
- }
- function feFpEquals(a) {
- if (a == this) {
- return true
- }
- return (this.q.equals(a.q) && this.x.equals(a.x))
- }
- function feFpToBigInteger() {
- return this.x
- }
- function feFpNegate() {
- return new ECFieldElementFp(this.q, this.x.negate().mod(this.q))
- }
- function feFpAdd(a) {
- return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q))
- }
- function feFpSubtract(a) {
- return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q))
- }
- function feFpMultiply(a) {
- return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q))
- }
- function feFpSquare() {
- return new ECFieldElementFp(this.q, this.x.square().mod(this.q))
- }
- function feFpDivide(a) {
- return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q))
- }
- ECFieldElementFp.prototype.equals = feFpEquals;
- ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;
- ECFieldElementFp.prototype.negate = feFpNegate;
- ECFieldElementFp.prototype.add = feFpAdd;
- ECFieldElementFp.prototype.subtract = feFpSubtract;
- ECFieldElementFp.prototype.multiply = feFpMultiply;
- ECFieldElementFp.prototype.square = feFpSquare;
- ECFieldElementFp.prototype.divide = feFpDivide;
- function ECPointFp(c, a, d, b) {
- this.curve = c;
- this.x = a;
- this.y = d;
- if (b == null) {
- this.z = BigInteger.ONE
- } else {
- this.z = b
- }
- this.zinv = null
- }
- function pointFpGetX() {
- if (this.zinv == null) {
- this.zinv = this.z.modInverse(this.curve.q)
- }
- return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
- }
- function pointFpGetY() {
- if (this.zinv == null) {
- this.zinv = this.z.modInverse(this.curve.q)
- }
- return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
- }
- function pointFpEquals(a) {
- if (a == this) {
- return true
- }
- if (this.isInfinity()) {
- return a.isInfinity()
- }
- if (a.isInfinity()) {
- return this.isInfinity()
- }
- var c, b;
- c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);
- if (!c.equals(BigInteger.ZERO)) {
- return false
- }
- b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);
- return b.equals(BigInteger.ZERO)
- }
- function pointFpIsInfinity() {
- if ((this.x == null) && (this.y == null)) {
- return true
- }
- return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO)
- }
- function pointFpNegate() {
- return new ECPointFp(this.curve, this.x, this.y.negate(), this.z)
- }
- function pointFpAdd(l) {
- if (this.isInfinity()) {
- return l
- }
- if (l.isInfinity()) {
- return this
- }
- var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);
- var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);
- if (BigInteger.ZERO.equals(o)) {
- if (BigInteger.ZERO.equals(p)) {
- return this.twice()
- }
- return this.curve.getInfinity()
- }
- var j = new BigInteger("3");
- var e = this.x.toBigInteger();
- var n = this.y.toBigInteger();
- var c = l.x.toBigInteger();
- var k = l.y.toBigInteger();
- var m = o.square();
- var i = m.multiply(o);
- var d = e.multiply(m);
- var g = p.square().multiply(this.z);
- var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);
- var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);
- var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q);
- return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f)
- }
- function pointFpTwice() {
- if (this.isInfinity()) {
- return this
- }
- if (this.y.toBigInteger().signum() == 0) {
- return this.curve.getInfinity()
- }
- var g = new BigInteger("3");
- var c = this.x.toBigInteger();
- var h = this.y.toBigInteger();
- var e = h.multiply(this.z);
- var j = e.multiply(h).mod(this.curve.q);
- var i = this.curve.a.toBigInteger();
- var k = c.square().multiply(g);
- if (!BigInteger.ZERO.equals(i)) {
- k = k.add(this.z.square().multiply(i))
- }
- k = k.mod(this.curve.q);
- var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);
- var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);
- var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q);
- return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d)
- }
- function pointFpMultiply(b) {
- if (this.isInfinity()) {
- return this
- }
- if (b.signum() == 0) {
- return this.curve.getInfinity()
- }
- var g = b;
- var f = g.multiply(new BigInteger("3"));
- var l = this.negate();
- var d = this;
- var c;
- for (c = f.bitLength() - 2; c > 0; --c) {
- d = d.twice();
- var a = f.testBit(c);
- var j = g.testBit(c);
- if (a != j) {
- d = d.add(a ? this: l)
- }
- }
- return d
- }
- function pointFpMultiplyTwo(c, a, b) {
- var d;
- if (c.bitLength() > b.bitLength()) {
- d = c.bitLength() - 1
- } else {
- d = b.bitLength() - 1
- }
- var f = this.curve.getInfinity();
- var e = this.add(a);
- while (d >= 0) {
- f = f.twice();
- if (c.testBit(d)) {
- if (b.testBit(d)) {
- f = f.add(e)
- } else {
- f = f.add(this)
- }
- } else {
- if (b.testBit(d)) {
- f = f.add(a)
- }
- }--d
- }
- return f
- }
- ECPointFp.prototype.getX = pointFpGetX;
- ECPointFp.prototype.getY = pointFpGetY;
- ECPointFp.prototype.equals = pointFpEquals;
- ECPointFp.prototype.isInfinity = pointFpIsInfinity;
- ECPointFp.prototype.negate = pointFpNegate;
- ECPointFp.prototype.add = pointFpAdd;
- ECPointFp.prototype.twice = pointFpTwice;
- ECPointFp.prototype.multiply = pointFpMultiply;
- ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;
- function ECCurveFp(e, d, c) {
- this.q = e;
- this.a = this.fromBigInteger(d);
- this.b = this.fromBigInteger(c);
- this.infinity = new ECPointFp(this, null, null)
- }
- function curveFpGetQ() {
- return this.q
- }
- function curveFpGetA() {
- return this.a
- }
- function curveFpGetB() {
- return this.b
- }
- function curveFpEquals(a) {
- if (a == this) {
- return true
- }
- return (this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b))
- }
- function curveFpGetInfinity() {
- return this.infinity
- }
- function curveFpFromBigInteger(a) {
- return new ECFieldElementFp(this.q, a)
- }
- function curveFpDecodePointHex(d) {
- switch (parseInt(d.substr(0, 2), 16)) {
- case 0:
- return this.infinity;
- case 2:
- case 3:
- return null;
- case 4:
- case 6:
- case 7:
- var a = (d.length - 2) / 2;
- var c = d.substr(2, a);
- var b = d.substr(a + 2, a);
- return new ECPointFp(this, this.fromBigInteger(new BigInteger(c, 16)), this.fromBigInteger(new BigInteger(b, 16)));
- default:
- return null
- }
- }
- ECCurveFp.prototype.getQ = curveFpGetQ;
- ECCurveFp.prototype.getA = curveFpGetA;
- ECCurveFp.prototype.getB = curveFpGetB;
- ECCurveFp.prototype.equals = curveFpEquals;
- ECCurveFp.prototype.getInfinity = curveFpGetInfinity;
- ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;
- ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;
- /*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib
- */
- ECFieldElementFp.prototype.getByteLength = function() {
- return Math.floor((this.toBigInteger().bitLength() + 7) / 8)
- };
- ECPointFp.prototype.getEncoded = function(c) {
- var d = function(h, f) {
- var g = h.toByteArrayUnsigned();
- if (f < g.length) {
- g = g.slice(g.length - f)
- } else {
- while (f > g.length) {
- g.unshift(0)
- }
- }
- return g
- };
- var a = this.getX().toBigInteger();
- var e = this.getY().toBigInteger();
- var b = d(a, 32);
- if (c) {
- if (e.isEven()) {
- b.unshift(2)
- } else {
- b.unshift(3)
- }
- } else {
- b.unshift(4);
- b = b.concat(d(e, 32))
- }
- return b
- };
- ECPointFp.decodeFrom = function(g, c) {
- var f = c[0];
- var e = c.length - 1;
- var d = c.slice(1, 1 + e / 2);
- var b = c.slice(1 + e / 2, 1 + e);
- d.unshift(0);
- b.unshift(0);
- var a = new BigInteger(d);
- var h = new BigInteger(b);
- return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h))
- };
- ECPointFp.decodeFromHex = function(g, c) {
- var f = c.substr(0, 2);
- var e = c.length - 2;
- var d = c.substr(2, e / 2);
- var b = c.substr(2 + e / 2, e / 2);
- var a = new BigInteger(d, 16);
- var h = new BigInteger(b, 16);
- return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h))
- };
- ECPointFp.prototype.add2D = function(c) {
- if (this.isInfinity()) {
- return c
- }
- if (c.isInfinity()) {
- return this
- }
- if (this.x.equals(c.x)) {
- if (this.y.equals(c.y)) {
- return this.twice()
- }
- return this.curve.getInfinity()
- }
- var g = c.x.subtract(this.x);
- var e = c.y.subtract(this.y);
- var a = e.divide(g);
- var d = a.square().subtract(this.x).subtract(c.x);
- var f = a.multiply(this.x.subtract(d)).subtract(this.y);
- return new ECPointFp(this.curve, d, f)
- };
- ECPointFp.prototype.twice2D = function() {
- if (this.isInfinity()) {
- return this
- }
- if (this.y.toBigInteger().signum() == 0) {
- return this.curve.getInfinity()
- }
- var b = this.curve.fromBigInteger(BigInteger.valueOf(2));
- var e = this.curve.fromBigInteger(BigInteger.valueOf(3));
- var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));
- var c = a.square().subtract(this.x.multiply(b));
- var d = a.multiply(this.x.subtract(c)).subtract(this.y);
- return new ECPointFp(this.curve, c, d)
- };
- ECPointFp.prototype.multiply2D = function(b) {
- if (this.isInfinity()) {
- return this
- }
- if (b.signum() == 0) {
- return this.curve.getInfinity()
- }
- var g = b;
- var f = g.multiply(new BigInteger("3"));
- var l = this.negate();
- var d = this;
- var c;
- for (c = f.bitLength() - 2; c > 0; --c) {
- d = d.twice();
- var a = f.testBit(c);
- var j = g.testBit(c);
- if (a != j) {
- d = d.add2D(a ? this: l)
- }
- }
- return d
- };
- ECPointFp.prototype.isOnCurve = function() {
- var d = this.getX().toBigInteger();
- var i = this.getY().toBigInteger();
- var f = this.curve.getA().toBigInteger();
- var c = this.curve.getB().toBigInteger();
- var h = this.curve.getQ();
- var e = i.multiply(i).mod(h);
- var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);
- return e.equals(g)
- };
- ECPointFp.prototype.toString = function() {
- return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"
- };
- ECPointFp.prototype.validate = function() {
- var c = this.curve.getQ();
- if (this.isInfinity()) {
- throw new Error("Point is at infinity.")
- }
- var a = this.getX().toBigInteger();
- var b = this.getY().toBigInteger();
- if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) {
- throw new Error("x coordinate out of bounds")
- }
- if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) {
- throw new Error("y coordinate out of bounds")
- }
- if (!this.isOnCurve()) {
- throw new Error("Point is not on the curve.")
- }
- if (this.multiply(c).isInfinity()) {
- throw new Error("Point is not a scalar multiple of G.")
- }
- return true
- };
- /*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval
- */
- var jsonParse = (function() {
- var e = "(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)";
- var j = '(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
- var i = '(?:"' + j + '*")';
- var d = new RegExp("(?:false|true|null|[\\{\\}\\[\\]]|" + e + "|" + i + ")", "g");
- var k = new RegExp("\\\\(?:([^u])|u(.{4}))", "g");
- var g = {
- '"': '"',
- "/": "/",
- "\\": "\\",
- b: "\b",
- f: "\f",
- n: "\n",
- r: "\r",
- t: "\t"
- };
- function h(l, m, n) {
- return m ? g[m] : String.fromCharCode(parseInt(n, 16))
- }
- var c = new String("");
- var a = "\\";
- var f = {
- "{": Object,
- "[": Array
- };
- var b = Object.hasOwnProperty;
- return function(u, q) {
- var p = u.match(d);
- var x;
- var v = p[0];
- var l = false;
- if ("{" === v) {
- x = {}
- } else {
- if ("[" === v) {
- x = []
- } else {
- x = [];
- l = true
- }
- }
- var t;
- var r = [x];
- for (var o = 1 - l,
- m = p.length; o < m; ++o) {
- v = p[o];
- var w;
- switch (v.charCodeAt(0)) {
- default:
- w = r[0];
- w[t || w.length] = +(v);
- t = void 0;
- break;
- case 34:
- v = v.substring(1, v.length - 1);
- if (v.indexOf(a) !== -1) {
- v = v.replace(k, h)
- }
- w = r[0];
- if (!t) {
- if (w instanceof Array) {
- t = w.length
- } else {
- t = v || c;
- break
- }
- }
- w[t] = v;
- t = void 0;
- break;
- case 91:
- w = r[0];
- r.unshift(w[t || w.length] = []);
- t = void 0;
- break;
- case 93:
- r.shift();
- break;
- case 102:
- w = r[0];
- w[t || w.length] = false;
- t = void 0;
- break;
- case 110:
- w = r[0];
- w[t || w.length] = null;
- t = void 0;
- break;
- case 116:
- w = r[0];
- w[t || w.length] = true;
- t = void 0;
- break;
- case 123:
- w = r[0];
- r.unshift(w[t || w.length] = {});
- t = void 0;
- break;
- case 125:
- r.shift();
- break
- }
- }
- if (l) {
- if (r.length !== 1) {
- throw new Error()
- }
- x = x[0]
- } else {
- if (r.length) {
- throw new Error()
- }
- }
- if (q) {
- var s = function(C, B) {
- var D = C[B];
- if (D && typeof D === "object") {
- var n = null;
- for (var z in D) {
- if (b.call(D, z) && D !== C) {
- var y = s(D, z);
- if (y !== void 0) {
- D[z] = y
- } else {
- if (!n) {
- n = []
- }
- n.push(z)
- }
- }
- }
- if (n) {
- for (var A = n.length; --A >= 0;) {
- delete D[n[A]]
- }
- }
- }
- return q.call(C, B, D)
- };
- x = s({
- "": x
- },
- "")
- }
- return x
- }
- })();
- /*! asn1-1.0.12.js (c) 2013-2016 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- KJUR.asn1.ASN1Util = new
- function() {
- this.integerToByteHex = function(a) {
- var b = a.toString(16);
- if ((b.length % 2) == 1) {
- b = "0" + b
- }
- return b
- };
- this.bigIntToMinTwosComplementsHex = function(j) {
- var f = j.toString(16);
- if (f.substr(0, 1) != "-") {
- if (f.length % 2 == 1) {
- f = "0" + f
- } else {
- if (!f.match(/^[0-7]/)) {
- f = "00" + f
- }
- }
- } else {
- var a = f.substr(1);
- var e = a.length;
- if (e % 2 == 1) {
- e += 1
- } else {
- if (!f.match(/^[0-7]/)) {
- e += 2
- }
- }
- var g = "";
- for (var d = 0; d < e; d++) {
- g += "f"
- }
- var c = new BigInteger(g, 16);
- var b = c.xor(j).add(BigInteger.ONE);
- f = b.toString(16).replace(/^-/, "")
- }
- return f
- };
- this.getPEMStringFromHex = function(a, b) {
- var c = hextob64(a);
- var d = c.replace(/(.{64})/g, "$1\r\n");
- d = d.replace(/\r\n$/, "");
- return "-----BEGIN " + b + "-----\r\n" + d + "\r\n-----END " + b + "-----\r\n"
- };
- this.newObject = function(b) {
- var g = KJUR.asn1;
- var k = Object.keys(b);
- if (k.length != 1) {
- throw "key of param shall be only one."
- }
- var j = k[0];
- if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + j + ":") == -1) {
- throw "undefined key: " + j
- }
- if (j == "bool") {
- return new g.DERBoolean(b[j])
- }
- if (j == "int") {
- return new g.DERInteger(b[j])
- }
- if (j == "bitstr") {
- return new g.DERBitString(b[j])
- }
- if (j == "octstr") {
- return new g.DEROctetString(b[j])
- }
- if (j == "null") {
- return new g.DERNull(b[j])
- }
- if (j == "oid") {
- return new g.DERObjectIdentifier(b[j])
- }
- if (j == "enum") {
- return new g.DEREnumerated(b[j])
- }
- if (j == "utf8str") {
- return new g.DERUTF8String(b[j])
- }
- if (j == "numstr") {
- return new g.DERNumericString(b[j])
- }
- if (j == "prnstr") {
- return new g.DERPrintableString(b[j])
- }
- if (j == "telstr") {
- return new g.DERTeletexString(b[j])
- }
- if (j == "ia5str") {
- return new g.DERIA5String(b[j])
- }
- if (j == "utctime") {
- return new g.DERUTCTime(b[j])
- }
- if (j == "gentime") {
- return new g.DERGeneralizedTime(b[j])
- }
- if (j == "seq") {
- var m = b[j];
- var h = [];
- for (var e = 0; e < m.length; e++) {
- var l = g.ASN1Util.newObject(m[e]);
- h.push(l)
- }
- return new g.DERSequence({
- array: h
- })
- }
- if (j == "set") {
- var m = b[j];
- var h = [];
- for (var e = 0; e < m.length; e++) {
- var l = g.ASN1Util.newObject(m[e]);
- h.push(l)
- }
- return new g.DERSet({
- array: h
- })
- }
- if (j == "tag") {
- var c = b[j];
- if (Object.prototype.toString.call(c) === "[object Array]" && c.length == 3) {
- var d = g.ASN1Util.newObject(c[2]);
- return new g.DERTaggedObject({
- tag: c[0],
- explicit: c[1],
- obj: d
- })
- } else {
- var f = {};
- if (c.explicit !== undefined) {
- f.explicit = c.explicit
- }
- if (c.tag !== undefined) {
- f.tag = c.tag
- }
- if (c.obj === undefined) {
- throw "obj shall be specified for 'tag'."
- }
- f.obj = g.ASN1Util.newObject(c.obj);
- return new g.DERTaggedObject(f)
- }
- }
- };
- this.jsonToASN1HEX = function(b) {
- var a = this.newObject(b);
- return a.getEncodedHex()
- }
- };
- KJUR.asn1.ASN1Util.oidHexToInt = function(a) {
- var j = "";
- var k = parseInt(a.substr(0, 2), 16);
- var d = Math.floor(k / 40);
- var c = k % 40;
- var j = d + "." + c;
- var e = "";
- for (var f = 2; f < a.length; f += 2) {
- var g = parseInt(a.substr(f, 2), 16);
- var h = ("00000000" + g.toString(2)).slice( - 8);
- e = e + h.substr(1, 7);
- if (h.substr(0, 1) == "0") {
- var b = new BigInteger(e, 2);
- j = j + "." + b.toString(10);
- e = ""
- }
- }
- return j
- };
- KJUR.asn1.ASN1Util.oidIntToHex = function(f) {
- var e = function(a) {
- var k = a.toString(16);
- if (k.length == 1) {
- k = "0" + k
- }
- return k
- };
- var d = function(o) {
- var n = "";
- var k = new BigInteger(o, 10);
- var a = k.toString(2);
- var l = 7 - a.length % 7;
- if (l == 7) {
- l = 0
- }
- var q = "";
- for (var m = 0; m < l; m++) {
- q += "0"
- }
- a = q + a;
- for (var m = 0; m < a.length - 1; m += 7) {
- var p = a.substr(m, 7);
- if (m != a.length - 7) {
- p = "1" + p
- }
- n += e(parseInt(p, 2))
- }
- return n
- };
- if (!f.match(/^[0-9.]+$/)) {
- throw "malformed oid string: " + f
- }
- var g = "";
- var b = f.split(".");
- var j = parseInt(b[0]) * 40 + parseInt(b[1]);
- g += e(j);
- b.splice(0, 2);
- for (var c = 0; c < b.length; c++) {
- g += d(b[c])
- }
- return g
- };
- KJUR.asn1.ASN1Object = function() {
- var c = true;
- var b = null;
- var d = "00";
- var e = "00";
- var a = "";
- this.getLengthHexFromValue = function() {
- if (typeof this.hV == "undefined" || this.hV == null) {
- throw "this.hV is null or undefined."
- }
- if (this.hV.length % 2 == 1) {
- throw "value hex must be even length: n=" + a.length + ",v=" + this.hV
- }
- var i = this.hV.length / 2;
- var h = i.toString(16);
- if (h.length % 2 == 1) {
- h = "0" + h
- }
- if (i < 128) {
- return h
- } else {
- var g = h.length / 2;
- if (g > 15) {
- throw "ASN.1 length too long to represent by 8x: n = " + i.toString(16)
- }
- var f = 128 + g;
- return f.toString(16) + h
- }
- };
- this.getEncodedHex = function() {
- if (this.hTLV == null || this.isModified) {
- this.hV = this.getFreshValueHex();
- this.hL = this.getLengthHexFromValue();
- this.hTLV = this.hT + this.hL + this.hV;
- this.isModified = false
- }
- return this.hTLV
- };
- this.getValueHex = function() {
- this.getEncodedHex();
- return this.hV
- };
- this.getFreshValueHex = function() {
- return ""
- }
- };
- KJUR.asn1.DERAbstractString = function(c) {
- KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
- var b = null;
- var a = null;
- this.getString = function() {
- return this.s
- };
- this.setString = function(d) {
- this.hTLV = null;
- this.isModified = true;
- this.s = d;
- this.hV = stohex(this.s)
- };
- this.setStringHex = function(d) {
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = d
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (typeof c != "undefined") {
- if (typeof c == "string") {
- this.setString(c)
- } else {
- if (typeof c.str != "undefined") {
- this.setString(c.str)
- } else {
- if (typeof c.hex != "undefined") {
- this.setStringHex(c.hex)
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERAbstractTime = function(c) {
- KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
- var b = null;
- var a = null;
- this.localDateToUTC = function(f) {
- utc = f.getTime() + (f.getTimezoneOffset() * 60000);
- var e = new Date(utc);
- return e
- };
- this.formatDate = function(m, o, e) {
- var g = this.zeroPadding;
- var n = this.localDateToUTC(m);
- var p = String(n.getFullYear());
- if (o == "utc") {
- p = p.substr(2, 2)
- }
- var l = g(String(n.getMonth() + 1), 2);
- var q = g(String(n.getDate()), 2);
- var h = g(String(n.getHours()), 2);
- var i = g(String(n.getMinutes()), 2);
- var j = g(String(n.getSeconds()), 2);
- var r = p + l + q + h + i + j;
- if (e === true) {
- var f = n.getMilliseconds();
- if (f != 0) {
- var k = g(String(f), 3);
- k = k.replace(/[0]+$/, "");
- r = r + "." + k
- }
- }
- return r + "Z"
- };
- this.zeroPadding = function(e, d) {
- if (e.length >= d) {
- return e
- }
- return new Array(d - e.length + 1).join("0") + e
- };
- this.getString = function() {
- return this.s
- };
- this.setString = function(d) {
- this.hTLV = null;
- this.isModified = true;
- this.s = d;
- this.hV = stohex(d)
- };
- this.setByDateValue = function(h, j, e, d, f, g) {
- var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0));
- this.setByDate(i)
- };
- this.getFreshValueHex = function() {
- return this.hV
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERAbstractStructured = function(b) {
- KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
- var a = null;
- this.setByASN1ObjectArray = function(c) {
- this.hTLV = null;
- this.isModified = true;
- this.asn1Array = c
- };
- this.appendASN1Object = function(c) {
- this.hTLV = null;
- this.isModified = true;
- this.asn1Array.push(c)
- };
- this.asn1Array = new Array();
- if (typeof b != "undefined") {
- if (typeof b.array != "undefined") {
- this.asn1Array = b.array
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERBoolean = function() {
- KJUR.asn1.DERBoolean.superclass.constructor.call(this);
- this.hT = "01";
- this.hTLV = "0101ff"
- };
- YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERInteger = function(a) {
- KJUR.asn1.DERInteger.superclass.constructor.call(this);
- this.hT = "02";
- this.setByBigInteger = function(b) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)
- };
- this.setByInteger = function(c) {
- var b = new BigInteger(String(c), 10);
- this.setByBigInteger(b)
- };
- this.setValueHex = function(b) {
- this.hV = b
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (typeof a != "undefined") {
- if (typeof a.bigint != "undefined") {
- this.setByBigInteger(a.bigint)
- } else {
- if (typeof a["int"] != "undefined") {
- this.setByInteger(a["int"])
- } else {
- if (typeof a == "number") {
- this.setByInteger(a)
- } else {
- if (typeof a.hex != "undefined") {
- this.setValueHex(a.hex)
- }
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERBitString = function(b) {
- if (b !== undefined && typeof b.obj !== "undefined") {
- var a = KJUR.asn1.ASN1Util.newObject(b.obj);
- b.hex = "00" + a.getEncodedHex()
- }
- KJUR.asn1.DERBitString.superclass.constructor.call(this);
- this.hT = "03";
- this.setHexValueIncludingUnusedBits = function(c) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = c
- };
- this.setUnusedBitsAndHexValue = function(c, e) {
- if (c < 0 || 7 < c) {
- throw "unused bits shall be from 0 to 7: u = " + c
- }
- var d = "0" + c;
- this.hTLV = null;
- this.isModified = true;
- this.hV = d + e
- };
- this.setByBinaryString = function(e) {
- e = e.replace(/0+$/, "");
- var f = 8 - e.length % 8;
- if (f == 8) {
- f = 0
- }
- for (var g = 0; g <= f; g++) {
- e += "0"
- }
- var j = "";
- for (var g = 0; g < e.length - 1; g += 8) {
- var d = e.substr(g, 8);
- var c = parseInt(d, 2).toString(16);
- if (c.length == 1) {
- c = "0" + c
- }
- j += c
- }
- this.hTLV = null;
- this.isModified = true;
- this.hV = "0" + f + j
- };
- this.setByBooleanArray = function(e) {
- var d = "";
- for (var c = 0; c < e.length; c++) {
- if (e[c] == true) {
- d += "1"
- } else {
- d += "0"
- }
- }
- this.setByBinaryString(d)
- };
- this.newFalseArray = function(e) {
- var c = new Array(e);
- for (var d = 0; d < e; d++) {
- c[d] = false
- }
- return c
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (typeof b != "undefined") {
- if (typeof b == "string" && b.toLowerCase().match(/^[0-9a-f]+$/)) {
- this.setHexValueIncludingUnusedBits(b)
- } else {
- if (typeof b.hex != "undefined") {
- this.setHexValueIncludingUnusedBits(b.hex)
- } else {
- if (typeof b.bin != "undefined") {
- this.setByBinaryString(b.bin)
- } else {
- if (typeof b.array != "undefined") {
- this.setByBooleanArray(b.array)
- }
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);
- KJUR.asn1.DEROctetString = function(b) {
- if (b !== undefined && typeof b.obj !== "undefined") {
- var a = KJUR.asn1.ASN1Util.newObject(b.obj);
- b.hex = a.getEncodedHex()
- }
- KJUR.asn1.DEROctetString.superclass.constructor.call(this, b);
- this.hT = "04"
- };
- YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERNull = function() {
- KJUR.asn1.DERNull.superclass.constructor.call(this);
- this.hT = "05";
- this.hTLV = "0500"
- };
- YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERObjectIdentifier = function(c) {
- var b = function(d) {
- var e = d.toString(16);
- if (e.length == 1) {
- e = "0" + e
- }
- return e
- };
- var a = function(k) {
- var j = "";
- var e = new BigInteger(k, 10);
- var d = e.toString(2);
- var f = 7 - d.length % 7;
- if (f == 7) {
- f = 0
- }
- var m = "";
- for (var g = 0; g < f; g++) {
- m += "0"
- }
- d = m + d;
- for (var g = 0; g < d.length - 1; g += 7) {
- var l = d.substr(g, 7);
- if (g != d.length - 7) {
- l = "1" + l
- }
- j += b(parseInt(l, 2))
- }
- return j
- };
- KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);
- this.hT = "06";
- this.setValueHex = function(d) {
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = d
- };
- this.setValueOidString = function(f) {
- if (!f.match(/^[0-9.]+$/)) {
- throw "malformed oid string: " + f
- }
- var g = "";
- var d = f.split(".");
- var j = parseInt(d[0]) * 40 + parseInt(d[1]);
- g += b(j);
- d.splice(0, 2);
- for (var e = 0; e < d.length; e++) {
- g += a(d[e])
- }
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = g
- };
- this.setValueName = function(e) {
- var d = KJUR.asn1.x509.OID.name2oid(e);
- if (d !== "") {
- this.setValueOidString(d)
- } else {
- throw "DERObjectIdentifier oidName undefined: " + e
- }
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (c !== undefined) {
- if (typeof c === "string") {
- if (c.match(/^[0-2].[0-9.]+$/)) {
- this.setValueOidString(c)
- } else {
- this.setValueName(c)
- }
- } else {
- if (c.oid !== undefined) {
- this.setValueOidString(c.oid)
- } else {
- if (c.hex !== undefined) {
- this.setValueHex(c.hex)
- } else {
- if (c.name !== undefined) {
- this.setValueName(c.name)
- }
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);
- KJUR.asn1.DEREnumerated = function(a) {
- KJUR.asn1.DEREnumerated.superclass.constructor.call(this);
- this.hT = "0a";
- this.setByBigInteger = function(b) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)
- };
- this.setByInteger = function(c) {
- var b = new BigInteger(String(c), 10);
- this.setByBigInteger(b)
- };
- this.setValueHex = function(b) {
- this.hV = b
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (typeof a != "undefined") {
- if (typeof a["int"] != "undefined") {
- this.setByInteger(a["int"])
- } else {
- if (typeof a == "number") {
- this.setByInteger(a)
- } else {
- if (typeof a.hex != "undefined") {
- this.setValueHex(a.hex)
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);
- KJUR.asn1.DERUTF8String = function(a) {
- KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a);
- this.hT = "0c"
- };
- YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERNumericString = function(a) {
- KJUR.asn1.DERNumericString.superclass.constructor.call(this, a);
- this.hT = "12"
- };
- YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERPrintableString = function(a) {
- KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a);
- this.hT = "13"
- };
- YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERTeletexString = function(a) {
- KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a);
- this.hT = "14"
- };
- YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERIA5String = function(a) {
- KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);
- this.hT = "16"
- };
- YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);
- KJUR.asn1.DERUTCTime = function(a) {
- KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a);
- this.hT = "17";
- this.setByDate = function(b) {
- this.hTLV = null;
- this.isModified = true;
- this.date = b;
- this.s = this.formatDate(this.date, "utc");
- this.hV = stohex(this.s)
- };
- this.getFreshValueHex = function() {
- if (typeof this.date == "undefined" && typeof this.s == "undefined") {
- this.date = new Date();
- this.s = this.formatDate(this.date, "utc");
- this.hV = stohex(this.s)
- }
- return this.hV
- };
- if (a !== undefined) {
- if (a.str !== undefined) {
- this.setString(a.str)
- } else {
- if (typeof a == "string" && a.match(/^[0-9]{12}Z$/)) {
- this.setString(a)
- } else {
- if (a.hex !== undefined) {
- this.setStringHex(a.hex)
- } else {
- if (a.date !== undefined) {
- this.setByDate(a.date)
- }
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);
- KJUR.asn1.DERGeneralizedTime = function(a) {
- KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a);
- this.hT = "18";
- this.withMillis = false;
- this.setByDate = function(b) {
- this.hTLV = null;
- this.isModified = true;
- this.date = b;
- this.s = this.formatDate(this.date, "gen", this.withMillis);
- this.hV = stohex(this.s)
- };
- this.getFreshValueHex = function() {
- if (this.date === undefined && this.s === undefined) {
- this.date = new Date();
- this.s = this.formatDate(this.date, "gen", this.withMillis);
- this.hV = stohex(this.s)
- }
- return this.hV
- };
- if (a !== undefined) {
- if (a.str !== undefined) {
- this.setString(a.str)
- } else {
- if (typeof a == "string" && a.match(/^[0-9]{14}Z$/)) {
- this.setString(a)
- } else {
- if (a.hex !== undefined) {
- this.setStringHex(a.hex)
- } else {
- if (a.date !== undefined) {
- this.setByDate(a.date)
- }
- }
- }
- }
- if (a.millis === true) {
- this.withMillis = true
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);
- KJUR.asn1.DERSequence = function(a) {
- KJUR.asn1.DERSequence.superclass.constructor.call(this, a);
- this.hT = "30";
- this.getFreshValueHex = function() {
- var c = "";
- for (var b = 0; b < this.asn1Array.length; b++) {
- var d = this.asn1Array[b];
- c += d.getEncodedHex()
- }
- this.hV = c;
- return this.hV
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);
- KJUR.asn1.DERSet = function(a) {
- KJUR.asn1.DERSet.superclass.constructor.call(this, a);
- this.hT = "31";
- this.sortFlag = true;
- this.getFreshValueHex = function() {
- var b = new Array();
- for (var c = 0; c < this.asn1Array.length; c++) {
- var d = this.asn1Array[c];
- b.push(d.getEncodedHex())
- }
- if (this.sortFlag == true) {
- b.sort()
- }
- this.hV = b.join("");
- return this.hV
- };
- if (typeof a != "undefined") {
- if (typeof a.sortflag != "undefined" && a.sortflag == false) {
- this.sortFlag = false
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);
- KJUR.asn1.DERTaggedObject = function(a) {
- KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);
- this.hT = "a0";
- this.hV = "";
- this.isExplicit = true;
- this.asn1Object = null;
- this.setASN1Object = function(b, c, d) {
- this.hT = c;
- this.isExplicit = b;
- this.asn1Object = d;
- if (this.isExplicit) {
- this.hV = this.asn1Object.getEncodedHex();
- this.hTLV = null;
- this.isModified = true
- } else {
- this.hV = null;
- this.hTLV = d.getEncodedHex();
- this.hTLV = this.hTLV.replace(/^../, c);
- this.isModified = false
- }
- };
- this.getFreshValueHex = function() {
- return this.hV
- };
- if (typeof a != "undefined") {
- if (typeof a.tag != "undefined") {
- this.hT = a.tag
- }
- if (typeof a.explicit != "undefined") {
- this.isExplicit = a.explicit
- }
- if (typeof a.obj != "undefined") {
- this.asn1Object = a.obj;
- this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);
- /*! asn1hex-1.1.9.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- var ASN1HEX = new
- function() {};
- ASN1HEX.getByteLengthOfL_AtObj = function(b, c) {
- if (b.substring(c + 2, c + 3) != "8") {
- return 1
- }
- var a = parseInt(b.substring(c + 3, c + 4));
- if (a == 0) {
- return - 1
- }
- if (0 < a && a < 10) {
- return a + 1
- }
- return - 2
- };
- ASN1HEX.getHexOfL_AtObj = function(b, c) {
- var a = ASN1HEX.getByteLengthOfL_AtObj(b, c);
- if (a < 1) {
- return ""
- }
- return b.substring(c + 2, c + 2 + a * 2)
- };
- ASN1HEX.getIntOfL_AtObj = function(c, d) {
- var b = ASN1HEX.getHexOfL_AtObj(c, d);
- if (b == "") {
- return - 1
- }
- var a;
- if (parseInt(b.substring(0, 1)) < 8) {
- a = new BigInteger(b, 16)
- } else {
- a = new BigInteger(b.substring(2), 16)
- }
- return a.intValue()
- };
- ASN1HEX.getStartPosOfV_AtObj = function(b, c) {
- var a = ASN1HEX.getByteLengthOfL_AtObj(b, c);
- if (a < 0) {
- return a
- }
- return c + (a + 1) * 2
- };
- ASN1HEX.getHexOfV_AtObj = function(c, d) {
- var b = ASN1HEX.getStartPosOfV_AtObj(c, d);
- var a = ASN1HEX.getIntOfL_AtObj(c, d);
- return c.substring(b, b + a * 2)
- };
- ASN1HEX.getHexOfTLV_AtObj = function(c, e) {
- var b = c.substr(e, 2);
- var d = ASN1HEX.getHexOfL_AtObj(c, e);
- var a = ASN1HEX.getHexOfV_AtObj(c, e);
- return b + d + a
- };
- ASN1HEX.getPosOfNextSibling_AtObj = function(c, d) {
- var b = ASN1HEX.getStartPosOfV_AtObj(c, d);
- var a = ASN1HEX.getIntOfL_AtObj(c, d);
- return b + a * 2
- };
- ASN1HEX.getPosArrayOfChildren_AtObj = function(f, j) {
- var c = new Array();
- var i = ASN1HEX.getStartPosOfV_AtObj(f, j);
- if (f.substr(j, 2) == "03") {
- c.push(i + 2)
- } else {
- c.push(i)
- }
- var b = ASN1HEX.getIntOfL_AtObj(f, j);
- var g = i;
- var d = 0;
- while (1) {
- var e = ASN1HEX.getPosOfNextSibling_AtObj(f, g);
- if (e == null || (e - i >= (b * 2))) {
- break
- }
- if (d >= 200) {
- break
- }
- c.push(e);
- g = e;
- d++
- }
- return c
- };
- ASN1HEX.getNthChildIndex_AtObj = function(d, b, e) {
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(d, b);
- return c[e]
- };
- ASN1HEX.getDecendantIndexByNthList = function(e, d, c) {
- if (c.length == 0) {
- return d
- }
- var f = c.shift();
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(e, d);
- return ASN1HEX.getDecendantIndexByNthList(e, b[f], c)
- };
- ASN1HEX.getDecendantHexTLVByNthList = function(d, c, b) {
- var a = ASN1HEX.getDecendantIndexByNthList(d, c, b);
- return ASN1HEX.getHexOfTLV_AtObj(d, a)
- };
- ASN1HEX.getDecendantHexVByNthList = function(d, c, b) {
- var a = ASN1HEX.getDecendantIndexByNthList(d, c, b);
- return ASN1HEX.getHexOfV_AtObj(d, a)
- };
- ASN1HEX.getVbyList = function(d, c, b, e) {
- var a = ASN1HEX.getDecendantIndexByNthList(d, c, b);
- if (a === undefined) {
- throw "can't find nthList object"
- }
- if (e !== undefined) {
- if (d.substr(a, 2) != e) {
- throw "checking tag doesn't match: " + d.substr(a, 2) + "!=" + e
- }
- }
- return ASN1HEX.getHexOfV_AtObj(d, a)
- };
- ASN1HEX.hextooidstr = function(e) {
- var h = function(b, a) {
- if (b.length >= a) {
- return b
- }
- return new Array(a - b.length + 1).join("0") + b
- };
- var l = [];
- var o = e.substr(0, 2);
- var f = parseInt(o, 16);
- l[0] = new String(Math.floor(f / 40));
- l[1] = new String(f % 40);
- var m = e.substr(2);
- var k = [];
- for (var g = 0; g < m.length / 2; g++) {
- k.push(parseInt(m.substr(g * 2, 2), 16))
- }
- var j = [];
- var d = "";
- for (var g = 0; g < k.length; g++) {
- if (k[g] & 128) {
- d = d + h((k[g] & 127).toString(2), 7)
- } else {
- d = d + h((k[g] & 127).toString(2), 7);
- j.push(new String(parseInt(d, 2)));
- d = ""
- }
- }
- var n = l.join(".");
- if (j.length > 0) {
- n = n + "." + j.join(".")
- }
- return n
- };
- ASN1HEX.dump = function(q, c, k, g) {
- var e = q;
- if (q instanceof KJUR.asn1.ASN1Object) {
- e = q.getEncodedHex()
- }
- var o = function(x, i) {
- if (x.length <= i * 2) {
- return x
- } else {
- var v = x.substr(0, i) + "..(total " + x.length / 2 + "bytes).." + x.substr(x.length - i, i);
- return v
- }
- };
- if (c === undefined) {
- c = {
- ommit_long_octet: 32
- }
- }
- if (k === undefined) {
- k = 0
- }
- if (g === undefined) {
- g = ""
- }
- var t = c.ommit_long_octet;
- if (e.substr(k, 2) == "01") {
- var h = ASN1HEX.getHexOfV_AtObj(e, k);
- if (h == "00") {
- return g + "BOOLEAN FALSE\n"
- } else {
- return g + "BOOLEAN TRUE\n"
- }
- }
- if (e.substr(k, 2) == "02") {
- var h = ASN1HEX.getHexOfV_AtObj(e, k);
- return g + "INTEGER " + o(h, t) + "\n"
- }
- if (e.substr(k, 2) == "03") {
- var h = ASN1HEX.getHexOfV_AtObj(e, k);
- return g + "BITSTRING " + o(h, t) + "\n"
- }
- if (e.substr(k, 2) == "04") {
- var h = ASN1HEX.getHexOfV_AtObj(e, k);
- if (ASN1HEX.isASN1HEX(h)) {
- var j = g + "OCTETSTRING, encapsulates\n";
- j = j + ASN1HEX.dump(h, c, 0, g + " ");
- return j
- } else {
- return g + "OCTETSTRING " + o(h, t) + "\n"
- }
- }
- if (e.substr(k, 2) == "05") {
- return g + "NULL\n"
- }
- if (e.substr(k, 2) == "06") {
- var l = ASN1HEX.getHexOfV_AtObj(e, k);
- var a = KJUR.asn1.ASN1Util.oidHexToInt(l);
- var n = KJUR.asn1.x509.OID.oid2name(a);
- var b = a.replace(/\./g, " ");
- if (n != "") {
- return g + "ObjectIdentifier " + n + " (" + b + ")\n"
- } else {
- return g + "ObjectIdentifier (" + b + ")\n"
- }
- }
- if (e.substr(k, 2) == "0c") {
- return g + "UTF8String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n"
- }
- if (e.substr(k, 2) == "13") {
- return g + "PrintableString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n"
- }
- if (e.substr(k, 2) == "14") {
- return g + "TeletexString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n"
- }
- if (e.substr(k, 2) == "16") {
- return g + "IA5String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "'\n"
- }
- if (e.substr(k, 2) == "17") {
- return g + "UTCTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "\n"
- }
- if (e.substr(k, 2) == "18") {
- return g + "GeneralizedTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(e, k)) + "\n"
- }
- if (e.substr(k, 2) == "30") {
- if (e.substr(k, 4) == "3000") {
- return g + "SEQUENCE {}\n"
- }
- var j = g + "SEQUENCE\n";
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k);
- var f = c;
- if ((d.length == 2 || d.length == 3) && e.substr(d[0], 2) == "06" && e.substr(d[d.length - 1], 2) == "04") {
- var u = ASN1HEX.getHexOfV_AtObj(e, d[0]);
- var a = KJUR.asn1.ASN1Util.oidHexToInt(u);
- var n = KJUR.asn1.x509.OID.oid2name(a);
- var p = JSON.parse(JSON.stringify(c));
- p.x509ExtName = n;
- f = p
- }
- for (var r = 0; r < d.length; r++) {
- j = j + ASN1HEX.dump(e, f, d[r], g + " ")
- }
- return j
- }
- if (e.substr(k, 2) == "31") {
- var j = g + "SET\n";
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k);
- for (var r = 0; r < d.length; r++) {
- j = j + ASN1HEX.dump(e, c, d[r], g + " ")
- }
- return j
- }
- var w = parseInt(e.substr(k, 2), 16);
- if ((w & 128) != 0) {
- var m = w & 31;
- if ((w & 32) != 0) {
- var j = g + "[" + m + "]\n";
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, k);
- for (var r = 0; r < d.length; r++) {
- j = j + ASN1HEX.dump(e, c, d[r], g + " ")
- }
- return j
- } else {
- var h = ASN1HEX.getHexOfV_AtObj(e, k);
- if (h.substr(0, 8) == "68747470") {
- h = hextoutf8(h)
- }
- if (c.x509ExtName === "subjectAltName" && m == 2) {
- h = hextoutf8(h)
- }
- var j = g + "[" + m + "] " + h + "\n";
- return j
- }
- }
- return g + "UNKNOWN(" + e.substr(k, 2) + ") " + ASN1HEX.getHexOfV_AtObj(e, k) + "\n"
- };
- ASN1HEX.isASN1HEX = function(d) {
- if (d.length % 2 == 1) {
- return false
- }
- var c = ASN1HEX.getIntOfL_AtObj(d, 0);
- var b = d.substr(0, 2);
- var e = ASN1HEX.getHexOfL_AtObj(d, 0);
- var a = d.length - b.length - e.length;
- if (a == c * 2) {
- return true
- }
- return false
- };
- ASN1HEX.pemToHex = function(b, d) {
- if (b.indexOf("-----BEGIN ") == -1) {
- throw "can't find PEM header: " + d
- }
- if (d !== undefined) {
- b = b.replace("-----BEGIN " + d + "-----", "");
- b = b.replace("-----END " + d + "-----", "")
- } else {
- b = b.replace(/-----BEGIN [^-]+-----/, "");
- b = b.replace(/-----END [^-]+-----/, "")
- }
- var c = b.replace(/\s+/g, "");
- var a = b64tohex(c);
- return a
- };
- /*! asn1x509-1.0.22.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- if (typeof KJUR.asn1.x509 == "undefined" || !KJUR.asn1.x509) {
- KJUR.asn1.x509 = {}
- }
- KJUR.asn1.x509.Certificate = function(g) {
- KJUR.asn1.x509.Certificate.superclass.constructor.call(this);
- var b = null;
- var d = null;
- var f = null;
- var c = null;
- var a = null;
- var e = null;
- this.setRsaPrvKeyByPEMandPass = function(i, k) {
- var h = PKCS5PKEY.getDecryptedKeyHex(i, k);
- var j = new RSAKey();
- j.readPrivateKeyFromASN1HexString(h);
- this.prvKey = j
- };
- this.sign = function() {
- this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
- var i = new KJUR.crypto.Signature({
- alg: this.asn1SignatureAlg.nameAlg
- });
- i.init(this.prvKey);
- i.updateHex(this.asn1TBSCert.getEncodedHex());
- this.hexSig = i.sign();
- this.asn1Sig = new KJUR.asn1.DERBitString({
- hex: "00" + this.hexSig
- });
- var h = new KJUR.asn1.DERSequence({
- array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig]
- });
- this.hTLV = h.getEncodedHex();
- this.isModified = false
- };
- this.setSignatureHex = function(h) {
- this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
- this.hexSig = h;
- this.asn1Sig = new KJUR.asn1.DERBitString({
- hex: "00" + this.hexSig
- });
- var i = new KJUR.asn1.DERSequence({
- array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig]
- });
- this.hTLV = i.getEncodedHex();
- this.isModified = false
- };
- this.getEncodedHex = function() {
- if (this.isModified == false && this.hTLV != null) {
- return this.hTLV
- }
- throw "not signed yet"
- };
- this.getPEMString = function() {
- var j = this.getEncodedHex();
- var h = CryptoJS.enc.Hex.parse(j);
- var i = CryptoJS.enc.Base64.stringify(h);
- var k = i.replace(/(.{64})/g, "$1\r\n");
- return "-----BEGIN CERTIFICATE-----\r\n" + k + "\r\n-----END CERTIFICATE-----\r\n"
- };
- if (g !== undefined) {
- if (g.tbscertobj !== undefined) {
- this.asn1TBSCert = g.tbscertobj
- }
- if (g.prvkeyobj !== undefined) {
- this.prvKey = g.prvkeyobj
- } else {
- if (g.rsaprvkey !== undefined) {
- this.prvKey = g.rsaprvkey
- } else {
- if ((g.rsaprvpem !== undefined) && (g.rsaprvpas !== undefined)) {
- this.setRsaPrvKeyByPEMandPass(g.rsaprvpem, g.rsaprvpas)
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.TBSCertificate = function(a) {
- KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);
- this._initialize = function() {
- this.asn1Array = new Array();
- this.asn1Version = new KJUR.asn1.DERTaggedObject({
- obj: new KJUR.asn1.DERInteger({
- "int": 2
- })
- });
- this.asn1SerialNumber = null;
- this.asn1SignatureAlg = null;
- this.asn1Issuer = null;
- this.asn1NotBefore = null;
- this.asn1NotAfter = null;
- this.asn1Subject = null;
- this.asn1SubjPKey = null;
- this.extensionsArray = new Array()
- };
- this.setSerialNumberByParam = function(b) {
- this.asn1SerialNumber = new KJUR.asn1.DERInteger(b)
- };
- this.setSignatureAlgByParam = function(b) {
- this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(b)
- };
- this.setIssuerByParam = function(b) {
- this.asn1Issuer = new KJUR.asn1.x509.X500Name(b)
- };
- this.setNotBeforeByParam = function(b) {
- this.asn1NotBefore = new KJUR.asn1.x509.Time(b)
- };
- this.setNotAfterByParam = function(b) {
- this.asn1NotAfter = new KJUR.asn1.x509.Time(b)
- };
- this.setSubjectByParam = function(b) {
- this.asn1Subject = new KJUR.asn1.x509.X500Name(b)
- };
- this.setSubjectPublicKeyByParam = function(b) {
- this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b)
- };
- this.setSubjectPublicKeyByGetKey = function(c) {
- var b = KEYUTIL.getKey(c);
- this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b)
- };
- this.appendExtension = function(b) {
- this.extensionsArray.push(b)
- };
- this.appendExtensionByName = function(c, b) {
- KJUR.asn1.x509.Extension.appendByNameToArray(c, b, this.extensionsArray)
- };
- this.getEncodedHex = function() {
- if (this.asn1NotBefore == null || this.asn1NotAfter == null) {
- throw "notBefore and/or notAfter not set"
- }
- var c = new KJUR.asn1.DERSequence({
- array: [this.asn1NotBefore, this.asn1NotAfter]
- });
- this.asn1Array = new Array();
- this.asn1Array.push(this.asn1Version);
- this.asn1Array.push(this.asn1SerialNumber);
- this.asn1Array.push(this.asn1SignatureAlg);
- this.asn1Array.push(this.asn1Issuer);
- this.asn1Array.push(c);
- this.asn1Array.push(this.asn1Subject);
- this.asn1Array.push(this.asn1SubjPKey);
- if (this.extensionsArray.length > 0) {
- var d = new KJUR.asn1.DERSequence({
- array: this.extensionsArray
- });
- var b = new KJUR.asn1.DERTaggedObject({
- explicit: true,
- tag: "a3",
- obj: d
- });
- this.asn1Array.push(b)
- }
- var e = new KJUR.asn1.DERSequence({
- array: this.asn1Array
- });
- this.hTLV = e.getEncodedHex();
- this.isModified = false;
- return this.hTLV
- };
- this._initialize()
- };
- YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.Extension = function(b) {
- KJUR.asn1.x509.Extension.superclass.constructor.call(this);
- var a = null;
- this.getEncodedHex = function() {
- var f = new KJUR.asn1.DERObjectIdentifier({
- oid: this.oid
- });
- var e = new KJUR.asn1.DEROctetString({
- hex: this.getExtnValueHex()
- });
- var d = new Array();
- d.push(f);
- if (this.critical) {
- d.push(new KJUR.asn1.DERBoolean())
- }
- d.push(e);
- var c = new KJUR.asn1.DERSequence({
- array: d
- });
- return c.getEncodedHex()
- };
- this.critical = false;
- if (typeof b != "undefined") {
- if (typeof b.critical != "undefined") {
- this.critical = b.critical
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.Extension.appendByNameToArray = function(e, c, b) {
- if (e.toLowerCase() == "basicconstraints") {
- var d = new KJUR.asn1.x509.BasicConstraints(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "keyusage") {
- var d = new KJUR.asn1.x509.KeyUsage(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "crldistributionpoints") {
- var d = new KJUR.asn1.x509.CRLDistributionPoints(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "extkeyusage") {
- var d = new KJUR.asn1.x509.ExtKeyUsage(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "authoritykeyidentifier") {
- var d = new KJUR.asn1.x509.AuthorityKeyIdentifier(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "authorityinfoaccess") {
- var d = new KJUR.asn1.x509.AuthorityInfoAccess(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "subjectaltname") {
- var d = new KJUR.asn1.x509.SubjectAltName(c);
- b.push(d)
- } else {
- if (e.toLowerCase() == "issueraltname") {
- var d = new KJUR.asn1.x509.IssuerAltName(c);
- b.push(d)
- } else {
- throw "unsupported extension name: " + e
- }
- }
- }
- }
- }
- }
- }
- }
- };
- KJUR.asn1.x509.KeyUsage = function(a) {
- KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, a);
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "2.5.29.15";
- if (typeof a != "undefined") {
- if (typeof a.bin != "undefined") {
- this.asn1ExtnValue = new KJUR.asn1.DERBitString(a)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.BasicConstraints = function(c) {
- KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, c);
- var a = false;
- var b = -1;
- this.getExtnValueHex = function() {
- var e = new Array();
- if (this.cA) {
- e.push(new KJUR.asn1.DERBoolean())
- }
- if (this.pathLen > -1) {
- e.push(new KJUR.asn1.DERInteger({
- "int": this.pathLen
- }))
- }
- var d = new KJUR.asn1.DERSequence({
- array: e
- });
- this.asn1ExtnValue = d;
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "2.5.29.19";
- this.cA = false;
- this.pathLen = -1;
- if (typeof c != "undefined") {
- if (typeof c.cA != "undefined") {
- this.cA = c.cA
- }
- if (typeof c.pathLen != "undefined") {
- this.pathLen = c.pathLen
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.CRLDistributionPoints = function(a) {
- KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, a);
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.setByDPArray = function(b) {
- this.asn1ExtnValue = new KJUR.asn1.DERSequence({
- array: b
- })
- };
- this.setByOneURI = function(e) {
- var b = new KJUR.asn1.x509.GeneralNames([{
- uri: e
- }]);
- var d = new KJUR.asn1.x509.DistributionPointName(b);
- var c = new KJUR.asn1.x509.DistributionPoint({
- dpobj: d
- });
- this.setByDPArray([c])
- };
- this.oid = "2.5.29.31";
- if (typeof a != "undefined") {
- if (typeof a.array != "undefined") {
- this.setByDPArray(a.array)
- } else {
- if (typeof a.uri != "undefined") {
- this.setByOneURI(a.uri)
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.ExtKeyUsage = function(a) {
- KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, a);
- this.setPurposeArray = function(b) {
- this.asn1ExtnValue = new KJUR.asn1.DERSequence();
- for (var c = 0; c < b.length; c++) {
- var d = new KJUR.asn1.DERObjectIdentifier(b[c]);
- this.asn1ExtnValue.appendASN1Object(d)
- }
- };
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "2.5.29.37";
- if (typeof a != "undefined") {
- if (typeof a.array != "undefined") {
- this.setPurposeArray(a.array)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.AuthorityKeyIdentifier = function(a) {
- KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, a);
- this.asn1KID = null;
- this.asn1CertIssuer = null;
- this.asn1CertSN = null;
- this.getExtnValueHex = function() {
- var c = new Array();
- if (this.asn1KID) {
- c.push(new KJUR.asn1.DERTaggedObject({
- explicit: false,
- tag: "80",
- obj: this.asn1KID
- }))
- }
- if (this.asn1CertIssuer) {
- c.push(new KJUR.asn1.DERTaggedObject({
- explicit: false,
- tag: "a1",
- obj: this.asn1CertIssuer
- }))
- }
- if (this.asn1CertSN) {
- c.push(new KJUR.asn1.DERTaggedObject({
- explicit: false,
- tag: "82",
- obj: this.asn1CertSN
- }))
- }
- var b = new KJUR.asn1.DERSequence({
- array: c
- });
- this.asn1ExtnValue = b;
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.setKIDByParam = function(b) {
- this.asn1KID = new KJUR.asn1.DEROctetString(b)
- };
- this.setCertIssuerByParam = function(b) {
- this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(b)
- };
- this.setCertSNByParam = function(b) {
- this.asn1CertSN = new KJUR.asn1.DERInteger(b)
- };
- this.oid = "2.5.29.35";
- if (typeof a != "undefined") {
- if (typeof a.kid != "undefined") {
- this.setKIDByParam(a.kid)
- }
- if (typeof a.issuer != "undefined") {
- this.setCertIssuerByParam(a.issuer)
- }
- if (typeof a.sn != "undefined") {
- this.setCertSNByParam(a.sn)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.AuthorityInfoAccess = function(a) {
- KJUR.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this, a);
- this.setAccessDescriptionArray = function(c) {
- var g = new Array();
- for (var b = 0; b < c.length; b++) {
- var e = new KJUR.asn1.DERObjectIdentifier(c[b].accessMethod);
- var d = new KJUR.asn1.x509.GeneralName(c[b].accessLocation);
- var f = new KJUR.asn1.DERSequence({
- array: [e, d]
- });
- g.push(f)
- }
- this.asn1ExtnValue = new KJUR.asn1.DERSequence({
- array: g
- })
- };
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "1.3.6.1.5.5.7.1.1";
- if (typeof a != "undefined") {
- if (typeof a.array != "undefined") {
- this.setAccessDescriptionArray(a.array)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.AuthorityInfoAccess, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.SubjectAltName = function(a) {
- KJUR.asn1.x509.SubjectAltName.superclass.constructor.call(this, a);
- this.setNameArray = function(b) {
- this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b)
- };
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "2.5.29.17";
- if (a !== undefined) {
- if (a.array !== undefined) {
- this.setNameArray(a.array)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.SubjectAltName, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.IssuerAltName = function(a) {
- KJUR.asn1.x509.IssuerAltName.superclass.constructor.call(this, a);
- this.setNameArray = function(b) {
- this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b)
- };
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex()
- };
- this.oid = "2.5.29.18";
- if (a !== undefined) {
- if (a.array !== undefined) {
- this.setNameArray(a.array)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.IssuerAltName, KJUR.asn1.x509.Extension);
- KJUR.asn1.x509.CRL = function(f) {
- KJUR.asn1.x509.CRL.superclass.constructor.call(this);
- var a = null;
- var c = null;
- var e = null;
- var b = null;
- var d = null;
- this.setRsaPrvKeyByPEMandPass = function(h, j) {
- var g = PKCS5PKEY.getDecryptedKeyHex(h, j);
- var i = new RSAKey();
- i.readPrivateKeyFromASN1HexString(g);
- this.rsaPrvKey = i
- };
- this.sign = function() {
- this.asn1SignatureAlg = this.asn1TBSCertList.asn1SignatureAlg;
- sig = new KJUR.crypto.Signature({
- alg: "SHA1withRSA",
- prov: "cryptojs/jsrsa"
- });
- sig.initSign(this.rsaPrvKey);
- sig.updateHex(this.asn1TBSCertList.getEncodedHex());
- this.hexSig = sig.sign();
- this.asn1Sig = new KJUR.asn1.DERBitString({
- hex: "00" + this.hexSig
- });
- var g = new KJUR.asn1.DERSequence({
- array: [this.asn1TBSCertList, this.asn1SignatureAlg, this.asn1Sig]
- });
- this.hTLV = g.getEncodedHex();
- this.isModified = false
- };
- this.getEncodedHex = function() {
- if (this.isModified == false && this.hTLV != null) {
- return this.hTLV
- }
- throw "not signed yet"
- };
- this.getPEMString = function() {
- var i = this.getEncodedHex();
- var g = CryptoJS.enc.Hex.parse(i);
- var h = CryptoJS.enc.Base64.stringify(g);
- var j = h.replace(/(.{64})/g, "$1\r\n");
- return "-----BEGIN X509 CRL-----\r\n" + j + "\r\n-----END X509 CRL-----\r\n"
- };
- if (typeof f != "undefined") {
- if (typeof f.tbsobj != "undefined") {
- this.asn1TBSCertList = f.tbsobj
- }
- if (typeof f.rsaprvkey != "undefined") {
- this.rsaPrvKey = f.rsaprvkey
- }
- if ((typeof f.rsaprvpem != "undefined") && (typeof f.rsaprvpas != "undefined")) {
- this.setRsaPrvKeyByPEMandPass(f.rsaprvpem, f.rsaprvpas)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.TBSCertList = function(b) {
- KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);
- var a = null;
- this.setSignatureAlgByParam = function(c) {
- this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(c)
- };
- this.setIssuerByParam = function(c) {
- this.asn1Issuer = new KJUR.asn1.x509.X500Name(c)
- };
- this.setThisUpdateByParam = function(c) {
- this.asn1ThisUpdate = new KJUR.asn1.x509.Time(c)
- };
- this.setNextUpdateByParam = function(c) {
- this.asn1NextUpdate = new KJUR.asn1.x509.Time(c)
- };
- this.addRevokedCert = function(c, d) {
- var f = {};
- if (c != undefined && c != null) {
- f.sn = c
- }
- if (d != undefined && d != null) {
- f.time = d
- }
- var e = new KJUR.asn1.x509.CRLEntry(f);
- this.aRevokedCert.push(e)
- };
- this.getEncodedHex = function() {
- this.asn1Array = new Array();
- if (this.asn1Version != null) {
- this.asn1Array.push(this.asn1Version)
- }
- this.asn1Array.push(this.asn1SignatureAlg);
- this.asn1Array.push(this.asn1Issuer);
- this.asn1Array.push(this.asn1ThisUpdate);
- if (this.asn1NextUpdate != null) {
- this.asn1Array.push(this.asn1NextUpdate)
- }
- if (this.aRevokedCert.length > 0) {
- var c = new KJUR.asn1.DERSequence({
- array: this.aRevokedCert
- });
- this.asn1Array.push(c)
- }
- var d = new KJUR.asn1.DERSequence({
- array: this.asn1Array
- });
- this.hTLV = d.getEncodedHex();
- this.isModified = false;
- return this.hTLV
- };
- this._initialize = function() {
- this.asn1Version = null;
- this.asn1SignatureAlg = null;
- this.asn1Issuer = null;
- this.asn1ThisUpdate = null;
- this.asn1NextUpdate = null;
- this.aRevokedCert = new Array()
- };
- this._initialize()
- };
- YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.CRLEntry = function(c) {
- KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);
- var b = null;
- var a = null;
- this.setCertSerial = function(d) {
- this.sn = new KJUR.asn1.DERInteger(d)
- };
- this.setRevocationDate = function(d) {
- this.time = new KJUR.asn1.x509.Time(d)
- };
- this.getEncodedHex = function() {
- var d = new KJUR.asn1.DERSequence({
- array: [this.sn, this.time]
- });
- this.TLV = d.getEncodedHex();
- return this.TLV
- };
- if (typeof c != "undefined") {
- if (typeof c.time != "undefined") {
- this.setRevocationDate(c.time)
- }
- if (typeof c.sn != "undefined") {
- this.setCertSerial(c.sn)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.X500Name = function(b) {
- KJUR.asn1.x509.X500Name.superclass.constructor.call(this);
- this.asn1Array = new Array();
- this.setByString = function(c) {
- var d = c.split("/");
- d.shift();
- for (var e = 0; e < d.length; e++) {
- this.asn1Array.push(new KJUR.asn1.x509.RDN({
- str: d[e]
- }))
- }
- };
- this.setByLdapString = function(c) {
- var d = KJUR.asn1.x509.X500Name.ldapToOneline(c);
- this.setByString(d)
- };
- this.setByObject = function(e) {
- for (var c in e) {
- if (e.hasOwnProperty(c)) {
- var d = new KJUR.asn1.x509.RDN({
- str: c + "=" + e[c]
- });
- this.asn1Array ? this.asn1Array.push(d) : this.asn1Array = [d]
- }
- }
- };
- this.getEncodedHex = function() {
- if (typeof this.hTLV == "string") {
- return this.hTLV
- }
- var c = new KJUR.asn1.DERSequence({
- array: this.asn1Array
- });
- this.hTLV = c.getEncodedHex();
- return this.hTLV
- };
- if (b !== undefined) {
- if (b.str !== undefined) {
- this.setByString(b.str)
- } else {
- if (b.ldapstr !== undefined) {
- this.setByLdapString(b.ldapstr)
- } else {
- if (typeof b === "object") {
- this.setByObject(b)
- }
- }
- }
- if (b.certissuer !== undefined) {
- var a = new X509();
- a.hex = ASN1HEX.pemToHex(b.certissuer);
- this.hTLV = a.getIssuerHex()
- }
- if (b.certsubject !== undefined) {
- var a = new X509();
- a.hex = ASN1HEX.pemToHex(b.certsubject);
- this.hTLV = a.getSubjectHex()
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.X500Name.onelineToLDAP = function(d) {
- if (d.substr(0, 1) !== "/") {
- throw "malformed input"
- }
- var b = "";
- d = d.substr(1);
- var c = d.split("/");
- c.reverse();
- c = c.map(function(a) {
- return a.replace(/,/, "\\,")
- });
- return c.join(",")
- };
- KJUR.asn1.x509.X500Name.ldapToOneline = function(g) {
- var c = g.split(",");
- var e = false;
- var b = [];
- for (var f = 0; c.length > 0; f++) {
- var h = c.shift();
- if (e === true) {
- var d = b.pop();
- var j = (d + "," + h).replace(/\\,/g, ",");
- b.push(j);
- e = false
- } else {
- b.push(h)
- }
- if (h.substr( - 1, 1) === "\\") {
- e = true
- }
- }
- b = b.map(function(a) {
- return a.replace("/", "\\/")
- });
- b.reverse();
- return "/" + b.join("/")
- };
- KJUR.asn1.x509.RDN = function(a) {
- KJUR.asn1.x509.RDN.superclass.constructor.call(this);
- this.asn1Array = new Array();
- this.addByString = function(b) {
- this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({
- str: b
- }))
- };
- this.addByMultiValuedString = function(d) {
- var b = KJUR.asn1.x509.RDN.parseString(d);
- for (var c = 0; c < b.length; c++) {
- this.addByString(b[c])
- }
- };
- this.getEncodedHex = function() {
- var b = new KJUR.asn1.DERSet({
- array: this.asn1Array
- });
- this.TLV = b.getEncodedHex();
- return this.TLV
- };
- if (typeof a != "undefined") {
- if (typeof a.str != "undefined") {
- this.addByMultiValuedString(a.str)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.RDN.parseString = function(m) {
- var j = m.split(/\+/);
- var h = false;
- var c = [];
- for (var g = 0; j.length > 0; g++) {
- var k = j.shift();
- if (h === true) {
- var f = c.pop();
- var d = (f + "+" + k).replace(/\\\+/g, "+");
- c.push(d);
- h = false
- } else {
- c.push(k)
- }
- if (k.substr( - 1, 1) === "\\") {
- h = true
- }
- }
- var l = false;
- var b = [];
- for (var g = 0; c.length > 0; g++) {
- var k = c.shift();
- if (l === true) {
- var e = b.pop();
- if (k.match(/"$/)) {
- var d = (e + "+" + k).replace(/^([^=]+)="(.*)"$/, "$1=$2");
- b.push(d);
- l = false
- } else {
- b.push(e + "+" + k)
- }
- } else {
- b.push(k)
- }
- if (k.match(/^[^=]+="/)) {
- l = true
- }
- }
- return b
- };
- KJUR.asn1.x509.AttributeTypeAndValue = function(b) {
- KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);
- var d = null;
- var c = null;
- var a = "utf8";
- this.setByString = function(f) {
- var e = f.match(/^([^=]+)=(.+)$/);
- if (e) {
- this.setByAttrTypeAndValueStr(e[1], e[2])
- } else {
- throw "malformed attrTypeAndValueStr: " + f
- }
- };
- this.setByAttrTypeAndValueStr = function(g, f) {
- this.typeObj = KJUR.asn1.x509.OID.atype2obj(g);
- var e = a;
- if (g == "C") {
- e = "prn"
- }
- this.valueObj = this.getValueObj(e, f)
- };
- this.getValueObj = function(f, e) {
- if (f == "utf8") {
- return new KJUR.asn1.DERUTF8String({
- str: e
- })
- }
- if (f == "prn") {
- return new KJUR.asn1.DERPrintableString({
- str: e
- })
- }
- if (f == "tel") {
- return new KJUR.asn1.DERTeletexString({
- str: e
- })
- }
- if (f == "ia5") {
- return new KJUR.asn1.DERIA5String({
- str: e
- })
- }
- throw "unsupported directory string type: type=" + f + " value=" + e
- };
- this.getEncodedHex = function() {
- var e = new KJUR.asn1.DERSequence({
- array: [this.typeObj, this.valueObj]
- });
- this.TLV = e.getEncodedHex();
- return this.TLV
- };
- if (typeof b != "undefined") {
- if (typeof b.str != "undefined") {
- this.setByString(b.str)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.SubjectPublicKeyInfo = function(d) {
- KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);
- var b = null;
- var c = null;
- var a = null;
- this.setRSAKey = function(e) {
- if (!RSAKey.prototype.isPrototypeOf(e)) {
- throw "argument is not RSAKey instance"
- }
- this.rsaKey = e;
- var g = new KJUR.asn1.DERInteger({
- bigint: e.n
- });
- var f = new KJUR.asn1.DERInteger({
- "int": e.e
- });
- var i = new KJUR.asn1.DERSequence({
- array: [g, f]
- });
- var h = i.getEncodedHex();
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: "rsaEncryption"
- });
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({
- hex: "00" + h
- })
- };
- this.setRSAPEM = function(g) {
- if (g.match(/-----BEGIN PUBLIC KEY-----/)) {
- var n = g;
- n = n.replace(/^-----[^-]+-----/, "");
- n = n.replace(/-----[^-]+-----\s*$/, "");
- var m = n.replace(/\s+/g, "");
- var f = CryptoJS.enc.Base64.parse(m);
- var i = CryptoJS.enc.Hex.stringify(f);
- var k = RSAKey.getHexValueArrayOfChildrenFromHex(i);
- var h = k[1];
- var l = h.substr(2);
- var e = RSAKey.getHexValueArrayOfChildrenFromHex(l);
- var j = new RSAKey();
- j.setPublic(e[0], e[1]);
- this.setRSAKey(j)
- } else {
- throw "key not supported"
- }
- };
- this.getASN1Object = function() {
- if (this.asn1AlgId == null || this.asn1SubjPKey == null) {
- throw "algId and/or subjPubKey not set"
- }
- var e = new KJUR.asn1.DERSequence({
- array: [this.asn1AlgId, this.asn1SubjPKey]
- });
- return e
- };
- this.getEncodedHex = function() {
- var e = this.getASN1Object();
- this.hTLV = e.getEncodedHex();
- return this.hTLV
- };
- this._setRSAKey = function(e) {
- var g = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": {
- bigint: e.n
- }
- },
- {
- "int": {
- "int": e.e
- }
- }]
- });
- var f = g.getEncodedHex();
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: "rsaEncryption"
- });
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({
- hex: "00" + f
- })
- };
- this._setEC = function(e) {
- var f = new KJUR.asn1.DERObjectIdentifier({
- name: e.curveName
- });
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: "ecPublicKey",
- asn1params: f
- });
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({
- hex: "00" + e.pubKeyHex
- })
- };
- this._setDSA = function(e) {
- var f = new KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": {
- bigint: e.p
- }
- },
- {
- "int": {
- bigint: e.q
- }
- },
- {
- "int": {
- bigint: e.g
- }
- }]
- });
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: "dsa",
- asn1params: f
- });
- var g = new KJUR.asn1.DERInteger({
- bigint: e.y
- });
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({
- hex: "00" + g.getEncodedHex()
- })
- };
- if (typeof d != "undefined") {
- if (typeof RSAKey != "undefined" && d instanceof RSAKey) {
- this._setRSAKey(d)
- } else {
- if (typeof KJUR.crypto.ECDSA != "undefined" && d instanceof KJUR.crypto.ECDSA) {
- this._setEC(d)
- } else {
- if (typeof KJUR.crypto.DSA != "undefined" && d instanceof KJUR.crypto.DSA) {
- this._setDSA(d)
- } else {
- if (typeof d.rsakey != "undefined") {
- this.setRSAKey(d.rsakey)
- } else {
- if (typeof d.rsapem != "undefined") {
- this.setRSAPEM(d.rsapem)
- }
- }
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.Time = function(c) {
- KJUR.asn1.x509.Time.superclass.constructor.call(this);
- var b = null;
- var a = null;
- this.setTimeParams = function(d) {
- this.timeParams = d
- };
- this.getEncodedHex = function() {
- var d = null;
- if (this.timeParams != null) {
- if (this.type == "utc") {
- d = new KJUR.asn1.DERUTCTime(this.timeParams)
- } else {
- d = new KJUR.asn1.DERGeneralizedTime(this.timeParams)
- }
- } else {
- if (this.type == "utc") {
- d = new KJUR.asn1.DERUTCTime()
- } else {
- d = new KJUR.asn1.DERGeneralizedTime()
- }
- }
- this.TLV = d.getEncodedHex();
- return this.TLV
- };
- this.type = "utc";
- if (typeof c != "undefined") {
- if (typeof c.type != "undefined") {
- this.type = c.type
- } else {
- if (typeof c.str != "undefined") {
- if (c.str.match(/^[0-9]{12}Z$/)) {
- this.type = "utc"
- }
- if (c.str.match(/^[0-9]{14}Z$/)) {
- this.type = "gen"
- }
- }
- }
- this.timeParams = c
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.AlgorithmIdentifier = function(b) {
- KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);
- this.nameAlg = null;
- this.asn1Alg = null;
- this.asn1Params = null;
- this.paramEmpty = false;
- this.getEncodedHex = function() {
- if (this.nameAlg === null && this.asn1Alg === null) {
- throw "algorithm not specified"
- }
- if (this.nameAlg !== null && this.asn1Alg === null) {
- this.asn1Alg = KJUR.asn1.x509.OID.name2obj(this.nameAlg)
- }
- var c = [this.asn1Alg];
- if (this.asn1Params !== null) {
- c.push(this.asn1Params)
- }
- var d = new KJUR.asn1.DERSequence({
- array: c
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (b !== undefined) {
- if (b.name !== undefined) {
- this.nameAlg = b.name
- }
- if (b.asn1params !== undefined) {
- this.asn1Params = b.asn1params
- }
- if (b.paramempty !== undefined) {
- this.paramEmpty = b.paramempty
- }
- }
- if (this.asn1Params === null && this.paramEmpty === false && this.nameAlg !== null) {
- var a = this.nameAlg.toLowerCase();
- if (a.substr( - 7, 7) !== "withdsa" && a.substr( - 9, 9) !== "withecdsa") {
- this.asn1Params = new KJUR.asn1.DERNull()
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.GeneralName = function(d) {
- KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);
- var c = null;
- var b = null;
- var a = {
- rfc822: "81",
- dns: "82",
- dn: "a4",
- uri: "86"
- };
- this.explicit = false;
- this.setByParam = function(k) {
- var j = null;
- var g = null;
- if (k === undefined) {
- return
- }
- if (k.rfc822 !== undefined) {
- this.type = "rfc822";
- g = new KJUR.asn1.DERIA5String({
- str: k[this.type]
- })
- }
- if (k.dns !== undefined) {
- this.type = "dns";
- g = new KJUR.asn1.DERIA5String({
- str: k[this.type]
- })
- }
- if (k.uri !== undefined) {
- this.type = "uri";
- g = new KJUR.asn1.DERIA5String({
- str: k[this.type]
- })
- }
- if (k.dn !== undefined) {
- this.type = "dn";
- g = new KJUR.asn1.x509.X500Name({
- str: k.dn
- })
- }
- if (k.ldapdn !== undefined) {
- this.type = "dn";
- g = new KJUR.asn1.x509.X500Name({
- ldapstr: k.ldapdn
- })
- }
- if (k.certissuer !== undefined) {
- this.type = "dn";
- this.explicit = true;
- var h = k.certissuer;
- var f = null;
- if (h.match(/^[0-9A-Fa-f]+$/)) {
- f == h
- }
- if (h.indexOf("-----BEGIN ") != -1) {
- f = ASN1HEX.pemToHex(h)
- }
- if (f == null) {
- throw "certissuer param not cert"
- }
- var e = new X509();
- e.hex = f;
- var i = e.getIssuerHex();
- g = new KJUR.asn1.ASN1Object();
- g.hTLV = i
- }
- if (k.certsubj !== undefined) {
- this.type = "dn";
- this.explicit = true;
- var h = k.certsubj;
- var f = null;
- if (h.match(/^[0-9A-Fa-f]+$/)) {
- f == h
- }
- if (h.indexOf("-----BEGIN ") != -1) {
- f = ASN1HEX.pemToHex(h)
- }
- if (f == null) {
- throw "certsubj param not cert"
- }
- var e = new X509();
- e.hex = f;
- var i = e.getSubjectHex();
- g = new KJUR.asn1.ASN1Object();
- g.hTLV = i
- }
- if (this.type == null) {
- throw "unsupported type in params=" + k
- }
- this.asn1Obj = new KJUR.asn1.DERTaggedObject({
- explicit: this.explicit,
- tag: a[this.type],
- obj: g
- })
- };
- this.getEncodedHex = function() {
- return this.asn1Obj.getEncodedHex()
- };
- if (d !== undefined) {
- this.setByParam(d)
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.GeneralNames = function(b) {
- KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);
- var a = null;
- this.setByParamArray = function(e) {
- for (var c = 0; c < e.length; c++) {
- var d = new KJUR.asn1.x509.GeneralName(e[c]);
- this.asn1Array.push(d)
- }
- };
- this.getEncodedHex = function() {
- var c = new KJUR.asn1.DERSequence({
- array: this.asn1Array
- });
- return c.getEncodedHex()
- };
- this.asn1Array = new Array();
- if (typeof b != "undefined") {
- this.setByParamArray(b)
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.DistributionPointName = function(b) {
- KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);
- var e = null;
- var c = null;
- var a = null;
- var d = null;
- this.getEncodedHex = function() {
- if (this.type != "full") {
- throw "currently type shall be 'full': " + this.type
- }
- this.asn1Obj = new KJUR.asn1.DERTaggedObject({
- explicit: false,
- tag: this.tag,
- obj: this.asn1V
- });
- this.hTLV = this.asn1Obj.getEncodedHex();
- return this.hTLV
- };
- if (typeof b != "undefined") {
- if (KJUR.asn1.x509.GeneralNames.prototype.isPrototypeOf(b)) {
- this.type = "full";
- this.tag = "a0";
- this.asn1V = b
- } else {
- throw "This class supports GeneralNames only as argument"
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.DistributionPoint = function(b) {
- KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);
- var a = null;
- this.getEncodedHex = function() {
- var c = new KJUR.asn1.DERSequence();
- if (this.asn1DP != null) {
- var d = new KJUR.asn1.DERTaggedObject({
- explicit: true,
- tag: "a0",
- obj: this.asn1DP
- });
- c.appendASN1Object(d)
- }
- this.hTLV = c.getEncodedHex();
- return this.hTLV
- };
- if (typeof b != "undefined") {
- if (typeof b.dpobj != "undefined") {
- this.asn1DP = b.dpobj
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object);
- KJUR.asn1.x509.OID = new
- function(a) {
- this.atype2oidList = {
- CN: "2.5.4.3",
- L: "2.5.4.7",
- ST: "2.5.4.8",
- O: "2.5.4.10",
- OU: "2.5.4.11",
- C: "2.5.4.6",
- STREET: "2.5.4.9",
- DC: "0.9.2342.19200300.100.1.25",
- UID: "0.9.2342.19200300.100.1.1",
- SN: "2.5.4.4",
- DN: "2.5.4.49",
- E: "1.2.840.113549.1.9.1",
- businessCategory: "2.5.4.15",
- postalCode: "2.5.4.17",
- jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1",
- jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2",
- jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3"
- };
- this.name2oidList = {
- sha1: "1.3.14.3.2.26",
- sha256: "2.16.840.1.101.3.4.2.1",
- sha384: "2.16.840.1.101.3.4.2.2",
- sha512: "2.16.840.1.101.3.4.2.3",
- sha224: "2.16.840.1.101.3.4.2.4",
- md5: "1.2.840.113549.2.5",
- md2: "1.3.14.7.2.2.1",
- ripemd160: "1.3.36.3.2.1",
- MD2withRSA: "1.2.840.113549.1.1.2",
- MD4withRSA: "1.2.840.113549.1.1.3",
- MD5withRSA: "1.2.840.113549.1.1.4",
- SHA1withRSA: "1.2.840.113549.1.1.5",
- SHA224withRSA: "1.2.840.113549.1.1.14",
- SHA256withRSA: "1.2.840.113549.1.1.11",
- SHA384withRSA: "1.2.840.113549.1.1.12",
- SHA512withRSA: "1.2.840.113549.1.1.13",
- SHA1withECDSA: "1.2.840.10045.4.1",
- SHA224withECDSA: "1.2.840.10045.4.3.1",
- SHA256withECDSA: "1.2.840.10045.4.3.2",
- SHA384withECDSA: "1.2.840.10045.4.3.3",
- SHA512withECDSA: "1.2.840.10045.4.3.4",
- dsa: "1.2.840.10040.4.1",
- SHA1withDSA: "1.2.840.10040.4.3",
- SHA224withDSA: "2.16.840.1.101.3.4.3.1",
- SHA256withDSA: "2.16.840.1.101.3.4.3.2",
- rsaEncryption: "1.2.840.113549.1.1.1",
- commonName: "2.5.4.3",
- localityName: "2.5.4.7",
- stateOrProvinceName: "2.5.4.8",
- organizationName: "2.5.4.10",
- organizationalUnitName: "2.5.4.11",
- countryName: "2.5.4.6",
- streetAddress: "2.5.4.9",
- domainComponent: "0.9.2342.19200300.100.1.25",
- userId: "0.9.2342.19200300.100.1.1",
- surname: "2.5.4.4",
- distinguishedName: "2.5.4.49",
- emailAddress: "1.2.840.113549.1.9.1",
- businessCategory: "2.5.4.15",
- postalCode: "2.5.4.17",
- jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1",
- jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2",
- jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3",
- subjectKeyIdentifier: "2.5.29.14",
- keyUsage: "2.5.29.15",
- subjectAltName: "2.5.29.17",
- issuerAltName: "2.5.29.18",
- basicConstraints: "2.5.29.19",
- nameConstraints: "2.5.29.30",
- cRLDistributionPoints: "2.5.29.31",
- certificatePolicies: "2.5.29.32",
- authorityKeyIdentifier: "2.5.29.35",
- policyConstraints: "2.5.29.36",
- extKeyUsage: "2.5.29.37",
- authorityInfoAccess: "1.3.6.1.5.5.7.1.1",
- ocsp: "1.3.6.1.5.5.7.48.1",
- caIssuers: "1.3.6.1.5.5.7.48.2",
- anyExtendedKeyUsage: "2.5.29.37.0",
- serverAuth: "1.3.6.1.5.5.7.3.1",
- clientAuth: "1.3.6.1.5.5.7.3.2",
- codeSigning: "1.3.6.1.5.5.7.3.3",
- emailProtection: "1.3.6.1.5.5.7.3.4",
- timeStamping: "1.3.6.1.5.5.7.3.8",
- ocspSigning: "1.3.6.1.5.5.7.3.9",
- ecPublicKey: "1.2.840.10045.2.1",
- secp256r1: "1.2.840.10045.3.1.7",
- secp256k1: "1.3.132.0.10",
- secp384r1: "1.3.132.0.34",
- pkcs5PBES2: "1.2.840.113549.1.5.13",
- pkcs5PBKDF2: "1.2.840.113549.1.5.12",
- "des-EDE3-CBC": "1.2.840.113549.3.7",
- data: "1.2.840.113549.1.7.1",
- "signed-data": "1.2.840.113549.1.7.2",
- "enveloped-data": "1.2.840.113549.1.7.3",
- "digested-data": "1.2.840.113549.1.7.5",
- "encrypted-data": "1.2.840.113549.1.7.6",
- "authenticated-data": "1.2.840.113549.1.9.16.1.2",
- tstinfo: "1.2.840.113549.1.9.16.1.4",
- extensionRequest: "1.2.840.113549.1.9.14",
- };
- this.objCache = {};
- this.name2obj = function(b) {
- if (typeof this.objCache[b] != "undefined") {
- return this.objCache[b]
- }
- if (typeof this.name2oidList[b] == "undefined") {
- throw "Name of ObjectIdentifier not defined: " + b
- }
- var c = this.name2oidList[b];
- var d = new KJUR.asn1.DERObjectIdentifier({
- oid: c
- });
- this.objCache[b] = d;
- return d
- };
- this.atype2obj = function(b) {
- if (typeof this.objCache[b] != "undefined") {
- return this.objCache[b]
- }
- if (typeof this.atype2oidList[b] == "undefined") {
- throw "AttributeType name undefined: " + b
- }
- var c = this.atype2oidList[b];
- var d = new KJUR.asn1.DERObjectIdentifier({
- oid: c
- });
- this.objCache[b] = d;
- return d
- }
- };
- KJUR.asn1.x509.OID.oid2name = function(b) {
- var c = KJUR.asn1.x509.OID.name2oidList;
- for (var a in c) {
- if (c[a] == b) {
- return a
- }
- }
- return ""
- };
- KJUR.asn1.x509.OID.oid2atype = function(b) {
- var c = KJUR.asn1.x509.OID.atype2oidList;
- for (var a in c) {
- if (c[a] == b) {
- return a
- }
- }
- return b
- };
- KJUR.asn1.x509.OID.name2oid = function(a) {
- var b = KJUR.asn1.x509.OID.name2oidList;
- if (b[a] === undefined) {
- return ""
- }
- return b[a]
- };
- KJUR.asn1.x509.X509Util = new
- function() {
- this.getPKCS8PubKeyPEMfromRSAKey = function(i) {
- var h = null;
- var f = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(i.n);
- var j = KJUR.asn1.ASN1Util.integerToByteHex(i.e);
- var a = new KJUR.asn1.DERInteger({
- hex: f
- });
- var g = new KJUR.asn1.DERInteger({
- hex: j
- });
- var l = new KJUR.asn1.DERSequence({
- array: [a, g]
- });
- var c = l.getEncodedHex();
- var d = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: "rsaEncryption"
- });
- var b = new KJUR.asn1.DERBitString({
- hex: "00" + c
- });
- var k = new KJUR.asn1.DERSequence({
- array: [d, b]
- });
- var e = k.getEncodedHex();
- var h = KJUR.asn1.ASN1Util.getPEMStringFromHex(e, "PUBLIC KEY");
- return h
- }
- };
- KJUR.asn1.x509.X509Util.newCertPEM = function(f) {
- var c = KJUR.asn1.x509;
- var e = new c.TBSCertificate();
- if (f.serial !== undefined) {
- e.setSerialNumberByParam(f.serial)
- } else {
- throw "serial number undefined."
- }
- if (typeof f.sigalg.name === "string") {
- e.setSignatureAlgByParam(f.sigalg)
- } else {
- throw "unproper signature algorithm name"
- }
- if (f.issuer !== undefined) {
- e.setIssuerByParam(f.issuer)
- } else {
- throw "issuer name undefined."
- }
- if (f.notbefore !== undefined) {
- e.setNotBeforeByParam(f.notbefore)
- } else {
- throw "notbefore undefined."
- }
- if (f.notafter !== undefined) {
- e.setNotAfterByParam(f.notafter)
- } else {
- throw "notafter undefined."
- }
- if (f.subject !== undefined) {
- e.setSubjectByParam(f.subject)
- } else {
- throw "subject name undefined."
- }
- if (f.sbjpubkey !== undefined) {
- e.setSubjectPublicKeyByGetKey(f.sbjpubkey)
- } else {
- throw "subject public key undefined."
- }
- if (f.ext !== undefined && f.ext.length !== undefined) {
- for (var b = 0; b < f.ext.length; b++) {
- for (key in f.ext[b]) {
- e.appendExtensionByName(key, f.ext[b][key])
- }
- }
- }
- if (f.cakey === undefined && f.sighex === undefined) {
- throw "param cakey and sighex undefined."
- }
- var d = null;
- var a = null;
- if (f.cakey) {
- if (f.cakey.isPrivate === true) {
- d = f.cakey
- } else {
- d = KEYUTIL.getKey.apply(null, f.cakey)
- }
- a = new c.Certificate({
- tbscertobj: e,
- prvkeyobj: d
- });
- a.sign()
- }
- if (f.sighex) {
- a = new c.Certificate({
- tbscertobj: e
- });
- a.setSignatureHex(f.sighex)
- }
- return a.getPEMString()
- };
- /*! asn1cms-1.0.3.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- if (typeof KJUR.asn1.cms == "undefined" || !KJUR.asn1.cms) {
- KJUR.asn1.cms = {}
- }
- KJUR.asn1.cms.Attribute = function(b) {
- KJUR.asn1.cms.Attribute.superclass.constructor.call(this);
- var a = [];
- this.getEncodedHex = function() {
- var f, e, c;
- f = new KJUR.asn1.DERObjectIdentifier({
- oid: this.attrTypeOid
- });
- e = new KJUR.asn1.DERSet({
- array: this.valueList
- });
- try {
- e.getEncodedHex()
- } catch(d) {
- throw "fail valueSet.getEncodedHex in Attribute(1)/" + d
- }
- c = new KJUR.asn1.DERSequence({
- array: [f, e]
- });
- try {
- this.hTLV = c.getEncodedHex()
- } catch(d) {
- throw "failed seq.getEncodedHex in Attribute(2)/" + d
- }
- return this.hTLV
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.Attribute, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.ContentType = function(b) {
- KJUR.asn1.cms.ContentType.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.3";
- var a = null;
- if (typeof b != "undefined") {
- var a = new KJUR.asn1.DERObjectIdentifier(b);
- this.valueList = [a]
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.ContentType, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cms.MessageDigest = function(e) {
- KJUR.asn1.cms.MessageDigest.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.4";
- if (typeof e != "undefined") {
- if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo && typeof e.hashAlg == "string") {
- var b = e.eciObj.eContentValueHex;
- var a = e.hashAlg;
- var c = KJUR.crypto.Util.hashHex(b, a);
- var d = new KJUR.asn1.DEROctetString({
- hex: c
- });
- d.getEncodedHex();
- this.valueList = [d]
- } else {
- var d = new KJUR.asn1.DEROctetString(e);
- d.getEncodedHex();
- this.valueList = [d]
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.MessageDigest, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cms.SigningTime = function(c) {
- KJUR.asn1.cms.SigningTime.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.5";
- if (typeof c != "undefined") {
- var a = new KJUR.asn1.x509.Time(c);
- try {
- a.getEncodedHex()
- } catch(b) {
- throw "SigningTime.getEncodedHex() failed/" + b
- }
- this.valueList = [a]
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.SigningTime, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cms.SigningCertificate = function(d) {
- KJUR.asn1.cms.SigningCertificate.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.16.2.12";
- var a = KJUR.asn1;
- var c = KJUR.asn1.cms;
- var b = KJUR.crypto;
- this.setCerts = function(l) {
- var j = [];
- for (var h = 0; h < l.length; h++) {
- var f = ASN1HEX.pemToHex(l[h]);
- var e = b.Util.hashHex(f, "sha1");
- var m = new a.DEROctetString({
- hex: e
- });
- m.getEncodedHex();
- var k = new c.IssuerAndSerialNumber({
- cert: l[h]
- });
- k.getEncodedHex();
- var n = new a.DERSequence({
- array: [m, k]
- });
- n.getEncodedHex();
- j.push(n)
- }
- var g = new a.DERSequence({
- array: j
- });
- g.getEncodedHex();
- this.valueList = [g]
- };
- if (typeof d != "undefined") {
- if (typeof d.array == "object") {
- this.setCerts(d.array)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificate, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cms.SigningCertificateV2 = function(e) {
- KJUR.asn1.cms.SigningCertificateV2.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.16.2.47";
- var b = KJUR.asn1;
- var f = KJUR.asn1.x509;
- var d = KJUR.asn1.cms;
- var c = KJUR.crypto;
- this.setCerts = function(p, h) {
- var n = [];
- for (var l = 0; l < p.length; l++) {
- var j = ASN1HEX.pemToHex(p[l]);
- var r = [];
- if (h != "sha256") {
- r.push(new f.AlgorithmIdentifier({
- name: h
- }))
- }
- var g = c.Util.hashHex(j, h);
- var q = new b.DEROctetString({
- hex: g
- });
- q.getEncodedHex();
- r.push(q);
- var m = new d.IssuerAndSerialNumber({
- cert: p[l]
- });
- m.getEncodedHex();
- r.push(m);
- var o = new b.DERSequence({
- array: r
- });
- o.getEncodedHex();
- n.push(o)
- }
- var k = new b.DERSequence({
- array: n
- });
- k.getEncodedHex();
- this.valueList = [k]
- };
- if (typeof e != "undefined") {
- if (typeof e.array == "object") {
- var a = "sha256";
- if (typeof e.hashAlg == "string") {
- a = e.hashAlg
- }
- this.setCerts(e.array, a)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificateV2, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cms.IssuerAndSerialNumber = function(c) {
- KJUR.asn1.cms.IssuerAndSerialNumber.superclass.constructor.call(this);
- var e = null;
- var b = null;
- var a = KJUR.asn1;
- var d = a.x509;
- this.setByCertPEM = function(i) {
- var g = ASN1HEX.pemToHex(i);
- var f = new X509();
- f.hex = g;
- var j = f.getIssuerHex();
- this.dIssuer = new d.X500Name();
- this.dIssuer.hTLV = j;
- var h = f.getSerialNumberHex();
- this.dSerial = new a.DERInteger({
- hex: h
- })
- };
- this.getEncodedHex = function() {
- var f = new KJUR.asn1.DERSequence({
- array: [this.dIssuer, this.dSerial]
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (typeof c == "string" && c.indexOf("-----BEGIN ") != -1) {
- this.setByCertPEM(c)
- }
- if (c.issuer && c.serial) {
- if (c.issuer instanceof KJUR.asn1.x509.X500Name) {
- this.dIssuer = c.issuer
- } else {
- this.dIssuer = new KJUR.asn1.x509.X500Name(c.issuer)
- }
- if (c.serial instanceof KJUR.asn1.DERInteger) {
- this.dSerial = c.serial
- } else {
- this.dSerial = new KJUR.asn1.DERInteger(c.serial)
- }
- }
- if (typeof c.cert == "string") {
- this.setByCertPEM(c.cert)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.IssuerAndSerialNumber, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.AttributeList = function(a) {
- KJUR.asn1.cms.AttributeList.superclass.constructor.call(this);
- this.list = new Array();
- this.sortFlag = true;
- this.add = function(b) {
- if (b instanceof KJUR.asn1.cms.Attribute) {
- this.list.push(b)
- }
- };
- this.length = function() {
- return this.list.length
- };
- this.clear = function() {
- this.list = new Array();
- this.hTLV = null;
- this.hV = null
- };
- this.getEncodedHex = function() {
- if (typeof this.hTLV == "string") {
- return this.hTLV
- }
- var b = new KJUR.asn1.DERSet({
- array: this.list,
- sortflag: this.sortFlag
- });
- this.hTLV = b.getEncodedHex();
- return this.hTLV
- };
- if (typeof a != "undefined") {
- if (typeof a.sortflag != "undefined" && a.sortflag == false) {
- this.sortFlag = false
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.AttributeList, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.SignerInfo = function(c) {
- KJUR.asn1.cms.SignerInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.cms;
- var d = KJUR.asn1.x509;
- this.dCMSVersion = new a.DERInteger({
- "int": 1
- });
- this.dSignerIdentifier = null;
- this.dDigestAlgorithm = null;
- this.dSignedAttrs = new b.AttributeList();
- this.dSigAlg = null;
- this.dSig = null;
- this.dUnsignedAttrs = new b.AttributeList();
- this.setSignerIdentifier = function(f) {
- if (typeof f == "string" && f.indexOf("CERTIFICATE") != -1 && f.indexOf("BEGIN") != -1 && f.indexOf("END") != -1) {
- var e = f;
- this.dSignerIdentifier = new b.IssuerAndSerialNumber({
- cert: f
- })
- }
- };
- this.setForContentAndHash = function(e) {
- if (typeof e != "undefined") {
- if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo) {
- this.dSignedAttrs.add(new b.ContentType({
- oid: "1.2.840.113549.1.7.1"
- }));
- this.dSignedAttrs.add(new b.MessageDigest({
- eciObj: e.eciObj,
- hashAlg: e.hashAlg
- }))
- }
- if (typeof e.sdObj != "undefined" && e.sdObj instanceof KJUR.asn1.cms.SignedData) {
- if (e.sdObj.digestAlgNameList.join(":").indexOf(e.hashAlg) == -1) {
- e.sdObj.digestAlgNameList.push(e.hashAlg)
- }
- }
- if (typeof e.hashAlg == "string") {
- this.dDigestAlgorithm = new d.AlgorithmIdentifier({
- name: e.hashAlg
- })
- }
- }
- };
- this.sign = function(j, f) {
- this.dSigAlg = new d.AlgorithmIdentifier({
- name: f
- });
- var g = this.dSignedAttrs.getEncodedHex();
- var e = KEYUTIL.getKey(j);
- var i = new KJUR.crypto.Signature({
- alg: f
- });
- i.init(e);
- i.updateHex(g);
- var h = i.sign();
- this.dSig = new a.DEROctetString({
- hex: h
- })
- };
- this.addUnsigned = function(e) {
- this.hTLV = null;
- this.dUnsignedAttrs.hTLV = null;
- this.dUnsignedAttrs.add(e)
- };
- this.getEncodedHex = function() {
- if (this.dSignedAttrs instanceof KJUR.asn1.cms.AttributeList && this.dSignedAttrs.length() == 0) {
- throw "SignedAttrs length = 0 (empty)"
- }
- var e = new a.DERTaggedObject({
- obj: this.dSignedAttrs,
- tag: "a0",
- explicit: false
- });
- var h = null;
- if (this.dUnsignedAttrs.length() > 0) {
- h = new a.DERTaggedObject({
- obj: this.dUnsignedAttrs,
- tag: "a1",
- explicit: false
- })
- }
- var g = [this.dCMSVersion, this.dSignerIdentifier, this.dDigestAlgorithm, e, this.dSigAlg, this.dSig, ];
- if (h != null) {
- g.push(h)
- }
- var f = new a.DERSequence({
- array: g
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.SignerInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.EncapsulatedContentInfo = function(c) {
- KJUR.asn1.cms.EncapsulatedContentInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.cms;
- var d = KJUR.asn1.x509;
- this.dEContentType = new a.DERObjectIdentifier({
- name: "data"
- });
- this.dEContent = null;
- this.isDetached = false;
- this.eContentValueHex = null;
- this.setContentType = function(e) {
- if (e.match(/^[0-2][.][0-9.]+$/)) {
- this.dEContentType = new a.DERObjectIdentifier({
- oid: e
- })
- } else {
- this.dEContentType = new a.DERObjectIdentifier({
- name: e
- })
- }
- };
- this.setContentValue = function(e) {
- if (typeof e != "undefined") {
- if (typeof e.hex == "string") {
- this.eContentValueHex = e.hex
- } else {
- if (typeof e.str == "string") {
- this.eContentValueHex = utf8tohex(e.str)
- }
- }
- }
- };
- this.setContentValueHex = function(e) {
- this.eContentValueHex = e
- };
- this.setContentValueStr = function(e) {
- this.eContentValueHex = utf8tohex(e)
- };
- this.getEncodedHex = function() {
- if (typeof this.eContentValueHex != "string") {
- throw "eContentValue not yet set"
- }
- var g = new a.DEROctetString({
- hex: this.eContentValueHex
- });
- this.dEContent = new a.DERTaggedObject({
- obj: g,
- tag: "a0",
- explicit: true
- });
- var e = [this.dEContentType];
- if (!this.isDetached) {
- e.push(this.dEContent)
- }
- var f = new a.DERSequence({
- array: e
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.EncapsulatedContentInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.ContentInfo = function(c) {
- KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.cms;
- var d = KJUR.asn1.x509;
- this.dContentType = null;
- this.dContent = null;
- this.setContentType = function(e) {
- if (typeof e == "string") {
- this.dContentType = d.OID.name2obj(e)
- }
- };
- this.getEncodedHex = function() {
- var f = new a.DERTaggedObject({
- obj: this.dContent,
- tag: "a0",
- explicit: true
- });
- var e = new a.DERSequence({
- array: [this.dContentType, f]
- });
- this.hTLV = e.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (c.type) {
- this.setContentType(c.type)
- }
- if (c.obj && c.obj instanceof a.ASN1Object) {
- this.dContent = c.obj
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.ContentInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.SignedData = function(c) {
- KJUR.asn1.cms.SignedData.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.cms;
- var d = KJUR.asn1.x509;
- this.dCMSVersion = new a.DERInteger({
- "int": 1
- });
- this.dDigestAlgs = null;
- this.digestAlgNameList = [];
- this.dEncapContentInfo = new b.EncapsulatedContentInfo();
- this.dCerts = null;
- this.certificateList = [];
- this.crlList = [];
- this.signerInfoList = [new b.SignerInfo()];
- this.addCertificatesByPEM = function(e) {
- var f = ASN1HEX.pemToHex(e);
- var g = new a.ASN1Object();
- g.hTLV = f;
- this.certificateList.push(g)
- };
- this.getEncodedHex = function() {
- if (typeof this.hTLV == "string") {
- return this.hTLV
- }
- if (this.dDigestAlgs == null) {
- var k = [];
- for (var j = 0; j < this.digestAlgNameList.length; j++) {
- var h = this.digestAlgNameList[j];
- var m = new d.AlgorithmIdentifier({
- name: h
- });
- k.push(m)
- }
- this.dDigestAlgs = new a.DERSet({
- array: k
- })
- }
- var e = [this.dCMSVersion, this.dDigestAlgs, this.dEncapContentInfo];
- if (this.dCerts == null) {
- if (this.certificateList.length > 0) {
- var l = new a.DERSet({
- array: this.certificateList
- });
- this.dCerts = new a.DERTaggedObject({
- obj: l,
- tag: "a0",
- explicit: false
- })
- }
- }
- if (this.dCerts != null) {
- e.push(this.dCerts)
- }
- var g = new a.DERSet({
- array: this.signerInfoList
- });
- e.push(g);
- var f = new a.DERSequence({
- array: e
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- };
- this.getContentInfo = function() {
- this.getEncodedHex();
- var e = new b.ContentInfo({
- type: "signed-data",
- obj: this
- });
- return e
- };
- this.getContentInfoEncodedHex = function() {
- var e = this.getContentInfo();
- var f = e.getEncodedHex();
- return f
- };
- this.getPEM = function() {
- var e = this.getContentInfoEncodedHex();
- var f = a.ASN1Util.getPEMStringFromHex(e, "CMS");
- return f
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cms.SignedData, KJUR.asn1.ASN1Object);
- KJUR.asn1.cms.CMSUtil = new
- function() {};
- KJUR.asn1.cms.CMSUtil.newSignedData = function(a) {
- var h = KJUR.asn1.cms;
- var g = KJUR.asn1.cades;
- var f = new h.SignedData();
- f.dEncapContentInfo.setContentValue(a.content);
- if (typeof a.certs == "object") {
- for (var b = 0; b < a.certs.length; b++) {
- f.addCertificatesByPEM(a.certs[b])
- }
- }
- f.signerInfoList = [];
- for (var b = 0; b < a.signerInfos.length; b++) {
- var d = a.signerInfos[b];
- var c = new h.SignerInfo();
- c.setSignerIdentifier(d.signerCert);
- c.setForContentAndHash({
- sdObj: f,
- eciObj: f.dEncapContentInfo,
- hashAlg: d.hashAlg
- });
- for (attrName in d.sAttr) {
- var j = d.sAttr[attrName];
- if (attrName == "SigningTime") {
- var e = new h.SigningTime(j);
- c.dSignedAttrs.add(e)
- }
- if (attrName == "SigningCertificate") {
- var e = new h.SigningCertificate(j);
- c.dSignedAttrs.add(e)
- }
- if (attrName == "SigningCertificateV2") {
- var e = new h.SigningCertificateV2(j);
- c.dSignedAttrs.add(e)
- }
- if (attrName == "SignaturePolicyIdentifier") {
- var e = new g.SignaturePolicyIdentifier(j);
- c.dSignedAttrs.add(e)
- }
- }
- c.sign(d.signerPrvKey, d.sigAlg);
- f.signerInfoList.push(c)
- }
- return f
- };
- /*! asn1tsp-1.0.1.js (c) 2014 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- if (typeof KJUR.asn1.tsp == "undefined" || !KJUR.asn1.tsp) {
- KJUR.asn1.tsp = {}
- }
- KJUR.asn1.tsp.Accuracy = function(b) {
- KJUR.asn1.tsp.Accuracy.superclass.constructor.call(this);
- var a = KJUR.asn1;
- this.seconds = null;
- this.millis = null;
- this.micros = null;
- this.getEncodedHex = function() {
- var e = null;
- var g = null;
- var i = null;
- var c = [];
- if (this.seconds != null) {
- e = new a.DERInteger({
- "int": this.seconds
- });
- c.push(e)
- }
- if (this.millis != null) {
- var h = new a.DERInteger({
- "int": this.millis
- });
- g = new a.DERTaggedObject({
- obj: h,
- tag: "80",
- explicit: false
- });
- c.push(g)
- }
- if (this.micros != null) {
- var f = new a.DERInteger({
- "int": this.micros
- });
- i = new a.DERTaggedObject({
- obj: f,
- tag: "81",
- explicit: false
- });
- c.push(i)
- }
- var d = new a.DERSequence({
- array: c
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (typeof b != "undefined") {
- if (typeof b.seconds == "number") {
- this.seconds = b.seconds
- }
- if (typeof b.millis == "number") {
- this.millis = b.millis
- }
- if (typeof b.micros == "number") {
- this.micros = b.micros
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.Accuracy, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.MessageImprint = function(b) {
- KJUR.asn1.tsp.MessageImprint.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var c = KJUR.asn1.x509;
- this.dHashAlg = null;
- this.dHashValue = null;
- this.getEncodedHex = function() {
- if (typeof this.hTLV == "string") {
- return this.hTLV
- }
- var d = new a.DERSequence({
- array: [this.dHashAlg, this.dHashValue]
- });
- return d.getEncodedHex()
- };
- if (typeof b != "undefined") {
- if (typeof b.hashAlg == "string") {
- this.dHashAlg = new c.AlgorithmIdentifier({
- name: b.hashAlg
- })
- }
- if (typeof b.hashValue == "string") {
- this.dHashValue = new a.DEROctetString({
- hex: b.hashValue
- })
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.MessageImprint, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.TimeStampReq = function(c) {
- KJUR.asn1.tsp.TimeStampReq.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.tsp;
- this.dVersion = new a.DERInteger({
- "int": 1
- });
- this.dMessageImprint = null;
- this.dPolicy = null;
- this.dNonce = null;
- this.certReq = true;
- this.setMessageImprint = function(d) {
- if (d instanceof KJUR.asn1.tsp.MessageImprint) {
- this.dMessageImprint = d;
- return
- }
- if (typeof d == "object") {
- this.dMessageImprint = new b.MessageImprint(d)
- }
- };
- this.getEncodedHex = function() {
- if (this.dMessageImprint == null) {
- throw "messageImprint shall be specified"
- }
- var d = [this.dVersion, this.dMessageImprint];
- if (this.dPolicy != null) {
- d.push(this.dPolicy)
- }
- if (this.dNonce != null) {
- d.push(this.dNonce)
- }
- if (this.certReq) {
- d.push(new a.DERBoolean())
- }
- var e = new a.DERSequence({
- array: d
- });
- this.hTLV = e.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (typeof c.mi == "object") {
- this.setMessageImprint(c.mi)
- }
- if (typeof c.policy == "object") {
- this.dPolicy = new a.DERObjectIdentifier(c.policy)
- }
- if (typeof c.nonce == "object") {
- this.dNonce = new a.DERInteger(c.nonce)
- }
- if (typeof c.certreq == "boolean") {
- this.certReq = c.certreq
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampReq, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.TSTInfo = function(c) {
- KJUR.asn1.tsp.TSTInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var d = KJUR.asn1.x509;
- var b = KJUR.asn1.tsp;
- this.dVersion = new a.DERInteger({
- "int": 1
- });
- this.dPolicy = null;
- this.dMessageImprint = null;
- this.dSerialNumber = null;
- this.dGenTime = null;
- this.dAccuracy = null;
- this.dOrdering = null;
- this.dNonce = null;
- this.dTsa = null;
- this.getEncodedHex = function() {
- var e = [this.dVersion];
- if (this.dPolicy == null) {
- throw "policy shall be specified."
- }
- e.push(this.dPolicy);
- if (this.dMessageImprint == null) {
- throw "messageImprint shall be specified."
- }
- e.push(this.dMessageImprint);
- if (this.dSerialNumber == null) {
- throw "serialNumber shall be specified."
- }
- e.push(this.dSerialNumber);
- if (this.dGenTime == null) {
- throw "genTime shall be specified."
- }
- e.push(this.dGenTime);
- if (this.dAccuracy != null) {
- e.push(this.dAccuracy)
- }
- if (this.dOrdering != null) {
- e.push(this.dOrdering)
- }
- if (this.dNonce != null) {
- e.push(this.dNonce)
- }
- if (this.dTsa != null) {
- e.push(this.dTsa)
- }
- var f = new a.DERSequence({
- array: e
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (typeof c.policy == "string") {
- if (!c.policy.match(/^[0-9.]+$/)) {
- throw "policy shall be oid like 0.1.4.134"
- }
- this.dPolicy = new a.DERObjectIdentifier({
- oid: c.policy
- })
- }
- if (typeof c.messageImprint != "undefined") {
- this.dMessageImprint = new b.MessageImprint(c.messageImprint)
- }
- if (typeof c.serialNumber != "undefined") {
- this.dSerialNumber = new a.DERInteger(c.serialNumber)
- }
- if (typeof c.genTime != "undefined") {
- this.dGenTime = new a.DERGeneralizedTime(c.genTime)
- }
- if (typeof c.accuracy != "undefind") {
- this.dAccuracy = new b.Accuracy(c.accuracy)
- }
- if (typeof c.ordering != "undefined" && c.ordering == true) {
- this.dOrdering = new a.DERBoolean()
- }
- if (typeof c.nonce != "undefined") {
- this.dNonce = new a.DERInteger(c.nonce)
- }
- if (typeof c.tsa != "undefined") {
- this.dTsa = new d.X500Name(c.tsa)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.TSTInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.TimeStampResp = function(c) {
- KJUR.asn1.tsp.TimeStampResp.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.tsp;
- this.dStatus = null;
- this.dTST = null;
- this.getEncodedHex = function() {
- if (this.dStatus == null) {
- throw "status shall be specified"
- }
- var d = [this.dStatus];
- if (this.dTST != null) {
- d.push(this.dTST)
- }
- var e = new a.DERSequence({
- array: d
- });
- this.hTLV = e.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (typeof c.status == "object") {
- this.dStatus = new b.PKIStatusInfo(c.status)
- }
- if (typeof c.tst != "undefined" && c.tst instanceof KJUR.asn1.ASN1Object) {
- this.dTST = c.tst.getContentInfo()
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampResp, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.PKIStatusInfo = function(c) {
- KJUR.asn1.tsp.PKIStatusInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.tsp;
- this.dStatus = null;
- this.dStatusString = null;
- this.dFailureInfo = null;
- this.getEncodedHex = function() {
- if (this.dStatus == null) {
- throw "status shall be specified"
- }
- var d = [this.dStatus];
- if (this.dStatusString != null) {
- d.push(this.dStatusString)
- }
- if (this.dFailureInfo != null) {
- d.push(this.dFailureInfo)
- }
- var e = new a.DERSequence({
- array: d
- });
- this.hTLV = e.getEncodedHex();
- return this.hTLV
- };
- if (typeof c != "undefined") {
- if (typeof c.status == "object") {
- this.dStatus = new b.PKIStatus(c.status)
- }
- if (typeof c.statstr == "object") {
- this.dStatusString = new b.PKIFreeText({
- array: c.statstr
- })
- }
- if (typeof c.failinfo == "object") {
- this.dFailureInfo = new b.PKIFailureInfo(c.failinfo)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatusInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.PKIStatus = function(e) {
- KJUR.asn1.tsp.PKIStatus.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.tsp;
- var d = null;
- this.getEncodedHex = function() {
- this.hTLV = this.dStatus.getEncodedHex();
- return this.hTLV
- };
- if (typeof e != "undefined") {
- if (typeof e.name != "undefined") {
- var c = b.PKIStatus.valueList;
- if (typeof c[e.name] == "undefined") {
- throw "name undefined: " + e.name
- }
- this.dStatus = new a.DERInteger({
- "int": c[e.name]
- })
- } else {
- this.dStatus = new a.DERInteger(e)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatus, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.PKIStatus.valueList = {
- granted: 0,
- grantedWithMods: 1,
- rejection: 2,
- waiting: 3,
- revocationWarning: 4,
- revocationNotification: 5
- };
- KJUR.asn1.tsp.PKIFreeText = function(b) {
- KJUR.asn1.tsp.PKIFreeText.superclass.constructor.call(this);
- var a = KJUR.asn1;
- this.textList = [];
- this.getEncodedHex = function() {
- var c = [];
- for (var e = 0; e < this.textList.length; e++) {
- c.push(new a.DERUTF8String({
- str: this.textList[e]
- }))
- }
- var d = new a.DERSequence({
- array: c
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (typeof b != "undefined") {
- if (typeof b.array == "object") {
- this.textList = b.array
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.PKIFreeText, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.PKIFailureInfo = function(d) {
- KJUR.asn1.tsp.PKIFailureInfo.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.tsp;
- this.value = null;
- this.getEncodedHex = function() {
- if (this.value == null) {
- throw "value shall be specified"
- }
- var e = new Number(this.value).toString(2);
- var f = new a.DERBitString();
- f.setByBinaryString(e);
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- };
- if (typeof d != "undefined") {
- if (typeof d.name == "string") {
- var c = b.PKIFailureInfo.valueList;
- if (typeof c[d.name] == "undefined") {
- throw "name undefined: " + d.name
- }
- this.value = c[d.name]
- } else {
- if (typeof d["int"] == "number") {
- this.value = d["int"]
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.PKIFailureInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.tsp.PKIFailureInfo.valueList = {
- badAlg: 0,
- badRequest: 2,
- badDataFormat: 5,
- timeNotAvailable: 14,
- unacceptedPolicy: 15,
- unacceptedExtension: 16,
- addInfoNotAvailable: 17,
- systemFailure: 25
- };
- KJUR.asn1.tsp.AbstractTSAAdapter = function(a) {
- this.getTSTHex = function(c, b) {
- throw "not implemented yet"
- }
- };
- KJUR.asn1.tsp.SimpleTSAAdapter = function(a) {
- KJUR.asn1.tsp.SimpleTSAAdapter.superclass.constructor.call(this);
- this.params = null;
- this.serial = 0;
- this.getTSTHex = function(c, b) {
- var e = KJUR.crypto.Util.hashHex(c, b);
- this.params.tstInfo.messageImprint = {
- hashAlg: b,
- hashValue: e
- };
- this.params.tstInfo.serialNumber = {
- "int": this.serial++
- };
- var d = Math.floor(Math.random() * 1000000000);
- this.params.tstInfo.nonce = {
- "int": d
- };
- var f = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params);
- return f.getContentInfoEncodedHex()
- };
- if (typeof a != "undefined") {
- this.params = a
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.SimpleTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);
- KJUR.asn1.tsp.FixedTSAAdapter = function(a) {
- KJUR.asn1.tsp.FixedTSAAdapter.superclass.constructor.call(this);
- this.params = null;
- this.getTSTHex = function(c, b) {
- var d = KJUR.crypto.Util.hashHex(c, b);
- this.params.tstInfo.messageImprint = {
- hashAlg: b,
- hashValue: d
- };
- var e = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params);
- return e.getContentInfoEncodedHex()
- };
- if (typeof a != "undefined") {
- this.params = a
- }
- };
- YAHOO.lang.extend(KJUR.asn1.tsp.FixedTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);
- KJUR.asn1.tsp.TSPUtil = new
- function() {};
- KJUR.asn1.tsp.TSPUtil.newTimeStampToken = function(b) {
- var j = KJUR.asn1.cms;
- var a = KJUR.asn1.tsp;
- var g = new j.SignedData();
- var e = new a.TSTInfo(b.tstInfo);
- var f = e.getEncodedHex();
- g.dEncapContentInfo.setContentValue({
- hex: f
- });
- g.dEncapContentInfo.setContentType("tstinfo");
- if (typeof b.certs == "object") {
- for (var c = 0; c < b.certs.length; c++) {
- g.addCertificatesByPEM(b.certs[c])
- }
- }
- var d = g.signerInfoList[0];
- d.setSignerIdentifier(b.signerCert);
- d.setForContentAndHash({
- sdObj: g,
- eciObj: g.dEncapContentInfo,
- hashAlg: b.hashAlg
- });
- var h = new j.SigningCertificate({
- array: [b.signerCert]
- });
- d.dSignedAttrs.add(h);
- d.sign(b.signerPrvKey, b.sigAlg);
- return g
- };
- KJUR.asn1.tsp.TSPUtil.parseTimeStampReq = function(d) {
- var f = {};
- f.certreq = false;
- var h = ASN1HEX.getPosArrayOfChildren_AtObj(d, 0);
- if (h.length < 2) {
- throw "TimeStampReq must have at least 2 items"
- }
- var c = ASN1HEX.getHexOfTLV_AtObj(d, h[1]);
- f.mi = KJUR.asn1.tsp.TSPUtil.parseMessageImprint(c);
- for (var e = 2; e < h.length; e++) {
- var b = h[e];
- var a = d.substr(b, 2);
- if (a == "06") {
- var g = ASN1HEX.getHexOfV_AtObj(d, b);
- f.policy = ASN1HEX.hextooidstr(g)
- }
- if (a == "02") {
- f.nonce = ASN1HEX.getHexOfV_AtObj(d, b)
- }
- if (a == "01") {
- f.certreq = true
- }
- }
- return f
- };
- KJUR.asn1.tsp.TSPUtil.parseMessageImprint = function(c) {
- var h = {};
- if (c.substr(0, 2) != "30") {
- throw "head of messageImprint hex shall be '30'"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0);
- var i = ASN1HEX.getDecendantIndexByNthList(c, 0, [0, 0]);
- var d = ASN1HEX.getHexOfV_AtObj(c, i);
- var e = ASN1HEX.hextooidstr(d);
- var g = KJUR.asn1.x509.OID.oid2name(e);
- if (g == "") {
- throw "hashAlg name undefined: " + e
- }
- var b = g;
- var f = ASN1HEX.getDecendantIndexByNthList(c, 0, [1]);
- h.hashAlg = b;
- h.hashValue = ASN1HEX.getHexOfV_AtObj(c, f);
- return h
- };
- /*! asn1cades-1.0.1.js (c) 2014-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- if (typeof KJUR.asn1.cades == "undefined" || !KJUR.asn1.cades) {
- KJUR.asn1.cades = {}
- }
- KJUR.asn1.cades.SignaturePolicyIdentifier = function(e) {
- KJUR.asn1.cades.SignaturePolicyIdentifier.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.16.2.15";
- var b = KJUR.asn1;
- var d = KJUR.asn1.cades;
- if (typeof e != "undefined") {
- if (typeof e.oid == "string" && typeof e.hash == "object") {
- var f = new b.DERObjectIdentifier({
- oid: e.oid
- });
- var a = new d.OtherHashAlgAndValue(e.hash);
- var c = new b.DERSequence({
- array: [f, a]
- });
- this.valueList = [c]
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.SignaturePolicyIdentifier, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cades.OtherHashAlgAndValue = function(b) {
- KJUR.asn1.cades.OtherHashAlgAndValue.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var c = KJUR.asn1.x509;
- this.dAlg = null;
- this.dHash = null;
- this.getEncodedHex = function() {
- var d = new a.DERSequence({
- array: [this.dAlg, this.dHash]
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (typeof b != "undefined") {
- if (typeof b.alg == "string" && typeof b.hash == "string") {
- this.dAlg = new c.AlgorithmIdentifier({
- name: b.alg
- });
- this.dHash = new a.DEROctetString({
- hex: b.hash
- })
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.OtherHashAlgAndValue, KJUR.asn1.ASN1Object);
- KJUR.asn1.cades.SignatureTimeStamp = function(c) {
- KJUR.asn1.cades.SignatureTimeStamp.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.16.2.14";
- this.tstHex = null;
- var a = KJUR.asn1;
- if (typeof c != "undefined") {
- if (typeof c.res != "undefined") {
- if (typeof c.res == "string" && c.res.match(/^[0-9A-Fa-f]+$/)) {} else {
- if (c.res instanceof KJUR.asn1.ASN1Object) {} else {
- throw "res param shall be ASN1Object or hex string"
- }
- }
- }
- if (typeof c.tst != "undefined") {
- if (typeof c.tst == "string" && c.tst.match(/^[0-9A-Fa-f]+$/)) {
- var b = new a.ASN1Object();
- this.tstHex = c.tst;
- b.hTLV = this.tstHex;
- b.getEncodedHex();
- this.valueList = [b]
- } else {
- if (c.tst instanceof KJUR.asn1.ASN1Object) {} else {
- throw "tst param shall be ASN1Object or hex string"
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.SignatureTimeStamp, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cades.CompleteCertificateRefs = function(c) {
- KJUR.asn1.cades.CompleteCertificateRefs.superclass.constructor.call(this);
- this.attrTypeOid = "1.2.840.113549.1.9.16.2.21";
- var a = KJUR.asn1;
- var b = KJUR.asn1.cades;
- this.setByArray = function(d) {
- this.valueList = [];
- for (var e = 0; e < d.length; e++) {
- var f = new b.OtherCertID(d[e]);
- this.valueList.push(f)
- }
- };
- if (typeof c != "undefined") {
- if (typeof c == "object" && typeof c.length == "number") {
- this.setByArray(c)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.CompleteCertificateRefs, KJUR.asn1.cms.Attribute);
- KJUR.asn1.cades.OtherCertID = function(d) {
- KJUR.asn1.cades.OtherCertID.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var c = KJUR.asn1.cms;
- var b = KJUR.asn1.cades;
- this.hasIssuerSerial = true;
- this.dOtherCertHash = null;
- this.dIssuerSerial = null;
- this.setByCertPEM = function(e) {
- this.dOtherCertHash = new b.OtherHash(e);
- if (this.hasIssuerSerial) {
- this.dIssuerSerial = new c.IssuerAndSerialNumber(e)
- }
- };
- this.getEncodedHex = function() {
- if (this.hTLV != null) {
- return this.hTLV
- }
- if (this.dOtherCertHash == null) {
- throw "otherCertHash not set"
- }
- var e = [this.dOtherCertHash];
- if (this.dIssuerSerial != null) {
- e.push(this.dIssuerSerial)
- }
- var f = new a.DERSequence({
- array: e
- });
- this.hTLV = f.getEncodedHex();
- return this.hTLV
- };
- if (typeof d != "undefined") {
- if (typeof d == "string" && d.indexOf("-----BEGIN ") != -1) {
- this.setByCertPEM(d)
- }
- if (typeof d == "object") {
- if (d.hasis === false) {
- this.hasIssuerSerial = false
- }
- if (typeof d.cert == "string") {
- this.setByCertPEM(d.cert)
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.OtherCertID, KJUR.asn1.ASN1Object);
- KJUR.asn1.cades.OtherHash = function(c) {
- KJUR.asn1.cades.OtherHash.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var b = KJUR.asn1.cades;
- this.alg = "sha256";
- this.dOtherHash = null;
- this.setByCertPEM = function(d) {
- if (d.indexOf("-----BEGIN ") == -1) {
- throw "certPEM not to seem PEM format"
- }
- var e = ASN1HEX.pemToHex(d);
- var f = KJUR.crypto.Util.hashHex(e, this.alg);
- this.dOtherHash = new b.OtherHashAlgAndValue({
- alg: this.alg,
- hash: f
- })
- };
- this.getEncodedHex = function() {
- if (this.dOtherHash == null) {
- throw "OtherHash not set"
- }
- return this.dOtherHash.getEncodedHex()
- };
- if (typeof c != "undefined") {
- if (typeof c == "string") {
- if (c.indexOf("-----BEGIN ") != -1) {
- this.setByCertPEM(c)
- } else {
- if (c.match(/^[0-9A-Fa-f]+$/)) {
- this.dOtherHash = new a.DEROctetString({
- hex: c
- })
- } else {
- throw "unsupported string value for params"
- }
- }
- } else {
- if (typeof c == "object") {
- if (typeof c.cert == "string") {
- if (typeof c.alg == "string") {
- this.alg = c.alg
- }
- this.setByCertPEM(c.cert)
- } else {
- this.dOtherHash = new b.OtherHashAlgAndValue(c)
- }
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.cades.OtherHash, KJUR.asn1.ASN1Object);
- KJUR.asn1.cades.CAdESUtil = new
- function() {};
- KJUR.asn1.cades.CAdESUtil.addSigTS = function(c, b, a) {};
- KJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function(d) {
- var q = KJUR.asn1;
- var p = KJUR.asn1.cms;
- var c = KJUR.asn1.cades.CAdESUtil;
- var a = {};
- if (ASN1HEX.getDecendantHexTLVByNthList(d, 0, [0]) != "06092a864886f70d010702") {
- throw "hex is not CMS SignedData"
- }
- var s = ASN1HEX.getDecendantIndexByNthList(d, 0, [1, 0]);
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, s);
- if (b.length < 4) {
- throw "num of SignedData elem shall be 4 at least"
- }
- var f = b.shift();
- a.version = ASN1HEX.getHexOfTLV_AtObj(d, f);
- var l = b.shift();
- a.algs = ASN1HEX.getHexOfTLV_AtObj(d, l);
- var m = b.shift();
- a.encapcontent = ASN1HEX.getHexOfTLV_AtObj(d, m);
- a.certs = null;
- a.revs = null;
- a.si = [];
- var n = b.shift();
- if (d.substr(n, 2) == "a0") {
- a.certs = ASN1HEX.getHexOfTLV_AtObj(d, n);
- n = b.shift()
- }
- if (d.substr(n, 2) == "a1") {
- a.revs = ASN1HEX.getHexOfTLV_AtObj(d, n);
- n = b.shift()
- }
- var k = n;
- if (d.substr(k, 2) != "31") {
- throw "Can't find signerInfos"
- }
- var j = ASN1HEX.getPosArrayOfChildren_AtObj(d, k);
- for (var h = 0; h < j.length; h++) {
- var o = j[h];
- var e = c.parseSignerInfoForAddingUnsigned(d, o, h);
- a.si[h] = e
- }
- var g = null;
- a.obj = new p.SignedData();
- g = new q.ASN1Object();
- g.hTLV = a.version;
- a.obj.dCMSVersion = g;
- g = new q.ASN1Object();
- g.hTLV = a.algs;
- a.obj.dDigestAlgs = g;
- g = new q.ASN1Object();
- g.hTLV = a.encapcontent;
- a.obj.dEncapContentInfo = g;
- g = new q.ASN1Object();
- g.hTLV = a.certs;
- a.obj.dCerts = g;
- a.obj.signerInfoList = [];
- for (var h = 0; h < a.si.length; h++) {
- a.obj.signerInfoList.push(a.si[h].obj)
- }
- return a
- };
- KJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function(d, k, a) {
- var m = KJUR.asn1;
- var l = KJUR.asn1.cms;
- var b = {};
- var e = ASN1HEX.getPosArrayOfChildren_AtObj(d, k);
- if (e.length != 6) {
- throw "not supported items for SignerInfo (!=6)"
- }
- var f = e.shift();
- b.version = ASN1HEX.getHexOfTLV_AtObj(d, f);
- var n = e.shift();
- b.si = ASN1HEX.getHexOfTLV_AtObj(d, n);
- var h = e.shift();
- b.digalg = ASN1HEX.getHexOfTLV_AtObj(d, h);
- var c = e.shift();
- b.sattrs = ASN1HEX.getHexOfTLV_AtObj(d, c);
- var i = e.shift();
- b.sigalg = ASN1HEX.getHexOfTLV_AtObj(d, i);
- var j = e.shift();
- b.sig = ASN1HEX.getHexOfTLV_AtObj(d, j);
- b.sigval = ASN1HEX.getHexOfV_AtObj(d, j);
- var g = null;
- b.obj = new l.SignerInfo();
- g = new m.ASN1Object();
- g.hTLV = b.version;
- b.obj.dCMSVersion = g;
- g = new m.ASN1Object();
- g.hTLV = b.si;
- b.obj.dSignerIdentifier = g;
- g = new m.ASN1Object();
- g.hTLV = b.digalg;
- b.obj.dDigestAlgorithm = g;
- g = new m.ASN1Object();
- g.hTLV = b.sattrs;
- b.obj.dSignedAttrs = g;
- g = new m.ASN1Object();
- g.hTLV = b.sigalg;
- b.obj.dSigAlg = g;
- g = new m.ASN1Object();
- g.hTLV = b.sig;
- b.obj.dSig = g;
- b.obj.dUnsignedAttrs = new l.AttributeList();
- return b
- };
- /*! asn1csr-1.0.3.js (c) 2015-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR.asn1.csr == "undefined" || !KJUR.asn1.csr) {
- KJUR.asn1.csr = {}
- }
- KJUR.asn1.csr.CertificationRequest = function(f) {
- KJUR.asn1.csr.CertificationRequest.superclass.constructor.call(this);
- var b = null;
- var d = null;
- var e = null;
- var c = null;
- var a = null;
- this.sign = function(i, h) {
- if (this.prvKey == null) {
- this.prvKey = h
- }
- this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier({
- name: i
- });
- sig = new KJUR.crypto.Signature({
- alg: i
- });
- sig.initSign(this.prvKey);
- sig.updateHex(this.asn1CSRInfo.getEncodedHex());
- this.hexSig = sig.sign();
- this.asn1Sig = new KJUR.asn1.DERBitString({
- hex: "00" + this.hexSig
- });
- var g = new KJUR.asn1.DERSequence({
- array: [this.asn1CSRInfo, this.asn1SignatureAlg, this.asn1Sig]
- });
- this.hTLV = g.getEncodedHex();
- this.isModified = false
- };
- this.getPEMString = function() {
- var g = KJUR.asn1.ASN1Util.getPEMStringFromHex(this.getEncodedHex(), "CERTIFICATE REQUEST");
- return g
- };
- this.getEncodedHex = function() {
- if (this.isModified == false && this.hTLV != null) {
- return this.hTLV
- }
- throw "not signed yet"
- };
- if (typeof f != "undefined") {
- if (typeof f.csrinfo != "undefined") {
- this.asn1CSRInfo = f.csrinfo
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequest, KJUR.asn1.ASN1Object);
- KJUR.asn1.csr.CertificationRequestInfo = function(a) {
- KJUR.asn1.csr.CertificationRequestInfo.superclass.constructor.call(this);
- this._initialize = function() {
- this.asn1Array = new Array();
- this.asn1Version = new KJUR.asn1.DERInteger({
- "int": 0
- });
- this.asn1Subject = null;
- this.asn1SubjPKey = null;
- this.extensionsArray = new Array()
- };
- this.setSubjectByParam = function(b) {
- this.asn1Subject = new KJUR.asn1.x509.X500Name(b)
- };
- this.setSubjectPublicKeyByGetKey = function(c) {
- var b = KEYUTIL.getKey(c);
- this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b)
- };
- this.appendExtensionByName = function(c, b) {
- KJUR.asn1.x509.Extension.appendByNameToArray(c, b, this.extensionsArray)
- };
- this.getEncodedHex = function() {
- this.asn1Array = new Array();
- this.asn1Array.push(this.asn1Version);
- this.asn1Array.push(this.asn1Subject);
- this.asn1Array.push(this.asn1SubjPKey);
- if (this.extensionsArray.length > 0) {
- var e = new KJUR.asn1.DERSequence({
- array: this.extensionsArray
- });
- var d = new KJUR.asn1.DERSet({
- array: [e]
- });
- var c = new KJUR.asn1.DERSequence({
- array: [new KJUR.asn1.DERObjectIdentifier({
- oid: "1.2.840.113549.1.9.14"
- }), d]
- });
- var b = new KJUR.asn1.DERTaggedObject({
- explicit: true,
- tag: "a0",
- obj: c
- });
- this.asn1Array.push(b)
- } else {
- var b = new KJUR.asn1.DERTaggedObject({
- explicit: false,
- tag: "a0",
- obj: new KJUR.asn1.DERNull()
- });
- this.asn1Array.push(b)
- }
- var f = new KJUR.asn1.DERSequence({
- array: this.asn1Array
- });
- this.hTLV = f.getEncodedHex();
- this.isModified = false;
- return this.hTLV
- };
- this._initialize()
- };
- YAHOO.lang.extend(KJUR.asn1.csr.CertificationRequestInfo, KJUR.asn1.ASN1Object);
- KJUR.asn1.csr.CSRUtil = new
- function() {};
- KJUR.asn1.csr.CSRUtil.newCSRPEM = function(g) {
- var d = KJUR.asn1.csr;
- if (g.subject === undefined) {
- throw "parameter subject undefined"
- }
- if (g.sbjpubkey === undefined) {
- throw "parameter sbjpubkey undefined"
- }
- if (g.sigalg === undefined) {
- throw "parameter sigalg undefined"
- }
- if (g.sbjprvkey === undefined) {
- throw "parameter sbjpubkey undefined"
- }
- var b = new d.CertificationRequestInfo();
- b.setSubjectByParam(g.subject);
- b.setSubjectPublicKeyByGetKey(g.sbjpubkey);
- if (g.ext !== undefined && g.ext.length !== undefined) {
- for (var c = 0; c < g.ext.length; c++) {
- for (key in g.ext[c]) {
- b.appendExtensionByName(key, g.ext[c][key])
- }
- }
- }
- var e = new d.CertificationRequest({
- csrinfo: b
- });
- var a = KEYUTIL.getKey(g.sbjprvkey);
- e.sign(g.sigalg, a);
- var f = e.getPEMString();
- return f
- };
- KJUR.asn1.csr.CSRUtil.getInfo = function(b) {
- var a = {};
- a.subject = {};
- a.pubkey = {};
- if (b.indexOf("-----BEGIN CERTIFICATE REQUEST") == -1) {
- throw "argument is not PEM file"
- }
- var c = ASN1HEX.pemToHex(b, "CERTIFICATE REQUEST");
- a.subject.hex = ASN1HEX.getDecendantHexTLVByNthList(c, 0, [0, 1]);
- a.subject.name = X509.hex2dn(a.subject.hex);
- a.pubkey.hex = ASN1HEX.getDecendantHexTLVByNthList(c, 0, [0, 2]);
- a.pubkey.obj = KEYUTIL.getKey(a.pubkey.hex, null, "pkcs8pub");
- return a
- };
- /*! asn1ocsp-1.0.1.js (c) 2016 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
- KJUR.asn1 = {}
- }
- if (typeof KJUR.asn1.ocsp == "undefined" || !KJUR.asn1.ocsp) {
- KJUR.asn1.ocsp = {}
- }
- KJUR.asn1.ocsp.DEFAULT_HASH = "sha1";
- KJUR.asn1.ocsp.CertID = function(c) {
- KJUR.asn1.ocsp.CertID.superclass.constructor.call(this);
- var a = KJUR.asn1;
- var e = KJUR.asn1.x509;
- this.dHashAlg = null;
- this.dIssuerNameHash = null;
- this.dIssuerKeyHash = null;
- this.dSerialNumber = null;
- this.setByValue = function(i, h, f, g) {
- if (g === undefined) {
- g = KJUR.asn1.ocsp.DEFAULT_HASH
- }
- this.dHashAlg = new e.AlgorithmIdentifier({
- name: g
- });
- this.dIssuerNameHash = new a.DEROctetString({
- hex: i
- });
- this.dIssuerKeyHash = new a.DEROctetString({
- hex: h
- });
- this.dSerialNumber = new a.DERInteger({
- hex: f
- })
- };
- this.setByCert = function(m, i, k) {
- if (k === undefined) {
- k = KJUR.asn1.ocsp.DEFAULT_HASH
- }
- var f = new X509();
- f.readCertPEM(i);
- var n = new X509();
- n.readCertPEM(m);
- var o = X509.getPublicKeyInfoPropOfCertPEM(m);
- var l = o.keyhex;
- var g = f.getSerialNumberHex();
- var h = KJUR.crypto.Util.hashHex(n.getSubjectHex(), k);
- var j = KJUR.crypto.Util.hashHex(l, k);
- this.setByValue(h, j, g, k);
- this.hoge = f.getSerialNumberHex()
- };
- this.getEncodedHex = function() {
- if (this.dHashAlg === null && this.dIssuerNameHash === null && this.dIssuerKeyHash === null && this.dSerialNumber === null) {
- throw "not yet set values"
- }
- var f = [this.dHashAlg, this.dIssuerNameHash, this.dIssuerKeyHash, this.dSerialNumber];
- var g = new a.DERSequence({
- array: f
- });
- this.hTLV = g.getEncodedHex();
- return this.hTLV
- };
- if (typeof c !== "undefined") {
- var b = c;
- if (typeof b.issuerCert !== "undefined" && typeof b.subjectCert !== "undefined") {
- var d = KJUR.asn1.ocsp.DEFAULT_HASH;
- if (typeof b.alg === "undefined") {
- d = undefined
- }
- this.setByCert(b.issuerCert, b.subjectCert, d)
- } else {
- if (typeof b.namehash !== "undefined" && typeof b.keyhash !== "undefined" && typeof b.serial !== "undefined") {
- var d = KJUR.asn1.ocsp.DEFAULT_HASH;
- if (typeof b.alg === "undefined") {
- d = undefined
- }
- this.setByValue(b.namehash, b.keyhash, b.serial, d)
- } else {
- throw "invalid constructor arguments"
- }
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.ocsp.CertID, KJUR.asn1.ASN1Object);
- KJUR.asn1.ocsp.Request = function(b) {
- KJUR.asn1.ocsp.Request.superclass.constructor.call(this);
- this.dReqCert = null;
- this.dExt = null;
- this.getEncodedHex = function() {
- var c = [];
- if (this.dReqCert === null) {
- throw "reqCert not set"
- }
- c.push(this.dReqCert);
- var d = new KJUR.asn1.DERSequence({
- array: c
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (typeof b !== "undefined") {
- var a = new KJUR.asn1.ocsp.CertID(b);
- this.dReqCert = a
- }
- };
- YAHOO.lang.extend(KJUR.asn1.ocsp.Request, KJUR.asn1.ASN1Object);
- KJUR.asn1.ocsp.TBSRequest = function(a) {
- KJUR.asn1.ocsp.TBSRequest.superclass.constructor.call(this);
- this.version = 0;
- this.dRequestorName = null;
- this.dRequestList = [];
- this.dRequestExt = null;
- this.setRequestListByParam = function(d) {
- var b = [];
- for (var c = 0; c < d.length; c++) {
- var e = new KJUR.asn1.ocsp.Request(d[0]);
- b.push(e)
- }
- this.dRequestList = b
- };
- this.getEncodedHex = function() {
- var b = [];
- if (this.version !== 0) {
- throw "not supported version: " + this.version
- }
- if (this.dRequestorName !== null) {
- throw "requestorName not supported"
- }
- var d = new KJUR.asn1.DERSequence({
- array: this.dRequestList
- });
- b.push(d);
- if (this.dRequestExt !== null) {
- throw "requestExtensions not supported"
- }
- var c = new KJUR.asn1.DERSequence({
- array: b
- });
- this.hTLV = c.getEncodedHex();
- return this.hTLV
- };
- if (typeof a !== "undefined") {
- if (typeof a.reqList !== "undefined") {
- this.setRequestListByParam(a.reqList)
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.ocsp.TBSRequest, KJUR.asn1.ASN1Object);
- KJUR.asn1.ocsp.OCSPRequest = function(b) {
- KJUR.asn1.ocsp.OCSPRequest.superclass.constructor.call(this);
- this.dTbsRequest = null;
- this.dOptionalSignature = null;
- this.getEncodedHex = function() {
- var c = [];
- if (this.dTbsRequest !== null) {
- c.push(this.dTbsRequest)
- } else {
- throw "tbsRequest not set"
- }
- if (this.dOptionalSignature !== null) {
- throw "optionalSignature not supported"
- }
- var d = new KJUR.asn1.DERSequence({
- array: c
- });
- this.hTLV = d.getEncodedHex();
- return this.hTLV
- };
- if (typeof b !== "undefined") {
- if (typeof b.reqList !== "undefined") {
- var a = new KJUR.asn1.ocsp.TBSRequest(b);
- this.dTbsRequest = a
- }
- }
- };
- YAHOO.lang.extend(KJUR.asn1.ocsp.OCSPRequest, KJUR.asn1.ASN1Object);
- KJUR.asn1.ocsp.OCSPUtil = {};
- KJUR.asn1.ocsp.OCSPUtil.getRequestHex = function(a, b, e) {
- if (e === undefined) {
- e = KJUR.asn1.ocsp.DEFAULT_HASH
- }
- var d = {
- alg: e,
- issuerCert: a,
- subjectCert: b
- };
- var c = new KJUR.asn1.ocsp.OCSPRequest({
- reqList: [d]
- });
- return c.getEncodedHex()
- };
- KJUR.asn1.ocsp.OCSPUtil.getOCSPResponseInfo = function(f) {
- var a = {};
- try {
- var b = ASN1HEX.getVbyList(f, 0, [0], "0a");
- a.responseStatus = parseInt(b, 16)
- } catch(d) {}
- if (a.responseStatus !== 0) {
- return a
- }
- try {
- var e = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 1]);
- if (f.substr(e, 2) === "80") {
- a.certStatus = "good"
- } else {
- if (f.substr(e, 2) === "a1") {
- a.certStatus = "revoked";
- a.revocationTime = hextoutf8(ASN1HEX.getDecendantHexVByNthList(f, e, [0]))
- } else {
- if (f.substr(e, 2) === "82") {
- a.certStatus = "unknown"
- }
- }
- }
- } catch(d) {}
- try {
- var c = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 2]);
- a.thisUpdate = hextoutf8(ASN1HEX.getHexOfV_AtObj(f, c))
- } catch(d) {}
- try {
- var g = ASN1HEX.getDecendantIndexByNthList(f, 0, [1, 0, 1, 0, 0, 2, 0, 3]);
- if (f.substr(g, 2) === "a0") {
- a.nextUpdate = hextoutf8(ASN1HEX.getDecendantHexVByNthList(f, g, [0]))
- }
- } catch(d) {}
- return a
- };
- /*! base64x-1.1.8 (c) 2012-2016 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- var KJUR;
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.lang == "undefined" || !KJUR.lang) {
- KJUR.lang = {}
- }
- KJUR.lang.String = function() {};
- function Base64x() {}
- function stoBA(d) {
- var b = new Array();
- for (var c = 0; c < d.length; c++) {
- b[c] = d.charCodeAt(c)
- }
- return b
- }
- function BAtos(b) {
- var d = "";
- for (var c = 0; c < b.length; c++) {
- d = d + String.fromCharCode(b[c])
- }
- return d
- }
- function BAtohex(b) {
- var e = "";
- for (var d = 0; d < b.length; d++) {
- var c = b[d].toString(16);
- if (c.length == 1) {
- c = "0" + c
- }
- e = e + c
- }
- return e
- }
- function stohex(a) {
- return BAtohex(stoBA(a))
- }
- function stob64(a) {
- return hex2b64(stohex(a))
- }
- function stob64u(a) {
- return b64tob64u(hex2b64(stohex(a)))
- }
- function b64utos(a) {
- return BAtos(b64toBA(b64utob64(a)))
- }
- function b64tob64u(a) {
- a = a.replace(/\=/g, "");
- a = a.replace(/\+/g, "-");
- a = a.replace(/\//g, "_");
- return a
- }
- function b64utob64(a) {
- if (a.length % 4 == 2) {
- a = a + "=="
- } else {
- if (a.length % 4 == 3) {
- a = a + "="
- }
- }
- a = a.replace(/-/g, "+");
- a = a.replace(/_/g, "/");
- return a
- }
- function hextob64u(a) {
- if (a.length % 2 == 1) {
- a = "0" + a
- }
- return b64tob64u(hex2b64(a))
- }
- function b64utohex(a) {
- return b64tohex(b64utob64(a))
- }
- var utf8tob64u, b64utoutf8;
- if (typeof Buffer === "function") {
- utf8tob64u = function(a) {
- return b64tob64u(new Buffer(a, "utf8").toString("base64"))
- };
- b64utoutf8 = function(a) {
- return new Buffer(b64utob64(a), "base64").toString("utf8")
- }
- } else {
- utf8tob64u = function(a) {
- return hextob64u(uricmptohex(encodeURIComponentAll(a)))
- };
- b64utoutf8 = function(a) {
- return decodeURIComponent(hextouricmp(b64utohex(a)))
- }
- }
- function utf8tob64(a) {
- return hex2b64(uricmptohex(encodeURIComponentAll(a)))
- }
- function b64toutf8(a) {
- return decodeURIComponent(hextouricmp(b64tohex(a)))
- }
- function utf8tohex(a) {
- return uricmptohex(encodeURIComponentAll(a))
- }
- function hextoutf8(a) {
- return decodeURIComponent(hextouricmp(a))
- }
- function hextorstr(c) {
- var b = "";
- for (var a = 0; a < c.length - 1; a += 2) {
- b += String.fromCharCode(parseInt(c.substr(a, 2), 16))
- }
- return b
- }
- function rstrtohex(c) {
- var a = "";
- for (var b = 0; b < c.length; b++) {
- a += ("0" + c.charCodeAt(b).toString(16)).slice( - 2)
- }
- return a
- }
- function hextob64(a) {
- return hex2b64(a)
- }
- function hextob64nl(b) {
- var a = hextob64(b);
- var c = a.replace(/(.{64})/g, "$1\r\n");
- c = c.replace(/\r\n$/, "");
- return c
- }
- function b64nltohex(b) {
- var a = b.replace(/[^0-9A-Za-z\/+=]*/g, "");
- var c = b64tohex(a);
- return c
- }
- function hextoArrayBuffer(d) {
- if (d.length % 2 != 0) {
- throw "input is not even length"
- }
- if (d.match(/^[0-9A-Fa-f]+$/) == null) {
- throw "input is not hexadecimal"
- }
- var b = new ArrayBuffer(d.length / 2);
- var a = new DataView(b);
- for (var c = 0; c < d.length / 2; c++) {
- a.setUint8(c, parseInt(d.substr(c * 2, 2), 16))
- }
- return b
- }
- function ArrayBuffertohex(b) {
- var d = "";
- var a = new DataView(b);
- for (var c = 0; c < b.byteLength; c++) {
- d += ("00" + a.getUint8(c).toString(16)).slice( - 2)
- }
- return d
- }
- function uricmptohex(a) {
- return a.replace(/%/g, "")
- }
- function hextouricmp(a) {
- return a.replace(/(..)/g, "%$1")
- }
- function encodeURIComponentAll(a) {
- var d = encodeURIComponent(a);
- var b = "";
- for (var c = 0; c < d.length; c++) {
- if (d[c] == "%") {
- b = b + d.substr(c, 3);
- c = c + 2
- } else {
- b = b + "%" + stohex(d[c])
- }
- }
- return b
- }
- function newline_toUnix(a) {
- a = a.replace(/\r\n/mg, "\n");
- return a
- }
- function newline_toDos(a) {
- a = a.replace(/\r\n/mg, "\n");
- a = a.replace(/\n/mg, "\r\n");
- return a
- }
- KJUR.lang.String.isInteger = function(a) {
- if (a.match(/^[0-9]+$/)) {
- return true
- } else {
- if (a.match(/^-[0-9]+$/)) {
- return true
- } else {
- return false
- }
- }
- };
- KJUR.lang.String.isHex = function(a) {
- if (a.length % 2 == 0 && (a.match(/^[0-9a-f]+$/) || a.match(/^[0-9A-F]+$/))) {
- return true
- } else {
- return false
- }
- };
- KJUR.lang.String.isBase64 = function(a) {
- a = a.replace(/\s+/g, "");
- if (a.match(/^[0-9A-Za-z+\/]+={0,3}$/) && a.length % 4 == 0) {
- return true
- } else {
- return false
- }
- };
- KJUR.lang.String.isBase64URL = function(a) {
- if (a.match(/[+/ = ] / )) {
- return false
- }
- a = b64utob64(a);
- return KJUR.lang.String.isBase64(a)
- };
- KJUR.lang.String.isIntegerArray = function(a) {
- a = a.replace(/\s+/g, "");
- if (a.match(/^\[[0-9,]+\]$/)) {
- return true
- } else {
- return false
- }
- };
- function intarystrtohex(b) {
- b = b.replace(/^\s*\[\s*/, "");
- b = b.replace(/\s*\]\s*$/, "");
- b = b.replace(/\s*/g, "");
- try {
- var c = b.split(/,/).map(function(g, e, h) {
- var f = parseInt(g);
- if (f < 0 || 255 < f) {
- throw "integer not in range 0-255"
- }
- var d = ("00" + f.toString(16)).slice( - 2);
- return d
- }).join("");
- return c
- } catch(a) {
- throw "malformed integer array string: " + a
- }
- }
- var strdiffidx = function(c, a) {
- var d = c.length;
- if (c.length > a.length) {
- d = a.length
- }
- for (var b = 0; b < d; b++) {
- if (c.charCodeAt(b) != a.charCodeAt(b)) {
- return b
- }
- }
- if (c.length != a.length) {
- return d
- }
- return - 1
- };
- /*! crypto-1.1.12.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
- KJUR.crypto = {}
- }
- KJUR.crypto.Util = new
- function() {
- this.DIGESTINFOHEAD = {
- sha1: "3021300906052b0e03021a05000414",
- sha224: "302d300d06096086480165030402040500041c",
- sha256: "3031300d060960864801650304020105000420",
- sha384: "3041300d060960864801650304020205000430",
- sha512: "3051300d060960864801650304020305000440",
- md2: "3020300c06082a864886f70d020205000410",
- md5: "3020300c06082a864886f70d020505000410",
- ripemd160: "3021300906052b2403020105000414",
- };
- this.DEFAULTPROVIDER = {
- md5: "cryptojs",
- sha1: "cryptojs",
- sha224: "cryptojs",
- sha256: "cryptojs",
- sha384: "cryptojs",
- sha512: "cryptojs",
- ripemd160: "cryptojs",
- hmacmd5: "cryptojs",
- hmacsha1: "cryptojs",
- hmacsha224: "cryptojs",
- hmacsha256: "cryptojs",
- hmacsha384: "cryptojs",
- hmacsha512: "cryptojs",
- hmacripemd160: "cryptojs",
- MD5withRSA: "cryptojs/jsrsa",
- SHA1withRSA: "cryptojs/jsrsa",
- SHA224withRSA: "cryptojs/jsrsa",
- SHA256withRSA: "cryptojs/jsrsa",
- SHA384withRSA: "cryptojs/jsrsa",
- SHA512withRSA: "cryptojs/jsrsa",
- RIPEMD160withRSA: "cryptojs/jsrsa",
- MD5withECDSA: "cryptojs/jsrsa",
- SHA1withECDSA: "cryptojs/jsrsa",
- SHA224withECDSA: "cryptojs/jsrsa",
- SHA256withECDSA: "cryptojs/jsrsa",
- SHA384withECDSA: "cryptojs/jsrsa",
- SHA512withECDSA: "cryptojs/jsrsa",
- RIPEMD160withECDSA: "cryptojs/jsrsa",
- SHA1withDSA: "cryptojs/jsrsa",
- SHA224withDSA: "cryptojs/jsrsa",
- SHA256withDSA: "cryptojs/jsrsa",
- MD5withRSAandMGF1: "cryptojs/jsrsa",
- SHA1withRSAandMGF1: "cryptojs/jsrsa",
- SHA224withRSAandMGF1: "cryptojs/jsrsa",
- SHA256withRSAandMGF1: "cryptojs/jsrsa",
- SHA384withRSAandMGF1: "cryptojs/jsrsa",
- SHA512withRSAandMGF1: "cryptojs/jsrsa",
- RIPEMD160withRSAandMGF1: "cryptojs/jsrsa",
- };
- this.CRYPTOJSMESSAGEDIGESTNAME = {
- md5: CryptoJS.algo.MD5,
- sha1: CryptoJS.algo.SHA1,
- sha224: CryptoJS.algo.SHA224,
- sha256: CryptoJS.algo.SHA256,
- sha384: CryptoJS.algo.SHA384,
- sha512: CryptoJS.algo.SHA512,
- ripemd160: CryptoJS.algo.RIPEMD160
- };
- this.getDigestInfoHex = function(a, b) {
- if (typeof this.DIGESTINFOHEAD[b] == "undefined") {
- throw "alg not supported in Util.DIGESTINFOHEAD: " + b
- }
- return this.DIGESTINFOHEAD[b] + a
- };
- this.getPaddedDigestInfoHex = function(h, a, j) {
- var c = this.getDigestInfoHex(h, a);
- var d = j / 4;
- if (c.length + 22 > d) {
- throw "key is too short for SigAlg: keylen=" + j + "," + a
- }
- var b = "0001";
- var k = "00" + c;
- var g = "";
- var l = d - b.length - k.length;
- for (var f = 0; f < l; f += 2) {
- g += "ff"
- }
- var e = b + g + k;
- return e
- };
- this.hashString = function(a, c) {
- var b = new KJUR.crypto.MessageDigest({
- alg: c
- });
- return b.digestString(a)
- };
- this.hashHex = function(b, c) {
- var a = new KJUR.crypto.MessageDigest({
- alg: c
- });
- return a.digestHex(b)
- };
- this.sha1 = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "sha1",
- prov: "cryptojs"
- });
- return b.digestString(a)
- };
- this.sha256 = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "sha256",
- prov: "cryptojs"
- });
- return b.digestString(a)
- };
- this.sha256Hex = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "sha256",
- prov: "cryptojs"
- });
- return b.digestHex(a)
- };
- this.sha512 = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "sha512",
- prov: "cryptojs"
- });
- return b.digestString(a)
- };
- this.sha512Hex = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "sha512",
- prov: "cryptojs"
- });
- return b.digestHex(a)
- }
- };
- KJUR.crypto.Util.md5 = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "md5",
- prov: "cryptojs"
- });
- return b.digestString(a)
- };
- KJUR.crypto.Util.ripemd160 = function(a) {
- var b = new KJUR.crypto.MessageDigest({
- alg: "ripemd160",
- prov: "cryptojs"
- });
- return b.digestString(a)
- };
- KJUR.crypto.Util.SECURERANDOMGEN = new SecureRandom();
- KJUR.crypto.Util.getRandomHexOfNbytes = function(b) {
- var a = new Array(b);
- KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a);
- return BAtohex(a)
- };
- KJUR.crypto.Util.getRandomBigIntegerOfNbytes = function(a) {
- return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a), 16)
- };
- KJUR.crypto.Util.getRandomHexOfNbits = function(d) {
- var c = d % 8;
- var a = (d - c) / 8;
- var b = new Array(a + 1);
- KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b);
- b[0] = (((255 << c) & 255) ^ 255) & b[0];
- return BAtohex(b)
- };
- KJUR.crypto.Util.getRandomBigIntegerOfNbits = function(a) {
- return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a), 16)
- };
- KJUR.crypto.Util.getRandomBigIntegerZeroToMax = function(b) {
- var a = b.bitLength();
- while (1) {
- var c = KJUR.crypto.Util.getRandomBigIntegerOfNbits(a);
- if (b.compareTo(c) != -1) {
- return c
- }
- }
- };
- KJUR.crypto.Util.getRandomBigIntegerMinToMax = function(e, b) {
- var c = e.compareTo(b);
- if (c == 1) {
- throw "biMin is greater than biMax"
- }
- if (c == 0) {
- return e
- }
- var a = b.subtract(e);
- var d = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a);
- return d.add(e)
- };
- KJUR.crypto.MessageDigest = function(c) {
- var b = null;
- var a = null;
- var d = null;
- this.setAlgAndProvider = function(g, f) {
- g = KJUR.crypto.MessageDigest.getCanonicalAlgName(g);
- if (g !== null && f === undefined) {
- f = KJUR.crypto.Util.DEFAULTPROVIDER[g]
- }
- if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && f == "cryptojs") {
- try {
- this.md = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create()
- } catch(e) {
- throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e
- }
- this.updateString = function(h) {
- this.md.update(h)
- };
- this.updateHex = function(h) {
- var i = CryptoJS.enc.Hex.parse(h);
- this.md.update(i)
- };
- this.digest = function() {
- var h = this.md.finalize();
- return h.toString(CryptoJS.enc.Hex)
- };
- this.digestString = function(h) {
- this.updateString(h);
- return this.digest()
- };
- this.digestHex = function(h) {
- this.updateHex(h);
- return this.digest()
- }
- }
- if (":sha256:".indexOf(g) != -1 && f == "sjcl") {
- try {
- this.md = new sjcl.hash.sha256()
- } catch(e) {
- throw "setAlgAndProvider hash alg set fail alg=" + g + "/" + e
- }
- this.updateString = function(h) {
- this.md.update(h)
- };
- this.updateHex = function(i) {
- var h = sjcl.codec.hex.toBits(i);
- this.md.update(h)
- };
- this.digest = function() {
- var h = this.md.finalize();
- return sjcl.codec.hex.fromBits(h)
- };
- this.digestString = function(h) {
- this.updateString(h);
- return this.digest()
- };
- this.digestHex = function(h) {
- this.updateHex(h);
- return this.digest()
- }
- }
- };
- this.updateString = function(e) {
- throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
- };
- this.updateHex = function(e) {
- throw "updateHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName
- };
- this.digest = function() {
- throw "digest() not supported for this alg/prov: " + this.algName + "/" + this.provName
- };
- this.digestString = function(e) {
- throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
- };
- this.digestHex = function(e) {
- throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName
- };
- if (c !== undefined) {
- if (c.alg !== undefined) {
- this.algName = c.alg;
- if (c.prov === undefined) {
- this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
- }
- this.setAlgAndProvider(this.algName, this.provName)
- }
- }
- };
- KJUR.crypto.MessageDigest.getCanonicalAlgName = function(a) {
- if (typeof a === "string") {
- a = a.toLowerCase();
- a = a.replace(/-/, "")
- }
- return a
- };
- KJUR.crypto.MessageDigest.getHashLength = function(c) {
- var b = KJUR.crypto.MessageDigest;
- var a = b.getCanonicalAlgName(c);
- if (b.HASHLENGTH[a] === undefined) {
- throw "not supported algorithm: " + c
- }
- return b.HASHLENGTH[a]
- };
- KJUR.crypto.MessageDigest.HASHLENGTH = {
- md5: 16,
- sha1: 20,
- sha224: 28,
- sha256: 32,
- sha384: 48,
- sha512: 64,
- ripemd160: 20
- };
- KJUR.crypto.Mac = function(d) {
- var f = null;
- var c = null;
- var a = null;
- var e = null;
- var b = null;
- this.setAlgAndProvider = function(k, i) {
- k = k.toLowerCase();
- if (k == null) {
- k = "hmacsha1"
- }
- k = k.toLowerCase();
- if (k.substr(0, 4) != "hmac") {
- throw "setAlgAndProvider unsupported HMAC alg: " + k
- }
- if (i === undefined) {
- i = KJUR.crypto.Util.DEFAULTPROVIDER[k]
- }
- this.algProv = k + "/" + i;
- var g = k.substr(4);
- if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(g) != -1 && i == "cryptojs") {
- try {
- var j = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g];
- this.mac = CryptoJS.algo.HMAC.create(j, this.pass)
- } catch(h) {
- throw "setAlgAndProvider hash alg set fail hashAlg=" + g + "/" + h
- }
- this.updateString = function(l) {
- this.mac.update(l)
- };
- this.updateHex = function(l) {
- var m = CryptoJS.enc.Hex.parse(l);
- this.mac.update(m)
- };
- this.doFinal = function() {
- var l = this.mac.finalize();
- return l.toString(CryptoJS.enc.Hex)
- };
- this.doFinalString = function(l) {
- this.updateString(l);
- return this.doFinal()
- };
- this.doFinalHex = function(l) {
- this.updateHex(l);
- return this.doFinal()
- }
- }
- };
- this.updateString = function(g) {
- throw "updateString(str) not supported for this alg/prov: " + this.algProv
- };
- this.updateHex = function(g) {
- throw "updateHex(hex) not supported for this alg/prov: " + this.algProv
- };
- this.doFinal = function() {
- throw "digest() not supported for this alg/prov: " + this.algProv
- };
- this.doFinalString = function(g) {
- throw "digestString(str) not supported for this alg/prov: " + this.algProv
- };
- this.doFinalHex = function(g) {
- throw "digestHex(hex) not supported for this alg/prov: " + this.algProv
- };
- this.setPassword = function(h) {
- if (typeof h == "string") {
- var g = h;
- if (h.length % 2 == 1 || !h.match(/^[0-9A-Fa-f]+$/)) {
- g = rstrtohex(h)
- }
- this.pass = CryptoJS.enc.Hex.parse(g);
- return
- }
- if (typeof h != "object") {
- throw "KJUR.crypto.Mac unsupported password type: " + h
- }
- var g = null;
- if (h.hex !== undefined) {
- if (h.hex.length % 2 != 0 || !h.hex.match(/^[0-9A-Fa-f]+$/)) {
- throw "Mac: wrong hex password: " + h.hex
- }
- g = h.hex
- }
- if (h.utf8 !== undefined) {
- g = utf8tohex(h.utf8)
- }
- if (h.rstr !== undefined) {
- g = rstrtohex(h.rstr)
- }
- if (h.b64 !== undefined) {
- g = b64tohex(h.b64)
- }
- if (h.b64u !== undefined) {
- g = b64utohex(h.b64u)
- }
- if (g == null) {
- throw "KJUR.crypto.Mac unsupported password type: " + h
- }
- this.pass = CryptoJS.enc.Hex.parse(g)
- };
- if (d !== undefined) {
- if (d.pass !== undefined) {
- this.setPassword(d.pass)
- }
- if (d.alg !== undefined) {
- this.algName = d.alg;
- if (d.prov === undefined) {
- this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
- }
- this.setAlgAndProvider(this.algName, this.provName)
- }
- }
- };
- KJUR.crypto.Signature = function(o) {
- var q = null;
- var n = null;
- var r = null;
- var c = null;
- var l = null;
- var d = null;
- var k = null;
- var h = null;
- var p = null;
- var e = null;
- var b = -1;
- var g = null;
- var j = null;
- var a = null;
- var i = null;
- var f = null;
- this._setAlgNames = function() {
- var s = this.algName.match(/^(.+)with(.+)$/);
- if (s) {
- this.mdAlgName = s[1].toLowerCase();
- this.pubkeyAlgName = s[2].toLowerCase()
- }
- };
- this._zeroPaddingOfSignature = function(x, w) {
- var v = "";
- var t = w / 4 - x.length;
- for (var u = 0; u < t; u++) {
- v = v + "0"
- }
- return v + x
- };
- this.setAlgAndProvider = function(u, t) {
- this._setAlgNames();
- if (t != "cryptojs/jsrsa") {
- throw "provider not supported: " + t
- }
- if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(this.mdAlgName) != -1) {
- try {
- this.md = new KJUR.crypto.MessageDigest({
- alg: this.mdAlgName
- })
- } catch(s) {
- throw "setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + s
- }
- this.init = function(w, x) {
- var y = null;
- try {
- if (x === undefined) {
- y = KEYUTIL.getKey(w)
- } else {
- y = KEYUTIL.getKey(w, x)
- }
- } catch(v) {
- throw "init failed:" + v
- }
- if (y.isPrivate === true) {
- this.prvKey = y;
- this.state = "SIGN"
- } else {
- if (y.isPublic === true) {
- this.pubKey = y;
- this.state = "VERIFY"
- } else {
- throw "init failed.:" + y
- }
- }
- };
- this.initSign = function(v) {
- if (typeof v.ecprvhex == "string" && typeof v.eccurvename == "string") {
- this.ecprvhex = v.ecprvhex;
- this.eccurvename = v.eccurvename
- } else {
- this.prvKey = v
- }
- this.state = "SIGN"
- };
- this.initVerifyByPublicKey = function(v) {
- if (typeof v.ecpubhex == "string" && typeof v.eccurvename == "string") {
- this.ecpubhex = v.ecpubhex;
- this.eccurvename = v.eccurvename
- } else {
- if (v instanceof KJUR.crypto.ECDSA) {
- this.pubKey = v
- } else {
- if (v instanceof RSAKey) {
- this.pubKey = v
- }
- }
- }
- this.state = "VERIFY"
- };
- this.initVerifyByCertificatePEM = function(v) {
- var w = new X509();
- w.readCertPEM(v);
- this.pubKey = w.subjectPublicKeyRSA;
- this.state = "VERIFY"
- };
- this.updateString = function(v) {
- this.md.updateString(v)
- };
- this.updateHex = function(v) {
- this.md.updateHex(v)
- };
- this.sign = function() {
- this.sHashHex = this.md.digest();
- if (typeof this.ecprvhex != "undefined" && typeof this.eccurvename != "undefined") {
- var v = new KJUR.crypto.ECDSA({
- curve: this.eccurvename
- });
- this.hSign = v.signHex(this.sHashHex, this.ecprvhex)
- } else {
- if (this.prvKey instanceof RSAKey && this.pubkeyAlgName == "rsaandmgf1") {
- this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen)
- } else {
- if (this.prvKey instanceof RSAKey && this.pubkeyAlgName == "rsa") {
- this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName)
- } else {
- if (this.prvKey instanceof KJUR.crypto.ECDSA) {
- this.hSign = this.prvKey.signWithMessageHash(this.sHashHex)
- } else {
- if (this.prvKey instanceof KJUR.crypto.DSA) {
- this.hSign = this.prvKey.signWithMessageHash(this.sHashHex)
- } else {
- throw "Signature: unsupported public key alg: " + this.pubkeyAlgName
- }
- }
- }
- }
- }
- return this.hSign
- };
- this.signString = function(v) {
- this.updateString(v);
- return this.sign()
- };
- this.signHex = function(v) {
- this.updateHex(v);
- return this.sign()
- };
- this.verify = function(v) {
- this.sHashHex = this.md.digest();
- if (typeof this.ecpubhex != "undefined" && typeof this.eccurvename != "undefined") {
- var w = new KJUR.crypto.ECDSA({
- curve: this.eccurvename
- });
- return w.verifyHex(this.sHashHex, v, this.ecpubhex)
- } else {
- if (this.pubKey instanceof RSAKey && this.pubkeyAlgName == "rsaandmgf1") {
- return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen)
- } else {
- if (this.pubKey instanceof RSAKey && this.pubkeyAlgName == "rsa") {
- return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
- } else {
- if (this.pubKey instanceof KJUR.crypto.ECDSA) {
- return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
- } else {
- if (this.pubKey instanceof KJUR.crypto.DSA) {
- return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
- } else {
- throw "Signature: unsupported public key alg: " + this.pubkeyAlgName
- }
- }
- }
- }
- }
- }
- }
- };
- this.init = function(s, t) {
- throw "init(key, pass) not supported for this alg:prov=" + this.algProvName
- };
- this.initVerifyByPublicKey = function(s) {
- throw "initVerifyByPublicKey(rsaPubKeyy) not supported for this alg:prov=" + this.algProvName
- };
- this.initVerifyByCertificatePEM = function(s) {
- throw "initVerifyByCertificatePEM(certPEM) not supported for this alg:prov=" + this.algProvName
- };
- this.initSign = function(s) {
- throw "initSign(prvKey) not supported for this alg:prov=" + this.algProvName
- };
- this.updateString = function(s) {
- throw "updateString(str) not supported for this alg:prov=" + this.algProvName
- };
- this.updateHex = function(s) {
- throw "updateHex(hex) not supported for this alg:prov=" + this.algProvName
- };
- this.sign = function() {
- throw "sign() not supported for this alg:prov=" + this.algProvName
- };
- this.signString = function(s) {
- throw "digestString(str) not supported for this alg:prov=" + this.algProvName
- };
- this.signHex = function(s) {
- throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName
- };
- this.verify = function(s) {
- throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName
- };
- this.initParams = o;
- if (o !== undefined) {
- if (o.alg !== undefined) {
- this.algName = o.alg;
- if (o.prov === undefined) {
- this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
- } else {
- this.provName = o.prov
- }
- this.algProvName = this.algName + ":" + this.provName;
- this.setAlgAndProvider(this.algName, this.provName);
- this._setAlgNames()
- }
- if (o.psssaltlen !== undefined) {
- this.pssSaltLen = o.psssaltlen
- }
- if (o.prvkeypem !== undefined) {
- if (o.prvkeypas !== undefined) {
- throw "both prvkeypem and prvkeypas parameters not supported"
- } else {
- try {
- var q = new RSAKey();
- q.readPrivateKeyFromPEMString(o.prvkeypem);
- this.initSign(q)
- } catch(m) {
- throw "fatal error to load pem private key: " + m
- }
- }
- }
- }
- };
- KJUR.crypto.Cipher = function(a) {};
- KJUR.crypto.Cipher.encrypt = function(e, f, d) {
- if (f instanceof RSAKey && f.isPublic) {
- var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d);
- if (c === "RSA") {
- return f.encrypt(e)
- }
- if (c === "RSAOAEP") {
- return f.encryptOAEP(e, "sha1")
- }
- var b = c.match(/^RSAOAEP(\d+)$/);
- if (b !== null) {
- return f.encryptOAEP(e, "sha" + b[1])
- }
- throw "Cipher.encrypt: unsupported algorithm for RSAKey: " + d
- } else {
- throw "Cipher.encrypt: unsupported key or algorithm"
- }
- };
- KJUR.crypto.Cipher.decrypt = function(e, f, d) {
- if (f instanceof RSAKey && f.isPrivate) {
- var c = KJUR.crypto.Cipher.getAlgByKeyAndName(f, d);
- if (c === "RSA") {
- return f.decrypt(e)
- }
- if (c === "RSAOAEP") {
- return f.decryptOAEP(e, "sha1")
- }
- var b = c.match(/^RSAOAEP(\d+)$/);
- if (b !== null) {
- return f.decryptOAEP(e, "sha" + b[1])
- }
- throw "Cipher.decrypt: unsupported algorithm for RSAKey: " + d
- } else {
- throw "Cipher.decrypt: unsupported key or algorithm"
- }
- };
- KJUR.crypto.Cipher.getAlgByKeyAndName = function(b, a) {
- if (b instanceof RSAKey) {
- if (":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:".indexOf(a) != -1) {
- return a
- }
- if (a === null || a === undefined) {
- return "RSA"
- }
- throw "getAlgByKeyAndName: not supported algorithm name for RSAKey: " + a
- }
- throw "getAlgByKeyAndName: not supported algorithm name: " + a
- };
- KJUR.crypto.OID = new
- function() {
- this.oidhex2name = {
- "2a864886f70d010101": "rsaEncryption",
- "2a8648ce3d0201": "ecPublicKey",
- "2a8648ce380401": "dsa",
- "2a8648ce3d030107": "secp256r1",
- "2b8104001f": "secp192k1",
- "2b81040021": "secp224r1",
- "2b8104000a": "secp256k1",
- "2b81040023": "secp521r1",
- "2b81040022": "secp384r1",
- "2a8648ce380403": "SHA1withDSA",
- "608648016503040301": "SHA224withDSA",
- "608648016503040302": "SHA256withDSA",
- }
- };
- /*! ecdsa-modified-1.1.0.js (c) Stephan Thomas, Kenji Urushima | github.com/bitcoinjs/bitcoinjs-lib/blob/master/LICENSE
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
- KJUR.crypto = {}
- }
- KJUR.crypto.ECDSA = function(h) {
- var e = "secp256r1";
- var g = null;
- var b = null;
- var f = null;
- var a = new SecureRandom();
- var d = null;
- this.type = "EC";
- this.isPrivate = false;
- this.isPublic = false;
- function c(s, o, r, n) {
- var j = Math.max(o.bitLength(), n.bitLength());
- var t = s.add2D(r);
- var q = s.curve.getInfinity();
- for (var p = j - 1; p >= 0; --p) {
- q = q.twice2D();
- q.z = BigInteger.ONE;
- if (o.testBit(p)) {
- if (n.testBit(p)) {
- q = q.add2D(t)
- } else {
- q = q.add2D(s)
- }
- } else {
- if (n.testBit(p)) {
- q = q.add2D(r)
- }
- }
- }
- return q
- }
- this.getBigRandom = function(i) {
- return new BigInteger(i.bitLength(), a).mod(i.subtract(BigInteger.ONE)).add(BigInteger.ONE)
- };
- this.setNamedCurve = function(i) {
- this.ecparams = KJUR.crypto.ECParameterDB.getByName(i);
- this.prvKeyHex = null;
- this.pubKeyHex = null;
- this.curveName = i
- };
- this.setPrivateKeyHex = function(i) {
- this.isPrivate = true;
- this.prvKeyHex = i
- };
- this.setPublicKeyHex = function(i) {
- this.isPublic = true;
- this.pubKeyHex = i
- };
- this.getPublicKeyXYHex = function() {
- var k = this.pubKeyHex;
- if (k.substr(0, 2) !== "04") {
- throw "this method supports uncompressed format(04) only"
- }
- var j = this.ecparams.keylen / 4;
- if (k.length !== 2 + j * 2) {
- throw "malformed public key hex length"
- }
- var i = {};
- i.x = k.substr(2, j);
- i.y = k.substr(2 + j);
- return i
- };
- this.getShortNISTPCurveName = function() {
- var i = this.curveName;
- if (i === "secp256r1" || i === "NIST P-256" || i === "P-256" || i === "prime256v1") {
- return "P-256"
- }
- if (i === "secp384r1" || i === "NIST P-384" || i === "P-384") {
- return "P-384"
- }
- return null
- };
- this.generateKeyPairHex = function() {
- var k = this.ecparams.n;
- var n = this.getBigRandom(k);
- var l = this.ecparams.G.multiply(n);
- var q = l.getX().toBigInteger();
- var o = l.getY().toBigInteger();
- var i = this.ecparams.keylen / 4;
- var m = ("0000000000" + n.toString(16)).slice( - i);
- var r = ("0000000000" + q.toString(16)).slice( - i);
- var p = ("0000000000" + o.toString(16)).slice( - i);
- var j = "04" + r + p;
- this.setPrivateKeyHex(m);
- this.setPublicKeyHex(j);
- return {
- ecprvhex: m,
- ecpubhex: j
- }
- };
- this.signWithMessageHash = function(i) {
- return this.signHex(i, this.prvKeyHex)
- };
- this.signHex = function(o, j) {
- var t = new BigInteger(j, 16);
- var l = this.ecparams.n;
- var q = new BigInteger(o, 16);
- do {
- var m = this.getBigRandom(l);
- var u = this.ecparams.G;
- var p = u.multiply(m);
- var i = p.getX().toBigInteger().mod(l)
- } while ( i . compareTo ( BigInteger . ZERO ) <= 0);
- var v = m.modInverse(l).multiply(q.add(t.multiply(i))).mod(l);
- return KJUR.crypto.ECDSA.biRSSigToASN1Sig(i, v)
- };
- this.sign = function(m, u) {
- var q = u;
- var j = this.ecparams.n;
- var p = BigInteger.fromByteArrayUnsigned(m);
- do {
- var l = this.getBigRandom(j);
- var t = this.ecparams.G;
- var o = t.multiply(l);
- var i = o.getX().toBigInteger().mod(j)
- } while ( i . compareTo ( BigInteger . ZERO ) <= 0);
- var v = l.modInverse(j).multiply(p.add(q.multiply(i))).mod(j);
- return this.serializeSig(i, v)
- };
- this.verifyWithMessageHash = function(j, i) {
- return this.verifyHex(j, i, this.pubKeyHex)
- };
- this.verifyHex = function(m, i, p) {
- var l, j;
- var o = KJUR.crypto.ECDSA.parseSigHex(i);
- l = o.r;
- j = o.s;
- var k;
- k = ECPointFp.decodeFromHex(this.ecparams.curve, p);
- var n = new BigInteger(m, 16);
- return this.verifyRaw(n, l, j, k)
- };
- this.verify = function(o, p, j) {
- var l, i;
- if (Bitcoin.Util.isArray(p)) {
- var n = this.parseSig(p);
- l = n.r;
- i = n.s
- } else {
- if ("object" === typeof p && p.r && p.s) {
- l = p.r;
- i = p.s
- } else {
- throw "Invalid value for signature"
- }
- }
- var k;
- if (j instanceof ECPointFp) {
- k = j
- } else {
- if (Bitcoin.Util.isArray(j)) {
- k = ECPointFp.decodeFrom(this.ecparams.curve, j)
- } else {
- throw "Invalid format for pubkey value, must be byte array or ECPointFp"
- }
- }
- var m = BigInteger.fromByteArrayUnsigned(o);
- return this.verifyRaw(m, l, i, k)
- };
- this.verifyRaw = function(o, i, w, m) {
- var l = this.ecparams.n;
- var u = this.ecparams.G;
- if (i.compareTo(BigInteger.ONE) < 0 || i.compareTo(l) >= 0) {
- return false
- }
- if (w.compareTo(BigInteger.ONE) < 0 || w.compareTo(l) >= 0) {
- return false
- }
- var p = w.modInverse(l);
- var k = o.multiply(p).mod(l);
- var j = i.multiply(p).mod(l);
- var q = u.multiply(k).add(m.multiply(j));
- var t = q.getX().toBigInteger().mod(l);
- return t.equals(i)
- };
- this.serializeSig = function(k, j) {
- var l = k.toByteArraySigned();
- var i = j.toByteArraySigned();
- var m = [];
- m.push(2);
- m.push(l.length);
- m = m.concat(l);
- m.push(2);
- m.push(i.length);
- m = m.concat(i);
- m.unshift(m.length);
- m.unshift(48);
- return m
- };
- this.parseSig = function(n) {
- var m;
- if (n[0] != 48) {
- throw new Error("Signature not a valid DERSequence")
- }
- m = 2;
- if (n[m] != 2) {
- throw new Error("First element in signature must be a DERInteger")
- }
- var l = n.slice(m + 2, m + 2 + n[m + 1]);
- m += 2 + n[m + 1];
- if (n[m] != 2) {
- throw new Error("Second element in signature must be a DERInteger")
- }
- var i = n.slice(m + 2, m + 2 + n[m + 1]);
- m += 2 + n[m + 1];
- var k = BigInteger.fromByteArrayUnsigned(l);
- var j = BigInteger.fromByteArrayUnsigned(i);
- return {
- r: k,
- s: j
- }
- };
- this.parseSigCompact = function(m) {
- if (m.length !== 65) {
- throw "Signature has the wrong length"
- }
- var j = m[0] - 27;
- if (j < 0 || j > 7) {
- throw "Invalid signature type"
- }
- var o = this.ecparams.n;
- var l = BigInteger.fromByteArrayUnsigned(m.slice(1, 33)).mod(o);
- var k = BigInteger.fromByteArrayUnsigned(m.slice(33, 65)).mod(o);
- return {
- r: l,
- s: k,
- i: j
- }
- };
- this.readPKCS5PrvKeyHex = function(l) {
- var n = ASN1HEX;
- var m = KJUR.crypto.ECDSA.getName;
- var p = n.getVbyList;
- if (n.isASN1HEX(l) === false) {
- throw "not ASN.1 hex string"
- }
- var i, k, o;
- try {
- i = p(l, 0, [2, 0], "06");
- k = p(l, 0, [1], "04");
- try {
- o = p(l, 0, [3, 0], "03").substr(2)
- } catch(j) {}
- } catch(j) {
- throw "malformed PKCS#1/5 plain ECC private key"
- }
- this.curveName = m(i);
- if (this.curveName === undefined) {
- throw "unsupported curve name"
- }
- this.setNamedCurve(this.curveName);
- this.setPublicKeyHex(o);
- this.setPrivateKeyHex(k);
- this.isPublic = false
- };
- this.readPKCS8PrvKeyHex = function(l) {
- var q = ASN1HEX;
- var i = KJUR.crypto.ECDSA.getName;
- var n = q.getVbyList;
- if (q.isASN1HEX(l) === false) {
- throw "not ASN.1 hex string"
- }
- var j, p, m, k;
- try {
- j = n(l, 0, [1, 0], "06");
- p = n(l, 0, [1, 1], "06");
- m = n(l, 0, [2, 0, 1], "04");
- try {
- k = n(l, 0, [2, 0, 2, 0], "03").substr(2)
- } catch(o) {}
- } catch(o) {
- throw "malformed PKCS#8 plain ECC private key"
- }
- this.curveName = i(p);
- if (this.curveName === undefined) {
- throw "unsupported curve name"
- }
- this.setNamedCurve(this.curveName);
- this.setPublicKeyHex(k);
- this.setPrivateKeyHex(m);
- this.isPublic = false
- };
- this.readPKCS8PubKeyHex = function(l) {
- var n = ASN1HEX;
- var m = KJUR.crypto.ECDSA.getName;
- var p = n.getVbyList;
- if (n.isASN1HEX(l) === false) {
- throw "not ASN.1 hex string"
- }
- var k, i, o;
- try {
- k = p(l, 0, [0, 0], "06");
- i = p(l, 0, [0, 1], "06");
- o = p(l, 0, [1], "03").substr(2)
- } catch(j) {
- throw "malformed PKCS#8 ECC public key"
- }
- this.curveName = m(i);
- if (this.curveName === null) {
- throw "unsupported curve name"
- }
- this.setNamedCurve(this.curveName);
- this.setPublicKeyHex(o)
- };
- this.readCertPubKeyHex = function(k, p) {
- if (p !== 5) {
- p = 6
- }
- var m = ASN1HEX;
- var l = KJUR.crypto.ECDSA.getName;
- var o = m.getVbyList;
- if (m.isASN1HEX(k) === false) {
- throw "not ASN.1 hex string"
- }
- var i, n;
- try {
- i = o(k, 0, [0, p, 0, 1], "06");
- n = o(k, 0, [0, p, 1], "03").substr(2)
- } catch(j) {
- throw "malformed X.509 certificate ECC public key"
- }
- this.curveName = l(i);
- if (this.curveName === null) {
- throw "unsupported curve name"
- }
- this.setNamedCurve(this.curveName);
- this.setPublicKeyHex(n)
- };
- if (h !== undefined) {
- if (h.curve !== undefined) {
- this.curveName = h.curve
- }
- }
- if (this.curveName === undefined) {
- this.curveName = e
- }
- this.setNamedCurve(this.curveName);
- if (h !== undefined) {
- if (h.prv !== undefined) {
- this.setPrivateKeyHex(h.prv)
- }
- if (h.pub !== undefined) {
- this.setPublicKeyHex(h.pub)
- }
- }
- };
- KJUR.crypto.ECDSA.parseSigHex = function(a) {
- var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a);
- var d = new BigInteger(b.r, 16);
- var c = new BigInteger(b.s, 16);
- return {
- r: d,
- s: c
- }
- };
- KJUR.crypto.ECDSA.parseSigHexInHexRS = function(c) {
- if (c.substr(0, 2) != "30") {
- throw "signature is not a ASN.1 sequence"
- }
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0);
- if (b.length != 2) {
- throw "number of signature ASN.1 sequence elements seem wrong"
- }
- var g = b[0];
- var f = b[1];
- if (c.substr(g, 2) != "02") {
- throw "1st item of sequene of signature is not ASN.1 integer"
- }
- if (c.substr(f, 2) != "02") {
- throw "2nd item of sequene of signature is not ASN.1 integer"
- }
- var e = ASN1HEX.getHexOfV_AtObj(c, g);
- var d = ASN1HEX.getHexOfV_AtObj(c, f);
- return {
- r: e,
- s: d
- }
- };
- KJUR.crypto.ECDSA.asn1SigToConcatSig = function(c) {
- var d = KJUR.crypto.ECDSA.parseSigHexInHexRS(c);
- var b = d.r;
- var a = d.s;
- if (b.substr(0, 2) == "00" && (((b.length / 2) * 8) % (16 * 8)) == 8) {
- b = b.substr(2)
- }
- if (a.substr(0, 2) == "00" && (((a.length / 2) * 8) % (16 * 8)) == 8) {
- a = a.substr(2)
- }
- if ((((b.length / 2) * 8) % (16 * 8)) != 0) {
- throw "unknown ECDSA sig r length error"
- }
- if ((((a.length / 2) * 8) % (16 * 8)) != 0) {
- throw "unknown ECDSA sig s length error"
- }
- return b + a
- };
- KJUR.crypto.ECDSA.concatSigToASN1Sig = function(a) {
- if ((((a.length / 2) * 8) % (16 * 8)) != 0) {
- throw "unknown ECDSA concatinated r-s sig length error"
- }
- var c = a.substr(0, a.length / 2);
- var b = a.substr(a.length / 2);
- return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b)
- };
- KJUR.crypto.ECDSA.hexRSSigToASN1Sig = function(b, a) {
- var d = new BigInteger(b, 16);
- var c = new BigInteger(a, 16);
- return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c)
- };
- KJUR.crypto.ECDSA.biRSSigToASN1Sig = function(e, c) {
- var b = new KJUR.asn1.DERInteger({
- bigint: e
- });
- var a = new KJUR.asn1.DERInteger({
- bigint: c
- });
- var d = new KJUR.asn1.DERSequence({
- array: [b, a]
- });
- return d.getEncodedHex()
- };
- KJUR.crypto.ECDSA.getName = function(a) {
- if (a === "2a8648ce3d030107") {
- return "secp256r1"
- }
- if (a === "2b8104000a") {
- return "secp256k1"
- }
- if (a === "2b81040022") {
- return "secp384r1"
- }
- if ("|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(a) !== -1) {
- return "secp256r1"
- }
- if ("|secp256k1|".indexOf(a) !== -1) {
- return "secp256k1"
- }
- if ("|secp384r1|NIST P-384|P-384|".indexOf(a) !== -1) {
- return "secp384r1"
- }
- return null
- };
- /*! ecparam-1.0.0.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
- KJUR.crypto = {}
- }
- KJUR.crypto.ECParameterDB = new
- function() {
- var b = {};
- var c = {};
- function a(d) {
- return new BigInteger(d, 16)
- }
- this.getByName = function(e) {
- var d = e;
- if (typeof c[d] != "undefined") {
- d = c[e]
- }
- if (typeof b[d] != "undefined") {
- return b[d]
- }
- throw "unregistered EC curve name: " + d
- };
- this.regist = function(A, l, o, g, m, e, j, f, k, u, d, x) {
- b[A] = {};
- var s = a(o);
- var z = a(g);
- var y = a(m);
- var t = a(e);
- var w = a(j);
- var r = new ECCurveFp(s, z, y);
- var q = r.decodePointHex("04" + f + k);
- b[A]["name"] = A;
- b[A]["keylen"] = l;
- b[A]["curve"] = r;
- b[A]["G"] = q;
- b[A]["n"] = t;
- b[A]["h"] = w;
- b[A]["oid"] = d;
- b[A]["info"] = x;
- for (var v = 0; v < u.length; v++) {
- c[u[v]] = A
- }
- }
- };
- KJUR.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field");
- KJUR.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field");
- KJUR.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field");
- KJUR.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []);
- KJUR.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []);
- KJUR.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []);
- KJUR.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []);
- KJUR.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]);
- KJUR.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]);
- KJUR.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]);
- /*! dsa-2.1.0.js (c) 2016-2017 Kenji Urushimma | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
- KJUR.crypto = {}
- }
- KJUR.crypto.DSA = function() {
- this.p = null;
- this.q = null;
- this.g = null;
- this.y = null;
- this.x = null;
- this.type = "DSA";
- this.isPrivate = false;
- this.isPublic = false;
- this.setPrivate = function(d, c, b, e, a) {
- this.isPrivate = true;
- this.p = d;
- this.q = c;
- this.g = b;
- this.y = e;
- this.x = a
- };
- this.setPrivateHex = function(d, b, f, i, j) {
- var c, a, e, g, h;
- c = new BigInteger(d, 16);
- a = new BigInteger(b, 16);
- e = new BigInteger(f, 16);
- if (typeof i === "string" && i.length > 1) {
- g = new BigInteger(i, 16)
- } else {
- g = null
- }
- h = new BigInteger(j, 16);
- this.setPrivate(c, a, e, g, h)
- };
- this.setPublic = function(c, b, a, d) {
- this.isPublic = true;
- this.p = c;
- this.q = b;
- this.g = a;
- this.y = d;
- this.x = null
- };
- this.setPublicHex = function(f, e, d, g) {
- var b, a, h, c;
- b = new BigInteger(f, 16);
- a = new BigInteger(e, 16);
- h = new BigInteger(d, 16);
- c = new BigInteger(g, 16);
- this.setPublic(b, a, h, c)
- };
- this.signWithMessageHash = function(d) {
- var c = this.p;
- var b = this.q;
- var f = this.g;
- var i = this.y;
- var j = this.x;
- var e = KJUR.crypto.Util.getRandomBigIntegerMinToMax(BigInteger.ONE.add(BigInteger.ONE), b.subtract(BigInteger.ONE));
- var l = d.substr(0, b.bitLength() / 4);
- var h = new BigInteger(l, 16);
- var a = (f.modPow(e, c)).mod(b);
- var n = (e.modInverse(b).multiply(h.add(j.multiply(a)))).mod(b);
- var m = KJUR.asn1.ASN1Util.jsonToASN1HEX({
- seq: [{
- "int": {
- bigint: a
- }
- },
- {
- "int": {
- bigint: n
- }
- }]
- });
- return m
- };
- this.verifyWithMessageHash = function(h, f) {
- var d = this.p;
- var b = this.q;
- var j = this.g;
- var l = this.y;
- var i = this.parseASN1Signature(f);
- var a = i[0];
- var t = i[1];
- var o = h.substr(0, b.bitLength() / 4);
- var k = new BigInteger(o, 16);
- if (BigInteger.ZERO.compareTo(a) > 0 || a.compareTo(b) > 0) {
- throw "invalid DSA signature"
- }
- if (BigInteger.ZERO.compareTo(t) > 0 || t.compareTo(b) > 0) {
- throw "invalid DSA signature"
- }
- var m = t.modInverse(b);
- var e = k.multiply(m).mod(b);
- var c = a.multiply(m).mod(b);
- var n = j.modPow(e, d).multiply(l.modPow(c, d)).mod(d).mod(b);
- return n.compareTo(a) == 0
- };
- this.parseASN1Signature = function(a) {
- try {
- var d = new BigInteger(ASN1HEX.getVbyList(a, 0, [0], "02"), 16);
- var c = new BigInteger(ASN1HEX.getVbyList(a, 0, [1], "02"), 16);
- return [d, c]
- } catch(b) {
- throw "malformed ASN.1 DSA signature"
- }
- };
- this.readPKCS5PrvKeyHex = function(c) {
- var b, a, f, g, i;
- var j = ASN1HEX;
- var d = j.getVbyList;
- if (j.isASN1HEX(c) === false) {
- throw "not ASN.1 hex string"
- }
- try {
- b = d(c, 0, [1], "02");
- a = d(c, 0, [2], "02");
- f = d(c, 0, [3], "02");
- g = d(c, 0, [4], "02");
- i = d(c, 0, [5], "02")
- } catch(e) {
- console.log("EXCEPTION:" + e);
- throw "malformed PKCS#1/5 plain DSA private key"
- }
- this.setPrivateHex(b, a, f, g, i)
- };
- this.readPKCS8PrvKeyHex = function(d) {
- var f, c, b, g;
- var e = ASN1HEX;
- var i = e.getVbyList;
- if (e.isASN1HEX(d) === false) {
- throw "not ASN.1 hex string"
- }
- try {
- f = i(d, 0, [1, 1, 0], "02");
- c = i(d, 0, [1, 1, 1], "02");
- b = i(d, 0, [1, 1, 2], "02");
- g = i(d, 0, [2, 0], "02")
- } catch(a) {
- console.log("EXCEPTION:" + a);
- throw "malformed PKCS#8 plain DSA private key"
- }
- this.setPrivateHex(f, c, b, null, g)
- };
- this.readPKCS8PubKeyHex = function(d) {
- var f, c, b, g;
- var e = ASN1HEX;
- var i = e.getVbyList;
- if (e.isASN1HEX(d) === false) {
- throw "not ASN.1 hex string"
- }
- try {
- f = i(d, 0, [0, 1, 0], "02");
- c = i(d, 0, [0, 1, 1], "02");
- b = i(d, 0, [0, 1, 2], "02");
- g = i(d, 0, [1, 0], "02")
- } catch(a) {
- console.log("EXCEPTION:" + a);
- throw "malformed PKCS#8 DSA public key"
- }
- this.setPublicHex(f, c, b, g)
- };
- this.readCertPubKeyHex = function(c, f) {
- if (f !== 5) {
- f = 6
- }
- var b, a, g, i;
- var j = ASN1HEX;
- var d = j.getVbyList;
- if (j.isASN1HEX(c) === false) {
- throw "not ASN.1 hex string"
- }
- try {
- b = d(c, 0, [0, f, 0, 1, 0], "02");
- a = d(c, 0, [0, f, 0, 1, 1], "02");
- g = d(c, 0, [0, f, 0, 1, 2], "02");
- i = d(c, 0, [0, f, 1, 0], "02")
- } catch(e) {
- console.log("EXCEPTION:" + e);
- throw "malformed X.509 certificate DSA public key"
- }
- this.setPublicHex(b, a, g, i)
- }
- };
- /*! pkcs5pkey-1.1.0.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- var PKCS5PKEY = function() {
- var c = function(o, q, p) {
- return j(CryptoJS.AES, o, q, p)
- };
- var d = function(o, q, p) {
- return j(CryptoJS.TripleDES, o, q, p)
- };
- var j = function(r, w, t, p) {
- var q = CryptoJS.enc.Hex.parse(w);
- var v = CryptoJS.enc.Hex.parse(t);
- var o = CryptoJS.enc.Hex.parse(p);
- var s = {};
- s.key = v;
- s.iv = o;
- s.ciphertext = q;
- var u = r.decrypt(s, v, {
- iv: o
- });
- return CryptoJS.enc.Hex.stringify(u)
- };
- var k = function(o, q, p) {
- return e(CryptoJS.AES, o, q, p)
- };
- var n = function(o, q, p) {
- return e(CryptoJS.TripleDES, o, q, p)
- };
- var e = function(t, y, w, q) {
- var s = CryptoJS.enc.Hex.parse(y);
- var x = CryptoJS.enc.Hex.parse(w);
- var p = CryptoJS.enc.Hex.parse(q);
- var o = {};
- var v = t.encrypt(s, x, {
- iv: p
- });
- var r = CryptoJS.enc.Hex.parse(v.toString());
- var u = CryptoJS.enc.Base64.stringify(r);
- return u
- };
- var g = {
- "AES-256-CBC": {
- proc: c,
- eproc: k,
- keylen: 32,
- ivlen: 16
- },
- "AES-192-CBC": {
- proc: c,
- eproc: k,
- keylen: 24,
- ivlen: 16
- },
- "AES-128-CBC": {
- proc: c,
- eproc: k,
- keylen: 16,
- ivlen: 16
- },
- "DES-EDE3-CBC": {
- proc: d,
- eproc: n,
- keylen: 24,
- ivlen: 8
- }
- };
- var b = function(o) {
- return g[o]["proc"]
- };
- var l = function(o) {
- var q = CryptoJS.lib.WordArray.random(o);
- var p = CryptoJS.enc.Hex.stringify(q);
- return p
- };
- var m = function(u) {
- var v = {};
- var p = u.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"));
- if (p) {
- v.cipher = p[1];
- v.ivsalt = p[2]
- }
- var o = u.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"));
- if (o) {
- v.type = o[1]
- }
- var t = -1;
- var w = 0;
- if (u.indexOf("\r\n\r\n") != -1) {
- t = u.indexOf("\r\n\r\n");
- w = 2
- }
- if (u.indexOf("\n\n") != -1) {
- t = u.indexOf("\n\n");
- w = 1
- }
- var r = u.indexOf("-----END");
- if (t != -1 && r != -1) {
- var q = u.substring(t + w * 2, r - w);
- q = q.replace(/\s+/g, "");
- v.data = q
- }
- return v
- };
- var i = function(p, x, o) {
- var u = o.substring(0, 16);
- var s = CryptoJS.enc.Hex.parse(u);
- var q = CryptoJS.enc.Utf8.parse(x);
- var t = g[p]["keylen"] + g[p]["ivlen"];
- var w = "";
- var v = null;
- for (;;) {
- var r = CryptoJS.algo.MD5.create();
- if (v != null) {
- r.update(v)
- }
- r.update(q);
- r.update(s);
- v = r.finalize();
- w = w + CryptoJS.enc.Hex.stringify(v);
- if (w.length >= t * 2) {
- break
- }
- }
- var y = {};
- y.keyhex = w.substr(0, g[p]["keylen"] * 2);
- y.ivhex = w.substr(g[p]["keylen"] * 2, g[p]["ivlen"] * 2);
- return y
- };
- var a = function(o, u, q, v) {
- var r = CryptoJS.enc.Base64.parse(o);
- var p = CryptoJS.enc.Hex.stringify(r);
- var t = g[u]["proc"];
- var s = t(p, q, v);
- return s
- };
- var f = function(o, r, p, t) {
- var q = g[r]["eproc"];
- var s = q(o, p, t);
- return s
- };
- return {
- version: "1.0.5",
- getHexFromPEM: function(o, p) {
- return ASN1HEX.pemToHex(o, p)
- },
- getDecryptedKeyHexByKeyIV: function(p, s, r, q) {
- var o = b(s);
- return o(p, r, q)
- },
- parsePKCS5PEM: function(o) {
- return m(o)
- },
- getKeyAndUnusedIvByPasscodeAndIvsalt: function(p, o, q) {
- return i(p, o, q)
- },
- decryptKeyB64: function(o, q, p, r) {
- return a(o, q, p, r)
- },
- getDecryptedKeyHex: function(x, w) {
- var p = m(x);
- var s = p.type;
- var q = p.cipher;
- var o = p.ivsalt;
- var r = p.data;
- var v = i(q, w, o);
- var u = v.keyhex;
- var t = a(r, q, u, o);
- return t
- },
- getRSAKeyFromEncryptedPKCS5PEM: function(q, p) {
- var r = this.getDecryptedKeyHex(q, p);
- var o = new RSAKey();
- o.readPrivateKeyFromASN1HexString(r);
- return o
- },
- getEncryptedPKCS5PEMFromPrvKeyHex: function(r, y, s, q) {
- if (typeof s == "undefined" || s == null) {
- s = "AES-256-CBC"
- }
- if (typeof g[s] == "undefined") {
- throw "PKCS5PKEY unsupported algorithm: " + s
- }
- if (typeof q == "undefined" || q == null) {
- var u = g[s]["ivlen"];
- var t = l(u);
- q = t.toUpperCase()
- }
- var x = i(s, y, q);
- var w = x.keyhex;
- var v = f(r, s, w, q);
- var p = v.replace(/(.{64})/g, "$1\r\n");
- var o = "-----BEGIN RSA PRIVATE KEY-----\r\n";
- o += "Proc-Type: 4,ENCRYPTED\r\n";
- o += "DEK-Info: " + s + "," + q + "\r\n";
- o += "\r\n";
- o += p;
- o += "\r\n-----END RSA PRIVATE KEY-----\r\n";
- return o
- },
- getEncryptedPKCS5PEMFromRSAKey: function(C, D, o, s) {
- var A = new KJUR.asn1.DERInteger({
- "int": 0
- });
- var v = new KJUR.asn1.DERInteger({
- bigint: C.n
- });
- var z = new KJUR.asn1.DERInteger({
- "int": C.e
- });
- var B = new KJUR.asn1.DERInteger({
- bigint: C.d
- });
- var t = new KJUR.asn1.DERInteger({
- bigint: C.p
- });
- var r = new KJUR.asn1.DERInteger({
- bigint: C.q
- });
- var y = new KJUR.asn1.DERInteger({
- bigint: C.dmp1
- });
- var u = new KJUR.asn1.DERInteger({
- bigint: C.dmq1
- });
- var x = new KJUR.asn1.DERInteger({
- bigint: C.coeff
- });
- var E = new KJUR.asn1.DERSequence({
- array: [A, v, z, B, t, r, y, u, x]
- });
- var w = E.getEncodedHex();
- return this.getEncryptedPKCS5PEMFromPrvKeyHex(w, D, o, s)
- },
- newEncryptedPKCS5PEM: function(o, p, s, t) {
- if (typeof p == "undefined" || p == null) {
- p = 1024
- }
- if (typeof s == "undefined" || s == null) {
- s = "10001"
- }
- var q = new RSAKey();
- q.generate(p, s);
- var r = null;
- if (typeof t == "undefined" || t == null) {
- r = this.getEncryptedPKCS5PEMFromRSAKey(pkey, o)
- } else {
- r = this.getEncryptedPKCS5PEMFromRSAKey(pkey, o, t)
- }
- return r
- },
- getRSAKeyFromPlainPKCS8PEM: function(q) {
- if (q.match(/ENCRYPTED/)) {
- throw "pem shall be not ENCRYPTED"
- }
- var p = ASN1HEX.pemToHex(q, "PRIVATE KEY");
- var o = this.getRSAKeyFromPlainPKCS8Hex(p);
- return o
- },
- getRSAKeyFromPlainPKCS8Hex: function(p) {
- var o = new RSAKey();
- o.readPKCS8PrvKeyHex(p);
- return o
- },
- parseHexOfEncryptedPKCS8: function(v) {
- var r = {};
- var q = ASN1HEX.getPosArrayOfChildren_AtObj(v, 0);
- if (q.length != 2) {
- throw "malformed format: SEQUENCE(0).items != 2: " + q.length
- }
- r.ciphertext = ASN1HEX.getHexOfV_AtObj(v, q[1]);
- var x = ASN1HEX.getPosArrayOfChildren_AtObj(v, q[0]);
- if (x.length != 2) {
- throw "malformed format: SEQUENCE(0.0).items != 2: " + x.length
- }
- if (ASN1HEX.getHexOfV_AtObj(v, x[0]) != "2a864886f70d01050d") {
- throw "this only supports pkcs5PBES2"
- }
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(v, x[1]);
- if (x.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1).items != 2: " + o.length
- }
- var p = ASN1HEX.getPosArrayOfChildren_AtObj(v, o[1]);
- if (p.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + p.length
- }
- if (ASN1HEX.getHexOfV_AtObj(v, p[0]) != "2a864886f70d0307") {
- throw "this only supports TripleDES"
- }
- r.encryptionSchemeAlg = "TripleDES";
- r.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(v, p[1]);
- var s = ASN1HEX.getPosArrayOfChildren_AtObj(v, o[0]);
- if (s.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + s.length
- }
- if (ASN1HEX.getHexOfV_AtObj(v, s[0]) != "2a864886f70d01050c") {
- throw "this only supports pkcs5PBKDF2"
- }
- var w = ASN1HEX.getPosArrayOfChildren_AtObj(v, s[1]);
- if (w.length < 2) {
- throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + w.length
- }
- r.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(v, w[0]);
- var t = ASN1HEX.getHexOfV_AtObj(v, w[1]);
- try {
- r.pbkdf2Iter = parseInt(t, 16)
- } catch(u) {
- throw "malformed format pbkdf2Iter: " + t
- }
- return r
- },
- getPBKDF2KeyHexFromParam: function(t, o) {
- var s = CryptoJS.enc.Hex.parse(t.pbkdf2Salt);
- var p = t.pbkdf2Iter;
- var r = CryptoJS.PBKDF2(o, s, {
- keySize: 192 / 32,
- iterations: p
- });
- var q = CryptoJS.enc.Hex.stringify(r);
- return q
- },
- getPlainPKCS8HexFromEncryptedPKCS8PEM: function(w, x) {
- var q = ASN1HEX.pemToHex(w, "ENCRYPTED PRIVATE KEY");
- var o = this.parseHexOfEncryptedPKCS8(q);
- var t = PKCS5PKEY.getPBKDF2KeyHexFromParam(o, x);
- var u = {};
- u.ciphertext = CryptoJS.enc.Hex.parse(o.ciphertext);
- var s = CryptoJS.enc.Hex.parse(t);
- var r = CryptoJS.enc.Hex.parse(o.encryptionSchemeIV);
- var v = CryptoJS.TripleDES.decrypt(u, s, {
- iv: r
- });
- var p = CryptoJS.enc.Hex.stringify(v);
- return p
- },
- getRSAKeyFromEncryptedPKCS8PEM: function(r, q) {
- var p = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(r, q);
- var o = this.getRSAKeyFromPlainPKCS8Hex(p);
- return o
- },
- getKeyFromEncryptedPKCS8PEM: function(r, p) {
- var o = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(r, p);
- var q = this.getKeyFromPlainPrivatePKCS8Hex(o);
- return q
- },
- parsePlainPrivatePKCS8Hex: function(r) {
- var p = {};
- p.algparam = null;
- if (r.substr(0, 2) != "30") {
- throw "malformed plain PKCS8 private key(code:001)"
- }
- var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0);
- if (q.length != 3) {
- throw "malformed plain PKCS8 private key(code:002)"
- }
- if (r.substr(q[1], 2) != "30") {
- throw "malformed PKCS8 private key(code:003)"
- }
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(r, q[1]);
- if (o.length != 2) {
- throw "malformed PKCS8 private key(code:004)"
- }
- if (r.substr(o[0], 2) != "06") {
- throw "malformed PKCS8 private key(code:005)"
- }
- p.algoid = ASN1HEX.getHexOfV_AtObj(r, o[0]);
- if (r.substr(o[1], 2) == "06") {
- p.algparam = ASN1HEX.getHexOfV_AtObj(r, o[1])
- }
- if (r.substr(q[2], 2) != "04") {
- throw "malformed PKCS8 private key(code:006)"
- }
- p.keyidx = ASN1HEX.getStartPosOfV_AtObj(r, q[2]);
- return p
- },
- getKeyFromPlainPrivatePKCS8PEM: function(p) {
- var o = ASN1HEX.pemToHex(p, "PRIVATE KEY");
- var q = this.getKeyFromPlainPrivatePKCS8Hex(o);
- return q
- },
- getKeyFromPlainPrivatePKCS8Hex: function(o) {
- var p = this.parsePlainPrivatePKCS8Hex(o);
- var q;
- if (p.algoid == "2a864886f70d010101") {
- q = new RSAKey()
- } else {
- if (p.algoid == "2a8648ce380401") {
- q = new KJUR.crypto.DSA()
- } else {
- if (p.algoid == "2a8648ce3d0201") {
- q = new KJUR.crypto.ECDSA()
- } else {
- throw "unsupported private key algorithm"
- }
- }
- }
- q.readPKCS8PrvKeyHex(o);
- return q
- },
- getRSAKeyFromPublicPKCS8PEM: function(p) {
- var q = ASN1HEX.pemToHex(p, "PUBLIC KEY");
- var o = this.getRSAKeyFromPublicPKCS8Hex(q);
- return o
- },
- getKeyFromPublicPKCS8PEM: function(p) {
- var q = ASN1HEX.pemToHex(p, "PUBLIC KEY");
- var o = this.getKeyFromPublicPKCS8Hex(q);
- return o
- },
- getKeyFromPublicPKCS8Hex: function(o) {
- var p;
- var q = ASN1HEX.getVbyList(h, 0, [0, 0], "06");
- if (q === "2a864886f70d010101") {
- p = new RSAKey()
- } else {
- if (q === "2a8648ce380401") {
- p = new KJUR.crypto.DSA()
- } else {
- if (q === "2a8648ce3d0201") {
- p = new KJUR.crypto.ECDSA()
- } else {
- throw "unsupported PKCS#8 public key hex"
- }
- }
- }
- p.readPKCS8PubKeyHex(h);
- return p
- },
- parsePublicRawRSAKeyHex: function(q) {
- var o = {};
- if (q.substr(0, 2) != "30") {
- throw "malformed RSA key(code:001)"
- }
- var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, 0);
- if (p.length != 2) {
- throw "malformed RSA key(code:002)"
- }
- if (q.substr(p[0], 2) != "02") {
- throw "malformed RSA key(code:003)"
- }
- o.n = ASN1HEX.getHexOfV_AtObj(q, p[0]);
- if (q.substr(p[1], 2) != "02") {
- throw "malformed RSA key(code:004)"
- }
- o.e = ASN1HEX.getHexOfV_AtObj(q, p[1]);
- return o
- },
- parsePrivateRawRSAKeyHexAtObj: function(p, r) {
- var q = r.keyidx;
- if (p.substr(q, 2) != "30") {
- throw "malformed RSA private key(code:001)"
- }
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(p, q);
- if (o.length != 9) {
- throw "malformed RSA private key(code:002)"
- }
- r.key = {};
- r.key.n = ASN1HEX.getHexOfV_AtObj(p, o[1]);
- r.key.e = ASN1HEX.getHexOfV_AtObj(p, o[2]);
- r.key.d = ASN1HEX.getHexOfV_AtObj(p, o[3]);
- r.key.p = ASN1HEX.getHexOfV_AtObj(p, o[4]);
- r.key.q = ASN1HEX.getHexOfV_AtObj(p, o[5]);
- r.key.dp = ASN1HEX.getHexOfV_AtObj(p, o[6]);
- r.key.dq = ASN1HEX.getHexOfV_AtObj(p, o[7]);
- r.key.co = ASN1HEX.getHexOfV_AtObj(p, o[8])
- },
- parsePrivateRawECKeyHexAtObj: function(p, r) {
- var q = r.keyidx;
- if (p.substr(q, 2) != "30") {
- throw "malformed ECC private key(code:001)"
- }
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(p, q);
- if (o.length != 3) {
- throw "malformed ECC private key(code:002)"
- }
- if (p.substr(o[1], 2) != "04") {
- throw "malformed ECC private key(code:003)"
- }
- r.key = ASN1HEX.getHexOfV_AtObj(p, o[1])
- },
- parsePublicPKCS8Hex: function(r) {
- var p = {};
- p.algparam = null;
- var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0);
- if (q.length != 2) {
- throw "outer DERSequence shall have 2 elements: " + q.length
- }
- var s = q[0];
- if (r.substr(s, 2) != "30") {
- throw "malformed PKCS8 public key(code:001)"
- }
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(r, s);
- if (o.length != 2) {
- throw "malformed PKCS8 public key(code:002)"
- }
- if (r.substr(o[0], 2) != "06") {
- throw "malformed PKCS8 public key(code:003)"
- }
- p.algoid = ASN1HEX.getHexOfV_AtObj(r, o[0]);
- if (r.substr(o[1], 2) == "06") {
- p.algparam = ASN1HEX.getHexOfV_AtObj(r, o[1])
- }
- if (r.substr(q[1], 2) != "03") {
- throw "malformed PKCS8 public key(code:004)"
- }
- p.key = ASN1HEX.getHexOfV_AtObj(r, q[1]).substr(2);
- return p
- },
- getRSAKeyFromPublicPKCS8Hex: function(o) {
- var p = new RSAKey();
- p.readPKCS8PubKeyHex(o);
- return p
- },
- }
- } ();
- /*! keyutil-1.0.15.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- var KEYUTIL = function() {
- var d = function(p, r, q) {
- return k(CryptoJS.AES, p, r, q)
- };
- var e = function(p, r, q) {
- return k(CryptoJS.TripleDES, p, r, q)
- };
- var a = function(p, r, q) {
- return k(CryptoJS.DES, p, r, q)
- };
- var k = function(s, x, u, q) {
- var r = CryptoJS.enc.Hex.parse(x);
- var w = CryptoJS.enc.Hex.parse(u);
- var p = CryptoJS.enc.Hex.parse(q);
- var t = {};
- t.key = w;
- t.iv = p;
- t.ciphertext = r;
- var v = s.decrypt(t, w, {
- iv: p
- });
- return CryptoJS.enc.Hex.stringify(v)
- };
- var l = function(p, r, q) {
- return g(CryptoJS.AES, p, r, q)
- };
- var o = function(p, r, q) {
- return g(CryptoJS.TripleDES, p, r, q)
- };
- var f = function(p, r, q) {
- return g(CryptoJS.DES, p, r, q)
- };
- var g = function(t, y, v, q) {
- var s = CryptoJS.enc.Hex.parse(y);
- var x = CryptoJS.enc.Hex.parse(v);
- var p = CryptoJS.enc.Hex.parse(q);
- var w = t.encrypt(s, x, {
- iv: p
- });
- var r = CryptoJS.enc.Hex.parse(w.toString());
- var u = CryptoJS.enc.Base64.stringify(r);
- return u
- };
- var i = {
- "AES-256-CBC": {
- proc: d,
- eproc: l,
- keylen: 32,
- ivlen: 16
- },
- "AES-192-CBC": {
- proc: d,
- eproc: l,
- keylen: 24,
- ivlen: 16
- },
- "AES-128-CBC": {
- proc: d,
- eproc: l,
- keylen: 16,
- ivlen: 16
- },
- "DES-EDE3-CBC": {
- proc: e,
- eproc: o,
- keylen: 24,
- ivlen: 8
- },
- "DES-CBC": {
- proc: a,
- eproc: f,
- keylen: 8,
- ivlen: 8
- }
- };
- var c = function(p) {
- return i[p]["proc"]
- };
- var m = function(p) {
- var r = CryptoJS.lib.WordArray.random(p);
- var q = CryptoJS.enc.Hex.stringify(r);
- return q
- };
- var n = function(v) {
- var w = {};
- var q = v.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"));
- if (q) {
- w.cipher = q[1];
- w.ivsalt = q[2]
- }
- var p = v.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"));
- if (p) {
- w.type = p[1]
- }
- var u = -1;
- var x = 0;
- if (v.indexOf("\r\n\r\n") != -1) {
- u = v.indexOf("\r\n\r\n");
- x = 2
- }
- if (v.indexOf("\n\n") != -1) {
- u = v.indexOf("\n\n");
- x = 1
- }
- var t = v.indexOf("-----END");
- if (u != -1 && t != -1) {
- var r = v.substring(u + x * 2, t - x);
- r = r.replace(/\s+/g, "");
- w.data = r
- }
- return w
- };
- var j = function(q, y, p) {
- var v = p.substring(0, 16);
- var t = CryptoJS.enc.Hex.parse(v);
- var r = CryptoJS.enc.Utf8.parse(y);
- var u = i[q]["keylen"] + i[q]["ivlen"];
- var x = "";
- var w = null;
- for (;;) {
- var s = CryptoJS.algo.MD5.create();
- if (w != null) {
- s.update(w)
- }
- s.update(r);
- s.update(t);
- w = s.finalize();
- x = x + CryptoJS.enc.Hex.stringify(w);
- if (x.length >= u * 2) {
- break
- }
- }
- var z = {};
- z.keyhex = x.substr(0, i[q]["keylen"] * 2);
- z.ivhex = x.substr(i[q]["keylen"] * 2, i[q]["ivlen"] * 2);
- return z
- };
- var b = function(p, v, r, w) {
- var s = CryptoJS.enc.Base64.parse(p);
- var q = CryptoJS.enc.Hex.stringify(s);
- var u = i[v]["proc"];
- var t = u(q, r, w);
- return t
- };
- var h = function(p, s, q, u) {
- var r = i[s]["eproc"];
- var t = r(p, q, u);
- return t
- };
- return {
- version: "1.0.0",
- getHexFromPEM: function(p, q) {
- return ASN1HEX.pemToHex(p, q)
- },
- getDecryptedKeyHexByKeyIV: function(q, t, s, r) {
- var p = c(t);
- return p(q, s, r)
- },
- parsePKCS5PEM: function(p) {
- return n(p)
- },
- getKeyAndUnusedIvByPasscodeAndIvsalt: function(q, p, r) {
- return j(q, p, r)
- },
- decryptKeyB64: function(p, r, q, s) {
- return b(p, r, q, s)
- },
- getDecryptedKeyHex: function(y, x) {
- var q = n(y);
- var t = q.type;
- var r = q.cipher;
- var p = q.ivsalt;
- var s = q.data;
- var w = j(r, x, p);
- var v = w.keyhex;
- var u = b(s, r, v, p);
- return u
- },
- getRSAKeyFromEncryptedPKCS5PEM: function(r, q) {
- var s = this.getDecryptedKeyHex(r, q);
- var p = new RSAKey();
- p.readPrivateKeyFromASN1HexString(s);
- return p
- },
- getEncryptedPKCS5PEMFromPrvKeyHex: function(x, s, A, t, r) {
- var p = "";
- if (typeof t == "undefined" || t == null) {
- t = "AES-256-CBC"
- }
- if (typeof i[t] == "undefined") {
- throw "KEYUTIL unsupported algorithm: " + t
- }
- if (typeof r == "undefined" || r == null) {
- var v = i[t]["ivlen"];
- var u = m(v);
- r = u.toUpperCase()
- }
- var z = j(t, A, r);
- var y = z.keyhex;
- var w = h(s, t, y, r);
- var q = w.replace(/(.{64})/g, "$1\r\n");
- var p = "-----BEGIN " + x + " PRIVATE KEY-----\r\n";
- p += "Proc-Type: 4,ENCRYPTED\r\n";
- p += "DEK-Info: " + t + "," + r + "\r\n";
- p += "\r\n";
- p += q;
- p += "\r\n-----END " + x + " PRIVATE KEY-----\r\n";
- return p
- },
- getEncryptedPKCS5PEMFromRSAKey: function(D, E, r, t) {
- var B = new KJUR.asn1.DERInteger({
- "int": 0
- });
- var w = new KJUR.asn1.DERInteger({
- bigint: D.n
- });
- var A = new KJUR.asn1.DERInteger({
- "int": D.e
- });
- var C = new KJUR.asn1.DERInteger({
- bigint: D.d
- });
- var u = new KJUR.asn1.DERInteger({
- bigint: D.p
- });
- var s = new KJUR.asn1.DERInteger({
- bigint: D.q
- });
- var z = new KJUR.asn1.DERInteger({
- bigint: D.dmp1
- });
- var v = new KJUR.asn1.DERInteger({
- bigint: D.dmq1
- });
- var y = new KJUR.asn1.DERInteger({
- bigint: D.coeff
- });
- var F = new KJUR.asn1.DERSequence({
- array: [B, w, A, C, u, s, z, v, y]
- });
- var x = F.getEncodedHex();
- return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", x, E, r, t)
- },
- newEncryptedPKCS5PEM: function(p, q, t, u) {
- if (typeof q == "undefined" || q == null) {
- q = 1024
- }
- if (typeof t == "undefined" || t == null) {
- t = "10001"
- }
- var r = new RSAKey();
- r.generate(q, t);
- var s = null;
- if (typeof u == "undefined" || u == null) {
- s = this.getEncryptedPKCS5PEMFromRSAKey(r, p)
- } else {
- s = this.getEncryptedPKCS5PEMFromRSAKey(r, p, u)
- }
- return s
- },
- getRSAKeyFromPlainPKCS8PEM: function(r) {
- if (r.match(/ENCRYPTED/)) {
- throw "pem shall be not ENCRYPTED"
- }
- var q = ASN1HEX.pemToHex(r, "PRIVATE KEY");
- var p = this.getRSAKeyFromPlainPKCS8Hex(q);
- return p
- },
- getRSAKeyFromPlainPKCS8Hex: function(q) {
- var p = new RSAKey();
- p.readPKCS8PrvKeyHex(q);
- return p
- },
- parseHexOfEncryptedPKCS8: function(w) {
- var s = {};
- var r = ASN1HEX.getPosArrayOfChildren_AtObj(w, 0);
- if (r.length != 2) {
- throw "malformed format: SEQUENCE(0).items != 2: " + r.length
- }
- s.ciphertext = ASN1HEX.getHexOfV_AtObj(w, r[1]);
- var y = ASN1HEX.getPosArrayOfChildren_AtObj(w, r[0]);
- if (y.length != 2) {
- throw "malformed format: SEQUENCE(0.0).items != 2: " + y.length
- }
- if (ASN1HEX.getHexOfV_AtObj(w, y[0]) != "2a864886f70d01050d") {
- throw "this only supports pkcs5PBES2"
- }
- var p = ASN1HEX.getPosArrayOfChildren_AtObj(w, y[1]);
- if (y.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1).items != 2: " + p.length
- }
- var q = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[1]);
- if (q.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + q.length
- }
- if (ASN1HEX.getHexOfV_AtObj(w, q[0]) != "2a864886f70d0307") {
- throw "this only supports TripleDES"
- }
- s.encryptionSchemeAlg = "TripleDES";
- s.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(w, q[1]);
- var t = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[0]);
- if (t.length != 2) {
- throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + t.length
- }
- if (ASN1HEX.getHexOfV_AtObj(w, t[0]) != "2a864886f70d01050c") {
- throw "this only supports pkcs5PBKDF2"
- }
- var x = ASN1HEX.getPosArrayOfChildren_AtObj(w, t[1]);
- if (x.length < 2) {
- throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + x.length
- }
- s.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(w, x[0]);
- var u = ASN1HEX.getHexOfV_AtObj(w, x[1]);
- try {
- s.pbkdf2Iter = parseInt(u, 16)
- } catch(v) {
- throw "malformed format pbkdf2Iter: " + u
- }
- return s
- },
- getPBKDF2KeyHexFromParam: function(u, p) {
- var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt);
- var q = u.pbkdf2Iter;
- var s = CryptoJS.PBKDF2(p, t, {
- keySize: 192 / 32,
- iterations: q
- });
- var r = CryptoJS.enc.Hex.stringify(s);
- return r
- },
- getPlainPKCS8HexFromEncryptedPKCS8PEM: function(x, y) {
- var r = ASN1HEX.pemToHex(x, "ENCRYPTED PRIVATE KEY");
- var p = this.parseHexOfEncryptedPKCS8(r);
- var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y);
- var v = {};
- v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext);
- var t = CryptoJS.enc.Hex.parse(u);
- var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);
- var w = CryptoJS.TripleDES.decrypt(v, t, {
- iv: s
- });
- var q = CryptoJS.enc.Hex.stringify(w);
- return q
- },
- getRSAKeyFromEncryptedPKCS8PEM: function(s, r) {
- var q = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, r);
- var p = this.getRSAKeyFromPlainPKCS8Hex(q);
- return p
- },
- getKeyFromEncryptedPKCS8PEM: function(s, q) {
- var p = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, q);
- var r = this.getKeyFromPlainPrivatePKCS8Hex(p);
- return r
- },
- parsePlainPrivatePKCS8Hex: function(s) {
- var q = {};
- q.algparam = null;
- if (s.substr(0, 2) != "30") {
- throw "malformed plain PKCS8 private key(code:001)"
- }
- var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0);
- if (r.length != 3) {
- throw "malformed plain PKCS8 private key(code:002)"
- }
- if (s.substr(r[1], 2) != "30") {
- throw "malformed PKCS8 private key(code:003)"
- }
- var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, r[1]);
- if (p.length != 2) {
- throw "malformed PKCS8 private key(code:004)"
- }
- if (s.substr(p[0], 2) != "06") {
- throw "malformed PKCS8 private key(code:005)"
- }
- q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]);
- if (s.substr(p[1], 2) == "06") {
- q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1])
- }
- if (s.substr(r[2], 2) != "04") {
- throw "malformed PKCS8 private key(code:006)"
- }
- q.keyidx = ASN1HEX.getStartPosOfV_AtObj(s, r[2]);
- return q
- },
- getKeyFromPlainPrivatePKCS8PEM: function(q) {
- var p = ASN1HEX.pemToHex(q, "PRIVATE KEY");
- var r = this.getKeyFromPlainPrivatePKCS8Hex(p);
- return r
- },
- getKeyFromPlainPrivatePKCS8Hex: function(p) {
- var q = this.parsePlainPrivatePKCS8Hex(p);
- var r;
- if (q.algoid == "2a864886f70d010101") {
- r = new RSAKey()
- } else {
- if (q.algoid == "2a8648ce380401") {
- r = new KJUR.crypto.DSA()
- } else {
- if (q.algoid == "2a8648ce3d0201") {
- r = new KJUR.crypto.ECDSA()
- } else {
- throw "unsupported private key algorithm"
- }
- }
- }
- r.readPKCS8PrvKeyHex(p);
- return r
- },
- getRSAKeyFromPublicPKCS8PEM: function(q) {
- var r = ASN1HEX.pemToHex(q, "PUBLIC KEY");
- var p = this.getRSAKeyFromPublicPKCS8Hex(r);
- return p
- },
- getKeyFromPublicPKCS8PEM: function(q) {
- var r = ASN1HEX.pemToHex(q, "PUBLIC KEY");
- var p = this.getKeyFromPublicPKCS8Hex(r);
- return p
- },
- getKeyFromPublicPKCS8Hex: function(q) {
- var p;
- var r = ASN1HEX.getVbyList(q, 0, [0, 0], "06");
- if (r === "2a864886f70d010101") {
- p = new RSAKey()
- } else {
- if (r === "2a8648ce380401") {
- p = new KJUR.crypto.DSA()
- } else {
- if (r === "2a8648ce3d0201") {
- p = new KJUR.crypto.ECDSA()
- } else {
- throw "unsupported PKCS#8 public key hex"
- }
- }
- }
- p.readPKCS8PubKeyHex(q);
- return p
- },
- parsePublicRawRSAKeyHex: function(r) {
- var p = {};
- if (r.substr(0, 2) != "30") {
- throw "malformed RSA key(code:001)"
- }
- var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0);
- if (q.length != 2) {
- throw "malformed RSA key(code:002)"
- }
- if (r.substr(q[0], 2) != "02") {
- throw "malformed RSA key(code:003)"
- }
- p.n = ASN1HEX.getHexOfV_AtObj(r, q[0]);
- if (r.substr(q[1], 2) != "02") {
- throw "malformed RSA key(code:004)"
- }
- p.e = ASN1HEX.getHexOfV_AtObj(r, q[1]);
- return p
- },
- parsePrivateRawRSAKeyHexAtObj: function(q, u) {
- var t = ASN1HEX;
- var r = t.getHexOfV_AtObj;
- var s = t.getDecendantIndexByNthList(q, 0, [2, 0]);
- var p = t.getPosArrayOfChildren_AtObj(q, s);
- if (p.length !== 9) {
- throw "malformed PKCS#8 plain RSA private key"
- }
- u.key = {};
- u.key.n = r(q, p[1]);
- u.key.e = r(q, p[2]);
- u.key.d = r(q, p[3]);
- u.key.p = r(q, p[4]);
- u.key.q = r(q, p[5]);
- u.key.dp = r(q, p[6]);
- u.key.dq = r(q, p[7]);
- u.key.co = r(q, p[8])
- },
- parsePrivateRawECKeyHexAtObj: function(p, t) {
- var s = ASN1HEX;
- var q = t.keyidx;
- var r = new KJUR.crypto.ECDSA();
- r.readPKCS8PrvKeyHex(p);
- t.key = r.prvKeyHex;
- t.pubkey = r.pubKeyHex
- },
- parsePublicPKCS8Hex: function(s) {
- var q = {};
- q.algparam = null;
- var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0);
- if (r.length != 2) {
- throw "outer DERSequence shall have 2 elements: " + r.length
- }
- var t = r[0];
- if (s.substr(t, 2) != "30") {
- throw "malformed PKCS8 public key(code:001)"
- }
- var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, t);
- if (p.length != 2) {
- throw "malformed PKCS8 public key(code:002)"
- }
- if (s.substr(p[0], 2) != "06") {
- throw "malformed PKCS8 public key(code:003)"
- }
- q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]);
- if (s.substr(p[1], 2) == "06") {
- q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1])
- } else {
- if (s.substr(p[1], 2) == "30") {
- q.algparam = {};
- q.algparam.p = ASN1HEX.getVbyList(s, p[1], [0], "02");
- q.algparam.q = ASN1HEX.getVbyList(s, p[1], [1], "02");
- q.algparam.g = ASN1HEX.getVbyList(s, p[1], [2], "02")
- }
- }
- if (s.substr(r[1], 2) != "03") {
- throw "malformed PKCS8 public key(code:004)"
- }
- q.key = ASN1HEX.getHexOfV_AtObj(s, r[1]).substr(2);
- return q
- },
- getRSAKeyFromPublicPKCS8Hex: function(p) {
- var q = new RSAKey();
- q.readPKCS8PubKeyHex(p);
- return q
- },
- }
- } ();
- KEYUTIL.getKey = function(i, f, j) {
- if (typeof RSAKey != "undefined" && i instanceof RSAKey) {
- return i
- }
- if (typeof KJUR.crypto.ECDSA != "undefined" && i instanceof KJUR.crypto.ECDSA) {
- return i
- }
- if (typeof KJUR.crypto.DSA != "undefined" && i instanceof KJUR.crypto.DSA) {
- return i
- }
- if (i.curve !== undefined && i.xy !== undefined && i.d === undefined) {
- return new KJUR.crypto.ECDSA({
- pub: i.xy,
- curve: i.curve
- })
- }
- if (i.curve !== undefined && i.d !== undefined) {
- return new KJUR.crypto.ECDSA({
- prv: i.d,
- curve: i.curve
- })
- }
- if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d === undefined) {
- var D = new RSAKey();
- D.setPublic(i.n, i.e);
- return D
- }
- if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p !== undefined && i.q !== undefined && i.dp !== undefined && i.dq !== undefined && i.co !== undefined && i.qi === undefined) {
- var D = new RSAKey();
- D.setPrivateEx(i.n, i.e, i.d, i.p, i.q, i.dp, i.dq, i.co);
- return D
- }
- if (i.kty === undefined && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p === undefined) {
- var D = new RSAKey();
- D.setPrivate(i.n, i.e, i.d);
- return D
- }
- if (i.p !== undefined && i.q !== undefined && i.g !== undefined && i.y !== undefined && i.x === undefined) {
- var D = new KJUR.crypto.DSA();
- D.setPublic(i.p, i.q, i.g, i.y);
- return D
- }
- if (i.p !== undefined && i.q !== undefined && i.g !== undefined && i.y !== undefined && i.x !== undefined) {
- var D = new KJUR.crypto.DSA();
- D.setPrivate(i.p, i.q, i.g, i.y, i.x);
- return D
- }
- if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d === undefined) {
- var D = new RSAKey();
- D.setPublic(b64utohex(i.n), b64utohex(i.e));
- return D
- }
- if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d !== undefined && i.p !== undefined && i.q !== undefined && i.dp !== undefined && i.dq !== undefined && i.qi !== undefined) {
-
- var D = new RSAKey();
- D.setPrivateEx(b64utohex(i.n), b64utohex(i.e), b64utohex(i.d), b64utohex(i.p), b64utohex(i.q), b64utohex(i.dp), b64utohex(i.dq), b64utohex(i.qi));
- return D
- }
- if (i.kty === "RSA" && i.n !== undefined && i.e !== undefined && i.d !== undefined) {
-
- var D = new RSAKey();
- D.setPrivate(b64utohex(i.n), b64utohex(i.e), b64utohex(i.d));
- return D
- }
- if (i.kty === "EC" && i.crv !== undefined && i.x !== undefined && i.y !== undefined && i.d === undefined) {
- var e = new KJUR.crypto.ECDSA({
- curve: i.crv
- });
- var n = e.ecparams.keylen / 4;
- var t = ("0000000000" + b64utohex(i.x)).slice( - n);
- var r = ("0000000000" + b64utohex(i.y)).slice( - n);
- var o = "04" + t + r;
- e.setPublicKeyHex(o);
- return e
- }
- if (i.kty === "EC" && i.crv !== undefined && i.x !== undefined && i.y !== undefined && i.d !== undefined) {
- var e = new KJUR.crypto.ECDSA({
- curve: i.crv
- });
- var n = e.ecparams.keylen / 4;
- var t = ("0000000000" + b64utohex(i.x)).slice( - n);
- var r = ("0000000000" + b64utohex(i.y)).slice( - n);
- var o = "04" + t + r;
- var b = ("0000000000" + b64utohex(i.d)).slice( - n);
- e.setPublicKeyHex(o);
- e.setPrivateKeyHex(b);
- return e
- }
- if (j === "pkcs5prv") {
-
- var A = i,
- w = ASN1HEX,
- C, D;
- C = w.getPosArrayOfChildren_AtObj(A, 0);
-
- if (C.length === 9) {
- D = new RSAKey();
- D.readPrivateKeyFromASN1HexString(i)
- } else {
- if (C.length === 6) {
- D = new KJUR.crypto.DSA();
- D.readPKCS5PrvKeyHex(A)
- } else {
- if (C.length > 2 && A.substr(C[1], 2) === "04") {
- D = new KJUR.crypto.ECDSA();
- D.readPKCS5PrvKeyHex(A)
- } else {
- throw "unsupported PKCS#1/5 hexadecimal key"
- }
- }
- }
-
- return D
- }
- if (j === "pkcs8prv") {
- var D = KEYUTIL.getKeyFromPlainPrivatePKCS8Hex(i);
- return D
- }
- if (j === "pkcs8pub") {
- return KEYUTIL.getKeyFromPublicPKCS8Hex(i)
- }
- if (j === "x509pub") {
- return X509.getPublicKeyFromCertHex(i)
- }
- if (i.indexOf("-END CERTIFICATE-", 0) != -1 || i.indexOf("-END X509 CERTIFICATE-", 0) != -1 || i.indexOf("-END TRUSTED CERTIFICATE-", 0) != -1) {
- return X509.getPublicKeyFromCertPEM(i)
- }
- if (i.indexOf("-END PUBLIC KEY-") != -1) {
- return KEYUTIL.getKeyFromPublicPKCS8PEM(i)
- }
- if (i.indexOf("-END RSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") == -1) {
- var k = ASN1HEX.pemToHex(i, "RSA PRIVATE KEY");
- return KEYUTIL.getKey(k, null, "pkcs5prv")
- }
- if (i.indexOf("-END DSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") == -1) {
- var z = ASN1HEX.pemToHex(i, "DSA PRIVATE KEY");
- var v = ASN1HEX.getVbyList(z, 0, [1], "02");
- var u = ASN1HEX.getVbyList(z, 0, [2], "02");
- var B = ASN1HEX.getVbyList(z, 0, [3], "02");
- var l = ASN1HEX.getVbyList(z, 0, [4], "02");
- var m = ASN1HEX.getVbyList(z, 0, [5], "02");
- var D = new KJUR.crypto.DSA();
- D.setPrivate(new BigInteger(v, 16), new BigInteger(u, 16), new BigInteger(B, 16), new BigInteger(l, 16), new BigInteger(m, 16));
- return D
- }
- if (i.indexOf("-END PRIVATE KEY-") != -1) {
- return KEYUTIL.getKeyFromPlainPrivatePKCS8PEM(i)
- }
- if (i.indexOf("-END RSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) {
- return KEYUTIL.getRSAKeyFromEncryptedPKCS5PEM(i, f)
- }
- if (i.indexOf("-END EC PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) {
- var z = KEYUTIL.getDecryptedKeyHex(i, f);
- var D = ASN1HEX.getVbyList(z, 0, [1], "04");
- var d = ASN1HEX.getVbyList(z, 0, [2, 0], "06");
- var s = ASN1HEX.getVbyList(z, 0, [3, 0], "03").substr(2);
- var c = "";
- if (KJUR.crypto.OID.oidhex2name[d] !== undefined) {
- c = KJUR.crypto.OID.oidhex2name[d]
- } else {
- throw "undefined OID(hex) in KJUR.crypto.OID: " + d
- }
- var e = new KJUR.crypto.ECDSA({
- curve: c
- });
- e.setPublicKeyHex(s);
- e.setPrivateKeyHex(D);
- e.isPublic = false;
- return e
- }
- if (i.indexOf("-END DSA PRIVATE KEY-") != -1 && i.indexOf("4,ENCRYPTED") != -1) {
- var z = KEYUTIL.getDecryptedKeyHex(i, f);
- var v = ASN1HEX.getVbyList(z, 0, [1], "02");
- var u = ASN1HEX.getVbyList(z, 0, [2], "02");
- var B = ASN1HEX.getVbyList(z, 0, [3], "02");
- var l = ASN1HEX.getVbyList(z, 0, [4], "02");
- var m = ASN1HEX.getVbyList(z, 0, [5], "02");
- var D = new KJUR.crypto.DSA();
- D.setPrivate(new BigInteger(v, 16), new BigInteger(u, 16), new BigInteger(B, 16), new BigInteger(l, 16), new BigInteger(m, 16));
- return D
- }
- if (i.indexOf("-END ENCRYPTED PRIVATE KEY-") != -1) {
- return KEYUTIL.getKeyFromEncryptedPKCS8PEM(i, f)
- }
- throw "not supported argument"
- };
- KEYUTIL.generateKeypair = function(a, c) {
- if (a == "RSA") {
- var b = c;
- var h = new RSAKey();
- h.generate(b, "10001");
- h.isPrivate = true;
- h.isPublic = true;
- var f = new RSAKey();
- var e = h.n.toString(16);
- var i = h.e.toString(16);
- f.setPublic(e, i);
- f.isPrivate = false;
- f.isPublic = true;
- var k = {};
- k.prvKeyObj = h;
- k.pubKeyObj = f;
- return k
- } else {
- if (a == "EC") {
- var d = c;
- var g = new KJUR.crypto.ECDSA({
- curve: d
- });
- var j = g.generateKeyPairHex();
- var h = new KJUR.crypto.ECDSA({
- curve: d
- });
- h.setPublicKeyHex(j.ecpubhex);
- h.setPrivateKeyHex(j.ecprvhex);
- h.isPrivate = true;
- h.isPublic = false;
- var f = new KJUR.crypto.ECDSA({
- curve: d
- });
- f.setPublicKeyHex(j.ecpubhex);
- f.isPrivate = false;
- f.isPublic = true;
- var k = {};
- k.prvKeyObj = h;
- k.pubKeyObj = f;
- return k
- } else {
- throw "unknown algorithm: " + a
- }
- }
- };
- KEYUTIL.getPEM = function(a, r, o, g, j) {
- var v = KJUR.asn1;
- var u = KJUR.crypto;
- function p(s) {
- var w = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 0
- },
- {
- "int": {
- bigint: s.n
- }
- },
- {
- "int": s.e
- },
- {
- "int": {
- bigint: s.d
- }
- },
- {
- "int": {
- bigint: s.p
- }
- },
- {
- "int": {
- bigint: s.q
- }
- },
- {
- "int": {
- bigint: s.dmp1
- }
- },
- {
- "int": {
- bigint: s.dmq1
- }
- },
- {
- "int": {
- bigint: s.coeff
- }
- }]
- });
- return w
- }
- function q(w) {
- var s = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 1
- },
- {
- octstr: {
- hex: w.prvKeyHex
- }
- },
- {
- tag: ["a0", true, {
- oid: {
- name: w.curveName
- }
- }]
- },
- {
- tag: ["a1", true, {
- bitstr: {
- hex: "00" + w.pubKeyHex
- }
- }]
- }]
- });
- return s
- }
- function n(s) {
- var w = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 0
- },
- {
- "int": {
- bigint: s.p
- }
- },
- {
- "int": {
- bigint: s.q
- }
- },
- {
- "int": {
- bigint: s.g
- }
- },
- {
- "int": {
- bigint: s.y
- }
- },
- {
- "int": {
- bigint: s.x
- }
- }]
- });
- return w
- }
- if (((typeof RSAKey != "undefined" && a instanceof RSAKey) || (typeof u.DSA != "undefined" && a instanceof u.DSA) || (typeof u.ECDSA != "undefined" && a instanceof u.ECDSA)) && a.isPublic == true && (r === undefined || r == "PKCS8PUB")) {
- var t = new KJUR.asn1.x509.SubjectPublicKeyInfo(a);
- var m = t.getEncodedHex();
- return v.ASN1Util.getPEMStringFromHex(m, "PUBLIC KEY")
- }
- if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o === undefined || o == null) && a.isPrivate == true) {
- var t = p(a);
- var m = t.getEncodedHex();
- return v.ASN1Util.getPEMStringFromHex(m, "RSA PRIVATE KEY")
- }
- if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof KJUR.crypto.ECDSA && (o === undefined || o == null) && a.isPrivate == true) {
- var f = new KJUR.asn1.DERObjectIdentifier({
- name: a.curveName
- });
- var l = f.getEncodedHex();
- var e = q(a);
- var k = e.getEncodedHex();
- var i = "";
- i += v.ASN1Util.getPEMStringFromHex(l, "EC PARAMETERS");
- i += v.ASN1Util.getPEMStringFromHex(k, "EC PRIVATE KEY");
- return i
- }
- if (r == "PKCS1PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o === undefined || o == null) && a.isPrivate == true) {
- var t = n(a);
- var m = t.getEncodedHex();
- return v.ASN1Util.getPEMStringFromHex(m, "DSA PRIVATE KEY")
- }
- if (r == "PKCS5PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o !== undefined && o != null) && a.isPrivate == true) {
- var t = p(a);
- var m = t.getEncodedHex();
- if (g === undefined) {
- g = "DES-EDE3-CBC"
- }
- return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", m, o, g)
- }
- if (r == "PKCS5PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && (o !== undefined && o != null) && a.isPrivate == true) {
- var t = q(a);
- var m = t.getEncodedHex();
- if (g === undefined) {
- g = "DES-EDE3-CBC"
- }
- return this.getEncryptedPKCS5PEMFromPrvKeyHex("EC", m, o, g)
- }
- if (r == "PKCS5PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o !== undefined && o != null) && a.isPrivate == true) {
- var t = n(a);
- var m = t.getEncodedHex();
- if (g === undefined) {
- g = "DES-EDE3-CBC"
- }
- return this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA", m, o, g)
- }
- var h = function(w, s) {
- var y = b(w, s);
- var x = new KJUR.asn1.ASN1Util.newObject({
- seq: [{
- seq: [{
- oid: {
- name: "pkcs5PBES2"
- }
- },
- {
- seq: [{
- seq: [{
- oid: {
- name: "pkcs5PBKDF2"
- }
- },
- {
- seq: [{
- octstr: {
- hex: y.pbkdf2Salt
- }
- },
- {
- "int": y.pbkdf2Iter
- }]
- }]
- },
- {
- seq: [{
- oid: {
- name: "des-EDE3-CBC"
- }
- },
- {
- octstr: {
- hex: y.encryptionSchemeIV
- }
- }]
- }]
- }]
- },
- {
- octstr: {
- hex: y.ciphertext
- }
- }]
- });
- return x.getEncodedHex()
- };
- var b = function(D, E) {
- var x = 100;
- var C = CryptoJS.lib.WordArray.random(8);
- var B = "DES-EDE3-CBC";
- var s = CryptoJS.lib.WordArray.random(8);
- var y = CryptoJS.PBKDF2(E, C, {
- keySize: 192 / 32,
- iterations: x
- });
- var z = CryptoJS.enc.Hex.parse(D);
- var A = CryptoJS.TripleDES.encrypt(z, y, {
- iv: s
- }) + "";
- var w = {};
- w.ciphertext = A;
- w.pbkdf2Salt = CryptoJS.enc.Hex.stringify(C);
- w.pbkdf2Iter = x;
- w.encryptionSchemeAlg = B;
- w.encryptionSchemeIV = CryptoJS.enc.Hex.stringify(s);
- return w
- };
- if (r == "PKCS8PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && a.isPrivate == true) {
- var d = p(a);
- var c = d.getEncodedHex();
- var t = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 0
- },
- {
- seq: [{
- oid: {
- name: "rsaEncryption"
- }
- },
- {
- "null": true
- }]
- },
- {
- octstr: {
- hex: c
- }
- }]
- });
- var m = t.getEncodedHex();
- if (o === undefined || o == null) {
- return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
- } else {
- var k = h(m, o);
- return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
- }
- }
- if (r == "PKCS8PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && a.isPrivate == true) {
- var d = new KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 1
- },
- {
- octstr: {
- hex: a.prvKeyHex
- }
- },
- {
- tag: ["a1", true, {
- bitstr: {
- hex: "00" + a.pubKeyHex
- }
- }]
- }]
- });
- var c = d.getEncodedHex();
- var t = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 0
- },
- {
- seq: [{
- oid: {
- name: "ecPublicKey"
- }
- },
- {
- oid: {
- name: a.curveName
- }
- }]
- },
- {
- octstr: {
- hex: c
- }
- }]
- });
- var m = t.getEncodedHex();
- if (o === undefined || o == null) {
- return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
- } else {
- var k = h(m, o);
- return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
- }
- }
- if (r == "PKCS8PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && a.isPrivate == true) {
- var d = new KJUR.asn1.DERInteger({
- bigint: a.x
- });
- var c = d.getEncodedHex();
- var t = KJUR.asn1.ASN1Util.newObject({
- seq: [{
- "int": 0
- },
- {
- seq: [{
- oid: {
- name: "dsa"
- }
- },
- {
- seq: [{
- "int": {
- bigint: a.p
- }
- },
- {
- "int": {
- bigint: a.q
- }
- },
- {
- "int": {
- bigint: a.g
- }
- }]
- }]
- },
- {
- octstr: {
- hex: c
- }
- }]
- });
- var m = t.getEncodedHex();
- if (o === undefined || o == null) {
- return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
- } else {
- var k = h(m, o);
- return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
- }
- }
- throw "unsupported object nor format"
- };
- KEYUTIL.getKeyFromCSRPEM = function(b) {
- var a = ASN1HEX.pemToHex(b, "CERTIFICATE REQUEST");
- var c = KEYUTIL.getKeyFromCSRHex(a);
- return c
- };
- KEYUTIL.getKeyFromCSRHex = function(a) {
- var c = KEYUTIL.parseCSRHex(a);
- var b = KEYUTIL.getKey(c.p8pubkeyhex, null, "pkcs8pub");
- return b
- };
- KEYUTIL.parseCSRHex = function(c) {
- var b = {};
- var e = c;
- if (e.substr(0, 2) != "30") {
- throw "malformed CSR(code:001)"
- }
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
- if (d.length < 1) {
- throw "malformed CSR(code:002)"
- }
- if (e.substr(d[0], 2) != "30") {
- throw "malformed CSR(code:003)"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(e, d[0]);
- if (a.length < 3) {
- throw "malformed CSR(code:004)"
- }
- b.p8pubkeyhex = ASN1HEX.getHexOfTLV_AtObj(e, a[2]);
- return b
- };
- KEYUTIL.getJWKFromKey = function(d) {
- var b = {};
- if (d instanceof RSAKey && d.isPrivate) {
- b.kty = "RSA";
- b.n = hextob64u(d.n.toString(16));
- b.e = hextob64u(d.e.toString(16));
- b.d = hextob64u(d.d.toString(16));
- b.p = hextob64u(d.p.toString(16));
- b.q = hextob64u(d.q.toString(16));
- b.dp = hextob64u(d.dmp1.toString(16));
- b.dq = hextob64u(d.dmq1.toString(16));
- b.qi = hextob64u(d.coeff.toString(16));
- return b
- } else {
- if (d instanceof RSAKey && d.isPublic) {
- b.kty = "RSA";
- b.n = hextob64u(d.n.toString(16));
- b.e = hextob64u(d.e.toString(16));
- return b
- } else {
- if (d instanceof KJUR.crypto.ECDSA && d.isPrivate) {
- var a = d.getShortNISTPCurveName();
- if (a !== "P-256" && a !== "P-384") {
- throw "unsupported curve name for JWT: " + a
- }
- var c = d.getPublicKeyXYHex();
- b.kty = "EC";
- b.crv = a;
- b.x = hextob64u(c.x);
- b.y = hextob64u(c.y);
- b.d = hextob64u(d.prvKeyHex);
- return b
- } else {
- if (d instanceof KJUR.crypto.ECDSA && d.isPublic) {
- var a = d.getShortNISTPCurveName();
- if (a !== "P-256" && a !== "P-384") {
- throw "unsupported curve name for JWT: " + a
- }
- var c = d.getPublicKeyXYHex();
- b.kty = "EC";
- b.crv = a;
- b.x = hextob64u(c.x);
- b.y = hextob64u(c.y);
- return b
- }
- }
- }
- }
- throw "not supported key object"
- };
- /*! rsapem-1.2.0.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- RSAKey.pemToBase64 = function(b) {
- var a = b;
- a = a.replace("-----BEGIN RSA PRIVATE KEY-----", "");
- a = a.replace("-----END RSA PRIVATE KEY-----", "");
- a = a.replace(/[ \n]+/g, "");
- return a
- };
- RSAKey.getPosArrayOfChildrenFromHex = function(g) {
- var j = new Array();
- var i = ASN1HEX.getStartPosOfV_AtObj(g, 0);
- var b = ASN1HEX.getPosOfNextSibling_AtObj(g, i);
- var e = ASN1HEX.getPosOfNextSibling_AtObj(g, b);
- var f = ASN1HEX.getPosOfNextSibling_AtObj(g, e);
- var l = ASN1HEX.getPosOfNextSibling_AtObj(g, f);
- var k = ASN1HEX.getPosOfNextSibling_AtObj(g, l);
- var d = ASN1HEX.getPosOfNextSibling_AtObj(g, k);
- var c = ASN1HEX.getPosOfNextSibling_AtObj(g, d);
- var h = ASN1HEX.getPosOfNextSibling_AtObj(g, c);
- j.push(i, b, e, f, l, k, d, c, h);
- return j
- };
- RSAKey.getHexValueArrayOfChildrenFromHex = function(f) {
- var l = RSAKey.getPosArrayOfChildrenFromHex(f);
- var e = ASN1HEX.getHexOfV_AtObj(f, l[0]);
- var j = ASN1HEX.getHexOfV_AtObj(f, l[1]);
- var b = ASN1HEX.getHexOfV_AtObj(f, l[2]);
- var c = ASN1HEX.getHexOfV_AtObj(f, l[3]);
- var h = ASN1HEX.getHexOfV_AtObj(f, l[4]);
- var g = ASN1HEX.getHexOfV_AtObj(f, l[5]);
- var m = ASN1HEX.getHexOfV_AtObj(f, l[6]);
- var k = ASN1HEX.getHexOfV_AtObj(f, l[7]);
- var d = ASN1HEX.getHexOfV_AtObj(f, l[8]);
- var i = new Array();
- i.push(e, j, b, c, h, g, m, k, d);
- return i
- };
- RSAKey.prototype.readPrivateKeyFromPEMString = function(e) {
- var c = RSAKey.pemToBase64(e);
- var d = b64tohex(c);
- var b = RSAKey.getHexValueArrayOfChildrenFromHex(d);
- this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])
- };
- RSAKey.prototype.readPrivateKeyFromASN1HexString = function(a) {
- this.readPKCS5PrvKeyHex(a)
- };
- RSAKey.prototype.readPKCS5PrvKeyHex = function(c) {
- var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);
- this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])
- };
- RSAKey.prototype.readPKCS8PrvKeyHex = function(e) {
- var c, j, l, b, a, f, d, k;
- var m = ASN1HEX;
- var g = m.getVbyList;
- if (m.isASN1HEX(e) === false) {
- throw "not ASN.1 hex string"
- }
- try {
- c = g(e, 0, [2, 0, 1], "02");
- j = g(e, 0, [2, 0, 2], "02");
- l = g(e, 0, [2, 0, 3], "02");
- b = g(e, 0, [2, 0, 4], "02");
- a = g(e, 0, [2, 0, 5], "02");
- f = g(e, 0, [2, 0, 6], "02");
- d = g(e, 0, [2, 0, 7], "02");
- k = g(e, 0, [2, 0, 8], "02")
- } catch(i) {
- throw "malformed PKCS#8 plain RSA private key"
- }
- this.setPrivateEx(c, j, l, b, a, f, d, k)
- };
- RSAKey.prototype.readPKCS5PubKeyHex = function(b) {
- if (ASN1HEX.isASN1HEX(b) === false) {
- throw "keyHex is not ASN.1 hex string"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(b, 0);
- if (a.length !== 2 || b.substr(a[0], 2) !== "02" || b.substr(a[1], 2) !== "02") {
- throw "wrong hex for PKCS#5 public key"
- }
- var d = ASN1HEX.getHexOfV_AtObj(b, a[0]);
- var c = ASN1HEX.getHexOfV_AtObj(b, a[1]);
- this.setPublic(d, c)
- };
- RSAKey.prototype.readPKCS8PubKeyHex = function(b) {
- if (ASN1HEX.isASN1HEX(b) === false) {
- throw "not ASN.1 hex string"
- }
- if (ASN1HEX.getDecendantHexTLVByNthList(b, 0, [0, 0]) !== "06092a864886f70d010101") {
- throw "not PKCS8 RSA public key"
- }
- var a = ASN1HEX.getDecendantHexTLVByNthList(b, 0, [1, 0]);
- this.readPKCS5PubKeyHex(a)
- };
- RSAKey.prototype.readCertPubKeyHex = function(b, c) {
- if (c !== 5) {
- c = 6
- }
- if (ASN1HEX.isASN1HEX(b) === false) {
- throw "not ASN.1 hex string"
- }
- var a = ASN1HEX.getDecendantHexTLVByNthList(b, 0, [0, c]);
- this.readPKCS8PubKeyHex(a)
- };
- /*! rsasign-1.2.7.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- var _RE_HEXDECONLY = new RegExp("");
- _RE_HEXDECONLY.compile("[^0-9a-f]", "gi");
- function _rsasign_getHexPaddedDigestInfoForString(d, e, a) {
- var b = function(f) {
- return KJUR.crypto.Util.hashString(f, a)
- };
- var c = b(d);
- return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e)
- }
- function _zeroPaddingOfSignature(e, d) {
- var c = "";
- var a = d / 4 - e.length;
- for (var b = 0; b < a; b++) {
- c = c + "0"
- }
- return c + e
- }
- function _rsasign_signString(d, a) {
-
- var b = function(e) {
- return KJUR.crypto.Util.hashString(e, a)
- };
- var c = b(d);
- return this.signWithMessageHash(c, a)
- }
- function _rsasign_signWithMessageHash(e, c) {
- var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength());
- var b = parseBigInt(f, 16);
- var d = this.doPrivate(b);
- var a = d.toString(16);
- return _zeroPaddingOfSignature(a, this.n.bitLength())
- }
- function _rsasign_signStringWithSHA1(a) {
- return _rsasign_signString.call(this, a, "sha1")
- }
- function _rsasign_signStringWithSHA256(a) {
- return _rsasign_signString.call(this, a, "sha256")
- }
- function pss_mgf1_str(c, a, e) {
- var b = "",
- d = 0;
- while (b.length < a) {
- b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))));
- d += 1
- }
- return b
- }
- function _rsasign_signStringPSS(e, a, d) {
- var c = function(f) {
- return KJUR.crypto.Util.hashHex(f, a)
- };
- var b = c(rstrtohex(e));
- if (d === undefined) {
- d = -1
- }
- return this.signWithMessageHashPSS(b, a, d)
- }
- function _rsasign_signWithMessageHashPSS(l, a, k) {
- var b = hextorstr(l);
- var g = b.length;
- var m = this.n.bitLength() - 1;
- var c = Math.ceil(m / 8);
- var d;
- var o = function(i) {
- return KJUR.crypto.Util.hashHex(i, a)
- };
- if (k === -1 || k === undefined) {
- k = g
- } else {
- if (k === -2) {
- k = c - g - 2
- } else {
- if (k < -2) {
- throw "invalid salt length"
- }
- }
- }
- if (c < (g + k + 2)) {
- throw "data too long"
- }
- var f = "";
- if (k > 0) {
- f = new Array(k);
- new SecureRandom().nextBytes(f);
- f = String.fromCharCode.apply(String, f)
- }
- var n = hextorstr(o(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + b + f)));
- var j = [];
- for (d = 0; d < c - k - g - 2; d += 1) {
- j[d] = 0
- }
- var e = String.fromCharCode.apply(String, j) + "\x01" + f;
- var h = pss_mgf1_str(n, e.length, o);
- var q = [];
- for (d = 0; d < e.length; d += 1) {
- q[d] = e.charCodeAt(d) ^ h.charCodeAt(d)
- }
- var p = (65280 >> (8 * c - m)) & 255;
- q[0] &= ~p;
- for (d = 0; d < g; d++) {
- q.push(n.charCodeAt(d))
- }
- q.push(188);
- return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength())
- }
- function _rsasign_getDecryptSignatureBI(a, d, c) {
- var b = new RSAKey();
- b.setPublic(d, c);
- var e = b.doPublic(a);
- return e
- }
- function _rsasign_getHexDigestInfoFromSig(a, c, b) {
- var e = _rsasign_getDecryptSignatureBI(a, c, b);
- var d = e.toString(16).replace(/^1f+00/, "");
- return d
- }
- function _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) {
- for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) {
- var d = KJUR.crypto.Util.DIGESTINFOHEAD[e];
- var b = d.length;
- if (f.substring(0, b) == d) {
- var c = [e, f.substring(b)];
- return c
- }
- }
- return []
- }
- function _rsasign_verifySignatureWithArgs(f, b, g, j) {
- var e = _rsasign_getHexDigestInfoFromSig(b, g, j);
- var h = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);
- if (h.length == 0) {
- return false
- }
- var d = h[0];
- var i = h[1];
- var a = function(k) {
- return KJUR.crypto.Util.hashString(k, d)
- };
- var c = a(f);
- return (i == c)
- }
- function _rsasign_verifyHexSignatureForMessage(c, b) {
- var d = parseBigInt(c, 16);
- var a = _rsasign_verifySignatureWithArgs(b, d, this.n.toString(16), this.e.toString(16));
- return a
- }
- function _rsasign_verifyString(f, j) {
- j = j.replace(_RE_HEXDECONLY, "");
- j = j.replace(/[ \n]+/g, "");
- var b = parseBigInt(j, 16);
- if (b.bitLength() > this.n.bitLength()) {
- return 0
- }
- var i = this.doPublic(b);
- var e = i.toString(16).replace(/^1f+00/, "");
- var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);
- if (g.length == 0) {
- return false
- }
- var d = g[0];
- var h = g[1];
- var a = function(k) {
- return KJUR.crypto.Util.hashString(k, d)
- };
- var c = a(f);
- return (h == c)
- }
- function _rsasign_verifyWithMessageHash(e, a) {
- a = a.replace(_RE_HEXDECONLY, "");
- a = a.replace(/[ \n]+/g, "");
- var b = parseBigInt(a, 16);
- if (b.bitLength() > this.n.bitLength()) {
- return 0
- }
- var h = this.doPublic(b);
- var g = h.toString(16).replace(/^1f+00/, "");
- var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g);
- if (c.length == 0) {
- return false
- }
- var d = c[0];
- var f = c[1];
- return (f == e)
- }
- function _rsasign_verifyStringPSS(c, b, a, f) {
- var e = function(g) {
- return KJUR.crypto.Util.hashHex(g, a)
- };
- var d = e(rstrtohex(c));
- if (f === undefined) {
- f = -1
- }
- return this.verifyWithMessageHashPSS(d, b, a, f)
- }
- function _rsasign_verifyWithMessageHashPSS(f, s, l, c) {
- var k = new BigInteger(s, 16);
- if (k.bitLength() > this.n.bitLength()) {
- return false
- }
- var r = function(i) {
- return KJUR.crypto.Util.hashHex(i, l)
- };
- var j = hextorstr(f);
- var h = j.length;
- var g = this.n.bitLength() - 1;
- var m = Math.ceil(g / 8);
- var q;
- if (c === -1 || c === undefined) {
- c = h
- } else {
- if (c === -2) {
- c = m - h - 2
- } else {
- if (c < -2) {
- throw "invalid salt length"
- }
- }
- }
- if (m < (h + c + 2)) {
- throw "data too long"
- }
- var a = this.doPublic(k).toByteArray();
- for (q = 0; q < a.length; q += 1) {
- a[q] &= 255
- }
- while (a.length < m) {
- a.unshift(0)
- }
- if (a[m - 1] !== 188) {
- throw "encoded message does not end in 0xbc"
- }
- a = String.fromCharCode.apply(String, a);
- var d = a.substr(0, m - h - 1);
- var e = a.substr(d.length, h);
- var p = (65280 >> (8 * m - g)) & 255;
- if ((d.charCodeAt(0) & p) !== 0) {
- throw "bits beyond keysize not zero"
- }
- var n = pss_mgf1_str(e, d.length, r);
- var o = [];
- for (q = 0; q < d.length; q += 1) {
- o[q] = d.charCodeAt(q) ^ n.charCodeAt(q)
- }
- o[0] &= ~p;
- var b = m - h - c - 2;
- for (q = 0; q < b; q += 1) {
- if (o[q] !== 0) {
- throw "leftmost octets not zero"
- }
- }
- if (o[b] !== 1) {
- throw "0x01 marker not found"
- }
- return e === hextorstr(r(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + j + String.fromCharCode.apply(String, o.slice( - c)))))
- }
- RSAKey.prototype.signWithMessageHash = _rsasign_signWithMessageHash;
- RSAKey.prototype.signString = _rsasign_signString;
- RSAKey.prototype.signStringWithSHA1 = _rsasign_signStringWithSHA1;
- RSAKey.prototype.signStringWithSHA256 = _rsasign_signStringWithSHA256;
- RSAKey.prototype.sign = _rsasign_signString;
- RSAKey.prototype.signWithSHA1 = _rsasign_signStringWithSHA1;
- RSAKey.prototype.signWithSHA256 = _rsasign_signStringWithSHA256;
- RSAKey.prototype.signWithMessageHashPSS = _rsasign_signWithMessageHashPSS;
- RSAKey.prototype.signStringPSS = _rsasign_signStringPSS;
- RSAKey.prototype.signPSS = _rsasign_signStringPSS;
- RSAKey.SALT_LEN_HLEN = -1;
- RSAKey.SALT_LEN_MAX = -2;
- RSAKey.prototype.verifyWithMessageHash = _rsasign_verifyWithMessageHash;
- RSAKey.prototype.verifyString = _rsasign_verifyString;
- RSAKey.prototype.verifyHexSignatureForMessage = _rsasign_verifyHexSignatureForMessage;
- RSAKey.prototype.verify = _rsasign_verifyString;
- RSAKey.prototype.verifyHexSignatureForByteArrayMessage = _rsasign_verifyHexSignatureForMessage;
- RSAKey.prototype.verifyWithMessageHashPSS = _rsasign_verifyWithMessageHashPSS;
- RSAKey.prototype.verifyStringPSS = _rsasign_verifyStringPSS;
- RSAKey.prototype.verifyPSS = _rsasign_verifyStringPSS;
- RSAKey.SALT_LEN_RECOVER = -2;
- /*! x509-1.1.12.js (c) 2012-2017 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- function X509() {
- this.subjectPublicKeyRSA = null;
- this.subjectPublicKeyRSA_hN = null;
- this.subjectPublicKeyRSA_hE = null;
- this.hex = null;
- this.getSerialNumberHex = function() {
- return ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 1])
- };
- this.getSignatureAlgorithmField = function() {
- var b = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 2, 0]);
- var a = KJUR.asn1.ASN1Util.oidHexToInt(b);
- var c = KJUR.asn1.x509.OID.oid2name(a);
- return c
- };
- this.getIssuerHex = function() {
- return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3])
- };
- this.getIssuerString = function() {
- return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3]))
- };
- this.getSubjectHex = function() {
- return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5])
- };
- this.getSubjectString = function() {
- return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5]))
- };
- this.getNotBefore = function() {
- var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 0]);
- a = a.replace(/(..)/g, "%$1");
- a = decodeURIComponent(a);
- return a
- };
- this.getNotAfter = function() {
- var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 1]);
- a = a.replace(/(..)/g, "%$1");
- a = decodeURIComponent(a);
- return a
- };
- this.readCertPEM = function(c) {
- var e = ASN1HEX.pemToHex(c);
- var b = X509.getPublicKeyHexArrayFromCertHex(e);
- var d = new RSAKey();
- d.setPublic(b[0], b[1]);
- this.subjectPublicKeyRSA = d;
- this.subjectPublicKeyRSA_hN = b[0];
- this.subjectPublicKeyRSA_hE = b[1];
- this.hex = e
- };
- this.readCertPEMWithoutRSAInit = function(c) {
- var d = ASN1HEX.pemToHex(c);
- var b = X509.getPublicKeyHexArrayFromCertHex(d);
- if (typeof this.subjectPublicKeyRSA.setPublic === "function") {
- this.subjectPublicKeyRSA.setPublic(b[0], b[1])
- }
- this.subjectPublicKeyRSA_hN = b[0];
- this.subjectPublicKeyRSA_hE = b[1];
- this.hex = d
- };
- this.getInfo = function() {
- var p = "Basic Fields\n";
- p += " serial number: " + this.getSerialNumberHex() + "\n";
- p += " signature algorithm: " + this.getSignatureAlgorithmField() + "\n";
- p += " issuer: " + this.getIssuerString() + "\n";
- p += " notBefore: " + this.getNotBefore() + "\n";
- p += " notAfter: " + this.getNotAfter() + "\n";
- p += " subject: " + this.getSubjectString() + "\n";
- p += " subject public key info: \n";
- var j = X509.getSubjectPublicKeyInfoPosFromCertHex(this.hex);
- var d = ASN1HEX.getHexOfTLV_AtObj(this.hex, j);
- var n = KEYUTIL.getKey(d, null, "pkcs8pub");
- if (n instanceof RSAKey) {
- p += " key algorithm: RSA\n";
- p += " n=" + n.n.toString(16).substr(0, 16) + "...\n";
- p += " e=" + n.e.toString(16) + "\n"
- }
- p += "X509v3 Extensions:\n";
- var m = X509.getV3ExtInfoListOfCertHex(this.hex);
- for (var e = 0; e < m.length; e++) {
- var b = m[e];
- var o = KJUR.asn1.x509.OID.oid2name(b.oid);
- if (o === "") {
- o = b.oid
- }
- var k = "";
- if (b.critical === true) {
- k = "CRITICAL"
- }
- p += " " + o + " " + k + ":\n";
- if (o === "basicConstraints") {
- var g = X509.getExtBasicConstraints(this.hex);
- if (g.cA === undefined) {
- p += " {}\n"
- } else {
- p += " cA=true";
- if (g.pathLen !== undefined) {
- p += ", pathLen=" + g.pathLen
- }
- p += "\n"
- }
- } else {
- if (o === "keyUsage") {
- p += " " + X509.getExtKeyUsageString(this.hex) + "\n"
- } else {
- if (o === "subjectKeyIdentifier") {
- p += " " + X509.getExtSubjectKeyIdentifier(this.hex) + "\n"
- } else {
- if (o === "authorityKeyIdentifier") {
- var a = X509.getExtAuthorityKeyIdentifier(this.hex);
- if (a.kid !== undefined) {
- p += " kid=" + a.kid + "\n"
- }
- } else {
- if (o === "extKeyUsage") {
- var h = X509.getExtExtKeyUsageName(this.hex);
- p += " " + h.join(", ") + "\n"
- } else {
- if (o === "subjectAltName") {
- var f = X509.getExtSubjectAltName(this.hex);
- p += " " + f.join(", ") + "\n"
- } else {
- if (o === "cRLDistributionPoints") {
- var l = X509.getExtCRLDistributionPointsURI(this.hex);
- p += " " + l + "\n"
- } else {
- if (o === "authorityInfoAccess") {
- var c = X509.getExtAIAInfo(this.hex);
- if (c.ocsp !== undefined) {
- p += " ocsp: " + c.ocsp.join(",") + "\n"
- }
- if (c.caissuer !== undefined) {
- p += " caissuer: " + c.caissuer.join(",") + "\n"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- p += "signature algorithm: " + X509.getSignatureAlgorithmName(this.hex) + "\n";
- p += "signature: " + X509.getSignatureValueHex(this.hex).substr(0, 16) + "...\n";
- return p
- }
- }
- X509.pemToBase64 = function(a) {
- var b = a;
- b = b.replace("-----BEGIN CERTIFICATE-----", "");
- b = b.replace("-----END CERTIFICATE-----", "");
- b = b.replace(/[ \n]+/g, "");
- return b
- };
- X509.pemToHex = function(a) {
- return ASN1HEX.pemToHex(a)
- };
- X509.getSubjectPublicKeyPosFromCertHex = function(f) {
- var e = X509.getSubjectPublicKeyInfoPosFromCertHex(f);
- if (e == -1) {
- return - 1
- }
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e);
- if (b.length != 2) {
- return - 1
- }
- var d = b[1];
- if (f.substring(d, d + 2) != "03") {
- return - 1
- }
- var c = ASN1HEX.getStartPosOfV_AtObj(f, d);
- if (f.substring(c, c + 2) != "00") {
- return - 1
- }
- return c + 2
- };
- X509.getSubjectPublicKeyInfoPosFromCertHex = function(d) {
- var c = ASN1HEX.getStartPosOfV_AtObj(d, 0);
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, c);
- if (b.length < 1) {
- return - 1
- }
- if (d.substring(b[0], b[0] + 10) == "a003020102") {
- if (b.length < 6) {
- return - 1
- }
- return b[6]
- } else {
- if (b.length < 5) {
- return - 1
- }
- return b[5]
- }
- };
- X509.getPublicKeyHexArrayFromCertHex = function(f) {
- var e = X509.getSubjectPublicKeyPosFromCertHex(f);
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e);
- if (b.length != 2) {
- return []
- }
- var d = ASN1HEX.getHexOfV_AtObj(f, b[0]);
- var c = ASN1HEX.getHexOfV_AtObj(f, b[1]);
- if (d != null && c != null) {
- return [d, c]
- } else {
- return []
- }
- };
- X509.getHexTbsCertificateFromCert = function(b) {
- var a = ASN1HEX.getStartPosOfV_AtObj(b, 0);
- return a
- };
- X509.getPublicKeyHexArrayFromCertPEM = function(c) {
- var d = ASN1HEX.pemToHex(c);
- var b = X509.getPublicKeyHexArrayFromCertHex(d);
- return b
- };
- X509.hex2dn = function(f, b) {
- if (b === undefined) {
- b = 0
- }
- if (f.substr(b, 2) !== "30") {
- throw "malformed DN"
- }
- var c = new Array();
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, b);
- for (var e = 0; e < d.length; e++) {
- c.push(X509.hex2rdn(f, d[e]))
- }
- c = c.map(function(a) {
- return a.replace("/", "\\/")
- });
- return "/" + c.join("/")
- };
- X509.hex2rdn = function(f, b) {
- if (b === undefined) {
- b = 0
- }
- if (f.substr(b, 2) !== "31") {
- throw "malformed RDN"
- }
- var c = new Array();
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, b);
- for (var e = 0; e < d.length; e++) {
- c.push(X509.hex2attrTypeValue(f, d[e]))
- }
- c = c.map(function(a) {
- return a.replace("+", "\\+")
- });
- return c.join("+")
- };
- X509.hex2attrTypeValue = function(g, b) {
- if (b === undefined) {
- b = 0
- }
- if (g.substr(b, 2) !== "30") {
- throw "malformed attribute type and value"
- }
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(g, b);
- if (c.length !== 2 || g.substr(c[0], 2) !== "06") {
- "malformed attribute type and value"
- }
- var d = ASN1HEX.getHexOfV_AtObj(g, c[0]);
- var h = KJUR.asn1.ASN1Util.oidHexToInt(d);
- var f = KJUR.asn1.x509.OID.oid2atype(h);
- var a = ASN1HEX.getHexOfV_AtObj(g, c[1]);
- var e = hextorstr(a);
- return f + "=" + e
- };
- X509.getPublicKeyFromCertHex = function(c) {
- var a, e, b;
- var g = 6;
- var d = ASN1HEX;
- var f = d.getVbyList;
- b = d.getDecendantHexTLVByNthList(c, 0, [0, 0]);
- if (b !== "a003020102") {
- g = 5
- }
- e = f(c, 0, [0, g, 0, 0], "06");
- if (e === "2a864886f70d010101") {
- a = new RSAKey()
- } else {
- if (e === "2a8648ce380401") {
- a = new KJUR.crypto.DSA()
- } else {
- if (e === "2a8648ce3d0201") {
- a = new KJUR.crypto.ECDSA()
- } else {
- throw "unsupported public key in X.509 cert"
- }
- }
- }
- a.readCertPubKeyHex(c, g);
- return a
- };
- X509.getPublicKeyFromCertPEM = function(a) {
- var c = ASN1HEX;
- var b = c.pemToHex(a);
- return X509.getPublicKeyFromCertHex(b)
- };
- X509.getPublicKeyInfoPropOfCertPEM = function(e) {
- var i = {};
- i.algparam = null;
- var f = ASN1HEX.pemToHex(e);
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0);
- if (d.length != 3) {
- throw "malformed X.509 certificate PEM (code:001)"
- }
- if (f.substr(d[0], 2) != "30") {
- throw "malformed X.509 certificate PEM (code:002)"
- }
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, d[0]);
- var g = 6;
- if (f.substr(c[0], 2) !== "a0") {
- g = 5
- }
- if (c.length < g + 1) {
- throw "malformed X.509 certificate PEM (code:003)"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(f, c[g]);
- if (a.length != 2) {
- throw "malformed X.509 certificate PEM (code:004)"
- }
- var h = ASN1HEX.getPosArrayOfChildren_AtObj(f, a[0]);
- if (h.length != 2) {
- throw "malformed X.509 certificate PEM (code:005)"
- }
- i.algoid = ASN1HEX.getHexOfV_AtObj(f, h[0]);
- if (f.substr(h[1], 2) == "06") {
- i.algparam = ASN1HEX.getHexOfV_AtObj(f, h[1])
- } else {
- if (f.substr(h[1], 2) == "30") {
- i.algparam = ASN1HEX.getHexOfTLV_AtObj(f, h[1])
- }
- }
- if (f.substr(a[1], 2) != "03") {
- throw "malformed X.509 certificate PEM (code:006)"
- }
- var b = ASN1HEX.getHexOfV_AtObj(f, a[1]);
- i.keyhex = b.substr(2);
- return i
- };
- X509.getPublicKeyInfoPosOfCertHEX = function(c) {
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0);
- if (b.length != 3) {
- throw "malformed X.509 certificate PEM (code:001)"
- }
- if (c.substr(b[0], 2) != "30") {
- throw "malformed X.509 certificate PEM (code:002)"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(c, b[0]);
- if (a.length < 7) {
- throw "malformed X.509 certificate PEM (code:003)"
- }
- return a[6]
- };
- X509.getV3ExtInfoListOfCertHex = function(g) {
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(g, 0);
- if (b.length != 3) {
- throw "malformed X.509 certificate PEM (code:001)"
- }
- if (g.substr(b[0], 2) != "30") {
- throw "malformed X.509 certificate PEM (code:002)"
- }
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(g, b[0]);
- if (a.length < 8) {
- throw "malformed X.509 certificate PEM (code:003)"
- }
- if (g.substr(a[7], 2) != "a3") {
- throw "malformed X.509 certificate PEM (code:004)"
- }
- var h = ASN1HEX.getPosArrayOfChildren_AtObj(g, a[7]);
- if (h.length != 1) {
- throw "malformed X.509 certificate PEM (code:005)"
- }
- if (g.substr(h[0], 2) != "30") {
- throw "malformed X.509 certificate PEM (code:006)"
- }
- var f = ASN1HEX.getPosArrayOfChildren_AtObj(g, h[0]);
- var e = f.length;
- var d = new Array(e);
- for (var c = 0; c < e; c++) {
- d[c] = X509.getV3ExtItemInfo_AtObj(g, f[c])
- }
- return d
- };
- X509.getV3ExtItemInfo_AtObj = function(f, g) {
- var e = {};
- e.posTLV = g;
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, g);
- if (b.length != 2 && b.length != 3) {
- throw "malformed X.509v3 Ext (code:001)"
- }
- if (f.substr(b[0], 2) != "06") {
- throw "malformed X.509v3 Ext (code:002)"
- }
- var d = ASN1HEX.getHexOfV_AtObj(f, b[0]);
- e.oid = ASN1HEX.hextooidstr(d);
- e.critical = false;
- if (b.length == 3) {
- e.critical = true
- }
- var c = b[b.length - 1];
- if (f.substr(c, 2) != "04") {
- throw "malformed X.509v3 Ext (code:003)"
- }
- e.posV = ASN1HEX.getStartPosOfV_AtObj(f, c);
- return e
- };
- X509.getHexOfTLV_V3ExtValue = function(b, a) {
- var c = X509.getPosOfTLV_V3ExtValue(b, a);
- if (c == -1) {
- return null
- }
- return ASN1HEX.getHexOfTLV_AtObj(b, c)
- };
- X509.getHexOfV_V3ExtValue = function(b, a) {
- var c = X509.getPosOfTLV_V3ExtValue(b, a);
- if (c == -1) {
- return null
- }
- return ASN1HEX.getHexOfV_AtObj(b, c)
- };
- X509.getPosOfTLV_V3ExtValue = function(f, b) {
- var d = b;
- if (!b.match(/^[0-9.]+$/)) {
- d = KJUR.asn1.x509.OID.name2oid(b)
- }
- if (d == "") {
- return - 1
- }
- var c = X509.getV3ExtInfoListOfCertHex(f);
- for (var a = 0; a < c.length; a++) {
- var e = c[a];
- if (e.oid == d) {
- return e.posV
- }
- }
- return - 1
- };
- X509.getExtBasicConstraints = function(d) {
- var a = X509.getHexOfV_V3ExtValue(d, "basicConstraints");
- if (a === null) {
- return null
- }
- if (a === "") {
- return {}
- }
- if (a === "0101ff") {
- return {
- cA: true
- }
- }
- if (a.substr(0, 8) === "0101ff02") {
- var c = ASN1HEX.getHexOfV_AtObj(a, 6);
- var b = parseInt(c, 16);
- return {
- cA: true,
- pathLen: b
- }
- }
- throw "unknown error"
- };
- X509.KEYUSAGE_NAME = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"];
- X509.getExtKeyUsageBin = function(d) {
- var b = X509.getHexOfV_V3ExtValue(d, "keyUsage");
- if (b == "") {
- return ""
- }
- if (b.length % 2 != 0 || b.length <= 2) {
- throw "malformed key usage value"
- }
- var a = parseInt(b.substr(0, 2));
- var c = parseInt(b.substr(2), 16).toString(2);
- return c.substr(0, c.length - a)
- };
- X509.getExtKeyUsageString = function(e) {
- var d = X509.getExtKeyUsageBin(e);
- var b = new Array();
- for (var c = 0; c < d.length; c++) {
- if (d.substr(c, 1) == "1") {
- b.push(X509.KEYUSAGE_NAME[c])
- }
- }
- return b.join(",")
- };
- X509.getExtSubjectKeyIdentifier = function(b) {
- var a = X509.getHexOfV_V3ExtValue(b, "subjectKeyIdentifier");
- return a
- };
- X509.getExtAuthorityKeyIdentifier = function(f) {
- var b = {};
- var e = X509.getHexOfTLV_V3ExtValue(f, "authorityKeyIdentifier");
- if (e === null) {
- return null
- }
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
- for (var d = 0; d < c.length; d++) {
- if (e.substr(c[d], 2) === "80") {
- b.kid = ASN1HEX.getHexOfV_AtObj(e, c[d])
- }
- }
- return b
- };
- X509.getExtExtKeyUsageName = function(k) {
- var b = new Array();
- var f = X509.getHexOfTLV_V3ExtValue(k, "extKeyUsage");
- if (f === null) {
- return null
- }
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0);
- for (var e = 0; e < c.length; e++) {
- var j = ASN1HEX.getHexOfV_AtObj(f, c[e]);
- var g = KJUR.asn1.ASN1Util.oidHexToInt(j);
- var d = KJUR.asn1.x509.OID.oid2name(g);
- b.push(d)
- }
- return b
- };
- X509.getExtSubjectAltName = function(g) {
- var b = new Array();
- var f = X509.getHexOfTLV_V3ExtValue(g, "subjectAltName");
- var c = ASN1HEX.getPosArrayOfChildren_AtObj(f, 0);
- for (var e = 0; e < c.length; e++) {
- if (f.substr(c[e], 2) === "82") {
- var d = hextoutf8(ASN1HEX.getHexOfV_AtObj(f, c[e]));
- b.push(d)
- }
- }
- return b
- };
- X509.getExtCRLDistributionPointsURI = function(n) {
- var p = new Array();
- var k = X509.getHexOfTLV_V3ExtValue(n, "cRLDistributionPoints");
- var o = ASN1HEX.getPosArrayOfChildren_AtObj(k, 0);
- for (var g = 0; g < o.length; g++) {
- var l = ASN1HEX.getHexOfTLV_AtObj(k, o[g]);
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(l, 0);
- for (var e = 0; e < b.length; e++) {
- if (l.substr(b[e], 2) === "a0") {
- var f = ASN1HEX.getHexOfV_AtObj(l, b[e]);
- if (f.substr(0, 2) === "a0") {
- var c = ASN1HEX.getHexOfV_AtObj(f, 0);
- if (c.substr(0, 2) === "86") {
- var m = ASN1HEX.getHexOfV_AtObj(c, 0);
- var d = hextoutf8(m);
- p.push(d)
- }
- }
- }
- }
- }
- return p
- };
- X509.getExtAIAInfo = function(g) {
- var j = {};
- j.ocsp = [];
- j.caissuer = [];
- var h = X509.getPosOfTLV_V3ExtValue(g, "authorityInfoAccess");
- if (h == -1) {
- return null
- }
- if (g.substr(h, 2) != "30") {
- throw "malformed AIA Extn Value"
- }
- var d = ASN1HEX.getPosArrayOfChildren_AtObj(g, h);
- for (var c = 0; c < d.length; c++) {
- var a = d[c];
- var b = ASN1HEX.getPosArrayOfChildren_AtObj(g, a);
- if (b.length != 2) {
- throw "malformed AccessDescription of AIA Extn"
- }
- var e = b[0];
- var f = b[1];
- if (ASN1HEX.getHexOfV_AtObj(g, e) == "2b06010505073001") {
- if (g.substr(f, 2) == "86") {
- j.ocsp.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(g, f)))
- }
- }
- if (ASN1HEX.getHexOfV_AtObj(g, e) == "2b06010505073002") {
- if (g.substr(f, 2) == "86") {
- j.caissuer.push(hextoutf8(ASN1HEX.getHexOfV_AtObj(g, f)))
- }
- }
- }
- return j
- };
- X509.getSignatureAlgorithmName = function(d) {
- var b = ASN1HEX.getDecendantHexVByNthList(d, 0, [1, 0]);
- var a = KJUR.asn1.ASN1Util.oidHexToInt(b);
- var c = KJUR.asn1.x509.OID.oid2name(a);
- return c
- };
- X509.getSignatureValueHex = function(b) {
- var a = ASN1HEX.getDecendantHexVByNthList(b, 0, [2]);
- if (a.substr(0, 2) !== "00") {
- throw "can't get signature value"
- }
- return a.substr(2)
- };
- X509.getSerialNumberHex = function(a) {
- return ASN1HEX.getDecendantHexVByNthList(a, 0, [0, 1])
- };
- X509.verifySignature = function(f, c) {
- var d = X509.getSignatureAlgorithmName(f);
- var a = X509.getSignatureValueHex(f);
- var b = ASN1HEX.getDecendantHexTLVByNthList(f, 0, [0]);
- var e = new KJUR.crypto.Signature({
- alg: d
- });
- e.init(c);
- e.updateHex(b);
- return e.verify(a)
- };
- /*! jws-3.3.5 (c) 2013-2016 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.jws == "undefined" || !KJUR.jws) {
- KJUR.jws = {}
- }
- KJUR.jws.JWS = function() {
- var a = KJUR.jws.JWS;
- this.parseJWS = function(e, h) {
- if ((this.parsedJWS !== undefined) && (h || (this.parsedJWS.sigvalH !== undefined))) {
- return
- }
- var g = e.match(/^([^.]+)\.([^.]+)\.([^.]+)$/);
- if (g == null) {
- throw "JWS signature is not a form of 'Head.Payload.SigValue'."
- }
- var i = g[1];
- var c = g[2];
- var j = g[3];
- var l = i + "." + c;
- this.parsedJWS = {};
- this.parsedJWS.headB64U = i;
- this.parsedJWS.payloadB64U = c;
- this.parsedJWS.sigvalB64U = j;
- this.parsedJWS.si = l;
- if (!h) {
- var f = b64utohex(j);
- var d = parseBigInt(f, 16);
- this.parsedJWS.sigvalH = f;
- this.parsedJWS.sigvalBI = d
- }
- var b = b64utoutf8(i);
- var k = b64utoutf8(c);
- this.parsedJWS.headS = b;
- this.parsedJWS.payloadS = k;
- if (!a.isSafeJSONString(b, this.parsedJWS, "headP")) {
- throw "malformed JSON string for JWS Head: " + b
- }
- }
- };
- KJUR.jws.JWS.sign = function(a, i, c, m, l) {
- var k = KJUR.jws.JWS;
- var q, e, j;
- if (typeof i != "string" && typeof i != "object") {
- throw "spHeader must be JSON string or object: " + i
- }
- if (typeof i == "object") {
- e = i;
- q = JSON.stringify(e)
- }
- if (typeof i == "string") {
- q = i;
- if (!k.isSafeJSONString(q)) {
- throw "JWS Head is not safe JSON string: " + q
- }
- e = k.readSafeJSONString(q)
- }
- j = c;
- if (typeof c == "object") {
- j = JSON.stringify(c)
- }
- if ((a == "" || a == null) && e.alg !== undefined) {
- a = e.alg
- }
- if ((a != "" && a != null) && e.alg === undefined) {
- e.alg = a;
- q = JSON.stringify(e)
- }
- if (a !== e.alg) {
- throw "alg and sHeader.alg doesn't match: " + a + "!=" + e.alg
- }
- var d = null;
- if (k.jwsalg2sigalg[a] === undefined) {
- throw "unsupported alg name: " + a
- } else {
- d = k.jwsalg2sigalg[a]
- }
- var b = utf8tob64u(q);
- var g = utf8tob64u(j);
- var o = b + "." + g;
- var n = "";
- if (d.substr(0, 4) == "Hmac") {
- if (m === undefined) {
- throw "mac key shall be specified for HS* alg"
- }
- var h = new KJUR.crypto.Mac({
- alg: d,
- prov: "cryptojs",
- pass: m
- });
- h.updateString(o);
- n = h.doFinal()
- } else {
- if (d.indexOf("withECDSA") != -1) {
- var p = new KJUR.crypto.Signature({
- alg: d
- });
- p.init(m, l);
- p.updateString(o);
- hASN1Sig = p.sign();
- n = KJUR.crypto.ECDSA.asn1SigToConcatSig(hASN1Sig)
- } else {
- if (d != "none") {
- var p = new KJUR.crypto.Signature({
- alg: d
- });
- p.init(m, l);
- p.updateString(o);
- n = p.sign()
- }
- }
- }
- var f = hextob64u(n);
- return o + "." + f
- };
- KJUR.jws.JWS.verify = function(p, t, j) {
- var m = KJUR.jws.JWS;
- var q = p.split(".");
- var d = q[0];
- var l = q[1];
- var b = d + "." + l;
- var r = b64utohex(q[2]);
- var i = m.readSafeJSONString(b64utoutf8(q[0]));
- var h = null;
- var s = null;
- if (i.alg === undefined) {
- throw "algorithm not specified in header"
- } else {
- h = i.alg;
- s = h.substr(0, 2)
- }
- if (j != null && Object.prototype.toString.call(j) === "[object Array]" && j.length > 0) {
- var c = ":" + j.join(":") + ":";
- if (c.indexOf(":" + h + ":") == -1) {
- throw "algorithm '" + h + "' not accepted in the list"
- }
- }
- if (h != "none" && t === null) {
- throw "key shall be specified to verify."
- }
- if (typeof t == "string" && t.indexOf("-----BEGIN ") != -1) {
- t = KEYUTIL.getKey(t)
- }
- if (s == "RS" || s == "PS") {
- if (! (t instanceof RSAKey)) {
- throw "key shall be a RSAKey obj for RS* and PS* algs"
- }
- }
- if (s == "ES") {
- if (! (t instanceof KJUR.crypto.ECDSA)) {
- throw "key shall be a ECDSA obj for ES* algs"
- }
- }
- if (h == "none") {}
- var n = null;
- if (m.jwsalg2sigalg[i.alg] === undefined) {
- throw "unsupported alg name: " + h
- } else {
- n = m.jwsalg2sigalg[h]
- }
- if (n == "none") {
- throw "not supported"
- } else {
- if (n.substr(0, 4) == "Hmac") {
- var k = null;
- if (t === undefined) {
- throw "hexadecimal key shall be specified for HMAC"
- }
- var g = new KJUR.crypto.Mac({
- alg: n,
- pass: t
- });
- g.updateString(b);
- k = g.doFinal();
- return r == k
- } else {
- if (n.indexOf("withECDSA") != -1) {
- var f = null;
- try {
- f = KJUR.crypto.ECDSA.concatSigToASN1Sig(r)
- } catch(o) {
- return false
- }
- var e = new KJUR.crypto.Signature({
- alg: n
- });
- e.init(t);
- e.updateString(b);
- return e.verify(f)
- } else {
- var e = new KJUR.crypto.Signature({
- alg: n
- });
- e.init(t);
- e.updateString(b);
- return e.verify(r)
- }
- }
- }
- };
- KJUR.jws.JWS.parse = function(g) {
- var c = g.split(".");
- var b = {};
- var f, e, d;
- if (c.length != 2 && c.length != 3) {
- throw "malformed sJWS: wrong number of '.' splitted elements"
- }
- f = c[0];
- e = c[1];
- if (c.length == 3) {
- d = c[2]
- }
- b.headerObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));
- b.payloadObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));
- b.headerPP = JSON.stringify(b.headerObj, null, " ");
- if (b.payloadObj == null) {
- b.payloadPP = b64utoutf8(e)
- } else {
- b.payloadPP = JSON.stringify(b.payloadObj, null, " ")
- }
- if (d !== undefined) {
- b.sigHex = b64utohex(d)
- }
- return b
- };
- KJUR.jws.JWS.verifyJWT = function(d, j, l) {
- var h = KJUR.jws.JWS;
- var i = d.split(".");
- var c = i[0];
- var g = i[1];
- var m = c + "." + g;
- var k = b64utohex(i[2]);
- var f = h.readSafeJSONString(b64utoutf8(c));
- var e = h.readSafeJSONString(b64utoutf8(g));
- if (f.alg === undefined) {
- return false
- }
- if (l.alg === undefined) {
- throw "acceptField.alg shall be specified"
- }
- if (!h.inArray(f.alg, l.alg)) {
- return false
- }
- if (e.iss !== undefined && typeof l.iss === "object") {
- if (!h.inArray(e.iss, l.iss)) {
- return false
- }
- }
- if (e.sub !== undefined && typeof l.sub === "object") {
- if (!h.inArray(e.sub, l.sub)) {
- return false
- }
- }
- if (e.aud !== undefined && typeof l.aud === "object") {
- if (typeof e.aud == "string") {
- if (!h.inArray(e.aud, l.aud)) {
- return false
- }
- } else {
- if (typeof e.aud == "object") {
- if (!h.includedArray(e.aud, l.aud)) {
- return false
- }
- }
- }
- }
- var b = KJUR.jws.IntDate.getNow();
- if (l.verifyAt !== undefined && typeof l.verifyAt === "number") {
- b = l.verifyAt
- }
- if (l.gracePeriod === undefined || typeof l.gracePeriod !== "number") {
- l.gracePeriod = 0
- }
- if (e.exp !== undefined && typeof e.exp == "number") {
- if (e.exp + l.gracePeriod < b) {
- return false
- }
- }
- if (e.nbf !== undefined && typeof e.nbf == "number") {
- if (b < e.nbf - l.gracePeriod) {
- return false
- }
- }
- if (e.iat !== undefined && typeof e.iat == "number") {
- if (b < e.iat - l.gracePeriod) {
- return false
- }
- }
- if (e.jti !== undefined && l.jti !== undefined) {
- if (e.jti !== l.jti) {
- return false
- }
- }
- if (!KJUR.jws.JWS.verify(d, j, l.alg)) {
- return false
- }
- return true
- };
- KJUR.jws.JWS.includedArray = function(b, a) {
- var d = KJUR.jws.JWS.inArray;
- if (b === null) {
- return false
- }
- if (typeof b !== "object") {
- return false
- }
- if (typeof b.length !== "number") {
- return false
- }
- for (var c = 0; c < b.length; c++) {
- if (!d(b[c], a)) {
- return false
- }
- }
- return true
- };
- KJUR.jws.JWS.inArray = function(d, b) {
- if (b === null) {
- return false
- }
- if (typeof b !== "object") {
- return false
- }
- if (typeof b.length !== "number") {
- return false
- }
- for (var c = 0; c < b.length; c++) {
- if (b[c] == d) {
- return true
- }
- }
- return false
- };
- KJUR.jws.JWS.jwsalg2sigalg = {
- HS256: "HmacSHA256",
- HS384: "HmacSHA384",
- HS512: "HmacSHA512",
- RS256: "SHA256withRSA",
- RS384: "SHA384withRSA",
- RS512: "SHA512withRSA",
- ES256: "SHA256withECDSA",
- ES384: "SHA384withECDSA",
- PS256: "SHA256withRSAandMGF1",
- PS384: "SHA384withRSAandMGF1",
- PS512: "SHA512withRSAandMGF1",
- none: "none",
- };
- KJUR.jws.JWS.isSafeJSONString = function(c, b, d) {
- var e = null;
- try {
- e = jsonParse(c);
- if (typeof e != "object") {
- return 0
- }
- if (e.constructor === Array) {
- return 0
- }
- if (b) {
- b[d] = e
- }
- return 1
- } catch(a) {
- return 0
- }
- };
- KJUR.jws.JWS.readSafeJSONString = function(b) {
- var c = null;
- try {
- c = jsonParse(b);
- if (typeof c != "object") {
- return null
- }
- if (c.constructor === Array) {
- return null
- }
- return c
- } catch(a) {
- return null
- }
- };
- KJUR.jws.JWS.getEncodedSignatureValueFromJWS = function(b) {
- var a = b.match(/^[^.]+\.[^.]+\.([^.]+)$/);
- if (a == null) {
- throw "JWS signature is not a form of 'Head.Payload.SigValue'."
- }
- return a[1]
- };
- KJUR.jws.JWS.getJWKthumbprint = function(d) {
- if (d.kty !== "RSA" && d.kty !== "EC" && d.kty !== "oct") {
- throw "unsupported algorithm for JWK Thumprint"
- }
- var a = "{";
- if (d.kty === "RSA") {
- if (typeof d.n != "string" || typeof d.e != "string") {
- throw "wrong n and e value for RSA key"
- }
- a += '"e":"' + d.e + '",';
- a += '"kty":"' + d.kty + '",';
- a += '"n":"' + d.n + '"}'
- } else {
- if (d.kty === "EC") {
- if (typeof d.crv != "string" || typeof d.x != "string" || typeof d.y != "string") {
- throw "wrong crv, x and y value for EC key"
- }
- a += '"crv":"' + d.crv + '",';
- a += '"kty":"' + d.kty + '",';
- a += '"x":"' + d.x + '",';
- a += '"y":"' + d.y + '"}'
- } else {
- if (d.kty === "oct") {
- if (typeof d.k != "string") {
- throw "wrong k value for oct(symmetric) key"
- }
- a += '"kty":"' + d.kty + '",';
- a += '"k":"' + d.k + '"}'
- }
- }
- }
- var b = rstrtohex(a);
- var c = KJUR.crypto.Util.hashHex(b, "sha256");
- var e = hextob64u(c);
- return e
- };
- KJUR.jws.IntDate = {};
- KJUR.jws.IntDate.get = function(a) {
- if (a == "now") {
- return KJUR.jws.IntDate.getNow()
- } else {
- if (a == "now + 1hour") {
- return KJUR.jws.IntDate.getNow() + 60 * 60
- } else {
- if (a == "now + 1day") {
- return KJUR.jws.IntDate.getNow() + 60 * 60 * 24
- } else {
- if (a == "now + 1month") {
- return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 30
- } else {
- if (a == "now + 1year") {
- return KJUR.jws.IntDate.getNow() + 60 * 60 * 24 * 365
- } else {
- if (a.match(/Z$/)) {
- return KJUR.jws.IntDate.getZulu(a)
- } else {
- if (a.match(/^[0-9]+$/)) {
- return parseInt(a)
- }
- }
- }
- }
- }
- }
- }
- throw "unsupported format: " + a
- };
- KJUR.jws.IntDate.getZulu = function(k) {
- var b = k.match(/(\d+)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)Z/);
- if (b) {
- var a = b[1];
- var i = parseInt(a);
- if (a.length == 4) {} else {
- if (a.length == 2) {
- if (50 <= i && i < 100) {
- i = 1900 + i
- } else {
- if (0 <= i && i < 50) {
- i = 2000 + i
- } else {
- throw "malformed year string for UTCTime"
- }
- }
- } else {
- throw "malformed year string"
- }
- }
- var g = parseInt(b[2]) - 1;
- var j = parseInt(b[3]);
- var c = parseInt(b[4]);
- var e = parseInt(b[5]);
- var f = parseInt(b[6]);
- var h = new Date(Date.UTC(i, g, j, c, e, f));
- return~~ (h / 1000)
- }
- throw "unsupported format: " + k
- };
- KJUR.jws.IntDate.getNow = function() {
- var a = ~~ (new Date() / 1000);
- return a
- };
- KJUR.jws.IntDate.intDate2UTCString = function(a) {
- var b = new Date(a * 1000);
- return b.toUTCString()
- };
- KJUR.jws.IntDate.intDate2Zulu = function(e) {
- var i = new Date(e * 1000);
- var h = ("0000" + i.getUTCFullYear()).slice( - 4);
- var g = ("00" + (i.getUTCMonth() + 1)).slice( - 2);
- var b = ("00" + i.getUTCDate()).slice( - 2);
- var a = ("00" + i.getUTCHours()).slice( - 2);
- var c = ("00" + i.getUTCMinutes()).slice( - 2);
- var f = ("00" + i.getUTCSeconds()).slice( - 2);
- return h + g + b + a + c + f + "Z"
- };
- if (typeof KJUR == "undefined" || !KJUR) {
- KJUR = {}
- }
- if (typeof KJUR.jws == "undefined" || !KJUR.jws) {
- KJUR.jws = {}
- }
- KJUR.jws.JWSJS = function() {
- var b = KJUR.jws.JWS;
- var a = KJUR.jws.JWS;
- this.aHeader = [];
- this.sPayload = "";
- this.aSignature = [];
- this.init = function() {
- this.aHeader = [];
- this.sPayload = undefined;
- this.aSignature = []
- };
- this.initWithJWS = function(d) {
- this.init();
- var c = d.split(".");
- if (c.length != 3) {
- throw "malformed input JWS"
- }
- this.aHeader.push(c[0]);
- this.sPayload = c[1];
- this.aSignature.push(c[2])
- };
- this.addSignature = function(c, f, k, i) {
- if (this.sPayload === undefined || this.sPayload === null) {
- throw "there's no JSON-JS signature to add."
- }
- var j = this.aHeader.length;
- if (this.aHeader.length != this.aSignature.length) {
- throw "aHeader.length != aSignature.length"
- }
- try {
- var d = KJUR.jws.JWS.sign(c, f, this.sPayload, k, i);
- var h = d.split(".");
- var l = h[0];
- var e = h[2];
- this.aHeader.push(h[0]);
- this.aSignature.push(h[2])
- } catch(g) {
- if (this.aHeader.length > j) {
- this.aHeader.pop()
- }
- if (this.aSignature.length > j) {
- this.aSignature.pop()
- }
- throw "addSignature failed: " + g
- }
- };
- this.addSignatureByHeaderKey = function(f, c) {
- var e = b64utoutf8(this.sPayload);
- var d = new KJUR.jws.JWS();
- var g = d.generateJWSByP1PrvKey(f, e, c);
- this.aHeader.push(d.parsedJWS.headB64U);
- this.aSignature.push(d.parsedJWS.sigvalB64U)
- };
- this.addSignatureByHeaderPayloadKey = function(f, e, c) {
- var d = new KJUR.jws.JWS();
- var g = d.generateJWSByP1PrvKey(f, e, c);
- this.aHeader.push(d.parsedJWS.headB64U);
- this.sPayload = d.parsedJWS.payloadB64U;
- this.aSignature.push(d.parsedJWS.sigvalB64U)
- };
- this.verifyAll = function(f) {
- if (this.aHeader.length !== f.length || this.aSignature.length !== f.length) {
- return false
- }
- for (var e = 0; e < f.length; e++) {
- var d = f[e];
- if (d.length !== 2) {
- return false
- }
- var c = this.verifyNth(e, d[0], d[1]);
- if (c === false) {
- return false
- }
- }
- return true
- };
- this.verifyNth = function(d, h, e) {
- if (this.aHeader.length <= d || this.aSignature.length <= d) {
- return false
- }
- var f = this.aHeader[d];
- var i = this.aSignature[d];
- var j = f + "." + this.sPayload + "." + i;
- var c = false;
- try {
- c = a.verify(j, h, e)
- } catch(g) {
- return false
- }
- return c
- };
- this.verifyWithCerts = function(d) {
- if (this.aHeader.length != d.length) {
- throw "num headers does not match with num certs"
- }
- if (this.aSignature.length != d.length) {
- throw "num signatures does not match with num certs"
- }
- var l = this.sPayload;
- var h = "";
- for (var e = 0; e < d.length; e++) {
- var f = d[e];
- var g = this.aHeader[e];
- var n = this.aSignature[e];
- var c = g + "." + l + "." + n;
- var k = new KJUR.jws.JWS();
- try {
- var m = k.verifyJWSByPemX509Cert(c, f);
- if (m != 1) {
- h += (e + 1) + "th signature unmatch. "
- }
- } catch(j) {
- h += (e + 1) + "th signature fail(" + j + "). "
- }
- }
- if (h == "") {
- return 1
- } else {
- throw h
- }
- };
- this.readJWSJS = function(e) {
- if (typeof e === "string") {
- var d = b.readSafeJSONString(e);
- if (d == null) {
- throw "argument is not safe JSON object string"
- }
- this.aHeader = d.headers;
- this.sPayload = d.payload;
- this.aSignature = d.signatures
- } else {
- try {
- if (e.headers.length > 0) {
- this.aHeader = e.headers
- } else {
- throw "malformed header"
- }
- if (typeof e.payload === "string") {
- this.sPayload = e.payload
- } else {
- throw "malformed signatures"
- }
- if (e.signatures.length > 0) {
- this.signatures = e.signatures
- } else {
- throw "malformed signatures"
- }
- } catch(c) {
- throw "malformed JWS-JS JSON object: " + c
- }
- }
- };
- this.getJSON = function() {
- return {
- headers: this.aHeader,
- payload: this.sPayload,
- signatures: this.aSignature
- }
- };
- this.isEmpty = function() {
- if (this.aHeader.length == 0) {
- return 1
- }
- return 0
- }
- };
- module.exports = {
- RSAKey: RSAKey,
- KEYUTIL: KEYUTIL,
- hex2b64: hex2b64,
- b64tohex: b64tohex
- }
|