blob: 7aa0ea6abbc89463b23729984a34d7b8070c0c73 [file] [log] [blame]
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4941],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function p(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function i(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var m=n.createContext({}),N=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=N(t.components);return n.createElement(m.Provider,{value:e},t.children)},d="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},o=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),d=N(a),o=r,s=d["".concat(m,".").concat(o)]||d[o]||u[o]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=o;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[d]="string"==typeof t?t:r,p[1]=i;for(var N=2;N<l;N++)p[N]=a[N];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}o.displayName="MDXCreateElement"},2126:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>o,frontMatter:()=>i,metadata:()=>N,toc:()=>d});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"mpin",title:"MPIN",sidebar_label:"MPIN"},m=void 0,N={unversionedId:"cryptojs/mpin",id:"cryptojs/mpin",title:"MPIN",description:"MPIN",source:"@site/../docs/cryptojs/mpin.md",sourceDirName:"cryptojs",slug:"/cryptojs/mpin",permalink:"/docs/cryptojs/mpin",draft:!1,tags:[],version:"current",frontMatter:{id:"mpin",title:"MPIN",sidebar_label:"MPIN"},sidebar:"docs",previous:{title:"HASH512",permalink:"/docs/cryptojs/hash512"},next:{title:"MPIN192",permalink:"/docs/cryptojs/mpin192"}},k={},d=[{value:"MPIN",id:"mpin",level:2},{value:"new MPIN()",id:"new-mpin",level:3},{value:"MPIN.today() \u21d2",id:"mpintoday-",level:3},{value:"MPIN.bytestostring(b) \u21d2",id:"mpinbytestostringb-",level:3},{value:"MPIN.stringtobytes(s) \u21d2",id:"mpinstringtobytess-",level:3},{value:"MPIN.comparebytes(a, b) \u21d2",id:"mpincomparebytesa-b-",level:3},{value:"MPIN.mpin_hash(c, U) \u21d2",id:"mpinmpin_hashc-u-",level:3},{value:"MPIN.hashit(sha, n, B) \u21d2",id:"mpinhashitsha-n-b-",level:3},{value:"MPIN.map(u, cb) \u21d2",id:"mpinmapu-cb-",level:3},{value:"MPIN.unmap(u, P) \u21d2",id:"mpinunmapu-p-",level:3},{value:"MPIN.RECOMBINE_G1(R1, R2, R) \u21d2",id:"mpinrecombine_g1r1-r2-r-",level:3},{value:"MPIN.RECOMBINE_G2(W1, W2, W) \u21d2",id:"mpinrecombine_g2w1-w2-w-",level:3},{value:"MPIN.HASH_ID(sha, ID) \u21d2",id:"mpinhash_idsha-id-",level:3},{value:"MPIN.RANDOM_GENERATE(rng, S) \u21d2",id:"mpinrandom_generaterng-s-",level:3},{value:"MPIN.EXTRACT_PIN() \u21d2",id:"mpinextract_pin-",level:3},{value:"MPIN.EXTRACT_FACTOR() \u21d2",id:"mpinextract_factor-",level:3},{value:"MPIN.RESTORE_FACTOR() \u21d2",id:"mpinrestore_factor-",level:3},{value:"MPIN.GET_SERVER_SECRET(S, SST) \u21d2",id:"mpinget_server_secrets-sst-",level:3},{value:"MPIN.GET_G1_MULTIPLE(type, x, G, W) \u21d2",id:"mpinget_g1_multipletype-x-g-w-",level:3},{value:"MPIN.GET_CLIENT_SECRET(S, CID, CST) \u21d2",id:"mpinget_client_secrets-cid-cst-",level:3},{value:"MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2",id:"mpinget_client_permitsha-date-s-cid-ctt-",level:3},{value:"MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2",id:"mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-",level:3},{value:"MPIN.CLIENT_2(X, Y, SEC) \u21d2",id:"mpinclient_2x-y-sec-",level:3},{value:"MPIN.SERVER_1(sha, date, CID, HID, HTID) \u21d2",id:"mpinserver_1sha-date-cid-hid-htid-",level:3},{value:"MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2",id:"mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-",level:3},{value:"MPIN.KANGAROO(E, F) \u21d2",id:"mpinkangarooe-f-",level:3},{value:"MPIN.GET_TIME() \u21d2",id:"mpinget_time-",level:3},{value:"MPIN.GET_Y(sha, TimeValue, xCID, Y) \u21d2",id:"mpinget_ysha-timevalue-xcid-y-",level:3},{value:"MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2",id:"mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-",level:3},{value:"MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2",id:"mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-",level:3},{value:"MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2",id:"mpinprecomputetoken-cid-g1-g2-",level:3},{value:"MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2",id:"mpinhash_allsha-hid-xid-xcid-sec-y-r-w-",level:3},{value:"MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2",id:"mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-",level:3},{value:"MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2",id:"mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-",level:3},{value:"MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2",id:"mpinget_dvs_keypairrng-z-pa-",level:3}],u={toc:d};function o(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"MPIN"}),(0,l.kt)("h2",{id:"mpin"},"MPIN"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN"},"MPIN"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_MPIN_new"},"new MPIN()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.today"},".today()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.bytestostring"},".bytestostring(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.stringtobytes"},".stringtobytes(s)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.comparebytes"},".comparebytes(a, b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.mpin_hash"},".mpin_hash(c, U)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.hashit"},".hashit(sha, n, B)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.map"},".map(u, cb)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.unmap"},".unmap(u, P)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RECOMBINE_G1"},".RECOMBINE_G1(R1, R2, R)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RECOMBINE_G2"},".RECOMBINE_G2(W1, W2, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.HASH_ID"},".HASH_ID(sha, ID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RANDOM_GENERATE"},".RANDOM_GENERATE(rng, S)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.EXTRACT_PIN"},".EXTRACT_PIN()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.EXTRACT_FACTOR"},".EXTRACT_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RESTORE_FACTOR"},".RESTORE_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_SERVER_SECRET"},".GET_SERVER_SECRET(S, SST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_G1_MULTIPLE"},".GET_G1_MULTIPLE(type, x, G, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_CLIENT_SECRET"},".GET_CLIENT_SECRET(S, CID, CST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_CLIENT_PERMIT"},".GET_CLIENT_PERMIT(sha, date, S, CID, CTT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_1"},".CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_2"},".CLIENT_2(X, Y, SEC)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_1"},".SERVER_1(sha, date, CID, HID, HTID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_2"},".SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.KANGAROO"},".KANGAROO(E, F)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_TIME"},".GET_TIME()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_Y"},".GET_Y(sha, TimeValue, xCID, Y)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT"},".CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER"},".SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.PRECOMPUTE"},".PRECOMPUTE(TOKEN, CID, G1, G2)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.HASH_ALL"},".HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_KEY"},".CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_KEY"},".SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_DVS_KEYPAIR"},".GET_DVS_KEYPAIR(rng, Z, Pa)")," \u21d2")))),(0,l.kt)("a",{name:"new_MPIN_new"}),(0,l.kt)("h3",{id:"new-mpin"},"new MPIN()"),(0,l.kt)("p",null,"Creates an instance of MPIN"),(0,l.kt)("a",{name:"MPIN.today"}),(0,l.kt)("h3",{id:"mpintoday-"},"MPIN.today() \u21d2"),(0,l.kt)("p",null,"Get epoch time for today"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time in slots since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("a",{name:"MPIN.bytestostring"}),(0,l.kt)("h3",{id:"mpinbytestostringb-"},"MPIN.bytestostring(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.stringtobytes"}),(0,l.kt)("h3",{id:"mpinstringtobytess-"},"MPIN.stringtobytes(s) \u21d2"),(0,l.kt)("p",null,"Convert a string to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": b byte array",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"string")))),(0,l.kt)("a",{name:"MPIN.comparebytes"}),(0,l.kt)("h3",{id:"mpincomparebytesa-b-"},"MPIN.comparebytes(a, b) \u21d2"),(0,l.kt)("p",null,"Convert byte arrays"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true if equal",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"a"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.mpin_hash"}),(0,l.kt)("h3",{id:"mpinmpin_hashc-u-"},"MPIN.mpin_hash(c, U) \u21d2"),(0,l.kt)("p",null,"Hash values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"U"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP unstancebyte array")))),(0,l.kt)("a",{name:"MPIN.hashit"}),(0,l.kt)("h3",{id:"mpinhashitsha-n-b-"},"MPIN.hashit(sha, n, B) \u21d2"),(0,l.kt)("p",null,"General purpose hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"B"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.map"}),(0,l.kt)("h3",{id:"mpinmapu-cb-"},"MPIN.map(u, cb) \u21d2"),(0,l.kt)("p",null,"maps a random u to a point on the curve"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": P ECP pointhash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cb"),(0,l.kt)("td",{parentName:"tr",align:null},'an integer representing the "sign" of y, in fact its least significant bit.')))),(0,l.kt)("a",{name:"MPIN.unmap"}),(0,l.kt)("h3",{id:"mpinunmapu-p-"},"MPIN.unmap(u, P) \u21d2"),(0,l.kt)("p",null,"returns u derived from P. Random value in range 1 to return value should then be added to u"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r Value that should be added to u to derive P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP pointhash value")))),(0,l.kt)("a",{name:"MPIN.RECOMBINE_G1"}),(0,l.kt)("h3",{id:"mpinrecombine_g1r1-r2-r-"},"MPIN.RECOMBINE_G1(R1, R2, R) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G1. R=R1+R2")))),(0,l.kt)("a",{name:"MPIN.RECOMBINE_G2"}),(0,l.kt)("h3",{id:"mpinrecombine_g2w1-w2-w-"},"MPIN.RECOMBINE_G2(W1, W2, W) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G2. W=W1+W2")))),(0,l.kt)("a",{name:"MPIN.HASH_ID"}),(0,l.kt)("h3",{id:"mpinhash_idsha-id-"},"MPIN.HASH_ID(sha, ID) \u21d2"),(0,l.kt)("p",null,"Hash the identity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ID"),(0,l.kt)("td",{parentName:"tr",align:null},"Identity as byte array")))),(0,l.kt)("a",{name:"MPIN.RANDOM_GENERATE"}),(0,l.kt)("h3",{id:"mpinrandom_generaterng-s-"},"MPIN.RANDOM_GENERATE(rng, S) \u21d2"),(0,l.kt)("p",null,"Create random secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Random secret value")))),(0,l.kt)("a",{name:"MPIN.EXTRACT_PIN"}),(0,l.kt)("h3",{id:"mpinextract_pin-"},"MPIN.EXTRACT_PIN() \u21d2"),(0,l.kt)("p",null,"Extract a PIN number from a client secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": pin PIN value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Client secret "),(0,l.kt)("a",{name:"MPIN.EXTRACT_FACTOR"}),(0,l.kt)("h3",{id:"mpinextract_factor-"},"MPIN.EXTRACT_FACTOR() \u21d2"),(0,l.kt)("p",null,"Extract factor from TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value "),(0,l.kt)("a",{name:"MPIN.RESTORE_FACTOR"}),(0,l.kt)("h3",{id:"mpinrestore_factor-"},"MPIN.RESTORE_FACTOR() \u21d2"),(0,l.kt)("p",null,"Restore factor to TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value "),(0,l.kt)("a",{name:"MPIN.GET_SERVER_SECRET"}),(0,l.kt)("h3",{id:"mpinget_server_secrets-sst-"},"MPIN.GET_SERVER_SECRET(S, SST) \u21d2"),(0,l.kt)("p",null,"Create a server secret in G2 from a master secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"Server secret = s.Q where Q is a fixed generator of G2")))),(0,l.kt)("a",{name:"MPIN.GET_G1_MULTIPLE"}),(0,l.kt)("h3",{id:"mpinget_g1_multipletype-x-g-w-"},"MPIN.GET_G1_MULTIPLE(type, x, G, W) \u21d2"),(0,l.kt)("p",null,"Find a random multiple of a point in G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": rng cryptographically secure random number generator "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type"),(0,l.kt)("td",{parentName:"tr",align:null},"determines type of action to be taken")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"if type=0 a point in G1, else an octet to be mapped to G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"the output =x.G or x.M(G), where M(.) is a mapping")))),(0,l.kt)("a",{name:"MPIN.GET_CLIENT_SECRET"}),(0,l.kt)("h3",{id:"mpinget_client_secrets-cid-cst-"},"MPIN.GET_CLIENT_SECRET(S, CID, CST) \u21d2"),(0,l.kt)("p",null,"Create a client secret in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the full client secret = s.H(ID)")))),(0,l.kt)("a",{name:"MPIN.GET_CLIENT_PERMIT"}),(0,l.kt)("h3",{id:"mpinget_client_permitsha-date-s-cid-ctt-"},"MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2"),(0,l.kt)("p",null,"Create a Time Permit in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch."),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CTT"),(0,l.kt)("td",{parentName:"tr",align:null},"is a Time Permit for the given date = s.H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN.CLIENT_1"}),(0,l.kt)("h3",{id:"mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"},"MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.CLIENT_2"}),(0,l.kt)("h3",{id:"mpinclient_2x-y-sec-"},"MPIN.CLIENT_2(X, Y, SEC) \u21d2"),(0,l.kt)("p",null,"Perform second pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"an input random challenge from the server")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"on output = -(x+y).V")))),(0,l.kt)("a",{name:"MPIN.SERVER_1"}),(0,l.kt)("h3",{id:"mpinserver_1sha-date-cid-hid-htid-"},"MPIN.SERVER_1(sha, date, CID, HID, HTID) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN.SERVER_2"}),(0,l.kt)("h3",{id:"mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"},"MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2"),(0,l.kt)("p",null,"Perform third pass on the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server's randomly generated challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input public key from the client, z.Q or NULL if the client uses regular mpin"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.KANGAROO"}),(0,l.kt)("h3",{id:"mpinkangarooe-f-"},"MPIN.KANGAROO(E, F) \u21d2"),(0,l.kt)("p",null,"Use Kangaroos to find PIN error"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 if Kangaroos failed, or the PIN error e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT = E^e")))),(0,l.kt)("a",{name:"MPIN.GET_TIME"}),(0,l.kt)("h3",{id:"mpinget_time-"},"MPIN.GET_TIME() \u21d2"),(0,l.kt)("p",null,"Time since epoch"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("a",{name:"MPIN.GET_Y"}),(0,l.kt)("h3",{id:"mpinget_ysha-timevalue-xcid-y-"},"MPIN.GET_Y(sha, TimeValue, xCID, Y) \u21d2"),(0,l.kt)("p",null,"Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is epoch time in seconds")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"input bytearray is an input octet")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"output value")))),(0,l.kt)("a",{name:"MPIN.CLIENT"}),(0,l.kt)("h3",{id:"mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"},"MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2"),(0,l.kt)("p",null,"Perform client side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Message"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.SERVER"}),(0,l.kt)("h3",{id:"mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"},"MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2"),(0,l.kt)("p",null,"Perform server side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MESSAGE"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client z.Q or NULL if the key-escrow less scheme is not used"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.PRECOMPUTE"}),(0,l.kt)("h3",{id:"mpinprecomputetoken-cid-g1-g2-"},"MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2"),(0,l.kt)("p",null,"Precompute values for use by the client side of M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")))),(0,l.kt)("a",{name:"MPIN.HASH_ALL"}),(0,l.kt)("h3",{id:"mpinhash_allsha-hid-xid-xcid-sec-y-r-w-"},"MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2"),(0,l.kt)("p",null,"Hash the session transcript"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": H the output is the hash of all of the above that apply",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.(H(ID)+H(T"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server part response"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.CLIENT_KEY"}),(0,l.kt)("h3",{id:"mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-"},"MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Client side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Server-side Diffie-Hellman component")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key")))),(0,l.kt)("a",{name:"MPIN.SERVER_KEY"}),(0,l.kt)("h3",{id:"mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-"},"MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Server side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"h"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Client-side Diffie-Hellman component"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input random number generated by the server"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.GET_DVS_KEYPAIR"}),(0,l.kt)("h3",{id:"mpinget_dvs_keypairrng-z-pa-"},"MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2"),(0,l.kt)("p",null,"Generates a random public key for the client z.Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}')," "),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise it must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"the output public key for the client")))))}o.isMDXComponent=!0}}]);