Hex Artifact Content

Artifact d291048f9c9f559de6f0b18fd9139f009c81d2d5:


0000: 2f 2a 0a 20 2a 20 43 41 43 4b 65 79 20 43 68 72  /*. * CACKey Chr
0010: 6f 6d 65 4f 53 20 63 68 72 6f 6d 65 2e 63 65 72  omeOS chrome.cer
0020: 74 69 66 69 63 61 74 65 50 72 6f 76 69 64 65 72  tificateProvider
0030: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   Implementation.
0040: 20 2a 2f 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f 6e   */..function on
0050: 43 65 72 74 69 66 69 63 61 74 65 73 52 65 6a 65  CertificatesReje
0060: 63 74 65 64 28 72 65 6a 65 63 74 65 64 43 65 72  cted(rejectedCer
0070: 74 73 29 20 7b 0a 09 2f 2f 20 49 66 20 63 65 72  ts) {..// If cer
0080: 74 69 66 69 63 61 74 65 73 20 77 65 72 65 20 72  tificates were r
0090: 65 6a 65 63 74 65 64 20 62 79 20 74 68 65 20 41  ejected by the A
00a0: 50 49 2c 20 6c 6f 67 20 61 6e 20 65 72 72 6f 72  PI, log an error
00b0: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 0a 09  , for example...
00c0: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 72 65  console.error(re
00d0: 6a 65 63 74 65 64 43 65 72 74 73 2e 6c 65 6e 67  jectedCerts.leng
00e0: 74 68 20 2b 20 27 20 63 65 72 74 69 66 69 63 61  th + ' certifica
00f0: 74 65 73 20 77 65 72 65 20 72 65 6a 65 63 74 65  tes were rejecte
0100: 64 2e 27 29 3b 0a 09 72 65 74 75 72 6e 3b 0a 7d  d.');..return;.}
0110: 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 20 66  ../*. * Handle f
0120: 6f 72 20 74 68 65 20 43 41 43 4b 65 79 20 4e 61  or the CACKey Na
0130: 43 6c 20 54 61 72 67 65 74 0a 20 2a 2f 0a 76 61  Cl Target. */.va
0140: 72 20 63 61 63 6b 65 79 48 61 6e 64 6c 65 20 3d  r cackeyHandle =
0150: 20 6e 75 6c 6c 3b 0a 76 61 72 20 63 61 63 6b 65   null;.var cacke
0160: 79 50 43 53 43 48 61 6e 64 6c 65 20 3d 20 6e 75  yPCSCHandle = nu
0170: 6c 6c 3b 0a 76 61 72 20 63 61 63 6b 65 79 50 43  ll;.var cackeyPC
0180: 53 43 48 61 6e 64 6c 65 55 73 61 62 6c 65 20 3d  SCHandleUsable =
0190: 20 66 61 6c 73 65 3b 0a 76 61 72 20 63 61 63 6b   false;.var cack
01a0: 65 79 50 43 53 43 48 61 6e 64 6c 65 4c 61 73 74  eyPCSCHandleLast
01b0: 55 73 65 64 20 3d 20 28 6e 65 77 20 44 61 74 65  Used = (new Date
01c0: 28 29 29 2e 67 65 74 54 69 6d 65 28 29 3b 0a 0a  ()).getTime();..
01d0: 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 20 61 6e 64  /*. * Handle and
01e0: 20 49 44 20 66 6f 72 20 6f 75 74 73 74 61 6e 64   ID for outstand
01f0: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 73 0a 20 2a  ing callbacks. *
0200: 2f 0a 76 61 72 20 63 61 63 6b 65 79 4f 75 74 73  /.var cackeyOuts
0210: 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 73  tandingCallbacks
0220: 20 3d 20 7b 7d 0a 76 61 72 20 63 61 63 6b 65 79   = {}.var cackey
0230: 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62  OutstandingCallb
0240: 61 63 6b 43 6f 75 6e 74 65 72 20 3d 20 2d 31 3b  ackCounter = -1;
0250: 0a 0a 2f 2a 0a 20 2a 20 43 6f 6d 6d 75 6e 69 63  ../*. * Communic
0260: 61 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 50  ation with the P
0270: 49 4e 20 65 6e 74 72 79 20 77 69 6e 64 6f 77 0a  IN entry window.
0280: 20 2a 2f 0a 76 61 72 20 70 69 6e 57 69 6e 64 6f   */.var pinWindo
0290: 77 50 49 4e 56 61 6c 75 65 20 3d 20 22 22 3b 0a  wPINValue = "";.
02a0: 76 61 72 20 70 69 6e 57 69 6e 64 6f 77 50 72 65  var pinWindowPre
02b0: 76 69 6f 75 73 48 61 6e 64 6c 65 20 3d 20 6e 75  viousHandle = nu
02c0: 6c 6c 3b 0a 0a 2f 2a 0a 20 2a 20 4d 65 73 73 61  ll;../*. * Messa
02d0: 67 65 73 20 74 68 61 74 20 6d 61 79 20 6e 65 65  ges that may nee
02e0: 64 20 74 6f 20 62 65 20 72 65 74 72 69 65 64 20  d to be retried 
02f0: 61 66 74 65 72 20 67 65 74 74 69 6e 67 20 61 20  after getting a 
0300: 50 49 4e 0a 20 2a 2f 0a 76 61 72 20 63 61 63 6b  PIN. */.var cack
0310: 65 79 4d 65 73 73 61 67 65 73 54 6f 52 65 74 72  eyMessagesToRetr
0320: 79 20 3d 20 5b 5d 3b 0a 0a 2f 2a 0a 20 2a 20 53  y = [];../*. * S
0330: 74 6f 72 65 64 20 50 49 4e 20 66 6f 72 20 61 20  tored PIN for a 
0340: 67 69 76 65 6e 20 63 65 72 74 69 66 69 63 61 74  given certificat
0350: 65 0a 20 2a 2f 0a 76 61 72 20 63 61 63 6b 65 79  e. */.var cackey
0360: 43 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e  CertificateToPIN
0370: 4d 61 70 20 3d 20 7b 7d 3b 0a 76 61 72 20 63 61  Map = {};.var ca
0380: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
0390: 6f 50 49 4e 4d 61 70 4c 61 73 74 55 73 65 64 52  oPINMapLastUsedR
03a0: 75 6e 6e 65 72 20 3d 20 66 61 6c 73 65 3b 0a 0a  unner = false;..
03b0: 2f 2a 0a 20 2a 20 43 61 6c 6c 62 61 63 6b 73 20  /*. * Callbacks 
03c0: 74 6f 20 70 65 72 66 6f 72 6d 20 61 66 74 65 72  to perform after
03d0: 20 50 43 53 43 20 63 6f 6d 65 73 20 6f 6e 6c 69   PCSC comes onli
03e0: 6e 65 0a 20 2a 2f 0a 63 61 63 6b 65 79 43 61 6c  ne. */.cackeyCal
03f0: 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74 20 3d  lbackAfterInit =
0400: 20 5b 5d 3b 0a 0a 2f 2a 0a 20 2a 20 43 6f 6d 70   [];../*. * Comp
0410: 75 74 65 20 61 20 74 65 78 74 2d 62 61 73 65 64  ute a text-based
0420: 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 20 63 65   handle for a ce
0430: 72 74 69 66 69 63 61 74 65 20 74 6f 20 62 65 20  rtificate to be 
0440: 68 61 73 68 65 64 20 62 79 0a 20 2a 2f 0a 66 75  hashed by. */.fu
0450: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 43 65 72  nction cackeyCer
0460: 74 69 66 69 63 61 74 65 54 6f 50 49 4e 49 44 28  tificateToPINID(
0470: 63 65 72 74 69 66 69 63 61 74 65 29 20 7b 0a 09  certificate) {..
0480: 76 61 72 20 69 64 3b 0a 09 76 61 72 20 63 65 72  var id;..var cer
0490: 74 69 66 69 63 61 74 65 41 72 72 61 79 3b 0a 0a  tificateArray;..
04a0: 09 69 64 20 3d 20 22 22 3b 0a 0a 09 63 65 72 74  .id = "";...cert
04b0: 69 66 69 63 61 74 65 41 72 72 61 79 20 3d 20 6e  ificateArray = n
04c0: 65 77 20 55 69 6e 74 38 41 72 72 61 79 28 63 65  ew Uint8Array(ce
04d0: 72 74 69 66 69 63 61 74 65 29 3b 0a 0a 09 63 65  rtificate);...ce
04e0: 72 74 69 66 69 63 61 74 65 41 72 72 61 79 2e 6d  rtificateArray.m
04f0: 61 70 28 0a 09 09 66 75 6e 63 74 69 6f 6e 28 62  ap(...function(b
0500: 79 74 65 29 20 7b 0a 09 09 09 69 64 20 2b 3d 20  yte) {....id += 
0510: 28 22 30 22 20 2b 20 62 79 74 65 2e 74 6f 53 74  ("0" + byte.toSt
0520: 72 69 6e 67 28 31 36 29 29 2e 73 6c 69 63 65 28  ring(16)).slice(
0530: 2d 32 29 3b 0a 09 09 7d 0a 09 29 3b 0a 0a 09 64  -2);...}..);...d
0540: 65 6c 65 74 65 20 63 65 72 74 69 66 69 63 61 74  elete certificat
0550: 65 41 72 72 61 79 3b 0a 0a 09 72 65 74 75 72 6e  eArray;...return
0560: 28 69 64 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48  (id);.}../*. * H
0570: 61 6e 64 6c 65 20 61 20 72 65 73 70 6f 6e 73 65  andle a response
0580: 20 66 72 6f 6d 20 74 68 65 20 4e 61 43 6c 20 73   from the NaCl s
0590: 69 64 65 20 72 65 67 61 72 64 69 6e 67 20 63 65  ide regarding ce
05a0: 72 74 69 66 69 63 61 74 65 73 20 61 76 61 69 6c  rtificates avail
05b0: 61 62 6c 65 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f  able. */.functio
05c0: 6e 20 63 61 63 6b 65 79 4d 65 73 73 61 67 65 49  n cackeyMessageI
05d0: 6e 63 6f 6d 69 6e 67 4c 69 73 74 43 65 72 74 69  ncomingListCerti
05e0: 66 69 63 61 74 65 73 28 6d 65 73 73 61 67 65 2c  ficates(message,
05f0: 20 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29   chromeCallback)
0600: 20 7b 0a 09 76 61 72 20 69 64 78 3b 0a 09 76 61   {..var idx;..va
0610: 72 20 63 65 72 74 69 66 69 63 61 74 65 73 20 3d  r certificates =
0620: 20 5b 5d 3b 0a 0a 09 69 66 20 28 21 63 68 72 6f   [];...if (!chro
0630: 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 09  meCallback) {...
0640: 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 66 6f 72  return;..}...for
0650: 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c   (idx = 0; idx <
0660: 20 6d 65 73 73 61 67 65 2e 63 65 72 74 69 66 69   message.certifi
0670: 63 61 74 65 73 2e 6c 65 6e 67 74 68 3b 20 69 64  cates.length; id
0680: 78 2b 2b 29 20 7b 0a 09 09 63 65 72 74 69 66 69  x++) {...certifi
0690: 63 61 74 65 73 2e 70 75 73 68 28 0a 09 09 09 7b  cates.push(....{
06a0: 0a 09 09 09 09 63 65 72 74 69 66 69 63 61 74 65  .....certificate
06b0: 3a 20 6d 65 73 73 61 67 65 2e 63 65 72 74 69 66  : message.certif
06c0: 69 63 61 74 65 73 5b 69 64 78 5d 2c 0a 09 09 09  icates[idx],....
06d0: 09 73 75 70 70 6f 72 74 65 64 48 61 73 68 65 73  .supportedHashes
06e0: 3a 20 5b 27 53 48 41 31 27 2c 20 27 53 48 41 32  : ['SHA1', 'SHA2
06f0: 35 36 27 2c 20 27 53 48 41 35 31 32 27 2c 20 27  56', 'SHA512', '
0700: 4d 44 35 5f 53 48 41 31 27 5d 0a 09 09 09 7d 0a  MD5_SHA1']....}.
0710: 09 09 29 3b 0a 09 7d 0a 0a 09 63 68 72 6f 6d 65  ..);..}...chrome
0720: 43 61 6c 6c 62 61 63 6b 28 63 65 72 74 69 66 69  Callback(certifi
0730: 63 61 74 65 73 2c 0a 09 09 66 75 6e 63 74 69 6f  cates,...functio
0740: 6e 28 72 65 6a 65 63 74 65 64 43 65 72 74 73 29  n(rejectedCerts)
0750: 20 7b 0a 09 09 09 69 66 20 28 63 68 72 6f 6d 65   {....if (chrome
0760: 2e 72 75 6e 74 69 6d 65 2e 6c 61 73 74 45 72 72  .runtime.lastErr
0770: 6f 72 29 20 7b 0a 09 09 09 09 72 65 74 75 72 6e  or) {.....return
0780: 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 72  ;....}.....if (r
0790: 65 6a 65 63 74 65 64 43 65 72 74 73 2e 6c 65 6e  ejectedCerts.len
07a0: 67 74 68 20 21 3d 3d 20 30 29 20 7b 0a 09 09 09  gth !== 0) {....
07b0: 09 6f 6e 43 65 72 74 69 66 69 63 61 74 65 73 52  .onCertificatesR
07c0: 65 6a 65 63 74 65 64 28 72 65 6a 65 63 74 65 64  ejected(rejected
07d0: 43 65 72 74 73 29 3b 0a 09 09 09 7d 0a 0a 09 09  Certs);....}....
07e0: 09 72 65 74 75 72 6e 3b 0a 09 09 7d 0a 09 29 3b  .return;...}..);
07f0: 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  ...return;.}../*
0800: 0a 20 2a 20 48 61 6e 64 6c 65 20 61 20 72 65 73  . * Handle a res
0810: 70 6f 6e 73 65 20 66 72 6f 6d 20 74 68 65 20 4e  ponse from the N
0820: 61 43 6c 20 73 69 64 65 20 72 65 67 61 72 64 69  aCl side regardi
0830: 6e 67 20 61 20 6c 69 73 74 20 6f 66 20 72 65 61  ng a list of rea
0840: 64 65 72 73 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f  ders. */.functio
0850: 6e 20 63 61 63 6b 65 79 4d 65 73 73 61 67 65 49  n cackeyMessageI
0860: 6e 63 6f 6d 69 6e 67 4c 69 73 74 52 65 61 64 65  ncomingListReade
0870: 72 73 28 6d 65 73 73 61 67 65 2c 20 63 68 72 6f  rs(message, chro
0880: 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 69  meCallback) {..i
0890: 66 20 28 21 63 68 72 6f 6d 65 43 61 6c 6c 62 61  f (!chromeCallba
08a0: 63 6b 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a  ck) {...return;.
08b0: 09 7d 0a 0a 09 63 68 72 6f 6d 65 43 61 6c 6c 62  .}...chromeCallb
08c0: 61 63 6b 28 6d 65 73 73 61 67 65 2e 72 65 61 64  ack(message.read
08d0: 65 72 73 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a  ers);...return;.
08e0: 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 20  }../*. * Handle 
08f0: 61 20 72 65 73 70 6f 6e 73 65 20 66 72 6f 6d 20  a response from 
0900: 74 68 65 20 4e 61 43 6c 20 73 69 64 65 20 72 65  the NaCl side re
0910: 67 61 72 64 69 6e 67 20 73 69 67 6e 69 6e 67 20  garding signing 
0920: 61 20 6d 65 73 73 61 67 65 0a 20 2a 2f 0a 66 75  a message. */.fu
0930: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 4d 65 73  nction cackeyMes
0940: 73 61 67 65 49 6e 63 6f 6d 69 6e 67 53 69 67 6e  sageIncomingSign
0950: 4d 65 73 73 61 67 65 28 6d 65 73 73 61 67 65 2c  Message(message,
0960: 20 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29   chromeCallback)
0970: 20 7b 0a 09 76 61 72 20 70 61 79 6c 6f 61 64 3b   {..var payload;
0980: 0a 0a 09 69 66 20 28 21 63 68 72 6f 6d 65 43 61  ...if (!chromeCa
0990: 6c 6c 62 61 63 6b 29 20 7b 0a 09 09 72 65 74 75  llback) {...retu
09a0: 72 6e 3b 0a 09 7d 0a 0a 09 70 61 79 6c 6f 61 64  rn;..}...payload
09b0: 20 3d 20 6d 65 73 73 61 67 65 2e 73 69 67 6e 65   = message.signe
09c0: 64 44 61 74 61 3b 0a 0a 09 63 68 72 6f 6d 65 43  dData;...chromeC
09d0: 61 6c 6c 62 61 63 6b 28 70 61 79 6c 6f 61 64 29  allback(payload)
09e0: 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  ;...return;.}../
09f0: 2a 0a 20 2a 20 55 70 64 61 74 65 20 74 68 65 20  *. * Update the 
0a00: 74 69 6d 65 20 61 20 50 49 4e 20 77 61 73 20 6c  time a PIN was l
0a10: 61 73 74 20 75 73 65 64 20 66 6f 72 20 61 20 63  ast used for a c
0a20: 65 72 74 69 66 69 63 61 74 65 0a 20 2a 2f 0a 66  ertificate. */.f
0a30: 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 43 65  unction cackeyCe
0a40: 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d 61  rtificateToPINMa
0a50: 70 55 70 64 61 74 65 4c 61 73 74 55 73 65 64 28  pUpdateLastUsed(
0a60: 69 64 29 20 7b 0a 09 69 66 20 28 69 64 20 21 3d  id) {..if (id !=
0a70: 20 6e 75 6c 6c 29 20 7b 0a 09 09 63 61 63 6b 65   null) {...cacke
0a80: 79 43 65 72 74 69 66 69 63 61 74 65 54 6f 50 49  yCertificateToPI
0a90: 4e 4d 61 70 5b 69 64 5d 2e 6c 61 73 74 55 73 65  NMap[id].lastUse
0aa0: 64 20 3d 20 28 6e 65 77 20 44 61 74 65 28 29 29  d = (new Date())
0ab0: 2e 67 65 74 54 69 6d 65 28 29 3b 0a 09 7d 0a 0a  .getTime();..}..
0ac0: 09 69 66 20 28 21 63 61 63 6b 65 79 43 65 72 74  .if (!cackeyCert
0ad0: 69 66 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 4c  ificateToPINMapL
0ae0: 61 73 74 55 73 65 64 52 75 6e 6e 65 72 29 20 7b  astUsedRunner) {
0af0: 0a 09 09 63 61 63 6b 65 79 43 65 72 74 69 66 69  ...cackeyCertifi
0b00: 63 61 74 65 54 6f 50 49 4e 4d 61 70 4c 61 73 74  cateToPINMapLast
0b10: 55 73 65 64 52 75 6e 6e 65 72 20 3d 20 74 72 75  UsedRunner = tru
0b20: 65 3b 0a 0a 09 09 73 65 74 54 69 6d 65 6f 75 74  e;....setTimeout
0b30: 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09  (function() {...
0b40: 09 76 61 72 20 63 75 72 72 65 6e 74 54 69 6d 65  .var currentTime
0b50: 3b 0a 09 09 09 76 61 72 20 63 65 72 74 69 66 69  ;....var certifi
0b60: 63 61 74 65 73 2c 20 63 65 72 74 69 66 69 63 61  cates, certifica
0b70: 74 65 3b 0a 09 09 09 76 61 72 20 69 64 78 3b 0a  te;....var idx;.
0b80: 0a 09 09 09 63 75 72 72 65 6e 74 54 69 6d 65 20  ....currentTime 
0b90: 3d 20 28 6e 65 77 20 44 61 74 65 28 29 29 2e 67  = (new Date()).g
0ba0: 65 74 54 69 6d 65 28 29 3b 0a 0a 09 09 09 63 65  etTime();.....ce
0bb0: 72 74 69 66 69 63 61 74 65 73 20 3d 20 4f 62 6a  rtificates = Obj
0bc0: 65 63 74 2e 6b 65 79 73 28 63 61 63 6b 65 79 43  ect.keys(cackeyC
0bd0: 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d  ertificateToPINM
0be0: 61 70 29 3b 0a 0a 09 09 09 63 6f 6e 73 6f 6c 65  ap);.....console
0bf0: 2e 6c 6f 67 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f  .log("Looking fo
0c00: 72 20 50 49 4e 73 20 74 6f 20 63 6c 65 61 72 22  r PINs to clear"
0c10: 29 3b 0a 0a 09 09 09 66 6f 72 20 28 69 64 78 20  );.....for (idx 
0c20: 3d 20 30 3b 20 69 64 78 20 3c 20 63 65 72 74 69  = 0; idx < certi
0c30: 66 69 63 61 74 65 73 2e 6c 65 6e 67 74 68 3b 20  ficates.length; 
0c40: 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 63 65 72  idx++) {.....cer
0c50: 74 69 66 69 63 61 74 65 20 3d 20 63 65 72 74 69  tificate = certi
0c60: 66 69 63 61 74 65 73 5b 69 64 78 5d 3b 0a 0a 09  ficates[idx];...
0c70: 09 09 09 69 66 20 28 28 63 61 63 6b 65 79 43 65  ...if ((cackeyCe
0c80: 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d 61  rtificateToPINMa
0c90: 70 5b 63 65 72 74 69 66 69 63 61 74 65 5d 2e 6c  p[certificate].l
0ca0: 61 73 74 55 73 65 64 20 2b 20 39 30 30 30 30 30  astUsed + 900000
0cb0: 29 20 3e 20 63 75 72 72 65 6e 74 54 69 6d 65 29  ) > currentTime)
0cc0: 20 7b 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75 65   {......continue
0cd0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63 6f 6e  ;.....}......con
0ce0: 73 6f 6c 65 2e 6c 6f 67 28 22 44 65 6c 65 74 65  sole.log("Delete
0cf0: 74 69 6e 67 20 22 20 2b 20 63 65 72 74 69 66 69  ting " + certifi
0d00: 63 61 74 65 29 3b 0a 0a 09 09 09 09 64 65 6c 65  cate);......dele
0d10: 74 65 20 63 61 63 6b 65 79 43 65 72 74 69 66 69  te cackeyCertifi
0d20: 63 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 65 72  cateToPINMap[cer
0d30: 74 69 66 69 63 61 74 65 5d 3b 0a 09 09 09 7d 0a  tificate];....}.
0d40: 0a 09 09 09 63 65 72 74 69 66 69 63 61 74 65 73  ....certificates
0d50: 20 3d 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 63   = Object.keys(c
0d60: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
0d70: 54 6f 50 49 4e 4d 61 70 29 3b 0a 0a 09 09 09 63  ToPINMap);.....c
0d80: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
0d90: 54 6f 50 49 4e 4d 61 70 4c 61 73 74 55 73 65 64  ToPINMapLastUsed
0da0: 52 75 6e 6e 65 72 20 3d 20 66 61 6c 73 65 3b 0a  Runner = false;.
0db0: 0a 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63  ....if (certific
0dc0: 61 74 65 73 2e 6c 65 6e 67 74 68 20 3d 3d 20 30  ates.length == 0
0dd0: 29 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 3b 0a  ) {.....return;.
0de0: 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65 79 43  ...}.....cackeyC
0df0: 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d  ertificateToPINM
0e00: 61 70 55 70 64 61 74 65 4c 61 73 74 55 73 65 64  apUpdateLastUsed
0e10: 28 6e 75 6c 6c 29 3b 0a 09 09 7d 2c 20 39 30 30  (null);...}, 900
0e20: 30 30 30 29 3b 0a 09 7d 0a 7d 0a 0a 2f 2a 0a 20  000);..}.}../*. 
0e30: 2a 20 48 61 6e 64 6c 65 20 61 6e 20 69 6e 63 6f  * Handle an inco
0e40: 6d 69 6e 67 20 6d 65 73 73 61 67 65 20 66 72 6f  ming message fro
0e50: 6d 20 74 68 65 20 4e 61 43 6c 20 73 69 64 65 20  m the NaCl side 
0e60: 61 6e 64 20 70 61 73 73 20 69 74 20 6f 66 66 20  and pass it off 
0e70: 74 6f 0a 20 2a 20 6f 6e 65 20 6f 66 20 74 68 65  to. * one of the
0e80: 20 68 61 6e 64 6c 65 72 73 20 61 62 6f 76 65 20   handlers above 
0e90: 66 6f 72 20 61 63 74 75 61 6c 20 66 6f 72 6d 61  for actual forma
0ea0: 74 74 69 6e 67 20 61 6e 64 20 70 61 73 73 69 6e  tting and passin
0eb0: 67 20 74 6f 0a 20 2a 20 74 68 65 20 63 61 6c 6c  g to. * the call
0ec0: 62 61 63 6b 0a 20 2a 0a 20 2a 20 49 66 20 61 6e  back. *. * If an
0ed0: 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64 2c 20   error occured, 
0ee0: 69 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  invoke the callb
0ef0: 61 63 6b 20 77 69 74 68 20 6e 6f 20 61 72 67 75  ack with no argu
0f00: 6d 65 6e 74 73 2e 0a 20 2a 2f 0a 66 75 6e 63 74  ments.. */.funct
0f10: 69 6f 6e 20 63 61 63 6b 65 79 4d 65 73 73 61 67  ion cackeyMessag
0f20: 65 49 6e 63 6f 6d 69 6e 67 28 6d 65 73 73 61 67  eIncoming(messag
0f30: 65 45 76 65 6e 74 29 20 7b 0a 09 76 61 72 20 6e  eEvent) {..var n
0f40: 65 78 74 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 75  extFunction = nu
0f50: 6c 6c 3b 0a 09 76 61 72 20 63 68 72 6f 6d 65 43  ll;..var chromeC
0f60: 61 6c 6c 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0a  allback = null;.
0f70: 0a 09 69 66 20 28 6d 65 73 73 61 67 65 45 76 65  ..if (messageEve
0f80: 6e 74 2e 64 61 74 61 2e 74 61 72 67 65 74 20 21  nt.data.target !
0f90: 3d 20 22 63 61 63 6b 65 79 22 29 20 7b 0a 09 09  = "cackey") {...
0fa0: 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20  return;..}...if 
0fb0: 28 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09  (goog.DEBUG) {..
0fc0: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 53 54  .console.log("ST
0fd0: 41 52 54 20 4d 45 53 53 41 47 45 22 29 3b 0a 09  ART MESSAGE");..
0fe0: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 6d 65 73  .console.log(mes
0ff0: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 29 3b  sageEvent.data);
1000: 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22  ...console.log("
1010: 45 4e 44 20 4d 45 53 53 41 47 45 22 29 3b 0a 09  END MESSAGE");..
1020: 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 49 66 20 77 65  }.../*.. * If we
1030: 20 66 61 69 6c 65 64 20 66 6f 72 20 73 6f 6d 65   failed for some
1040: 20 72 65 61 73 6f 6e 20 61 6e 64 20 77 65 20 68   reason and we h
1050: 61 76 65 20 61 20 63 65 72 74 69 66 69 63 61 74  ave a certificat
1060: 65 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  e in the origina
1070: 6c 0a 09 20 2a 20 72 65 71 75 65 73 74 20 74 68  l.. * request th
1080: 65 6e 20 66 6f 72 67 65 74 20 61 6e 79 20 50 49  en forget any PI
1090: 4e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  N associated wit
10a0: 68 20 74 68 61 74 20 63 65 72 74 69 66 69 63 61  h that certifica
10b0: 74 65 0a 09 20 2a 2f 0a 09 69 66 20 28 6d 65 73  te.. */..if (mes
10c0: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 73  sageEvent.data.s
10d0: 74 61 74 75 73 20 21 3d 20 22 73 75 63 63 65 73  tatus != "succes
10e0: 73 22 29 20 7b 0a 09 09 69 66 20 28 6d 65 73 73  s") {...if (mess
10f0: 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 6f 72  ageEvent.data.or
1100: 69 67 69 6e 61 6c 72 65 71 75 65 73 74 29 20 7b  iginalrequest) {
1110: 0a 09 09 09 69 66 20 28 6d 65 73 73 61 67 65 45  ....if (messageE
1120: 76 65 6e 74 2e 64 61 74 61 2e 6f 72 69 67 69 6e  vent.data.origin
1130: 61 6c 72 65 71 75 65 73 74 2e 63 65 72 74 69 66  alrequest.certif
1140: 69 63 61 74 65 29 20 7b 0a 09 09 09 09 64 65 6c  icate) {.....del
1150: 65 74 65 20 63 61 63 6b 65 79 43 65 72 74 69 66  ete cackeyCertif
1160: 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 61  icateToPINMap[ca
1170: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
1180: 6f 50 49 4e 49 44 28 6d 65 73 73 61 67 65 45 76  oPINID(messageEv
1190: 65 6e 74 2e 64 61 74 61 2e 6f 72 69 67 69 6e 61  ent.data.origina
11a0: 6c 72 65 71 75 65 73 74 2e 63 65 72 74 69 66 69  lrequest.certifi
11b0: 63 61 74 65 29 5d 3b 0a 09 09 09 7d 0a 09 09 7d  cate)];....}...}
11c0: 0a 09 7d 0a 0a 09 69 66 20 28 6d 65 73 73 61 67  ..}...if (messag
11d0: 65 45 76 65 6e 74 2e 64 61 74 61 2e 63 6f 6d 6d  eEvent.data.comm
11e0: 61 6e 64 20 3d 3d 20 22 69 6e 69 74 22 20 26 26  and == "init" &&
11f0: 20 6d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61   messageEvent.da
1200: 74 61 2e 73 74 61 74 75 73 20 3d 3d 20 22 73 75  ta.status == "su
1210: 63 63 65 73 73 22 29 20 7b 0a 09 09 69 66 20 28  ccess") {...if (
1220: 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09 09  goog.DEBUG) {...
1230: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
1240: 61 63 6b 65 79 5d 20 49 6e 69 74 69 61 6c 69 7a  ackey] Initializ
1250: 61 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65 64 2c  ation completed,
1260: 20 72 65 73 65 6e 64 69 6e 67 20 61 6e 79 20 71   resending any q
1270: 75 65 75 65 64 20 6d 65 73 73 61 67 65 73 22 29  ueued messages")
1280: 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 49  ;...}....cackeyI
1290: 6e 69 74 50 43 53 43 43 6f 6d 70 6c 65 74 65 64  nitPCSCCompleted
12a0: 28 22 73 75 63 63 65 73 73 22 29 3b 0a 09 7d 0a  ("success");..}.
12b0: 0a 09 69 66 20 28 6d 65 73 73 61 67 65 45 76 65  ..if (messageEve
12c0: 6e 74 2e 64 61 74 61 2e 69 64 20 3d 3d 20 6e 75  nt.data.id == nu
12d0: 6c 6c 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a  ll) {...return;.
12e0: 09 7d 0a 0a 09 63 68 72 6f 6d 65 43 61 6c 6c 62  .}...chromeCallb
12f0: 61 63 6b 20 3d 20 63 61 63 6b 65 79 4f 75 74 73  ack = cackeyOuts
1300: 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 73  tandingCallbacks
1310: 5b 6d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61  [messageEvent.da
1320: 74 61 2e 69 64 5d 3b 0a 0a 09 69 66 20 28 63 68  ta.id];...if (ch
1330: 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 20 3d 3d 20  romeCallback == 
1340: 6e 75 6c 6c 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c  null) {...consol
1350: 65 2e 65 72 72 6f 72 28 22 5b 63 61 63 6b 65 79  e.error("[cackey
1360: 5d 20 44 69 73 63 61 72 64 69 6e 67 20 6f 75 74  ] Discarding out
1370: 64 61 74 65 64 20 6d 65 73 73 61 67 65 22 29 3b  dated message");
1380: 0a 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a  ....return;..}..
1390: 09 73 77 69 74 63 68 20 28 6d 65 73 73 61 67 65  .switch (message
13a0: 45 76 65 6e 74 2e 64 61 74 61 2e 73 74 61 74 75  Event.data.statu
13b0: 73 29 20 7b 0a 09 09 63 61 73 65 20 22 65 72 72  s) {...case "err
13c0: 6f 72 22 3a 0a 09 09 09 63 6f 6e 73 6f 6c 65 2e  or":....console.
13d0: 65 72 72 6f 72 28 22 5b 63 61 63 6b 65 79 5d 20  error("[cackey] 
13e0: 46 61 69 6c 65 64 20 74 6f 20 65 78 65 63 75 74  Failed to execut
13f0: 65 20 63 6f 6d 6d 61 6e 64 20 27 22 20 2b 20 6d  e command '" + m
1400: 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61  essageEvent.data
1410: 2e 63 6f 6d 6d 61 6e 64 20 2b 20 22 27 3a 20 22  .command + "': "
1420: 20 2b 20 6d 65 73 73 61 67 65 45 76 65 6e 74 2e   + messageEvent.
1430: 64 61 74 61 2e 65 72 72 6f 72 29 3b 0a 0a 09 09  data.error);....
1440: 09 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 28  .chromeCallback(
1450: 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  );.....break;...
1460: 63 61 73 65 20 22 72 65 74 72 79 22 3a 0a 09 09  case "retry":...
1470: 09 2f 2a 0a 09 09 09 20 2a 20 41 64 64 20 74 68  ./*.... * Add th
1480: 65 20 6e 65 77 20 72 65 71 75 65 73 74 20 74 6f  e new request to
1490: 20 74 68 65 20 71 75 65 75 65 20 6f 66 20 65 76   the queue of ev
14a0: 65 6e 74 73 20 74 6f 20 70 72 6f 63 65 73 73 20  ents to process 
14b0: 77 68 65 6e 20 74 68 65 20 50 49 4e 0a 09 09 09  when the PIN....
14c0: 20 2a 20 70 72 6f 6d 70 74 20 69 73 20 74 65 72   * prompt is ter
14d0: 6d 69 6e 61 74 65 64 2e 0a 09 09 09 20 2a 2f 0a  minated..... */.
14e0: 09 09 09 63 61 63 6b 65 79 4d 65 73 73 61 67 65  ...cackeyMessage
14f0: 73 54 6f 52 65 74 72 79 2e 70 75 73 68 28 6d 65  sToRetry.push(me
1500: 73 73 61 67 65 45 76 65 6e 74 29 3b 0a 0a 09 09  ssageEvent);....
1510: 09 69 66 20 28 70 69 6e 57 69 6e 64 6f 77 50 72  .if (pinWindowPr
1520: 65 76 69 6f 75 73 48 61 6e 64 6c 65 29 20 7b 0a  eviousHandle) {.
1530: 09 09 09 09 2f 2a 0a 09 09 09 09 20 2a 20 41 6e  ..../*..... * An
1540: 20 65 78 69 73 74 69 6e 67 20 50 49 4e 20 65 6e   existing PIN en
1550: 74 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65  try is in progre
1560: 73 73 0a 09 09 09 09 20 2a 20 4a 75 73 74 20 61  ss..... * Just a
1570: 64 64 20 74 68 65 20 72 65 71 75 65 73 74 20 74  dd the request t
1580: 6f 20 74 68 65 20 71 75 65 75 65 20 28 61 62 6f  o the queue (abo
1590: 76 65 29 20 61 6e 64 20 77 61 69 74 0a 09 09 09  ve) and wait....
15a0: 09 20 2a 2f 0a 0a 09 09 09 09 72 65 74 75 72 6e  . */......return
15b0: 3b 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 0a 09 09  ;....}...../*...
15c0: 09 20 2a 20 53 65 74 20 74 68 65 20 68 61 6e 64  . * Set the hand
15d0: 6c 65 20 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64  le to an invalid
15e0: 20 28 62 75 74 20 6e 6f 6e 2d 6e 75 6c 6c 29 20   (but non-null) 
15f0: 76 61 6c 75 65 20 75 6e 74 69 6c 20 74 68 65 20  value until the 
1600: 77 69 6e 64 6f 77 0a 09 09 09 20 2a 20 69 73 20  window.... * is 
1610: 63 72 65 61 74 65 64 20 69 6e 20 63 61 73 65 20  created in case 
1620: 77 65 20 61 72 65 20 69 6e 76 6f 6b 65 64 20 61  we are invoked a
1630: 67 61 69 6e 20 73 6f 6f 6e 2e 0a 09 09 09 20 2a  gain soon..... *
1640: 2f 0a 09 09 09 70 69 6e 57 69 6e 64 6f 77 50 72  /....pinWindowPr
1650: 65 76 69 6f 75 73 48 61 6e 64 6c 65 20 3d 20 22  eviousHandle = "
1660: 69 6e 76 61 6c 69 64 22 3b 0a 0a 09 09 09 63 68  invalid";.....ch
1670: 72 6f 6d 65 2e 61 70 70 2e 77 69 6e 64 6f 77 2e  rome.app.window.
1680: 63 72 65 61 74 65 28 22 70 69 6e 2e 68 74 6d 6c  create("pin.html
1690: 22 2c 20 7b 0a 09 09 09 09 22 69 64 22 3a 20 22  ", {....."id": "
16a0: 63 61 63 6b 65 79 50 49 4e 45 6e 74 72 79 22 2c  cackeyPINEntry",
16b0: 0a 09 09 09 09 22 72 65 73 69 7a 61 62 6c 65 22  ....."resizable"
16c0: 3a 20 66 61 6c 73 65 2c 0a 09 09 09 09 22 61 6c  : false,....."al
16d0: 77 61 79 73 4f 6e 54 6f 70 22 3a 20 74 72 75 65  waysOnTop": true
16e0: 2c 0a 09 09 09 09 22 66 6f 63 75 73 65 64 22 3a  ,....."focused":
16f0: 20 74 72 75 65 2c 0a 09 09 09 09 22 76 69 73 69   true,....."visi
1700: 62 6c 65 4f 6e 41 6c 6c 57 6f 72 6b 73 70 61 63  bleOnAllWorkspac
1710: 65 73 22 3a 20 74 72 75 65 2c 0a 09 09 09 09 22  es": true,....."
1720: 69 6e 6e 65 72 42 6f 75 6e 64 73 22 3a 20 7b 0a  innerBounds": {.
1730: 09 09 09 09 09 22 77 69 64 74 68 22 3a 20 33 35  ....."width": 35
1740: 30 2c 0a 09 09 09 09 09 22 6d 69 6e 57 69 64 74  0,......"minWidt
1750: 68 22 3a 20 33 35 30 2c 0a 09 09 09 09 09 22 68  h": 350,......"h
1760: 65 69 67 68 74 22 3a 20 31 33 35 2c 0a 09 09 09  eight": 135,....
1770: 09 09 22 6d 69 6e 48 65 69 67 68 74 22 3a 20 31  .."minHeight": 1
1780: 33 35 0a 09 09 09 09 7d 0a 09 09 09 7d 2c 20 66  35.....}....}, f
1790: 75 6e 63 74 69 6f 6e 28 70 69 6e 57 69 6e 64 6f  unction(pinWindo
17a0: 77 29 20 7b 0a 09 09 09 09 2f 2a 0a 09 09 09 09  w) {...../*.....
17b0: 20 2a 20 53 65 74 20 74 68 65 20 50 49 4e 20 76   * Set the PIN v
17c0: 61 6c 75 65 20 74 6f 20 62 6c 61 6e 6b 0a 09 09  alue to blank...
17d0: 09 09 20 2a 2f 0a 09 09 09 09 70 69 6e 57 69 6e  .. */.....pinWin
17e0: 64 6f 77 50 49 4e 56 61 6c 75 65 20 3d 20 22 22  dowPINValue = ""
17f0: 3b 0a 0a 09 09 09 09 69 66 20 28 21 70 69 6e 57  ;......if (!pinW
1800: 69 6e 64 6f 77 29 20 7b 0a 09 09 09 09 09 63 6f  indow) {......co
1810: 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 22 5b 63 61  nsole.error("[ca
1820: 63 6b 65 79 5d 20 4e 6f 20 77 69 6e 64 6f 77 20  ckey] No window 
1830: 77 61 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72  was provided for
1840: 20 50 49 4e 20 65 6e 74 72 79 2c 20 74 68 69 73   PIN entry, this
1850: 20 77 69 6c 6c 20 6e 6f 74 20 67 6f 20 77 65 6c   will not go wel
1860: 6c 2e 22 29 3b 0a 0a 09 09 09 09 09 72 65 74 75  l.");.......retu
1870: 72 6e 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 70  rn;.....}......p
1880: 69 6e 57 69 6e 64 6f 77 50 72 65 76 69 6f 75 73  inWindowPrevious
1890: 48 61 6e 64 6c 65 20 3d 20 70 69 6e 57 69 6e 64  Handle = pinWind
18a0: 6f 77 3b 0a 0a 09 09 09 09 70 69 6e 57 69 6e 64  ow;......pinWind
18b0: 6f 77 2e 64 72 61 77 41 74 74 65 6e 74 69 6f 6e  ow.drawAttention
18c0: 28 29 3b 0a 09 09 09 09 70 69 6e 57 69 6e 64 6f  ();.....pinWindo
18d0: 77 2e 66 6f 63 75 73 28 29 3b 0a 0a 09 09 09 09  w.focus();......
18e0: 2f 2a 0a 09 09 09 09 20 2a 20 52 65 67 69 73 74  /*..... * Regist
18f0: 65 72 20 61 20 68 61 6e 64 6c 65 72 20 74 6f 20  er a handler to 
1900: 68 61 6e 64 6c 65 20 74 68 65 20 77 69 6e 64 6f  handle the windo
1910: 77 20 62 65 69 6e 67 20 63 6c 6f 73 65 64 20 77  w being closed w
1920: 69 74 68 6f 75 74 0a 09 09 09 09 20 2a 20 68 61  ithout..... * ha
1930: 76 69 6e 67 20 73 65 6e 74 20 61 6e 79 74 68 69  ving sent anythi
1940: 6e 67 0a 09 09 09 09 20 2a 2f 0a 09 09 09 09 70  ng..... */.....p
1950: 69 6e 57 69 6e 64 6f 77 2e 6f 6e 43 6c 6f 73 65  inWindow.onClose
1960: 64 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 66 75  d.addListener(fu
1970: 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 09 09 09  nction() {......
1980: 76 61 72 20 6d 65 73 73 61 67 65 49 64 78 3b 0a  var messageIdx;.
1990: 09 09 09 09 09 76 61 72 20 63 68 72 6f 6d 65 43  .....var chromeC
19a0: 61 6c 6c 62 61 63 6b 3b 0a 0a 09 09 09 09 09 70  allback;.......p
19b0: 69 6e 57 69 6e 64 6f 77 50 72 65 76 69 6f 75 73  inWindowPrevious
19c0: 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0a 0a  Handle = null;..
19d0: 09 09 09 09 09 66 6f 72 20 28 6d 65 73 73 61 67  .....for (messag
19e0: 65 49 64 78 20 3d 20 30 3b 20 6d 65 73 73 61 67  eIdx = 0; messag
19f0: 65 49 64 78 20 3c 20 63 61 63 6b 65 79 4d 65 73  eIdx < cackeyMes
1a00: 73 61 67 65 73 54 6f 52 65 74 72 79 2e 6c 65 6e  sagesToRetry.len
1a10: 67 74 68 3b 20 6d 65 73 73 61 67 65 49 64 78 2b  gth; messageIdx+
1a20: 2b 29 20 7b 0a 09 09 09 09 09 09 76 61 72 20 74  +) {.......var t
1a30: 6d 70 4d 65 73 73 61 67 65 45 76 65 6e 74 3b 0a  mpMessageEvent;.
1a40: 0a 09 09 09 09 09 09 74 6d 70 4d 65 73 73 61 67  .......tmpMessag
1a50: 65 45 76 65 6e 74 20 3d 20 63 61 63 6b 65 79 4d  eEvent = cackeyM
1a60: 65 73 73 61 67 65 73 54 6f 52 65 74 72 79 5b 6d  essagesToRetry[m
1a70: 65 73 73 61 67 65 49 64 78 5d 3b 0a 0a 09 09 09  essageIdx];.....
1a80: 09 09 09 69 66 20 28 70 69 6e 57 69 6e 64 6f 77  ...if (pinWindow
1a90: 50 49 4e 56 61 6c 75 65 20 3d 3d 20 22 22 29 20  PINValue == "") 
1aa0: 7b 0a 09 09 09 09 09 09 09 69 66 20 28 67 6f 6f  {........if (goo
1ab0: 67 2e 44 45 42 55 47 29 20 7b 0a 09 09 09 09 09  g.DEBUG) {......
1ac0: 09 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22  ...console.log("
1ad0: 5b 63 61 63 6b 65 79 5d 20 54 68 65 20 50 49 4e  [cackey] The PIN
1ae0: 20 64 69 61 6c 6f 67 20 77 61 73 20 63 6c 6f 73   dialog was clos
1af0: 65 64 20 77 69 74 68 6f 75 74 20 67 61 74 68 65  ed without gathe
1b00: 72 69 6e 67 20 61 20 50 49 4e 2c 20 74 72 65 61  ring a PIN, trea
1b10: 74 69 6e 67 20 69 74 20 61 73 20 61 20 66 61 69  ting it as a fai
1b20: 6c 75 72 65 2e 22 29 3b 0a 09 09 09 09 09 09 09  lure.");........
1b30: 7d 0a 0a 09 09 09 09 09 09 09 74 6d 70 4d 65 73  }.........tmpMes
1b40: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 73  sageEvent.data.s
1b50: 74 61 74 75 73 20 3d 20 22 65 72 72 6f 72 22 3b  tatus = "error";
1b60: 0a 09 09 09 09 09 09 09 74 6d 70 4d 65 73 73 61  ........tmpMessa
1b70: 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 65 72 72  geEvent.data.err
1b80: 6f 72 20 3d 20 22 50 49 4e 20 77 69 6e 64 6f 77  or = "PIN window
1b90: 20 63 6c 6f 73 65 64 20 77 69 74 68 6f 75 74 20   closed without 
1ba0: 61 20 50 49 4e 20 62 65 69 6e 67 20 70 72 6f 76  a PIN being prov
1bb0: 69 64 65 64 22 3b 0a 0a 09 09 09 09 09 09 09 63  ided";.........c
1bc0: 61 63 6b 65 79 4d 65 73 73 61 67 65 49 6e 63 6f  ackeyMessageInco
1bd0: 6d 69 6e 67 28 74 6d 70 4d 65 73 73 61 67 65 45  ming(tmpMessageE
1be0: 76 65 6e 74 29 3b 0a 09 09 09 09 09 09 7d 20 65  vent);.......} e
1bf0: 6c 73 65 20 7b 0a 09 09 09 09 09 09 09 74 6d 70  lse {........tmp
1c00: 4d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74  MessageEvent.dat
1c10: 61 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75 65 73  a.originalreques
1c20: 74 2e 70 69 6e 20 3d 20 70 69 6e 57 69 6e 64 6f  t.pin = pinWindo
1c30: 77 50 49 4e 56 61 6c 75 65 3b 0a 0a 09 09 09 09  wPINValue;......
1c40: 09 09 09 63 61 63 6b 65 79 43 65 72 74 69 66 69  ...cackeyCertifi
1c50: 63 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 61 63  cateToPINMap[cac
1c60: 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54 6f  keyCertificateTo
1c70: 50 49 4e 49 44 28 74 6d 70 4d 65 73 73 61 67 65  PINID(tmpMessage
1c80: 45 76 65 6e 74 2e 64 61 74 61 2e 6f 72 69 67 69  Event.data.origi
1c90: 6e 61 6c 72 65 71 75 65 73 74 2e 63 65 72 74 69  nalrequest.certi
1ca0: 66 69 63 61 74 65 29 5d 20 3d 20 7b 7d 0a 09 09  ficate)] = {}...
1cb0: 09 09 09 09 09 63 61 63 6b 65 79 43 65 72 74 69  .....cackeyCerti
1cc0: 66 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63  ficateToPINMap[c
1cd0: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
1ce0: 54 6f 50 49 4e 49 44 28 74 6d 70 4d 65 73 73 61  ToPINID(tmpMessa
1cf0: 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 6f 72 69  geEvent.data.ori
1d00: 67 69 6e 61 6c 72 65 71 75 65 73 74 2e 63 65 72  ginalrequest.cer
1d10: 74 69 66 69 63 61 74 65 29 5d 2e 70 69 6e 20 3d  tificate)].pin =
1d20: 20 70 69 6e 57 69 6e 64 6f 77 50 49 4e 56 61 6c   pinWindowPINVal
1d30: 75 65 3b 0a 0a 09 09 09 09 09 09 09 63 61 63 6b  ue;.........cack
1d40: 65 79 43 65 72 74 69 66 69 63 61 74 65 54 6f 50  eyCertificateToP
1d50: 49 4e 4d 61 70 55 70 64 61 74 65 4c 61 73 74 55  INMapUpdateLastU
1d60: 73 65 64 28 63 61 63 6b 65 79 43 65 72 74 69 66  sed(cackeyCertif
1d70: 69 63 61 74 65 54 6f 50 49 4e 49 44 28 74 6d 70  icateToPINID(tmp
1d80: 4d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74  MessageEvent.dat
1d90: 61 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75 65 73  a.originalreques
1da0: 74 2e 63 65 72 74 69 66 69 63 61 74 65 29 29 3b  t.certificate));
1db0: 0a 0a 09 09 09 09 09 09 09 63 68 72 6f 6d 65 43  .........chromeC
1dc0: 61 6c 6c 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0a  allback = null;.
1dd0: 09 09 09 09 09 09 09 69 66 20 28 74 6d 70 4d 65  .......if (tmpMe
1de0: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e  ssageEvent.data.
1df0: 69 64 29 20 7b 0a 09 09 09 09 09 09 09 09 69 66  id) {.........if
1e00: 20 28 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64   (cackeyOutstand
1e10: 69 6e 67 43 61 6c 6c 62 61 63 6b 73 29 20 7b 0a  ingCallbacks) {.
1e20: 09 09 09 09 09 09 09 09 09 63 68 72 6f 6d 65 43  .........chromeC
1e30: 61 6c 6c 62 61 63 6b 20 3d 20 63 61 63 6b 65 79  allback = cackey
1e40: 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62  OutstandingCallb
1e50: 61 63 6b 73 5b 74 6d 70 4d 65 73 73 61 67 65 45  acks[tmpMessageE
1e60: 76 65 6e 74 2e 64 61 74 61 2e 69 64 5d 3b 0a 09  vent.data.id];..
1e70: 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 09  .......}........
1e80: 7d 0a 0a 09 09 09 09 09 09 09 63 61 63 6b 65 79  }.........cackey
1e90: 49 6e 69 74 50 43 53 43 28 66 75 6e 63 74 69 6f  InitPCSC(functio
1ea0: 6e 28 29 20 7b 0a 09 09 09 09 09 09 09 09 63 61  n() {.........ca
1eb0: 63 6b 65 79 48 61 6e 64 6c 65 2e 70 6f 73 74 4d  ckeyHandle.postM
1ec0: 65 73 73 61 67 65 28 74 6d 70 4d 65 73 73 61 67  essage(tmpMessag
1ed0: 65 45 76 65 6e 74 2e 64 61 74 61 2e 6f 72 69 67  eEvent.data.orig
1ee0: 69 6e 61 6c 72 65 71 75 65 73 74 29 3b 0a 09 09  inalrequest);...
1ef0: 09 09 09 09 09 7d 2c 20 66 75 6e 63 74 69 6f 6e  .....}, function
1f00: 28 29 20 7b 0a 09 09 09 09 09 09 09 09 69 66 20  () {.........if 
1f10: 28 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29  (chromeCallback)
1f20: 20 7b 0a 09 09 09 09 09 09 09 09 09 63 68 72 6f   {..........chro
1f30: 6d 65 43 61 6c 6c 62 61 63 6b 28 29 3b 0a 09 09  meCallback();...
1f40: 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09  ......}.........
1f50: 09 69 66 20 28 74 6d 70 4d 65 73 73 61 67 65 45  .if (tmpMessageE
1f60: 76 65 6e 74 2e 64 61 74 61 2e 69 64 20 26 26 20  vent.data.id && 
1f70: 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e  cackeyOutstandin
1f80: 67 43 61 6c 6c 62 61 63 6b 73 5b 74 6d 70 4d 65  gCallbacks[tmpMe
1f90: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e  ssageEvent.data.
1fa0: 69 64 5d 29 20 7b 0a 09 09 09 09 09 09 09 09 09  id]) {..........
1fb0: 64 65 6c 65 74 65 20 63 61 63 6b 65 79 4f 75 74  delete cackeyOut
1fc0: 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b  standingCallback
1fd0: 73 5b 74 6d 70 4d 65 73 73 61 67 65 45 76 65 6e  s[tmpMessageEven
1fe0: 74 2e 64 61 74 61 2e 69 64 5d 3b 0a 09 09 09 09  t.data.id];.....
1ff0: 09 09 09 09 7d 0a 09 09 09 09 09 09 09 7d 29 3b  ....}........});
2000: 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09 7d 0a  .......}......}.
2010: 0a 0a 09 09 09 09 09 2f 2a 0a 09 09 09 09 09 20  ......./*...... 
2020: 2a 20 44 65 6c 65 74 65 20 74 68 65 20 65 78 69  * Delete the exi
2030: 73 74 69 6e 67 20 68 61 6e 64 6c 65 20 61 6e 64  sting handle and
2040: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 6f 6e   create a new on
2050: 65 0a 09 09 09 09 09 20 2a 2f 0a 09 09 09 09 09  e...... */......
2060: 64 65 6c 65 74 65 20 63 61 63 6b 65 79 4d 65 73  delete cackeyMes
2070: 73 61 67 65 73 54 6f 52 65 74 72 79 3b 0a 0a 09  sagesToRetry;...
2080: 09 09 09 09 63 61 63 6b 65 79 4d 65 73 73 61 67  ....cackeyMessag
2090: 65 73 54 6f 52 65 74 72 79 20 3d 20 5b 5d 3b 0a  esToRetry = [];.
20a0: 0a 09 09 09 09 09 2f 2a 0a 09 09 09 09 09 20 2a  ....../*...... *
20b0: 20 57 65 20 61 72 65 20 64 6f 6e 65 20 66 65 74   We are done fet
20c0: 63 68 69 6e 67 20 74 68 65 20 75 73 65 72 20 50  ching the user P
20d0: 49 4e 2c 20 63 6c 65 61 72 20 74 68 65 20 76 61  IN, clear the va
20e0: 6c 75 65 0a 09 09 09 09 09 20 2a 2f 0a 09 09 09  lue...... */....
20f0: 09 09 70 69 6e 57 69 6e 64 6f 77 50 49 4e 56 61  ..pinWindowPINVa
2100: 6c 75 65 20 3d 20 22 22 3b 0a 0a 09 09 09 09 09  lue = "";.......
2110: 72 65 74 75 72 6e 3b 0a 09 09 09 09 7d 29 0a 0a  return;.....})..
2120: 09 09 09 09 2f 2a 0a 09 09 09 09 20 2a 20 50 61  ..../*..... * Pa
2130: 73 73 20 74 68 69 73 20 6d 65 73 73 61 67 65 20  ss this message 
2140: 6f 66 66 20 74 6f 20 74 68 65 20 6f 74 68 65 72  off to the other
2150: 20 77 69 6e 64 6f 77 20 73 6f 20 74 68 61 74 20   window so that 
2160: 69 74 20 6d 61 79 20 72 65 73 75 62 6d 69 74 20  it may resubmit 
2170: 74 68 65 20 72 65 71 75 65 73 74 2e 0a 09 09 09  the request.....
2180: 09 20 2a 2f 0a 09 09 09 09 70 69 6e 57 69 6e 64  . */.....pinWind
2190: 6f 77 2e 63 6f 6e 74 65 6e 74 57 69 6e 64 6f 77  ow.contentWindow
21a0: 2e 70 61 72 65 6e 74 57 69 6e 64 6f 77 20 3d 20  .parentWindow = 
21b0: 77 69 6e 64 6f 77 3b 0a 09 09 09 09 70 69 6e 57  window;.....pinW
21c0: 69 6e 64 6f 77 2e 63 6f 6e 74 65 6e 74 57 69 6e  indow.contentWin
21d0: 64 6f 77 2e 6d 65 73 73 61 67 65 45 76 65 6e 74  dow.messageEvent
21e0: 20 3d 20 6d 65 73 73 61 67 65 45 76 65 6e 74 3b   = messageEvent;
21f0: 0a 0a 09 09 09 09 72 65 74 75 72 6e 3b 0a 09 09  ......return;...
2200: 09 7d 29 3b 0a 0a 09 09 09 2f 2a 0a 09 09 09 20  .});...../*.... 
2210: 2a 20 57 65 20 72 65 74 75 72 6e 20 68 65 72 65  * We return here
2220: 20 69 6e 73 74 65 61 64 20 6f 66 20 62 72 65 61   instead of brea
2230: 6b 20 74 6f 20 61 76 6f 69 64 20 64 65 6c 65 74  k to avoid delet
2240: 69 6e 67 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  ing the callback
2250: 0a 09 09 09 20 2a 20 65 6e 74 72 79 2e 0a 09 09  .... * entry....
2260: 09 20 2a 2f 0a 09 09 09 72 65 74 75 72 6e 3b 0a  . */....return;.
2270: 09 09 63 61 73 65 20 22 73 75 63 63 65 73 73 22  ..case "success"
2280: 3a 0a 09 09 09 73 77 69 74 63 68 20 28 6d 65 73  :....switch (mes
2290: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 63  sageEvent.data.c
22a0: 6f 6d 6d 61 6e 64 29 20 7b 0a 09 09 09 09 63 61  ommand) {.....ca
22b0: 73 65 20 22 6c 69 73 74 63 65 72 74 69 66 69 63  se "listcertific
22c0: 61 74 65 73 22 3a 0a 09 09 09 09 09 6e 65 78 74  ates":......next
22d0: 46 75 6e 63 74 69 6f 6e 20 3d 20 63 61 63 6b 65  Function = cacke
22e0: 79 4d 65 73 73 61 67 65 49 6e 63 6f 6d 69 6e 67  yMessageIncoming
22f0: 4c 69 73 74 43 65 72 74 69 66 69 63 61 74 65 73  ListCertificates
2300: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
2310: 09 09 09 63 61 73 65 20 22 6c 69 73 74 72 65 61  ...case "listrea
2320: 64 65 72 73 22 3a 0a 09 09 09 09 09 6e 65 78 74  ders":......next
2330: 46 75 6e 63 74 69 6f 6e 20 3d 20 63 61 63 6b 65  Function = cacke
2340: 79 4d 65 73 73 61 67 65 49 6e 63 6f 6d 69 6e 67  yMessageIncoming
2350: 4c 69 73 74 52 65 61 64 65 72 73 3b 0a 0a 09 09  ListReaders;....
2360: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 63 61  ...break;.....ca
2370: 73 65 20 22 73 69 67 6e 22 3a 0a 09 09 09 09 09  se "sign":......
2380: 6e 65 78 74 46 75 6e 63 74 69 6f 6e 20 3d 20 63  nextFunction = c
2390: 61 63 6b 65 79 4d 65 73 73 61 67 65 49 6e 63 6f  ackeyMessageInco
23a0: 6d 69 6e 67 53 69 67 6e 4d 65 73 73 61 67 65 3b  mingSignMessage;
23b0: 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  .......break;...
23c0: 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d  .}.....break;..}
23d0: 0a 0a 09 69 66 20 28 6e 65 78 74 46 75 6e 63 74  ...if (nextFunct
23e0: 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ion != null) {..
23f0: 09 6e 65 78 74 46 75 6e 63 74 69 6f 6e 28 6d 65  .nextFunction(me
2400: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2c  ssageEvent.data,
2410: 20 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29   chromeCallback)
2420: 3b 0a 09 7d 0a 0a 09 64 65 6c 65 74 65 20 63 61  ;..}...delete ca
2430: 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67 43  ckeyOutstandingC
2440: 61 6c 6c 62 61 63 6b 73 5b 6d 65 73 73 61 67 65  allbacks[message
2450: 45 76 65 6e 74 2e 64 61 74 61 2e 69 64 5d 3b 0a  Event.data.id];.
2460: 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a  ..return;.}../*.
2470: 20 2a 20 48 61 6e 64 6c 65 72 20 66 6f 72 20 6d   * Handler for m
2480: 65 73 73 61 67 65 73 20 66 72 6f 6d 20 43 68 72  essages from Chr
2490: 6f 6d 65 20 72 65 6c 61 74 65 64 20 74 6f 20 6c  ome related to l
24a0: 69 73 74 69 6e 67 20 63 65 72 74 69 66 69 63 61  isting certifica
24b0: 74 65 73 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e  tes. */.function
24c0: 20 63 61 63 6b 65 79 4c 69 73 74 43 65 72 74 69   cackeyListCerti
24d0: 66 69 63 61 74 65 73 28 63 68 72 6f 6d 65 43 61  ficates(chromeCa
24e0: 6c 6c 62 61 63 6b 29 20 7b 0a 09 76 61 72 20 63  llback) {..var c
24f0: 61 6c 6c 62 61 63 6b 49 64 3b 0a 09 76 61 72 20  allbackId;..var 
2500: 70 72 6f 6d 69 73 65 48 61 6e 64 6c 65 20 3d 20  promiseHandle = 
2510: 6e 75 6c 6c 2c 20 70 72 6f 6d 69 73 65 52 65 73  null, promiseRes
2520: 6f 6c 76 65 2c 20 70 72 6f 6d 69 73 65 52 65 6a  olve, promiseRej
2530: 65 63 74 3b 0a 0a 09 69 66 20 28 67 6f 6f 67 2e  ect;...if (goog.
2540: 44 45 42 55 47 29 20 7b 0a 09 09 63 6f 6e 73 6f  DEBUG) {...conso
2550: 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d  le.log("[cackey]
2560: 20 41 73 6b 65 64 20 74 6f 20 70 72 6f 76 69 64   Asked to provid
2570: 65 20 61 20 6c 69 73 74 20 6f 66 20 63 65 72 74  e a list of cert
2580: 69 66 69 63 61 74 65 73 20 2d 2d 20 74 68 72 6f  ificates -- thro
2590: 77 69 6e 67 20 74 68 61 74 20 72 65 71 75 65 73  wing that reques
25a0: 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20 4e 61  t over to the Na
25b0: 43 6c 20 73 69 64 65 2e 2e 2e 20 22 29 3b 0a 09  Cl side... ");..
25c0: 7d 0a 0a 09 69 66 20 28 21 63 68 72 6f 6d 65 43  }...if (!chromeC
25d0: 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 09 2f 2a 0a  allback) {.../*.
25e0: 09 09 20 2a 20 49 66 20 6e 6f 20 63 61 6c 6c 62  .. * If no callb
25f0: 61 63 6b 20 73 75 70 70 6c 69 65 64 2c 20 61 72  ack supplied, ar
2600: 72 61 6e 67 65 20 66 6f 72 20 61 20 70 72 6f 6d  range for a prom
2610: 69 73 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ise to be return
2620: 65 64 20 69 6e 73 74 65 61 64 0a 09 09 20 2a 2f  ed instead... */
2630: 0a 09 09 70 72 6f 6d 69 73 65 48 61 6e 64 6c 65  ...promiseHandle
2640: 20 3d 20 6e 65 77 20 50 72 6f 6d 69 73 65 28 66   = new Promise(f
2650: 75 6e 63 74 69 6f 6e 28 72 65 73 6f 6c 76 65 2c  unction(resolve,
2660: 20 72 65 6a 65 63 74 29 20 7b 0a 09 09 09 70 72   reject) {....pr
2670: 6f 6d 69 73 65 52 65 73 6f 6c 76 65 20 3d 20 72  omiseResolve = r
2680: 65 73 6f 6c 76 65 3b 0a 09 09 09 70 72 6f 6d 69  esolve;....promi
2690: 73 65 52 65 6a 65 63 74 20 3d 20 72 65 6a 65 63  seReject = rejec
26a0: 74 3b 0a 09 09 7d 29 3b 0a 0a 09 09 63 68 72 6f  t;...});....chro
26b0: 6d 65 43 61 6c 6c 62 61 63 6b 20 3d 20 66 75 6e  meCallback = fun
26c0: 63 74 69 6f 6e 28 63 65 72 74 73 29 20 7b 0a 09  ction(certs) {..
26d0: 09 09 70 72 6f 6d 69 73 65 52 65 73 6f 6c 76 65  ..promiseResolve
26e0: 28 63 65 72 74 73 29 3b 0a 09 09 7d 3b 0a 09 7d  (certs);...};..}
26f0: 0a 0a 09 63 61 6c 6c 62 61 63 6b 49 64 20 3d 20  ...callbackId = 
2700: 2b 2b 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64  ++cackeyOutstand
2710: 69 6e 67 43 61 6c 6c 62 61 63 6b 43 6f 75 6e 74  ingCallbackCount
2720: 65 72 3b 0a 0a 09 63 61 63 6b 65 79 49 6e 69 74  er;...cackeyInit
2730: 50 43 53 43 28 66 75 6e 63 74 69 6f 6e 28 29 20  PCSC(function() 
2740: 7b 0a 09 09 63 61 63 6b 65 79 48 61 6e 64 6c 65  {...cackeyHandle
2750: 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 0a 09 09  .postMessage(...
2760: 09 7b 0a 09 09 09 09 27 74 61 72 67 65 74 27 3a  .{.....'target':
2770: 20 22 63 61 63 6b 65 79 22 2c 0a 09 09 09 09 27   "cackey",.....'
2780: 63 6f 6d 6d 61 6e 64 27 3a 20 22 6c 69 73 74 63  command': "listc
2790: 65 72 74 69 66 69 63 61 74 65 73 22 2c 0a 09 09  ertificates",...
27a0: 09 09 27 69 64 27 3a 20 63 61 6c 6c 62 61 63 6b  ..'id': callback
27b0: 49 64 0a 09 09 09 7d 0a 09 09 29 3b 0a 0a 09 09  Id....}...);....
27c0: 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e  cackeyOutstandin
27d0: 67 43 61 6c 6c 62 61 63 6b 73 5b 63 61 6c 6c 62  gCallbacks[callb
27e0: 61 63 6b 49 64 5d 20 3d 20 63 68 72 6f 6d 65 43  ackId] = chromeC
27f0: 61 6c 6c 62 61 63 6b 3b 0a 0a 09 09 69 66 20 28  allback;....if (
2800: 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09 09  goog.DEBUG) {...
2810: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
2820: 61 63 6b 65 79 5d 20 54 68 72 6f 77 6e 2e 22 29  ackey] Thrown.")
2830: 3b 0a 09 09 7d 0a 09 7d 2c 20 63 68 72 6f 6d 65  ;...}..}, chrome
2840: 43 61 6c 6c 62 61 63 6b 29 3b 0a 0a 09 72 65 74  Callback);...ret
2850: 75 72 6e 28 70 72 6f 6d 69 73 65 48 61 6e 64 6c  urn(promiseHandl
2860: 65 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e  e);.}../*. * Han
2870: 64 6c 65 72 20 66 6f 72 20 6d 65 73 73 61 67 65  dler for message
2880: 73 20 66 72 6f 6d 20 43 68 72 6f 6d 65 20 72 65  s from Chrome re
2890: 6c 61 74 65 64 20 74 6f 20 6c 69 73 74 69 6e 67  lated to listing
28a0: 20 72 65 61 64 65 72 73 0a 20 2a 2f 0a 66 75 6e   readers. */.fun
28b0: 63 74 69 6f 6e 20 63 61 63 6b 65 79 4c 69 73 74  ction cackeyList
28c0: 52 65 61 64 65 72 73 28 63 68 72 6f 6d 65 43 61  Readers(chromeCa
28d0: 6c 6c 62 61 63 6b 29 20 7b 0a 09 76 61 72 20 63  llback) {..var c
28e0: 61 6c 6c 62 61 63 6b 49 64 3b 0a 0a 09 69 66 20  allbackId;...if 
28f0: 28 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09  (goog.DEBUG) {..
2900: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
2910: 61 63 6b 65 79 5d 20 41 73 6b 65 64 20 74 6f 20  ackey] Asked to 
2920: 70 72 6f 76 69 64 65 20 61 20 6c 69 73 74 20 6f  provide a list o
2930: 66 20 72 65 61 64 65 72 73 20 2d 2d 20 74 68 72  f readers -- thr
2940: 6f 77 69 6e 67 20 74 68 61 74 20 72 65 71 75 65  owing that reque
2950: 73 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20 4e  st over to the N
2960: 61 43 6c 20 73 69 64 65 2e 2e 2e 20 22 29 3b 0a  aCl side... ");.
2970: 09 7d 0a 0a 09 63 61 6c 6c 62 61 63 6b 49 64 20  .}...callbackId 
2980: 3d 20 2b 2b 63 61 63 6b 65 79 4f 75 74 73 74 61  = ++cackeyOutsta
2990: 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 43 6f 75  ndingCallbackCou
29a0: 6e 74 65 72 3b 0a 0a 09 63 61 63 6b 65 79 49 6e  nter;...cackeyIn
29b0: 69 74 50 43 53 43 28 66 75 6e 63 74 69 6f 6e 28  itPCSC(function(
29c0: 29 20 7b 0a 09 09 63 61 63 6b 65 79 48 61 6e 64  ) {...cackeyHand
29d0: 6c 65 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 0a  le.postMessage(.
29e0: 09 09 09 7b 0a 09 09 09 09 27 74 61 72 67 65 74  ...{.....'target
29f0: 27 3a 20 22 63 61 63 6b 65 79 22 2c 0a 09 09 09  ': "cackey",....
2a00: 09 27 63 6f 6d 6d 61 6e 64 27 3a 20 22 6c 69 73  .'command': "lis
2a10: 74 72 65 61 64 65 72 73 22 2c 0a 09 09 09 09 27  treaders",.....'
2a20: 69 64 27 3a 20 63 61 6c 6c 62 61 63 6b 49 64 0a  id': callbackId.
2a30: 09 09 09 7d 0a 09 09 29 3b 0a 0a 09 09 63 61 63  ...}...);....cac
2a40: 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67 43 61  keyOutstandingCa
2a50: 6c 6c 62 61 63 6b 73 5b 63 61 6c 6c 62 61 63 6b  llbacks[callback
2a60: 49 64 5d 20 3d 20 63 68 72 6f 6d 65 43 61 6c 6c  Id] = chromeCall
2a70: 62 61 63 6b 3b 0a 0a 09 09 69 66 20 28 67 6f 6f  back;....if (goo
2a80: 67 2e 44 45 42 55 47 29 20 7b 0a 09 09 09 63 6f  g.DEBUG) {....co
2a90: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b  nsole.log("[cack
2aa0: 65 79 5d 20 54 68 72 6f 77 6e 2e 22 29 3b 0a 09  ey] Thrown.");..
2ab0: 09 7d 0a 09 7d 2c 20 63 68 72 6f 6d 65 43 61 6c  .}..}, chromeCal
2ac0: 6c 62 61 63 6b 29 3b 0a 0a 09 72 65 74 75 72 6e  lback);...return
2ad0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c  ;.}../*. * Handl
2ae0: 65 72 20 66 6f 72 20 6d 65 73 73 61 67 65 73 20  er for messages 
2af0: 66 72 6f 6d 20 43 68 72 6f 6d 65 20 72 65 6c 61  from Chrome rela
2b00: 74 65 64 20 74 6f 20 73 69 67 6e 69 6e 67 20 61  ted to signing a
2b10: 20 68 61 73 68 20 6f 66 20 73 6f 6d 65 20 73 6f   hash of some so
2b20: 72 74 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20  rt. */.function 
2b30: 63 61 63 6b 65 79 53 69 67 6e 4d 65 73 73 61 67  cackeySignMessag
2b40: 65 28 73 69 67 6e 52 65 71 75 65 73 74 2c 20 63  e(signRequest, c
2b50: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b  hromeCallback) {
2b60: 0a 09 76 61 72 20 63 61 6c 6c 62 61 63 6b 49 64  ..var callbackId
2b70: 3b 0a 09 76 61 72 20 63 6f 6d 6d 61 6e 64 3b 0a  ;..var command;.
2b80: 09 76 61 72 20 63 65 72 74 69 66 69 63 61 74 65  .var certificate
2b90: 49 64 3b 0a 09 76 61 72 20 64 69 67 65 73 74 2c  Id;..var digest,
2ba0: 20 64 69 67 65 73 74 48 65 61 64 65 72 3b 0a 09   digestHeader;..
2bb0: 76 61 72 20 70 72 6f 6d 69 73 65 48 61 6e 64 6c  var promiseHandl
2bc0: 65 20 3d 20 6e 75 6c 6c 2c 20 70 72 6f 6d 69 73  e = null, promis
2bd0: 65 52 65 73 6f 6c 76 65 2c 20 70 72 6f 6d 69 73  eResolve, promis
2be0: 65 52 65 6a 65 63 74 3b 0a 0a 09 69 66 20 28 21  eReject;...if (!
2bf0: 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 20  chromeCallback) 
2c00: 7b 0a 09 09 2f 2a 0a 09 09 20 2a 20 49 66 20 6e  {.../*... * If n
2c10: 6f 20 63 61 6c 6c 62 61 63 6b 20 73 75 70 70 6c  o callback suppl
2c20: 69 65 64 2c 20 61 72 72 61 6e 67 65 20 66 6f 72  ied, arrange for
2c30: 20 61 20 70 72 6f 6d 69 73 65 20 74 6f 20 62 65   a promise to be
2c40: 20 72 65 74 75 72 6e 65 64 20 69 6e 73 74 65 61   returned instea
2c50: 64 0a 09 09 20 2a 2f 0a 09 09 70 72 6f 6d 69 73  d... */...promis
2c60: 65 48 61 6e 64 6c 65 20 3d 20 6e 65 77 20 50 72  eHandle = new Pr
2c70: 6f 6d 69 73 65 28 66 75 6e 63 74 69 6f 6e 28 72  omise(function(r
2c80: 65 73 6f 6c 76 65 2c 20 72 65 6a 65 63 74 29 20  esolve, reject) 
2c90: 7b 0a 09 09 09 70 72 6f 6d 69 73 65 52 65 73 6f  {....promiseReso
2ca0: 6c 76 65 20 3d 20 72 65 73 6f 6c 76 65 3b 0a 09  lve = resolve;..
2cb0: 09 09 70 72 6f 6d 69 73 65 52 65 6a 65 63 74 20  ..promiseReject 
2cc0: 3d 20 72 65 6a 65 63 74 3b 0a 09 09 7d 29 3b 0a  = reject;...});.
2cd0: 0a 09 09 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63  ...chromeCallbac
2ce0: 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 28 70 61 79  k = function(pay
2cf0: 6c 6f 61 64 29 20 7b 0a 09 09 09 69 66 20 28 21  load) {....if (!
2d00: 70 61 79 6c 6f 61 64 29 20 7b 0a 09 09 09 09 70  payload) {.....p
2d10: 72 6f 6d 69 73 65 52 65 6a 65 63 74 28 6e 65 77  romiseReject(new
2d20: 20 45 72 72 6f 72 28 22 53 69 67 6e 69 6e 67 20   Error("Signing 
2d30: 70 61 79 6c 6f 61 64 20 69 73 20 65 6d 70 74 79  payload is empty
2d40: 20 6f 72 20 6e 6f 74 20 73 75 70 70 6c 69 65 64   or not supplied
2d50: 22 29 29 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b  "));....} else {
2d60: 0a 09 09 09 09 70 72 6f 6d 69 73 65 52 65 73 6f  .....promiseReso
2d70: 6c 76 65 28 70 61 79 6c 6f 61 64 29 3b 0a 09 09  lve(payload);...
2d80: 09 7d 0a 09 09 7d 3b 0a 09 7d 0a 0a 09 2f 2a 0a  .}...};..}.../*.
2d90: 09 20 2a 20 50 72 65 66 69 78 20 74 68 65 20 64  . * Prefix the d
2da0: 69 67 65 73 74 20 77 69 74 68 20 74 68 65 20 41  igest with the A
2db0: 53 4e 2e 31 20 68 65 61 64 65 72 20 72 65 71 75  SN.1 header requ
2dc0: 69 72 65 64 20 6f 66 20 69 74 0a 09 20 2a 2f 0a  ired of it.. */.
2dd0: 09 73 77 69 74 63 68 20 28 73 69 67 6e 52 65 71  .switch (signReq
2de0: 75 65 73 74 2e 68 61 73 68 29 20 7b 0a 09 09 63  uest.hash) {...c
2df0: 61 73 65 20 22 53 48 41 31 22 3a 0a 09 09 09 64  ase "SHA1":....d
2e00: 69 67 65 73 74 48 65 61 64 65 72 20 3d 20 6e 65  igestHeader = ne
2e10: 77 20 55 69 6e 74 38 41 72 72 61 79 28 5b 30 78  w Uint8Array([0x
2e20: 33 30 2c 20 30 78 32 31 2c 20 30 78 33 30 2c 20  30, 0x21, 0x30, 
2e30: 30 78 30 39 2c 20 30 78 30 36 2c 20 30 78 30 35  0x09, 0x06, 0x05
2e40: 2c 20 30 78 32 62 2c 20 30 78 30 65 2c 20 30 78  , 0x2b, 0x0e, 0x
2e50: 30 33 2c 20 30 78 30 32 2c 20 30 78 31 61 2c 20  03, 0x02, 0x1a, 
2e60: 30 78 30 35 2c 20 30 78 30 30 2c 20 30 78 30 34  0x05, 0x00, 0x04
2e70: 2c 20 30 78 31 34 5d 29 3b 0a 09 09 09 62 72 65  , 0x14]);....bre
2e80: 61 6b 3b 0a 09 09 63 61 73 65 20 22 53 48 41 32  ak;...case "SHA2
2e90: 35 36 22 3a 0a 09 09 09 64 69 67 65 73 74 48 65  56":....digestHe
2ea0: 61 64 65 72 20 3d 20 6e 65 77 20 55 69 6e 74 38  ader = new Uint8
2eb0: 41 72 72 61 79 28 5b 30 78 33 30 2c 20 30 78 33  Array([0x30, 0x3
2ec0: 31 2c 20 30 78 33 30 2c 20 30 78 30 64 2c 20 30  1, 0x30, 0x0d, 0
2ed0: 78 30 36 2c 20 30 78 30 39 2c 20 30 78 36 30 2c  x06, 0x09, 0x60,
2ee0: 20 30 78 38 36 2c 20 30 78 34 38 2c 20 30 78 30   0x86, 0x48, 0x0
2ef0: 31 2c 20 30 78 36 35 2c 20 30 78 30 33 2c 20 30  1, 0x65, 0x03, 0
2f00: 78 30 34 2c 20 30 78 30 32 2c 20 30 78 30 31 2c  x04, 0x02, 0x01,
2f10: 20 30 78 30 35 2c 20 30 78 30 30 2c 20 30 78 30   0x05, 0x00, 0x0
2f20: 34 2c 20 30 78 32 30 5d 29 3b 0a 09 09 09 62 72  4, 0x20]);....br
2f30: 65 61 6b 3b 0a 09 09 63 61 73 65 20 22 53 48 41  eak;...case "SHA
2f40: 35 31 32 22 3a 0a 09 09 09 64 69 67 65 73 74 48  512":....digestH
2f50: 65 61 64 65 72 20 3d 20 6e 65 77 20 55 69 6e 74  eader = new Uint
2f60: 38 41 72 72 61 79 28 5b 30 78 33 30 2c 20 30 78  8Array([0x30, 0x
2f70: 35 31 2c 20 30 78 33 30 2c 20 30 78 30 64 2c 20  51, 0x30, 0x0d, 
2f80: 30 78 30 36 2c 20 30 78 30 39 2c 20 30 78 36 30  0x06, 0x09, 0x60
2f90: 2c 20 30 78 38 36 2c 20 30 78 34 38 2c 20 30 78  , 0x86, 0x48, 0x
2fa0: 30 31 2c 20 30 78 36 35 2c 20 30 78 30 33 2c 20  01, 0x65, 0x03, 
2fb0: 30 78 30 34 2c 20 30 78 30 32 2c 20 30 78 30 33  0x04, 0x02, 0x03
2fc0: 2c 20 30 78 30 35 2c 20 30 78 30 30 2c 20 30 78  , 0x05, 0x00, 0x
2fd0: 30 34 2c 20 30 78 34 30 5d 29 3b 0a 09 09 09 62  04, 0x40]);....b
2fe0: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 22 4d 44  reak;...case "MD
2ff0: 35 5f 53 48 41 31 22 3a 0a 09 09 63 61 73 65 20  5_SHA1":...case 
3000: 22 52 41 57 22 3a 0a 09 09 09 64 69 67 65 73 74  "RAW":....digest
3010: 48 65 61 64 65 72 20 3d 20 6e 65 77 20 55 69 6e  Header = new Uin
3020: 74 38 41 72 72 61 79 28 29 3b 0a 09 09 09 62 72  t8Array();....br
3030: 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a 0a  eak;...default:.
3040: 09 09 09 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72  ...console.error
3050: 28 22 5b 63 61 63 6b 65 79 5d 20 41 73 6b 65 64  ("[cackey] Asked
3060: 20 74 6f 20 73 69 67 6e 20 61 20 6d 65 73 73 61   to sign a messa
3070: 67 65 20 77 69 74 68 20 61 20 68 61 73 68 20 77  ge with a hash w
3080: 65 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74  e do not support
3090: 3a 20 22 20 2b 20 73 69 67 6e 52 65 71 75 65 73  : " + signReques
30a0: 74 2e 68 61 73 68 29 3b 0a 0a 09 09 09 63 68 72  t.hash);.....chr
30b0: 6f 6d 65 43 61 6c 6c 62 61 63 6b 28 29 3b 0a 0a  omeCallback();..
30c0: 09 09 09 72 65 74 75 72 6e 28 70 72 6f 6d 69 73  ...return(promis
30d0: 65 48 61 6e 64 6c 65 29 3b 0a 09 7d 0a 0a 09 64  eHandle);..}...d
30e0: 69 67 65 73 74 20 3d 20 6e 65 77 20 55 69 6e 74  igest = new Uint
30f0: 38 41 72 72 61 79 28 64 69 67 65 73 74 48 65 61  8Array(digestHea
3100: 64 65 72 2e 6c 65 6e 67 74 68 20 2b 20 73 69 67  der.length + sig
3110: 6e 52 65 71 75 65 73 74 2e 64 69 67 65 73 74 2e  nRequest.digest.
3120: 62 79 74 65 4c 65 6e 67 74 68 29 3b 0a 09 64 69  byteLength);..di
3130: 67 65 73 74 2e 73 65 74 28 64 69 67 65 73 74 48  gest.set(digestH
3140: 65 61 64 65 72 2c 20 30 29 3b 0a 09 64 69 67 65  eader, 0);..dige
3150: 73 74 2e 73 65 74 28 6e 65 77 20 55 69 6e 74 38  st.set(new Uint8
3160: 41 72 72 61 79 28 73 69 67 6e 52 65 71 75 65 73  Array(signReques
3170: 74 2e 64 69 67 65 73 74 29 2c 20 64 69 67 65 73  t.digest), diges
3180: 74 48 65 61 64 65 72 2e 6c 65 6e 67 74 68 29 3b  tHeader.length);
3190: 0a 0a 09 64 65 6c 65 74 65 20 64 69 67 65 73 74  ...delete digest
31a0: 48 65 61 64 65 72 3b 0a 0a 09 69 66 20 28 67 6f  Header;...if (go
31b0: 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09 09 63 6f  og.DEBUG) {...co
31c0: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b  nsole.log("[cack
31d0: 65 79 5d 20 41 73 6b 65 64 20 74 6f 20 73 69 67  ey] Asked to sig
31e0: 6e 20 61 20 6d 65 73 73 61 67 65 20 2d 2d 20 74  n a message -- t
31f0: 68 72 6f 77 69 6e 67 20 74 68 61 74 20 72 65 71  hrowing that req
3200: 75 65 73 74 20 6f 76 65 72 20 74 6f 20 74 68 65  uest over to the
3210: 20 4e 61 43 6c 20 73 69 64 65 2e 2e 2e 20 22 29   NaCl side... ")
3220: 3b 0a 09 7d 0a 0a 09 63 61 6c 6c 62 61 63 6b 49  ;..}...callbackI
3230: 64 20 3d 20 2b 2b 63 61 63 6b 65 79 4f 75 74 73  d = ++cackeyOuts
3240: 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 43  tandingCallbackC
3250: 6f 75 6e 74 65 72 3b 0a 0a 09 63 6f 6d 6d 61 6e  ounter;...comman
3260: 64 20 3d 20 7b 0a 09 09 27 74 61 72 67 65 74 27  d = {...'target'
3270: 3a 20 22 63 61 63 6b 65 79 22 2c 0a 09 09 27 63  : "cackey",...'c
3280: 6f 6d 6d 61 6e 64 27 3a 20 22 73 69 67 6e 22 2c  ommand': "sign",
3290: 0a 09 09 27 69 64 27 3a 20 63 61 6c 6c 62 61 63  ...'id': callbac
32a0: 6b 49 64 2c 0a 09 09 27 63 65 72 74 69 66 69 63  kId,...'certific
32b0: 61 74 65 27 3a 20 73 69 67 6e 52 65 71 75 65 73  ate': signReques
32c0: 74 2e 63 65 72 74 69 66 69 63 61 74 65 2c 0a 09  t.certificate,..
32d0: 09 27 64 61 74 61 27 3a 20 64 69 67 65 73 74 2e  .'data': digest.
32e0: 62 75 66 66 65 72 0a 09 7d 3b 0a 0a 09 63 65 72  buffer..};...cer
32f0: 74 69 66 69 63 61 74 65 49 64 20 3d 20 63 61 63  tificateId = cac
3300: 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54 6f  keyCertificateTo
3310: 50 49 4e 49 44 28 63 6f 6d 6d 61 6e 64 2e 63 65  PINID(command.ce
3320: 72 74 69 66 69 63 61 74 65 29 3b 0a 0a 09 69 66  rtificate);...if
3330: 20 28 63 61 63 6b 65 79 43 65 72 74 69 66 69 63   (cackeyCertific
3340: 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 65 72 74  ateToPINMap[cert
3350: 69 66 69 63 61 74 65 49 64 5d 20 26 26 20 63 61  ificateId] && ca
3360: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
3370: 6f 50 49 4e 4d 61 70 5b 63 65 72 74 69 66 69 63  oPINMap[certific
3380: 61 74 65 49 64 5d 2e 70 69 6e 29 20 7b 0a 09 09  ateId].pin) {...
3390: 63 6f 6d 6d 61 6e 64 2e 70 69 6e 20 3d 20 63 61  command.pin = ca
33a0: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
33b0: 6f 50 49 4e 4d 61 70 5b 63 65 72 74 69 66 69 63  oPINMap[certific
33c0: 61 74 65 49 64 5d 2e 70 69 6e 3b 0a 0a 09 09 63  ateId].pin;....c
33d0: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
33e0: 54 6f 50 49 4e 4d 61 70 55 70 64 61 74 65 4c 61  ToPINMapUpdateLa
33f0: 73 74 55 73 65 64 28 63 65 72 74 69 66 69 63 61  stUsed(certifica
3400: 74 65 49 64 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b  teId);..}...cack
3410: 65 79 49 6e 69 74 50 43 53 43 28 66 75 6e 63 74  eyInitPCSC(funct
3420: 69 6f 6e 28 29 20 7b 0a 09 09 63 61 63 6b 65 79  ion() {...cackey
3430: 48 61 6e 64 6c 65 2e 70 6f 73 74 4d 65 73 73 61  Handle.postMessa
3440: 67 65 28 63 6f 6d 6d 61 6e 64 29 3b 0a 0a 09 09  ge(command);....
3450: 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e  cackeyOutstandin
3460: 67 43 61 6c 6c 62 61 63 6b 73 5b 63 61 6c 6c 62  gCallbacks[callb
3470: 61 63 6b 49 64 5d 20 3d 20 63 68 72 6f 6d 65 43  ackId] = chromeC
3480: 61 6c 6c 62 61 63 6b 3b 0a 0a 09 09 69 66 20 28  allback;....if (
3490: 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09 09  goog.DEBUG) {...
34a0: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
34b0: 61 63 6b 65 79 5d 20 54 68 72 6f 77 6e 2e 22 29  ackey] Thrown.")
34c0: 3b 0a 09 09 7d 0a 09 7d 2c 20 63 68 72 6f 6d 65  ;...}..}, chrome
34d0: 43 61 6c 6c 62 61 63 6b 29 3b 0a 0a 09 72 65 74  Callback);...ret
34e0: 75 72 6e 28 70 72 6f 6d 69 73 65 48 61 6e 64 6c  urn(promiseHandl
34f0: 65 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 55 6e 69  e);.}../*. * Uni
3500: 74 69 74 61 6c 69 7a 65 73 20 74 68 65 20 43 41  titalizes the CA
3510: 43 4b 65 79 20 50 43 53 43 20 63 6f 6e 6e 65 63  CKey PCSC connec
3520: 74 69 6f 6e 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f  tion. */.functio
3530: 6e 20 63 61 63 6b 65 79 55 6e 69 6e 69 74 50 43  n cackeyUninitPC
3540: 53 43 28 29 20 7b 0a 09 63 6f 6e 73 6f 6c 65 2e  SC() {..console.
3550: 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63 61  log("[cackey] ca
3560: 63 6b 65 79 55 6e 69 6e 69 74 50 43 53 43 28 29  ckeyUninitPCSC()
3570: 20 63 61 6c 6c 65 64 22 29 3b 0a 0a 09 69 66 20   called");...if 
3580: 28 63 61 63 6b 65 79 50 43 53 43 48 61 6e 64 6c  (cackeyPCSCHandl
3590: 65 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09 09 63  e != null) {...c
35a0: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63  onsole.log("[cac
35b0: 6b 65 79 5d 20 44 65 6c 65 74 69 6e 67 20 50 43  key] Deleting PC
35c0: 53 43 20 68 61 6e 64 6c 65 22 29 3b 0a 0a 09 09  SC handle");....
35d0: 63 61 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65  cackeyPCSCHandle
35e0: 20 3d 20 6e 75 6c 6c 3b 0a 09 7d 0a 0a 09 63 61   = null;..}...ca
35f0: 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65 55 73  ckeyPCSCHandleUs
3600: 61 62 6c 65 20 3d 20 66 61 6c 73 65 3b 0a 0a 09  able = false;...
3610: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61  console.log("[ca
3620: 63 6b 65 79 5d 20 63 61 63 6b 65 79 55 6e 69 6e  ckey] cackeyUnin
3630: 69 74 50 43 53 43 28 29 20 72 65 74 75 72 6e 69  itPCSC() returni
3640: 6e 67 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a  ng");...return;.
3650: 7d 0a 0a 2f 2a 0a 20 2a 20 55 6e 69 6e 69 74 69  }../*. * Uniniti
3660: 61 6c 69 7a 65 73 20 43 41 43 4b 65 79 20 28 70  alizes CACKey (p
3670: 72 6f 62 61 62 6c 79 20 64 75 65 20 74 6f 20 61  robably due to a
3680: 20 63 72 61 73 68 29 0a 20 2a 2f 0a 66 75 6e 63   crash). */.func
3690: 74 69 6f 6e 20 63 61 63 6b 65 79 55 6e 69 6e 69  tion cackeyUnini
36a0: 74 28 29 20 7b 0a 09 63 6f 6e 73 6f 6c 65 2e 6c  t() {..console.l
36b0: 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63 61 63  og("[cackey] cac
36c0: 6b 65 79 55 6e 69 6e 69 74 28 29 20 63 61 6c 6c  keyUninit() call
36d0: 65 64 22 29 3b 0a 0a 09 69 66 20 28 63 68 72 6f  ed");...if (chro
36e0: 6d 65 2e 63 65 72 74 69 66 69 63 61 74 65 50 72  me.certificatePr
36f0: 6f 76 69 64 65 72 29 20 7b 0a 09 09 63 6f 6e 73  ovider) {...cons
3700: 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79  ole.log("[cackey
3710: 5d 20 55 6e 72 65 67 69 73 74 65 72 65 64 20 43  ] Unregistered C
3720: 68 72 6f 6d 65 20 63 65 72 74 69 66 69 63 61 74  hrome certificat
3730: 65 20 68 61 6e 64 6c 65 72 73 22 29 3b 0a 0a 09  e handlers");...
3740: 09 63 68 72 6f 6d 65 2e 63 65 72 74 69 66 69 63  .chrome.certific
3750: 61 74 65 50 72 6f 76 69 64 65 72 2e 6f 6e 43 65  ateProvider.onCe
3760: 72 74 69 66 69 63 61 74 65 73 52 65 71 75 65 73  rtificatesReques
3770: 74 65 64 2e 72 65 6d 6f 76 65 4c 69 73 74 65 6e  ted.removeListen
3780: 65 72 28 63 61 63 6b 65 79 4c 69 73 74 43 65 72  er(cackeyListCer
3790: 74 69 66 69 63 61 74 65 73 29 3b 0a 09 09 63 68  tificates);...ch
37a0: 72 6f 6d 65 2e 63 65 72 74 69 66 69 63 61 74 65  rome.certificate
37b0: 50 72 6f 76 69 64 65 72 2e 6f 6e 53 69 67 6e 44  Provider.onSignD
37c0: 69 67 65 73 74 52 65 71 75 65 73 74 65 64 2e 72  igestRequested.r
37d0: 65 6d 6f 76 65 4c 69 73 74 65 6e 65 72 28 63 61  emoveListener(ca
37e0: 63 6b 65 79 53 69 67 6e 4d 65 73 73 61 67 65 29  ckeySignMessage)
37f0: 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 55 6e 69  ;..}...cackeyUni
3800: 6e 69 74 50 43 53 43 28 29 3b 0a 0a 09 69 66 20  nitPCSC();...if 
3810: 28 63 61 63 6b 65 79 48 61 6e 64 6c 65 20 21 3d  (cackeyHandle !=
3820: 20 6e 75 6c 6c 29 20 7b 0a 09 09 63 6f 6e 73 6f   null) {...conso
3830: 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d  le.log("[cackey]
3840: 20 44 65 6c 65 74 69 6e 67 20 50 4e 61 43 6c 20   Deleting PNaCl 
3850: 6d 6f 64 75 6c 65 22 29 3b 0a 0a 09 09 74 72 79  module");....try
3860: 20 7b 0a 09 09 09 64 6f 63 75 6d 65 6e 74 2e 62   {....document.b
3870: 6f 64 79 2e 72 65 6d 6f 76 65 43 68 69 6c 64 28  ody.removeChild(
3880: 63 61 63 6b 65 79 48 61 6e 64 6c 65 29 3b 0a 09  cackeyHandle);..
3890: 09 7d 20 63 61 74 63 68 20 28 65 29 20 7b 20 7d  .} catch (e) { }
38a0: 0a 0a 09 09 64 65 6c 65 74 65 20 63 61 63 6b 65  ....delete cacke
38b0: 79 48 61 6e 64 6c 65 3b 0a 0a 09 09 63 61 63 6b  yHandle;....cack
38c0: 65 79 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b  eyHandle = null;
38d0: 0a 09 7d 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f  ..}...console.lo
38e0: 67 28 22 5b 63 61 63 6b 65 79 5d 20 63 61 63 6b  g("[cackey] cack
38f0: 65 79 55 6e 69 6e 69 74 28 29 20 63 6f 6d 70 6c  eyUninit() compl
3900: 65 74 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b  ete");...return;
3910: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52 65 73 74 61 72  .}../*. * Restar
3920: 74 73 20 43 41 43 4b 65 79 0a 20 2a 2f 0a 66 75  ts CACKey. */.fu
3930: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 52 65 73  nction cackeyRes
3940: 74 61 72 74 28 29 20 7b 0a 09 63 61 63 6b 65 79  tart() {..cackey
3950: 55 6e 69 6e 69 74 28 29 3b 0a 09 63 61 63 6b 65  Uninit();..cacke
3960: 79 49 6e 69 74 28 29 3b 0a 0a 09 72 65 74 75 72  yInit();...retur
3970: 6e 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 63  n;.}..function c
3980: 61 63 6b 65 79 49 6e 69 74 47 6c 6f 62 61 6c 53  ackeyInitGlobalS
3990: 74 61 74 65 28 29 20 7b 0a 09 63 61 63 6b 65 79  tate() {..cackey
39a0: 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62  OutstandingCallb
39b0: 61 63 6b 73 20 3d 20 7b 7d 3b 0a 7d 3b 0a 0a 2f  acks = {};.};../
39c0: 2a 0a 20 2a 20 48 61 6e 64 6c 65 20 61 20 43 41  *. * Handle a CA
39d0: 43 4b 65 79 20 63 72 61 73 68 20 28 70 72 6f 62  CKey crash (prob
39e0: 61 62 6c 79 20 64 75 65 20 74 6f 20 6c 6f 73 73  ably due to loss
39f0: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 76 69 74 79   of connectivity
3a00: 20 74 6f 20 74 68 65 20 50 43 53 43 20 64 61 65   to the PCSC dae
3a10: 6d 6f 6e 29 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f  mon). */.functio
3a20: 6e 20 63 61 63 6b 65 79 43 72 61 73 68 28 29 20  n cackeyCrash() 
3a30: 7b 0a 09 2f 2a 0a 09 20 2a 20 44 65 2d 69 6e 69  {../*.. * De-ini
3a40: 74 69 61 6c 69 7a 65 20 43 41 43 4b 65 79 0a 09  tialize CACKey..
3a50: 20 2a 2f 0a 09 63 61 63 6b 65 79 55 6e 69 6e 69   */..cackeyUnini
3a60: 74 28 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 52 65  t();.../*.. * Re
3a70: 69 6e 69 74 69 61 6c 69 7a 65 20 67 6c 6f 62 61  initialize globa
3a80: 6c 20 73 74 61 74 65 0a 09 20 2a 2f 0a 09 63 61  l state.. */..ca
3a90: 63 6b 65 79 49 6e 69 74 47 6c 6f 62 61 6c 53 74  ckeyInitGlobalSt
3aa0: 61 74 65 28 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20  ate();.../*.. * 
3ab0: 53 63 68 65 64 75 6c 65 20 74 68 65 20 72 65 73  Schedule the res
3ac0: 74 61 72 74 20 74 6f 20 6f 63 63 75 72 20 69 6e  tart to occur in
3ad0: 20 33 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 63   30 seconds in c
3ae0: 61 73 65 20 77 65 20 72 65 61 6c 6c 79 20 61 72  ase we really ar
3af0: 65 0a 09 20 2a 20 6e 6f 74 20 77 6f 72 6b 69 6e  e.. * not workin
3b00: 67 2e 0a 09 20 2a 2f 0a 09 73 65 74 54 69 6d 65  g... */..setTime
3b10: 6f 75 74 28 63 61 63 6b 65 79 49 6e 69 74 2c 20  out(cackeyInit, 
3b20: 33 30 30 30 30 29 3b 0a 0a 09 72 65 74 75 72 6e  30000);...return
3b30: 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 63 61  ;.}..function ca
3b40: 63 6b 65 79 49 6e 69 74 50 43 53 43 43 6f 6d 70  ckeyInitPCSCComp
3b50: 6c 65 74 65 64 28 73 74 61 74 65 29 20 7b 0a 09  leted(state) {..
3b60: 76 61 72 20 69 64 78 3b 0a 0a 09 63 6f 6e 73 6f  var idx;...conso
3b70: 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d  le.log("[cackey]
3b80: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6d 70   Connection comp
3b90: 6c 65 74 65 64 20 28 73 74 61 74 65 20 3d 20 5c  leted (state = \
3ba0: 22 22 20 2b 20 73 74 61 74 65 20 2b 20 22 5c 22  "" + state + "\"
3bb0: 29 2c 20 73 65 6e 64 69 6e 67 20 71 75 65 75 65  ), sending queue
3bc0: 64 20 65 76 65 6e 74 73 3a 20 22 20 2b 20 63 61  d events: " + ca
3bd0: 63 6b 65 79 43 61 6c 6c 62 61 63 6b 41 66 74 65  ckeyCallbackAfte
3be0: 72 49 6e 69 74 2e 6c 65 6e 67 74 68 29 3b 0a 0a  rInit.length);..
3bf0: 09 73 77 69 74 63 68 20 28 73 74 61 74 65 29 20  .switch (state) 
3c00: 7b 0a 09 09 63 61 73 65 20 22 73 75 63 63 65 73  {...case "succes
3c10: 73 22 3a 0a 09 09 09 63 61 63 6b 65 79 50 43 53  s":....cackeyPCS
3c20: 43 48 61 6e 64 6c 65 55 73 61 62 6c 65 20 3d 20  CHandleUsable = 
3c30: 74 72 75 65 3b 0a 0a 09 09 09 62 72 65 61 6b 3b  true;.....break;
3c40: 0a 09 09 63 61 73 65 20 22 66 61 69 6c 75 72 65  ...case "failure
3c50: 22 3a 0a 09 09 09 63 61 63 6b 65 79 50 43 53 43  ":....cackeyPCSC
3c60: 48 61 6e 64 6c 65 55 73 61 62 6c 65 20 3d 20 66  HandleUsable = f
3c70: 61 6c 73 65 3b 0a 0a 09 09 09 62 72 65 61 6b 3b  alse;.....break;
3c80: 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d  ..}...for (idx =
3c90: 20 30 3b 20 69 64 78 20 3c 20 63 61 63 6b 65 79   0; idx < cackey
3ca0: 43 61 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69  CallbackAfterIni
3cb0: 74 2e 6c 65 6e 67 74 68 3b 20 69 64 78 2b 2b 29  t.length; idx++)
3cc0: 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b 65 79   {...if (!cackey
3cd0: 43 61 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69  CallbackAfterIni
3ce0: 74 5b 69 64 78 5d 29 20 7b 0a 09 09 09 63 6f 6e  t[idx]) {....con
3cf0: 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 73 77  tinue;...}....sw
3d00: 69 74 63 68 20 28 73 74 61 74 65 29 20 7b 0a 09  itch (state) {..
3d10: 09 09 63 61 73 65 20 22 73 75 63 63 65 73 73 22  ..case "success"
3d20: 3a 0a 09 09 09 09 28 63 61 63 6b 65 79 43 61 6c  :.....(cackeyCal
3d30: 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74 5b 69  lbackAfterInit[i
3d40: 64 78 5d 2e 73 75 63 63 65 73 73 43 61 6c 6c 62  dx].successCallb
3d50: 61 63 6b 29 28 29 3b 0a 0a 09 09 09 09 62 72 65  ack)();......bre
3d60: 61 6b 3b 0a 09 09 09 63 61 73 65 20 22 66 61 69  ak;....case "fai
3d70: 6c 75 72 65 22 3a 0a 09 09 09 09 28 63 61 63 6b  lure":.....(cack
3d80: 65 79 43 61 6c 6c 62 61 63 6b 41 66 74 65 72 49  eyCallbackAfterI
3d90: 6e 69 74 5b 69 64 78 5d 2e 66 61 69 6c 75 72 65  nit[idx].failure
3da0: 43 61 6c 6c 62 61 63 6b 29 28 29 3b 0a 0a 09 09  Callback)();....
3db0: 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a  ..break;...}..}.
3dc0: 0a 09 64 65 6c 65 74 65 20 63 61 63 6b 65 79 43  ..delete cackeyC
3dd0: 61 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74  allbackAfterInit
3de0: 3b 0a 0a 09 63 61 63 6b 65 79 43 61 6c 6c 62 61  ;...cackeyCallba
3df0: 63 6b 41 66 74 65 72 49 6e 69 74 20 3d 20 5b 5d  ckAfterInit = []
3e00: 3b 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28  ;...console.log(
3e10: 22 5b 63 61 63 6b 65 79 5d 20 41 6c 6c 20 71 75  "[cackey] All qu
3e20: 65 75 65 64 20 65 76 65 6e 74 73 20 70 72 6f 63  eued events proc
3e30: 65 73 73 65 64 22 29 3b 0a 0a 09 72 65 74 75 72  essed");...retur
3e40: 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 49 6e 69 74  n;.}../*. * Init
3e50: 69 61 6c 69 7a 65 20 74 68 65 20 50 43 53 43 20  ialize the PCSC 
3e60: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 2a 2f 0a 66  connection. */.f
3e70: 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 49 6e  unction cackeyIn
3e80: 69 74 50 43 53 43 28 63 61 6c 6c 62 61 63 6b 41  itPCSC(callbackA
3e90: 66 74 65 72 49 6e 69 74 2c 20 63 61 6c 6c 62 61  fterInit, callba
3ea0: 63 6b 49 6e 69 74 46 61 69 6c 65 64 29 20 7b 0a  ckInitFailed) {.
3eb0: 09 2f 2a 0a 09 20 2a 20 53 74 61 72 74 20 74 68  ./*.. * Start th
3ec0: 65 20 47 6f 6f 67 6c 65 20 50 43 53 43 20 49 6e  e Google PCSC In
3ed0: 74 65 72 66 61 63 65 0a 09 20 2a 2f 0a 09 76 61  terface.. */..va
3ee0: 72 20 6e 6f 77 2c 20 6c 61 73 74 55 73 65 64 4d  r now, lastUsedM
3ef0: 69 6c 6c 69 73 65 63 6f 6e 64 73 41 67 6f 3b 0a  illisecondsAgo;.
3f00: 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b  ..console.log("[
3f10: 63 61 63 6b 65 79 5d 20 63 61 63 6b 65 79 49 6e  cackey] cackeyIn
3f20: 69 74 50 43 53 43 28 29 20 63 61 6c 6c 65 64 22  itPCSC() called"
3f30: 29 3b 0a 0a 09 6e 6f 77 20 3d 20 28 6e 65 77 20  );...now = (new 
3f40: 44 61 74 65 28 29 29 2e 67 65 74 54 69 6d 65 28  Date()).getTime(
3f50: 29 3b 0a 09 6c 61 73 74 55 73 65 64 4d 69 6c 6c  );..lastUsedMill
3f60: 69 73 65 63 6f 6e 64 73 41 67 6f 20 3d 20 6e 6f  isecondsAgo = no
3f70: 77 20 2d 20 63 61 63 6b 65 79 50 43 53 43 48 61  w - cackeyPCSCHa
3f80: 6e 64 6c 65 4c 61 73 74 55 73 65 64 3b 0a 0a 09  ndleLastUsed;...
3f90: 69 66 20 28 6c 61 73 74 55 73 65 64 4d 69 6c 6c  if (lastUsedMill
3fa0: 69 73 65 63 6f 6e 64 73 41 67 6f 20 3e 20 33 30  isecondsAgo > 30
3fb0: 30 30 30 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65  000) {...console
3fc0: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 50  .log("[cackey] P
3fd0: 43 53 43 20 68 61 6e 64 6c 65 20 77 61 73 20 6c  CSC handle was l
3fe0: 61 73 74 20 75 73 65 64 20 22 20 2b 20 6c 61 73  ast used " + las
3ff0: 74 55 73 65 64 4d 69 6c 6c 69 73 65 63 6f 6e 64  tUsedMillisecond
4000: 73 41 67 6f 20 2b 20 22 6d 73 20 61 67 6f 2c 20  sAgo + "ms ago, 
4010: 72 65 73 74 61 72 74 69 6e 67 20 74 6f 20 67 65  restarting to ge
4020: 74 20 61 20 6e 65 77 20 68 61 6e 64 6c 65 22 29  t a new handle")
4030: 3b 0a 09 09 63 61 63 6b 65 79 52 65 73 74 61 72  ;...cackeyRestar
4040: 74 28 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79  t();..}...cackey
4050: 50 43 53 43 48 61 6e 64 6c 65 4c 61 73 74 55 73  PCSCHandleLastUs
4060: 65 64 20 3d 20 6e 6f 77 3b 0a 0a 09 2f 2a 0a 09  ed = now;.../*..
4070: 20 2a 20 51 75 65 75 65 20 74 68 69 73 20 63 61   * Queue this ca
4080: 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 63 6f 6d  llback to be com
4090: 70 6c 65 74 65 64 20 77 68 65 6e 20 69 6e 69 74  pleted when init
40a0: 69 61 6c 69 7a 61 74 69 6f 6e 20 69 73 20 63 6f  ialization is co
40b0: 6d 70 6c 65 74 65 0a 09 20 2a 2f 0a 09 69 66 20  mplete.. */..if 
40c0: 28 63 61 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e  (callbackAfterIn
40d0: 69 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 43 61  it) {...cackeyCa
40e0: 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74 2e  llbackAfterInit.
40f0: 70 75 73 68 28 7b 22 73 75 63 63 65 73 73 43 61  push({"successCa
4100: 6c 6c 62 61 63 6b 22 3a 20 63 61 6c 6c 62 61 63  llback": callbac
4110: 6b 41 66 74 65 72 49 6e 69 74 2c 20 22 66 61 69  kAfterInit, "fai
4120: 6c 75 72 65 43 61 6c 6c 62 61 63 6b 22 3a 20 63  lureCallback": c
4130: 61 6c 6c 62 61 63 6b 49 6e 69 74 46 61 69 6c 65  allbackInitFaile
4140: 64 7d 29 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a  d});..}.../*.. *
4150: 20 4e 6f 20 61 64 64 69 74 69 6f 6e 61 6c 20 77   No additional w
4160: 6f 72 6b 20 69 73 20 72 65 71 75 69 72 65 64 0a  ork is required.
4170: 09 20 2a 2f 0a 0a 09 69 66 20 28 63 61 63 6b 65  . */...if (cacke
4180: 79 50 43 53 43 48 61 6e 64 6c 65 29 20 7b 0a 09  yPCSCHandle) {..
4190: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
41a0: 61 63 6b 65 79 5d 20 50 43 53 43 20 68 61 6e 64  ackey] PCSC hand
41b0: 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 76 61  le is already va
41c0: 6c 69 64 2c 20 6e 6f 74 68 69 6e 67 20 74 6f 20  lid, nothing to 
41d0: 64 6f 2e 22 29 3b 0a 0a 09 09 69 66 20 28 63 61  do.");....if (ca
41e0: 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65 55 73  ckeyPCSCHandleUs
41f0: 61 62 6c 65 29 20 7b 0a 09 09 09 63 61 63 6b 65  able) {....cacke
4200: 79 49 6e 69 74 50 43 53 43 43 6f 6d 70 6c 65 74  yInitPCSCComplet
4210: 65 64 28 22 73 75 63 63 65 73 73 22 29 3b 0a 09  ed("success");..
4220: 09 7d 0a 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d  .}....return;..}
4230: 0a 0a 09 2f 2a 0a 09 20 2a 20 53 61 6e 65 6c 79  .../*.. * Sanely
4240: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 69 73   initialize this
4250: 0a 09 20 2a 2f 0a 09 63 61 63 6b 65 79 50 43 53  .. */..cackeyPCS
4260: 43 48 61 6e 64 6c 65 55 73 61 62 6c 65 20 3d 20  CHandleUsable = 
4270: 66 61 6c 73 65 3b 0a 0a 09 2f 2a 0a 09 20 2a 20  false;.../*.. * 
4280: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 43  Initialize the C
4290: 41 43 4b 65 79 20 50 4e 61 43 6c 20 6d 6f 64 75  ACKey PNaCl modu
42a0: 6c 65 20 69 66 20 6e 65 65 64 65 64 0a 09 20 2a  le if needed.. *
42b0: 2f 0a 09 69 66 20 28 63 61 63 6b 65 79 48 61 6e  /..if (cackeyHan
42c0: 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  dle == null) {..
42d0: 09 63 61 63 6b 65 79 49 6e 69 74 28 29 3b 0a 09  .cackeyInit();..
42e0: 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 49 6e 69 74 69  }.../*.. * Initi
42f0: 61 6c 69 7a 65 20 43 41 43 4b 65 79 20 77 69 74  alize CACKey wit
4300: 68 20 74 68 65 20 63 6f 72 72 65 63 74 20 68 61  h the correct ha
4310: 6e 64 6c 65 20 74 6f 20 74 61 6c 6b 20 74 6f 20  ndle to talk to 
4320: 74 68 65 20 47 6f 6f 67 6c 65 20 53 6d 61 72 74  the Google Smart
4330: 63 61 72 64 20 4d 61 6e 61 67 65 72 20 41 70 70  card Manager App
4340: 0a 09 20 2a 2f 0a 09 63 61 63 6b 65 79 48 61 6e  .. */..cackeyHan
4350: 64 6c 65 2e 70 6f 73 74 4d 65 73 73 61 67 65 28  dle.postMessage(
4360: 0a 09 09 7b 0a 09 09 09 22 74 61 72 67 65 74 22  ...{...."target"
4370: 3a 20 22 63 61 63 6b 65 79 22 2c 0a 09 09 09 22  : "cackey",...."
4380: 63 6f 6d 6d 61 6e 64 22 3a 20 22 69 6e 69 74 22  command": "init"
4390: 0a 09 09 7d 0a 09 29 3b 0a 0a 09 2f 2a 0a 09 20  ...}..);.../*.. 
43a0: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  * Initialize the
43b0: 20 50 43 53 43 20 4e 61 43 6c 20 69 6e 74 65 72   PCSC NaCl inter
43c0: 66 61 63 65 0a 09 20 2a 2f 0a 09 63 61 63 6b 65  face.. */..cacke
43d0: 79 50 43 53 43 48 61 6e 64 6c 65 20 3d 20 6e 65  yPCSCHandle = ne
43e0: 77 20 47 6f 6f 67 6c 65 53 6d 61 72 74 43 61 72  w GoogleSmartCar
43f0: 64 2e 50 63 73 63 4c 69 74 65 43 6c 69 65 6e 74  d.PcscLiteClient
4400: 2e 4e 61 63 6c 43 6c 69 65 6e 74 42 61 63 6b 65  .NaclClientBacke
4410: 6e 64 28 0a 09 09 6e 75 6c 6c 2c 0a 09 09 22 43  nd(...null,..."C
4420: 41 43 4b 65 79 22 2c 0a 09 09 22 6b 68 70 66 65  ACKey",..."khpfe
4430: 61 61 6e 6a 6e 67 6d 63 6e 70 6c 62 64 6c 70 65  aanjngmcnplbdlpe
4440: 67 69 69 66 67 70 66 67 64 63 6f 22 2c 0a 09 09  giifgpfgdco",...
4450: 63 61 63 6b 65 79 48 61 6e 64 6c 65 0a 09 29 3b  cackeyHandle..);
4460: 20 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28   ...console.log(
4470: 22 5b 63 61 63 6b 65 79 5d 20 63 61 63 6b 65 79  "[cackey] cackey
4480: 49 6e 69 74 50 43 53 43 28 29 20 63 6f 6d 70 6c  InitPCSC() compl
4490: 65 74 65 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b  ete");...return;
44a0: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 46 69 6e 69 73 68  .}../*. * Finish
44b0: 20 70 65 72 66 6f 72 6d 69 6e 67 20 69 6e 69 74   performing init
44c0: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 68 61 74 20  ialization that 
44d0: 6d 75 73 74 20 77 61 69 74 20 75 6e 74 69 6c 20  must wait until 
44e0: 77 65 20 68 61 76 65 20 6c 6f 61 64 65 64 20 74  we have loaded t
44f0: 68 65 20 43 41 43 4b 65 79 20 6d 6f 64 75 6c 65  he CACKey module
4500: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61  . */.function ca
4510: 63 6b 65 79 49 6e 69 74 4c 6f 61 64 65 64 28 6d  ckeyInitLoaded(m
4520: 65 73 73 61 67 65 45 76 65 6e 74 29 20 7b 0a 09  essageEvent) {..
4530: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61  console.log("[ca
4540: 63 6b 65 79 5d 20 4c 6f 61 64 65 64 20 43 41 43  ckey] Loaded CAC
4550: 4b 65 79 20 50 4e 61 43 6c 20 4d 6f 64 75 6c 65  Key PNaCl Module
4560: 22 29 3b 0a 0a 09 2f 2a 20 52 65 67 69 73 74 65  ");.../* Registe
4570: 72 20 6c 69 73 74 65 6e 65 72 73 20 77 69 74 68  r listeners with
4580: 20 43 68 72 6f 6d 65 20 2a 2f 0a 09 69 66 20 28   Chrome */..if (
4590: 63 68 72 6f 6d 65 2e 63 65 72 74 69 66 69 63 61  chrome.certifica
45a0: 74 65 50 72 6f 76 69 64 65 72 29 20 7b 0a 09 09  teProvider) {...
45b0: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61  console.log("[ca
45c0: 63 6b 65 79 5d 20 52 65 67 69 73 74 65 72 65 64  ckey] Registered
45d0: 20 43 65 72 74 69 66 69 63 61 74 65 20 68 61 6e   Certificate han
45e0: 64 6c 65 72 73 20 77 69 74 68 20 43 68 72 6f 6d  dlers with Chrom
45f0: 65 22 29 3b 0a 0a 09 09 63 68 72 6f 6d 65 2e 63  e");....chrome.c
4600: 65 72 74 69 66 69 63 61 74 65 50 72 6f 76 69 64  ertificateProvid
4610: 65 72 2e 6f 6e 43 65 72 74 69 66 69 63 61 74 65  er.onCertificate
4620: 73 52 65 71 75 65 73 74 65 64 2e 61 64 64 4c 69  sRequested.addLi
4630: 73 74 65 6e 65 72 28 63 61 63 6b 65 79 4c 69 73  stener(cackeyLis
4640: 74 43 65 72 74 69 66 69 63 61 74 65 73 29 3b 0a  tCertificates);.
4650: 09 09 63 68 72 6f 6d 65 2e 63 65 72 74 69 66 69  ..chrome.certifi
4660: 63 61 74 65 50 72 6f 76 69 64 65 72 2e 6f 6e 53  cateProvider.onS
4670: 69 67 6e 44 69 67 65 73 74 52 65 71 75 65 73 74  ignDigestRequest
4680: 65 64 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 63  ed.addListener(c
4690: 61 63 6b 65 79 53 69 67 6e 4d 65 73 73 61 67 65  ackeySignMessage
46a0: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a  );..}...return;.
46b0: 7d 0a 0a 2f 2a 0a 20 2a 20 49 6e 69 74 69 61 6c  }../*. * Initial
46c0: 69 7a 65 20 43 41 43 4b 65 79 20 61 6e 64 20 74  ize CACKey and t
46d0: 68 65 20 50 43 53 43 20 6c 69 62 72 61 72 79 20  he PCSC library 
46e0: 66 72 6f 6d 20 47 6f 6f 67 6c 65 0a 20 2a 2f 0a  from Google. */.
46f0: 66 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 49  function cackeyI
4700: 6e 69 74 28 29 20 7b 0a 09 76 61 72 20 65 6c 65  nit() {..var ele
4710: 6d 65 6e 74 45 6d 62 65 64 3b 0a 09 76 61 72 20  mentEmbed;..var 
4720: 66 6f 72 63 65 4c 6f 61 64 45 6c 65 6d 65 6e 74  forceLoadElement
4730: 3b 0a 0a 09 2f 2a 20 4c 6f 67 20 74 68 61 74 20  ;.../* Log that 
4740: 77 65 20 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  we are operation
4750: 61 6c 20 2a 2f 0a 09 63 6f 6e 73 6f 6c 65 2e 6c  al */..console.l
4760: 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63 61 63  og("[cackey] cac
4770: 6b 65 79 49 6e 69 74 28 29 3a 20 43 61 6c 6c 65  keyInit(): Calle
4780: 64 2e 22 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 44  d.");.../*.. * D
4790: 6f 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65  o not initialize
47a0: 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 0a   multiple times.
47b0: 09 20 2a 2f 0a 09 69 66 20 28 63 61 63 6b 65 79  . */..if (cackey
47c0: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20  Handle != null) 
47d0: 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28  {...console.log(
47e0: 22 5b 63 61 63 6b 65 79 5d 20 63 61 63 6b 65 79  "[cackey] cackey
47f0: 49 6e 69 74 28 29 3a 20 41 6c 72 65 61 64 79 20  Init(): Already 
4800: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 52 65  initialized.  Re
4810: 74 75 72 6e 69 6e 67 2e 22 29 3b 0a 0a 09 09 72  turning.");....r
4820: 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 2f 2a 20 56  eturn;..}.../* V
4830: 65 72 69 66 79 20 74 68 61 74 20 77 65 20 63 61  erify that we ca
4840: 6e 20 72 65 67 69 73 74 65 72 20 63 61 6c 6c 62  n register callb
4850: 61 63 6b 73 20 2a 2f 0a 09 69 66 20 28 21 63 68  acks */..if (!ch
4860: 72 6f 6d 65 2e 63 65 72 74 69 66 69 63 61 74 65  rome.certificate
4870: 50 72 6f 76 69 64 65 72 29 20 7b 0a 09 09 69 66  Provider) {...if
4880: 20 28 21 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b   (!goog.DEBUG) {
4890: 0a 09 09 09 63 6f 6e 73 6f 6c 65 2e 69 6e 66 6f  ....console.info
48a0: 28 22 5b 63 61 63 6b 65 79 5d 20 54 68 69 73 20  ("[cackey] This 
48b0: 65 78 74 65 6e 73 69 6f 6e 27 73 20 70 72 69 6d  extension's prim
48c0: 61 72 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ary functionalit
48d0: 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  y only works on 
48e0: 43 68 72 6f 6d 65 4f 53 21 20 20 59 6f 75 20 77  ChromeOS!  You w
48f0: 6f 6e 27 74 20 62 65 20 61 62 6c 65 20 74 6f 20  on't be able to 
4900: 64 6f 20 6d 75 63 68 20 77 69 74 68 20 69 74 2e  do much with it.
4910: 22 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 65 6c 65  ");...}..}...ele
4920: 6d 65 6e 74 45 6d 62 65 64 20 3d 20 64 6f 63 75  mentEmbed = docu
4930: 6d 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d 65  ment.createEleme
4940: 6e 74 28 27 65 6d 62 65 64 27 29 3b 0a 09 65 6c  nt('embed');..el
4950: 65 6d 65 6e 74 45 6d 62 65 64 2e 74 79 70 65 20  ementEmbed.type 
4960: 3d 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78  = "application/x
4970: 2d 70 6e 61 63 6c 22 3b 0a 09 65 6c 65 6d 65 6e  -pnacl";..elemen
4980: 74 45 6d 62 65 64 2e 77 69 64 74 68 20 3d 20 30  tEmbed.width = 0
4990: 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 2e  ;..elementEmbed.
49a0: 68 65 69 67 68 74 20 3d 20 30 3b 0a 09 65 6c 65  height = 0;..ele
49b0: 6d 65 6e 74 45 6d 62 65 64 2e 73 72 63 20 3d 20  mentEmbed.src = 
49c0: 22 63 61 63 6b 65 79 2e 6e 6d 66 22 3b 0a 09 65  "cackey.nmf";..e
49d0: 6c 65 6d 65 6e 74 45 6d 62 65 64 2e 69 64 20 3d  lementEmbed.id =
49e0: 20 22 63 61 63 6b 65 79 4d 6f 64 75 6c 65 22 3b   "cackeyModule";
49f0: 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 2e 61  ..elementEmbed.a
4a00: 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28  ddEventListener(
4a10: 27 65 72 72 6f 72 27 2c 20 66 75 6e 63 74 69 6f  'error', functio
4a20: 6e 28 6d 65 73 73 61 67 65 45 76 65 6e 74 29 20  n(messageEvent) 
4a30: 7b 20 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28  { console.error(
4a40: 22 45 72 72 6f 72 20 6c 6f 61 64 69 6e 67 20 43  "Error loading C
4a50: 41 43 4b 65 79 20 50 4e 61 43 6c 20 4d 6f 64 75  ACKey PNaCl Modu
4a60: 6c 65 3a 20 22 20 2b 20 6d 65 73 73 61 67 65 45  le: " + messageE
4a70: 76 65 6e 74 2e 64 61 74 61 29 3b 20 7d 2c 20 74  vent.data); }, t
4a80: 72 75 65 29 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d  rue);..elementEm
4a90: 62 65 64 2e 61 64 64 45 76 65 6e 74 4c 69 73 74  bed.addEventList
4aa0: 65 6e 65 72 28 27 6c 6f 61 64 27 2c 20 63 61 63  ener('load', cac
4ab0: 6b 65 79 49 6e 69 74 4c 6f 61 64 65 64 2c 20 74  keyInitLoaded, t
4ac0: 72 75 65 29 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d  rue);..elementEm
4ad0: 62 65 64 2e 61 64 64 45 76 65 6e 74 4c 69 73 74  bed.addEventList
4ae0: 65 6e 65 72 28 27 63 72 61 73 68 27 2c 20 63 61  ener('crash', ca
4af0: 63 6b 65 79 43 72 61 73 68 2c 20 74 72 75 65 29  ckeyCrash, true)
4b00: 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 2e  ;..elementEmbed.
4b10: 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72  addEventListener
4b20: 28 27 6d 65 73 73 61 67 65 27 2c 20 63 61 63 6b  ('message', cack
4b30: 65 79 4d 65 73 73 61 67 65 49 6e 63 6f 6d 69 6e  eyMessageIncomin
4b40: 67 2c 20 74 72 75 65 29 3b 0a 0a 09 63 61 63 6b  g, true);...cack
4b50: 65 79 48 61 6e 64 6c 65 20 3d 20 65 6c 65 6d 65  eyHandle = eleme
4b60: 6e 74 45 6d 62 65 64 3b 0a 0a 09 64 6f 63 75 6d  ntEmbed;...docum
4b70: 65 6e 74 2e 62 6f 64 79 2e 61 70 70 65 6e 64 43  ent.body.appendC
4b80: 68 69 6c 64 28 63 61 63 6b 65 79 48 61 6e 64 6c  hild(cackeyHandl
4b90: 65 29 0a 0a 09 2f 2a 0a 09 20 2a 20 46 6f 72 63  e).../*.. * Forc
4ba0: 65 20 74 68 65 20 62 72 6f 77 73 65 72 20 74 6f  e the browser to
4bb0: 20 6c 6f 61 64 20 74 68 65 20 65 6c 65 6d 65 6e   load the elemen
4bc0: 74 0a 09 20 2a 20 62 79 20 72 65 71 75 65 73 74  t.. * by request
4bd0: 69 6e 67 20 69 74 73 20 70 6f 73 69 74 69 6f 6e  ing its position
4be0: 0a 09 20 2a 2f 0a 09 66 6f 72 63 65 4c 6f 61 64  .. */..forceLoad
4bf0: 45 6c 65 6d 65 6e 74 20 3d 20 63 61 63 6b 65 79  Element = cackey
4c00: 48 61 6e 64 6c 65 2e 6f 66 66 73 65 74 54 6f 70  Handle.offsetTop
4c10: 3b 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28  ;...console.log(
4c20: 22 5b 63 61 63 6b 65 79 5d 20 63 61 63 6b 65 79  "[cackey] cackey
4c30: 49 6e 69 74 28 29 3a 20 43 6f 6d 70 6c 65 74 65  Init(): Complete
4c40: 64 2e 20 20 52 65 74 75 72 6e 69 6e 67 2e 22 29  d.  Returning.")
4c50: 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  ;...return;.}../
4c60: 2a 0a 20 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  *. * Initialize 
4c70: 74 68 65 20 43 41 43 4b 65 79 20 43 68 72 6f 6d  the CACKey Chrom
4c80: 65 20 41 70 70 6c 69 63 61 74 69 6f 6e 0a 20 2a  e Application. *
4c90: 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65  /.function cacke
4ca0: 79 41 70 70 49 6e 69 74 28 29 20 7b 0a 09 76 61  yAppInit() {..va
4cb0: 72 20 6f 6c 64 4f 6e 50 6f 72 74 44 69 73 63 6f  r oldOnPortDisco
4cc0: 6e 6e 65 63 74 65 64 46 75 6e 63 74 69 6f 6e 3b  nnectedFunction;
4cd0: 0a 09 76 61 72 20 6f 6c 64 50 43 53 43 49 6e 69  ..var oldPCSCIni
4ce0: 74 69 61 6c 69 7a 61 74 69 6f 6e 43 61 6c 6c 62  tializationCallb
4cf0: 61 63 6b 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 43 72  ack;.../*.. * Cr
4d00: 65 61 74 65 20 61 20 68 61 6e 64 6c 65 72 20 66  eate a handler f
4d10: 6f 72 20 73 74 61 72 74 69 6e 67 20 74 68 65 20  or starting the 
4d20: 61 70 70 6c 69 63 61 74 69 6f 6e 20 55 49 0a 09  application UI..
4d30: 20 2a 2f 0a 09 63 68 72 6f 6d 65 2e 61 70 70 2e   */..chrome.app.
4d40: 72 75 6e 74 69 6d 65 2e 6f 6e 4c 61 75 6e 63 68  runtime.onLaunch
4d50: 65 64 2e 61 64 64 4c 69 73 74 65 6e 65 72 28 66  ed.addListener(f
4d60: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 63 68  unction() {...ch
4d70: 72 6f 6d 65 2e 61 70 70 2e 77 69 6e 64 6f 77 2e  rome.app.window.
4d80: 63 72 65 61 74 65 28 27 75 69 2e 68 74 6d 6c 27  create('ui.html'
4d90: 2c 20 7b 0a 09 09 09 22 69 64 22 3a 20 22 63 61  , {...."id": "ca
4da0: 63 6b 65 79 55 49 22 2c 0a 09 09 09 22 66 6f 63  ckeyUI",...."foc
4db0: 75 73 65 64 22 3a 20 74 72 75 65 2c 0a 09 09 09  used": true,....
4dc0: 22 69 6e 6e 65 72 42 6f 75 6e 64 73 22 3a 20 7b  "innerBounds": {
4dd0: 0a 09 09 09 09 22 77 69 64 74 68 22 3a 20 33 35  ....."width": 35
4de0: 30 2c 0a 09 09 09 09 22 6d 69 6e 57 69 64 74 68  0,....."minWidth
4df0: 22 3a 20 33 35 30 2c 0a 09 09 09 09 22 68 65 69  ": 350,....."hei
4e00: 67 68 74 22 3a 20 31 33 36 2c 0a 09 09 09 09 22  ght": 136,....."
4e10: 6d 69 6e 48 65 69 67 68 74 22 3a 20 31 33 35 0a  minHeight": 135.
4e20: 09 09 09 7d 0a 09 09 7d 2c 20 66 75 6e 63 74 69  ...}...}, functi
4e30: 6f 6e 28 75 69 57 69 6e 64 6f 77 29 20 7b 0a 09  on(uiWindow) {..
4e40: 09 09 69 66 20 28 21 75 69 57 69 6e 64 6f 77 29  ..if (!uiWindow)
4e50: 20 7b 0a 09 09 09 09 72 65 74 75 72 6e 3b 0a 09   {.....return;..
4e60: 09 09 7d 0a 0a 09 09 09 75 69 57 69 6e 64 6f 77  ..}.....uiWindow
4e70: 2e 63 6f 6e 74 65 6e 74 57 69 6e 64 6f 77 2e 70  .contentWindow.p
4e80: 61 72 65 6e 74 57 69 6e 64 6f 77 20 3d 20 77 69  arentWindow = wi
4e90: 6e 64 6f 77 3b 0a 09 09 7d 29 3b 0a 09 7d 29 3b  ndow;...});..});
4ea0: 0a 0a 2f 2f 20 47 6f 6f 67 6c 65 20 67 6f 74 20  ..// Google got 
4eb0: 72 69 64 20 6f 66 20 61 6c 6c 20 6f 66 20 74 68  rid of all of th
4ec0: 65 20 63 6f 64 65 20 77 65 20 77 65 72 65 20 75  e code we were u
4ed0: 73 69 6e 67 20 74 6f 20 69 6e 74 65 72 66 61 63  sing to interfac
4ee0: 65 20 77 69 74 68 20 50 43 53 43 2e 2e 2e 20 0a  e with PCSC... .
4ef0: 2f 2f 20 54 68 69 73 20 6e 65 65 64 73 20 74 6f  // This needs to
4f00: 20 62 65 20 72 65 77 72 69 74 74 65 6e 20 74 6f   be rewritten to
4f10: 20 75 73 65 20 74 68 65 20 6e 65 77 20 69 6e 74   use the new int
4f20: 65 72 66 61 63 65 0a 2f 2f 0a 2f 2f 09 2f 2a 0a  erface.//.//./*.
4f30: 2f 2f 09 20 2a 20 52 65 67 69 73 74 65 72 20 61  //. * Register a
4f40: 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 64 65 61   handler for dea
4f50: 6c 69 6e 67 20 77 69 74 68 20 74 68 65 20 50 43  ling with the PC
4f60: 53 43 20 70 6f 72 74 20 62 65 69 6e 67 20 64 69  SC port being di
4f70: 73 63 6f 6e 6e 65 63 74 65 64 0a 2f 2f 09 20 2a  sconnected.//. *
4f80: 2f 0a 2f 2f 09 6f 6c 64 4f 6e 50 6f 72 74 44 69  /.//.oldOnPortDi
4f90: 73 63 6f 6e 6e 65 63 74 65 64 46 75 6e 63 74 69  sconnectedFuncti
4fa0: 6f 6e 20 3d 20 47 6f 6f 67 6c 65 53 6d 61 72 74  on = GoogleSmart
4fb0: 43 61 72 64 2e 50 63 73 63 2e 70 72 6f 74 6f 74  Card.Pcsc.protot
4fc0: 79 70 65 2e 6f 6e 50 6f 72 74 44 69 73 63 6f 6e  ype.onPortDiscon
4fd0: 6e 65 63 74 65 64 5f 3b 0a 2f 2f 09 47 6f 6f 67  nected_;.//.Goog
4fe0: 6c 65 53 6d 61 72 74 43 61 72 64 2e 50 63 73 63  leSmartCard.Pcsc
4ff0: 2e 70 72 6f 74 6f 74 79 70 65 2e 6f 6e 50 6f 72  .prototype.onPor
5000: 74 44 69 73 63 6f 6e 6e 65 63 74 65 64 5f 20 3d  tDisconnected_ =
5010: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 2f 2f   function() {.//
5020: 09 09 6f 6c 64 4f 6e 50 6f 72 74 44 69 73 63 6f  ..oldOnPortDisco
5030: 6e 6e 65 63 74 65 64 46 75 6e 63 74 69 6f 6e 2e  nnectedFunction.
5040: 61 70 70 6c 79 28 74 68 69 73 29 3b 0a 2f 2f 0a  apply(this);.//.
5050: 2f 2f 09 09 63 61 63 6b 65 79 49 6e 69 74 50 43  //..cackeyInitPC
5060: 53 43 43 6f 6d 70 6c 65 74 65 64 28 22 66 61 69  SCCompleted("fai
5070: 6c 75 72 65 22 29 3b 0a 2f 2f 0a 2f 2f 09 09 63  lure");.//.//..c
5080: 61 63 6b 65 79 52 65 73 74 61 72 74 28 29 3b 0a  ackeyRestart();.
5090: 2f 2f 0a 2f 2f 09 09 72 65 74 75 72 6e 3b 0a 2f  //.//..return;./
50a0: 2f 09 7d 3b 0a 2f 2f 0a 2f 2f 09 2f 2a 0a 2f 2f  /.};.//.//./*.//
50b0: 09 20 2a 20 52 65 67 69 73 74 65 72 20 61 20 68  . * Register a h
50c0: 61 6e 64 6c 65 72 20 66 6f 72 20 64 65 61 6c 69  andler for deali
50d0: 6e 67 20 77 69 74 68 20 74 68 65 20 50 43 53 43  ng with the PCSC
50e0: 20 70 6f 72 74 20 62 65 69 6e 67 20 61 76 61 69   port being avai
50f0: 6c 61 62 6c 65 0a 2f 2f 09 20 2a 2f 0a 2f 2f 09  lable.//. */.//.
5100: 6f 6c 64 50 43 53 43 49 6e 69 74 69 61 6c 69 7a  oldPCSCInitializ
5110: 61 74 69 6f 6e 43 61 6c 6c 62 61 63 6b 20 3d 20  ationCallback = 
5120: 47 6f 6f 67 6c 65 53 6d 61 72 74 43 61 72 64 2e  GoogleSmartCard.
5130: 50 63 73 63 4e 61 63 6c 2e 70 72 6f 74 6f 74 79  PcscNacl.prototy
5140: 70 65 2e 70 63 73 63 49 6e 69 74 69 61 6c 69 7a  pe.pcscInitializ
5150: 61 74 69 6f 6e 43 61 6c 6c 62 61 63 6b 5f 3b 0a  ationCallback_;.
5160: 2f 2f 09 47 6f 6f 67 6c 65 53 6d 61 72 74 43 61  //.GoogleSmartCa
5170: 72 64 2e 50 63 73 63 4e 61 63 6c 2e 70 72 6f 74  rd.PcscNacl.prot
5180: 6f 74 79 70 65 2e 70 63 73 63 49 6e 69 74 69 61  otype.pcscInitia
5190: 6c 69 7a 61 74 69 6f 6e 43 61 6c 6c 62 61 63 6b  lizationCallback
51a0: 5f 20 3d 20 66 75 6e 63 74 69 6f 6e 28 72 65 71  _ = function(req
51b0: 75 65 73 74 49 64 2c 20 69 6e 73 74 61 6e 63 65  uestId, instance
51c0: 49 64 2c 20 69 6e 73 74 61 6e 63 65 2c 20 65 72  Id, instance, er
51d0: 72 6f 72 29 20 7b 0a 2f 2f 09 09 6f 6c 64 50 43  ror) {.//..oldPC
51e0: 53 43 49 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  SCInitialization
51f0: 43 61 6c 6c 62 61 63 6b 2e 61 70 70 6c 79 28 74  Callback.apply(t
5200: 68 69 73 2c 20 5b 72 65 71 75 65 73 74 49 64 2c  his, [requestId,
5210: 20 69 6e 73 74 61 6e 63 65 49 64 2c 20 69 6e 73   instanceId, ins
5220: 74 61 6e 63 65 2c 20 65 72 72 6f 72 5d 29 3b 0a  tance, error]);.
5230: 2f 2f 0a 2f 2f 09 09 72 65 74 75 72 6e 3b 0a 2f  //.//..return;./
5240: 2f 09 7d 3b 0a 2f 2f 0a 09 2f 2a 0a 09 20 2a 20  /.};.//../*.. * 
5250: 49 6e 69 74 69 61 6c 69 7a 65 20 67 6c 6f 62 61  Initialize globa
5260: 6c 20 73 74 61 74 65 0a 09 20 2a 2f 0a 09 63 61  l state.. */..ca
5270: 63 6b 65 79 49 6e 69 74 47 6c 6f 62 61 6c 53 74  ckeyInitGlobalSt
5280: 61 74 65 28 29 3b 0a 0a 09 72 65 74 75 72 6e 3b  ate();...return;
5290: 0a 7d 0a 0a 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  .}../* Initializ
52a0: 65 20 43 41 43 4b 65 79 20 2a 2f 0a 63 61 63 6b  e CACKey */.cack
52b0: 65 79 41 70 70 49 6e 69 74 28 29 3b 0a 63 61 63  eyAppInit();.cac
52c0: 6b 65 79 49 6e 69 74 28 29 3b 0a                 keyInit();.