Hex Artifact Content

Artifact f4c949a3a448e1b2ca6e9dd4256c2254fb406cd2:


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 4d 44 35 5f 53 48 41 31 27 5d  56', 'MD5_SHA1']
0700: 0a 09 09 09 7d 0a 09 09 29 3b 0a 09 7d 0a 0a 09  ....}...);..}...
0710: 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 28 63  chromeCallback(c
0720: 65 72 74 69 66 69 63 61 74 65 73 2c 0a 09 09 66  ertificates,...f
0730: 75 6e 63 74 69 6f 6e 28 72 65 6a 65 63 74 65 64  unction(rejected
0740: 43 65 72 74 73 29 20 7b 0a 09 09 09 69 66 20 28  Certs) {....if (
0750: 63 68 72 6f 6d 65 2e 72 75 6e 74 69 6d 65 2e 6c  chrome.runtime.l
0760: 61 73 74 45 72 72 6f 72 29 20 7b 0a 09 09 09 09  astError) {.....
0770: 72 65 74 75 72 6e 3b 0a 09 09 09 7d 0a 0a 09 09  return;....}....
0780: 09 69 66 20 28 72 65 6a 65 63 74 65 64 43 65 72  .if (rejectedCer
0790: 74 73 2e 6c 65 6e 67 74 68 20 21 3d 3d 20 30 29  ts.length !== 0)
07a0: 20 7b 0a 09 09 09 09 6f 6e 43 65 72 74 69 66 69   {.....onCertifi
07b0: 63 61 74 65 73 52 65 6a 65 63 74 65 64 28 72 65  catesRejected(re
07c0: 6a 65 63 74 65 64 43 65 72 74 73 29 3b 0a 09 09  jectedCerts);...
07d0: 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e 3b 0a 09  .}.....return;..
07e0: 09 7d 0a 09 29 3b 0a 0a 09 72 65 74 75 72 6e 3b  .}..);...return;
07f0: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65  .}../*. * Handle
0800: 20 61 20 72 65 73 70 6f 6e 73 65 20 66 72 6f 6d   a response from
0810: 20 74 68 65 20 4e 61 43 6c 20 73 69 64 65 20 72   the NaCl side r
0820: 65 67 61 72 64 69 6e 67 20 61 20 6c 69 73 74 20  egarding a list 
0830: 6f 66 20 72 65 61 64 65 72 73 0a 20 2a 2f 0a 66  of readers. */.f
0840: 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 4d 65  unction cackeyMe
0850: 73 73 61 67 65 49 6e 63 6f 6d 69 6e 67 4c 69 73  ssageIncomingLis
0860: 74 52 65 61 64 65 72 73 28 6d 65 73 73 61 67 65  tReaders(message
0870: 2c 20 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b  , chromeCallback
0880: 29 20 7b 0a 09 69 66 20 28 21 63 68 72 6f 6d 65  ) {..if (!chrome
0890: 43 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 09 72 65  Callback) {...re
08a0: 74 75 72 6e 3b 0a 09 7d 0a 0a 09 63 68 72 6f 6d  turn;..}...chrom
08b0: 65 43 61 6c 6c 62 61 63 6b 28 6d 65 73 73 61 67  eCallback(messag
08c0: 65 2e 72 65 61 64 65 72 73 29 3b 0a 0a 09 72 65  e.readers);...re
08d0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48  turn;.}../*. * H
08e0: 61 6e 64 6c 65 20 61 20 72 65 73 70 6f 6e 73 65  andle a response
08f0: 20 66 72 6f 6d 20 74 68 65 20 4e 61 43 6c 20 73   from the NaCl s
0900: 69 64 65 20 72 65 67 61 72 64 69 6e 67 20 73 69  ide regarding si
0910: 67 6e 69 6e 67 20 61 20 6d 65 73 73 61 67 65 0a  gning a message.
0920: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63   */.function cac
0930: 6b 65 79 4d 65 73 73 61 67 65 49 6e 63 6f 6d 69  keyMessageIncomi
0940: 6e 67 53 69 67 6e 4d 65 73 73 61 67 65 28 6d 65  ngSignMessage(me
0950: 73 73 61 67 65 2c 20 63 68 72 6f 6d 65 43 61 6c  ssage, chromeCal
0960: 6c 62 61 63 6b 29 20 7b 0a 09 76 61 72 20 70 61  lback) {..var pa
0970: 79 6c 6f 61 64 3b 0a 0a 09 69 66 20 28 21 63 68  yload;...if (!ch
0980: 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b 0a  romeCallback) {.
0990: 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 70  ..return;..}...p
09a0: 61 79 6c 6f 61 64 20 3d 20 6d 65 73 73 61 67 65  ayload = message
09b0: 2e 73 69 67 6e 65 64 44 61 74 61 3b 0a 0a 09 63  .signedData;...c
09c0: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 28 70 61  hromeCallback(pa
09d0: 79 6c 6f 61 64 29 3b 0a 0a 09 72 65 74 75 72 6e  yload);...return
09e0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 55 70 64 61 74  ;.}../*. * Updat
09f0: 65 20 74 68 65 20 74 69 6d 65 20 61 20 50 49 4e  e the time a PIN
0a00: 20 77 61 73 20 6c 61 73 74 20 75 73 65 64 20 66   was last used f
0a10: 6f 72 20 61 20 63 65 72 74 69 66 69 63 61 74 65  or a certificate
0a20: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61  . */.function ca
0a30: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
0a40: 6f 50 49 4e 4d 61 70 55 70 64 61 74 65 4c 61 73  oPINMapUpdateLas
0a50: 74 55 73 65 64 28 69 64 29 20 7b 0a 09 69 66 20  tUsed(id) {..if 
0a60: 28 69 64 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09  (id != null) {..
0a70: 09 63 61 63 6b 65 79 43 65 72 74 69 66 69 63 61  .cackeyCertifica
0a80: 74 65 54 6f 50 49 4e 4d 61 70 5b 69 64 5d 2e 6c  teToPINMap[id].l
0a90: 61 73 74 55 73 65 64 20 3d 20 28 6e 65 77 20 44  astUsed = (new D
0aa0: 61 74 65 28 29 29 2e 67 65 74 54 69 6d 65 28 29  ate()).getTime()
0ab0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
0ac0: 65 79 43 65 72 74 69 66 69 63 61 74 65 54 6f 50  eyCertificateToP
0ad0: 49 4e 4d 61 70 4c 61 73 74 55 73 65 64 52 75 6e  INMapLastUsedRun
0ae0: 6e 65 72 29 20 7b 0a 09 09 63 61 63 6b 65 79 43  ner) {...cackeyC
0af0: 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d  ertificateToPINM
0b00: 61 70 4c 61 73 74 55 73 65 64 52 75 6e 6e 65 72  apLastUsedRunner
0b10: 20 3d 20 74 72 75 65 3b 0a 0a 09 09 73 65 74 54   = true;....setT
0b20: 69 6d 65 6f 75 74 28 66 75 6e 63 74 69 6f 6e 28  imeout(function(
0b30: 29 20 7b 0a 09 09 09 76 61 72 20 63 75 72 72 65  ) {....var curre
0b40: 6e 74 54 69 6d 65 3b 0a 09 09 09 76 61 72 20 63  ntTime;....var c
0b50: 65 72 74 69 66 69 63 61 74 65 73 2c 20 63 65 72  ertificates, cer
0b60: 74 69 66 69 63 61 74 65 3b 0a 09 09 09 76 61 72  tificate;....var
0b70: 20 69 64 78 3b 0a 0a 09 09 09 63 75 72 72 65 6e   idx;.....curren
0b80: 74 54 69 6d 65 20 3d 20 28 6e 65 77 20 44 61 74  tTime = (new Dat
0b90: 65 28 29 29 2e 67 65 74 54 69 6d 65 28 29 3b 0a  e()).getTime();.
0ba0: 0a 09 09 09 63 65 72 74 69 66 69 63 61 74 65 73  ....certificates
0bb0: 20 3d 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 63   = Object.keys(c
0bc0: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
0bd0: 54 6f 50 49 4e 4d 61 70 29 3b 0a 0a 09 09 09 63  ToPINMap);.....c
0be0: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 4c 6f 6f 6b  onsole.log("Look
0bf0: 69 6e 67 20 66 6f 72 20 50 49 4e 73 20 74 6f 20  ing for PINs to 
0c00: 63 6c 65 61 72 22 29 3b 0a 0a 09 09 09 66 6f 72  clear");.....for
0c10: 20 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c   (idx = 0; idx <
0c20: 20 63 65 72 74 69 66 69 63 61 74 65 73 2e 6c 65   certificates.le
0c30: 6e 67 74 68 3b 20 69 64 78 2b 2b 29 20 7b 0a 09  ngth; idx++) {..
0c40: 09 09 09 63 65 72 74 69 66 69 63 61 74 65 20 3d  ...certificate =
0c50: 20 63 65 72 74 69 66 69 63 61 74 65 73 5b 69 64   certificates[id
0c60: 78 5d 3b 0a 0a 09 09 09 09 69 66 20 28 28 63 61  x];......if ((ca
0c70: 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65 54  ckeyCertificateT
0c80: 6f 50 49 4e 4d 61 70 5b 63 65 72 74 69 66 69 63  oPINMap[certific
0c90: 61 74 65 5d 2e 6c 61 73 74 55 73 65 64 20 2b 20  ate].lastUsed + 
0ca0: 39 30 30 30 30 30 29 20 3e 20 63 75 72 72 65 6e  900000) > curren
0cb0: 74 54 69 6d 65 29 20 7b 0a 09 09 09 09 09 63 6f  tTime) {......co
0cc0: 6e 74 69 6e 75 65 3b 0a 09 09 09 09 7d 0a 0a 09  ntinue;.....}...
0cd0: 09 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22  ...console.log("
0ce0: 44 65 6c 65 74 65 74 69 6e 67 20 22 20 2b 20 63  Deleteting " + c
0cf0: 65 72 74 69 66 69 63 61 74 65 29 3b 0a 0a 09 09  ertificate);....
0d00: 09 09 64 65 6c 65 74 65 20 63 61 63 6b 65 79 43  ..delete cackeyC
0d10: 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d  ertificateToPINM
0d20: 61 70 5b 63 65 72 74 69 66 69 63 61 74 65 5d 3b  ap[certificate];
0d30: 0a 09 09 09 7d 0a 0a 09 09 09 63 65 72 74 69 66  ....}.....certif
0d40: 69 63 61 74 65 73 20 3d 20 4f 62 6a 65 63 74 2e  icates = Object.
0d50: 6b 65 79 73 28 63 61 63 6b 65 79 43 65 72 74 69  keys(cackeyCerti
0d60: 66 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 29 3b  ficateToPINMap);
0d70: 0a 0a 09 09 09 63 61 63 6b 65 79 43 65 72 74 69  .....cackeyCerti
0d80: 66 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 4c 61  ficateToPINMapLa
0d90: 73 74 55 73 65 64 52 75 6e 6e 65 72 20 3d 20 66  stUsedRunner = f
0da0: 61 6c 73 65 3b 0a 0a 09 09 09 69 66 20 28 63 65  alse;.....if (ce
0db0: 72 74 69 66 69 63 61 74 65 73 2e 6c 65 6e 67 74  rtificates.lengt
0dc0: 68 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 72 65  h == 0) {.....re
0dd0: 74 75 72 6e 3b 0a 09 09 09 7d 0a 0a 09 09 09 63  turn;....}.....c
0de0: 61 63 6b 65 79 43 65 72 74 69 66 69 63 61 74 65  ackeyCertificate
0df0: 54 6f 50 49 4e 4d 61 70 55 70 64 61 74 65 4c 61  ToPINMapUpdateLa
0e00: 73 74 55 73 65 64 28 6e 75 6c 6c 29 3b 0a 09 09  stUsed(null);...
0e10: 7d 2c 20 39 30 30 30 30 30 29 3b 0a 09 7d 0a 7d  }, 900000);..}.}
0e20: 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 20 61  ../*. * Handle a
0e30: 6e 20 69 6e 63 6f 6d 69 6e 67 20 6d 65 73 73 61  n incoming messa
0e40: 67 65 20 66 72 6f 6d 20 74 68 65 20 4e 61 43 6c  ge from the NaCl
0e50: 20 73 69 64 65 20 61 6e 64 20 70 61 73 73 20 69   side and pass i
0e60: 74 20 6f 66 66 20 74 6f 0a 20 2a 20 6f 6e 65 20  t off to. * one 
0e70: 6f 66 20 74 68 65 20 68 61 6e 64 6c 65 72 73 20  of the handlers 
0e80: 61 62 6f 76 65 20 66 6f 72 20 61 63 74 75 61 6c  above for actual
0e90: 20 66 6f 72 6d 61 74 74 69 6e 67 20 61 6e 64 20   formatting and 
0ea0: 70 61 73 73 69 6e 67 20 74 6f 0a 20 2a 20 74 68  passing to. * th
0eb0: 65 20 63 61 6c 6c 62 61 63 6b 0a 20 2a 0a 20 2a  e callback. *. *
0ec0: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
0ed0: 75 72 65 64 2c 20 69 6e 76 6f 6b 65 20 74 68 65  ured, invoke the
0ee0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 6e   callback with n
0ef0: 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 2a 2f  o arguments.. */
0f00: 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79  .function cackey
0f10: 4d 65 73 73 61 67 65 49 6e 63 6f 6d 69 6e 67 28  MessageIncoming(
0f20: 6d 65 73 73 61 67 65 45 76 65 6e 74 29 20 7b 0a  messageEvent) {.
0f30: 09 76 61 72 20 6e 65 78 74 46 75 6e 63 74 69 6f  .var nextFunctio
0f40: 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 76 61 72 20 63  n = null;..var c
0f50: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 20 3d 20  hromeCallback = 
0f60: 6e 75 6c 6c 3b 0a 0a 09 69 66 20 28 6d 65 73 73  null;...if (mess
0f70: 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 74 61  ageEvent.data.ta
0f80: 72 67 65 74 20 21 3d 20 22 63 61 63 6b 65 79 22  rget != "cackey"
0f90: 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d  ) {...return;..}
0fa0: 0a 0a 09 69 66 20 28 67 6f 6f 67 2e 44 45 42 55  ...if (goog.DEBU
0fb0: 47 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c  G) {...console.l
0fc0: 6f 67 28 22 53 54 41 52 54 20 4d 45 53 53 41 47  og("START MESSAG
0fd0: 45 22 29 3b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c  E");...console.l
0fe0: 6f 67 28 6d 65 73 73 61 67 65 45 76 65 6e 74 2e  og(messageEvent.
0ff0: 64 61 74 61 29 3b 0a 09 09 63 6f 6e 73 6f 6c 65  data);...console
1000: 2e 6c 6f 67 28 22 45 4e 44 20 4d 45 53 53 41 47  .log("END MESSAG
1010: 45 22 29 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a  E");..}.../*.. *
1020: 20 49 66 20 77 65 20 66 61 69 6c 65 64 20 66 6f   If we failed fo
1030: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 20 61 6e  r some reason an
1040: 64 20 77 65 20 68 61 76 65 20 61 20 63 65 72 74  d we have a cert
1050: 69 66 69 63 61 74 65 20 69 6e 20 74 68 65 20 6f  ificate in the o
1060: 72 69 67 69 6e 61 6c 0a 09 20 2a 20 72 65 71 75  riginal.. * requ
1070: 65 73 74 20 74 68 65 6e 20 66 6f 72 67 65 74 20  est then forget 
1080: 61 6e 79 20 50 49 4e 20 61 73 73 6f 63 69 61 74  any PIN associat
1090: 65 64 20 77 69 74 68 20 74 68 61 74 20 63 65 72  ed with that cer
10a0: 74 69 66 69 63 61 74 65 0a 09 20 2a 2f 0a 09 69  tificate.. */..i
10b0: 66 20 28 6d 65 73 73 61 67 65 45 76 65 6e 74 2e  f (messageEvent.
10c0: 64 61 74 61 2e 73 74 61 74 75 73 20 21 3d 20 22  data.status != "
10d0: 73 75 63 63 65 73 73 22 29 20 7b 0a 09 09 69 66  success") {...if
10e0: 20 28 6d 65 73 73 61 67 65 45 76 65 6e 74 2e 64   (messageEvent.d
10f0: 61 74 61 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75  ata.originalrequ
1100: 65 73 74 29 20 7b 0a 09 09 09 69 66 20 28 6d 65  est) {....if (me
1110: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e  ssageEvent.data.
1120: 6f 72 69 67 69 6e 61 6c 72 65 71 75 65 73 74 2e  originalrequest.
1130: 63 65 72 74 69 66 69 63 61 74 65 29 20 7b 0a 09  certificate) {..
1140: 09 09 09 64 65 6c 65 74 65 20 63 61 63 6b 65 79  ...delete cackey
1150: 43 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e  CertificateToPIN
1160: 4d 61 70 5b 63 61 63 6b 65 79 43 65 72 74 69 66  Map[cackeyCertif
1170: 69 63 61 74 65 54 6f 50 49 4e 49 44 28 6d 65 73  icateToPINID(mes
1180: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 6f  sageEvent.data.o
1190: 72 69 67 69 6e 61 6c 72 65 71 75 65 73 74 2e 63  riginalrequest.c
11a0: 65 72 74 69 66 69 63 61 74 65 29 5d 3b 0a 09 09  ertificate)];...
11b0: 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28  .}...}..}...if (
11c0: 6d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74  messageEvent.dat
11d0: 61 2e 63 6f 6d 6d 61 6e 64 20 3d 3d 20 22 69 6e  a.command == "in
11e0: 69 74 22 20 26 26 20 6d 65 73 73 61 67 65 45 76  it" && messageEv
11f0: 65 6e 74 2e 64 61 74 61 2e 73 74 61 74 75 73 20  ent.data.status 
1200: 3d 3d 20 22 73 75 63 63 65 73 73 22 29 20 7b 0a  == "success") {.
1210: 09 09 69 66 20 28 67 6f 6f 67 2e 44 45 42 55 47  ..if (goog.DEBUG
1220: 29 20 7b 0a 09 09 09 63 6f 6e 73 6f 6c 65 2e 6c  ) {....console.l
1230: 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 49 6e 69  og("[cackey] Ini
1240: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 63 6f 6d 70  tialization comp
1250: 6c 65 74 65 64 2c 20 72 65 73 65 6e 64 69 6e 67  leted, resending
1260: 20 61 6e 79 20 71 75 65 75 65 64 20 6d 65 73 73   any queued mess
1270: 61 67 65 73 22 29 3b 0a 09 09 7d 0a 0a 09 09 63  ages");...}....c
1280: 61 63 6b 65 79 49 6e 69 74 50 43 53 43 43 6f 6d  ackeyInitPCSCCom
1290: 70 6c 65 74 65 64 28 22 73 75 63 63 65 73 73 22  pleted("success"
12a0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6d 65 73 73  );..}...if (mess
12b0: 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 69 64  ageEvent.data.id
12c0: 20 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 09 72 65   == null) {...re
12d0: 74 75 72 6e 3b 0a 09 7d 0a 0a 09 63 68 72 6f 6d  turn;..}...chrom
12e0: 65 43 61 6c 6c 62 61 63 6b 20 3d 20 63 61 63 6b  eCallback = cack
12f0: 65 79 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c  eyOutstandingCal
1300: 6c 62 61 63 6b 73 5b 6d 65 73 73 61 67 65 45 76  lbacks[messageEv
1310: 65 6e 74 2e 64 61 74 61 2e 69 64 5d 3b 0a 0a 09  ent.data.id];...
1320: 69 66 20 28 63 68 72 6f 6d 65 43 61 6c 6c 62 61  if (chromeCallba
1330: 63 6b 20 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 09  ck == null) {...
1340: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 22 5b  console.error("[
1350: 63 61 63 6b 65 79 5d 20 44 69 73 63 61 72 64 69  cackey] Discardi
1360: 6e 67 20 6f 75 74 64 61 74 65 64 20 6d 65 73 73  ng outdated mess
1370: 61 67 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  age");....return
1380: 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 6d  ;..}...switch (m
1390: 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61  essageEvent.data
13a0: 2e 73 74 61 74 75 73 29 20 7b 0a 09 09 63 61 73  .status) {...cas
13b0: 65 20 22 65 72 72 6f 72 22 3a 0a 09 09 09 63 6f  e "error":....co
13c0: 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 22 5b 63 61  nsole.error("[ca
13d0: 63 6b 65 79 5d 20 46 61 69 6c 65 64 20 74 6f 20  ckey] Failed to 
13e0: 65 78 65 63 75 74 65 20 63 6f 6d 6d 61 6e 64 20  execute command 
13f0: 27 22 20 2b 20 6d 65 73 73 61 67 65 45 76 65 6e  '" + messageEven
1400: 74 2e 64 61 74 61 2e 63 6f 6d 6d 61 6e 64 20 2b  t.data.command +
1410: 20 22 27 3a 20 22 20 2b 20 6d 65 73 73 61 67 65   "': " + message
1420: 45 76 65 6e 74 2e 64 61 74 61 2e 65 72 72 6f 72  Event.data.error
1430: 29 3b 0a 0a 09 09 09 63 68 72 6f 6d 65 43 61 6c  );.....chromeCal
1440: 6c 62 61 63 6b 28 29 3b 0a 0a 09 09 09 62 72 65  lback();.....bre
1450: 61 6b 3b 0a 09 09 63 61 73 65 20 22 72 65 74 72  ak;...case "retr
1460: 79 22 3a 0a 09 09 09 2f 2a 0a 09 09 09 20 2a 20  y":..../*.... * 
1470: 41 64 64 20 74 68 65 20 6e 65 77 20 72 65 71 75  Add the new requ
1480: 65 73 74 20 74 6f 20 74 68 65 20 71 75 65 75 65  est to the queue
1490: 20 6f 66 20 65 76 65 6e 74 73 20 74 6f 20 70 72   of events to pr
14a0: 6f 63 65 73 73 20 77 68 65 6e 20 74 68 65 20 50  ocess when the P
14b0: 49 4e 0a 09 09 09 20 2a 20 70 72 6f 6d 70 74 20  IN.... * prompt 
14c0: 69 73 20 74 65 72 6d 69 6e 61 74 65 64 2e 0a 09  is terminated...
14d0: 09 09 20 2a 2f 0a 09 09 09 63 61 63 6b 65 79 4d  .. */....cackeyM
14e0: 65 73 73 61 67 65 73 54 6f 52 65 74 72 79 2e 70  essagesToRetry.p
14f0: 75 73 68 28 6d 65 73 73 61 67 65 45 76 65 6e 74  ush(messageEvent
1500: 29 3b 0a 0a 09 09 09 69 66 20 28 70 69 6e 57 69  );.....if (pinWi
1510: 6e 64 6f 77 50 72 65 76 69 6f 75 73 48 61 6e 64  ndowPreviousHand
1520: 6c 65 29 20 7b 0a 09 09 09 09 2f 2a 0a 09 09 09  le) {...../*....
1530: 09 20 2a 20 41 6e 20 65 78 69 73 74 69 6e 67 20  . * An existing 
1540: 50 49 4e 20 65 6e 74 72 79 20 69 73 20 69 6e 20  PIN entry is in 
1550: 70 72 6f 67 72 65 73 73 0a 09 09 09 09 20 2a 20  progress..... * 
1560: 4a 75 73 74 20 61 64 64 20 74 68 65 20 72 65 71  Just add the req
1570: 75 65 73 74 20 74 6f 20 74 68 65 20 71 75 65 75  uest to the queu
1580: 65 20 28 61 62 6f 76 65 29 20 61 6e 64 20 77 61  e (above) and wa
1590: 69 74 0a 09 09 09 09 20 2a 2f 0a 0a 09 09 09 09  it..... */......
15a0: 72 65 74 75 72 6e 3b 0a 09 09 09 7d 0a 0a 09 09  return;....}....
15b0: 09 2f 2a 0a 09 09 09 20 2a 20 53 65 74 20 74 68  ./*.... * Set th
15c0: 65 20 68 61 6e 64 6c 65 20 74 6f 20 61 6e 20 69  e handle to an i
15d0: 6e 76 61 6c 69 64 20 28 62 75 74 20 6e 6f 6e 2d  nvalid (but non-
15e0: 6e 75 6c 6c 29 20 76 61 6c 75 65 20 75 6e 74 69  null) value unti
15f0: 6c 20 74 68 65 20 77 69 6e 64 6f 77 0a 09 09 09  l the window....
1600: 20 2a 20 69 73 20 63 72 65 61 74 65 64 20 69 6e   * is created in
1610: 20 63 61 73 65 20 77 65 20 61 72 65 20 69 6e 76   case we are inv
1620: 6f 6b 65 64 20 61 67 61 69 6e 20 73 6f 6f 6e 2e  oked again soon.
1630: 0a 09 09 09 20 2a 2f 0a 09 09 09 70 69 6e 57 69  .... */....pinWi
1640: 6e 64 6f 77 50 72 65 76 69 6f 75 73 48 61 6e 64  ndowPreviousHand
1650: 6c 65 20 3d 20 22 69 6e 76 61 6c 69 64 22 3b 0a  le = "invalid";.
1660: 0a 09 09 09 63 68 72 6f 6d 65 2e 61 70 70 2e 77  ....chrome.app.w
1670: 69 6e 64 6f 77 2e 63 72 65 61 74 65 28 22 70 69  indow.create("pi
1680: 6e 2e 68 74 6d 6c 22 2c 20 7b 0a 09 09 09 09 22  n.html", {....."
1690: 69 64 22 3a 20 22 63 61 63 6b 65 79 50 49 4e 45  id": "cackeyPINE
16a0: 6e 74 72 79 22 2c 0a 09 09 09 09 22 72 65 73 69  ntry",....."resi
16b0: 7a 61 62 6c 65 22 3a 20 66 61 6c 73 65 2c 0a 09  zable": false,..
16c0: 09 09 09 22 61 6c 77 61 79 73 4f 6e 54 6f 70 22  ..."alwaysOnTop"
16d0: 3a 20 74 72 75 65 2c 0a 09 09 09 09 22 66 6f 63  : true,....."foc
16e0: 75 73 65 64 22 3a 20 74 72 75 65 2c 0a 09 09 09  used": true,....
16f0: 09 22 76 69 73 69 62 6c 65 4f 6e 41 6c 6c 57 6f  ."visibleOnAllWo
1700: 72 6b 73 70 61 63 65 73 22 3a 20 74 72 75 65 2c  rkspaces": true,
1710: 0a 09 09 09 09 22 69 6e 6e 65 72 42 6f 75 6e 64  ....."innerBound
1720: 73 22 3a 20 7b 0a 09 09 09 09 09 22 77 69 64 74  s": {......"widt
1730: 68 22 3a 20 33 35 30 2c 0a 09 09 09 09 09 22 6d  h": 350,......"m
1740: 69 6e 57 69 64 74 68 22 3a 20 33 35 30 2c 0a 09  inWidth": 350,..
1750: 09 09 09 09 22 68 65 69 67 68 74 22 3a 20 31 33  ...."height": 13
1760: 35 2c 0a 09 09 09 09 09 22 6d 69 6e 48 65 69 67  5,......"minHeig
1770: 68 74 22 3a 20 31 33 35 0a 09 09 09 09 7d 0a 09  ht": 135.....}..
1780: 09 09 7d 2c 20 66 75 6e 63 74 69 6f 6e 28 70 69  ..}, function(pi
1790: 6e 57 69 6e 64 6f 77 29 20 7b 0a 09 09 09 09 2f  nWindow) {...../
17a0: 2a 0a 09 09 09 09 20 2a 20 53 65 74 20 74 68 65  *..... * Set the
17b0: 20 50 49 4e 20 76 61 6c 75 65 20 74 6f 20 62 6c   PIN value to bl
17c0: 61 6e 6b 0a 09 09 09 09 20 2a 2f 0a 09 09 09 09  ank..... */.....
17d0: 70 69 6e 57 69 6e 64 6f 77 50 49 4e 56 61 6c 75  pinWindowPINValu
17e0: 65 20 3d 20 22 22 3b 0a 0a 09 09 09 09 69 66 20  e = "";......if 
17f0: 28 21 70 69 6e 57 69 6e 64 6f 77 29 20 7b 0a 09  (!pinWindow) {..
1800: 09 09 09 09 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f  ....console.erro
1810: 72 28 22 5b 63 61 63 6b 65 79 5d 20 4e 6f 20 77  r("[cackey] No w
1820: 69 6e 64 6f 77 20 77 61 73 20 70 72 6f 76 69 64  indow was provid
1830: 65 64 20 66 6f 72 20 50 49 4e 20 65 6e 74 72 79  ed for PIN entry
1840: 2c 20 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20  , this will not 
1850: 67 6f 20 77 65 6c 6c 2e 22 29 3b 0a 0a 09 09 09  go well.");.....
1860: 09 09 72 65 74 75 72 6e 3b 0a 09 09 09 09 7d 0a  ..return;.....}.
1870: 0a 09 09 09 09 70 69 6e 57 69 6e 64 6f 77 50 72  .....pinWindowPr
1880: 65 76 69 6f 75 73 48 61 6e 64 6c 65 20 3d 20 70  eviousHandle = p
1890: 69 6e 57 69 6e 64 6f 77 3b 0a 0a 09 09 09 09 70  inWindow;......p
18a0: 69 6e 57 69 6e 64 6f 77 2e 64 72 61 77 41 74 74  inWindow.drawAtt
18b0: 65 6e 74 69 6f 6e 28 29 3b 0a 09 09 09 09 70 69  ention();.....pi
18c0: 6e 57 69 6e 64 6f 77 2e 66 6f 63 75 73 28 29 3b  nWindow.focus();
18d0: 0a 0a 09 09 09 09 2f 2a 0a 09 09 09 09 20 2a 20  ....../*..... * 
18e0: 52 65 67 69 73 74 65 72 20 61 20 68 61 6e 64 6c  Register a handl
18f0: 65 72 20 74 6f 20 68 61 6e 64 6c 65 20 74 68 65  er to handle the
1900: 20 77 69 6e 64 6f 77 20 62 65 69 6e 67 20 63 6c   window being cl
1910: 6f 73 65 64 20 77 69 74 68 6f 75 74 0a 09 09 09  osed without....
1920: 09 20 2a 20 68 61 76 69 6e 67 20 73 65 6e 74 20  . * having sent 
1930: 61 6e 79 74 68 69 6e 67 0a 09 09 09 09 20 2a 2f  anything..... */
1940: 0a 09 09 09 09 70 69 6e 57 69 6e 64 6f 77 2e 6f  .....pinWindow.o
1950: 6e 43 6c 6f 73 65 64 2e 61 64 64 4c 69 73 74 65  nClosed.addListe
1960: 6e 65 72 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b  ner(function() {
1970: 0a 09 09 09 09 09 76 61 72 20 6d 65 73 73 61 67  ......var messag
1980: 65 49 64 78 3b 0a 09 09 09 09 09 76 61 72 20 63  eIdx;......var c
1990: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a  hromeCallback;..
19a0: 09 09 09 09 09 70 69 6e 57 69 6e 64 6f 77 50 72  .....pinWindowPr
19b0: 65 76 69 6f 75 73 48 61 6e 64 6c 65 20 3d 20 6e  eviousHandle = n
19c0: 75 6c 6c 3b 0a 0a 09 09 09 09 09 66 6f 72 20 28  ull;.......for (
19d0: 6d 65 73 73 61 67 65 49 64 78 20 3d 20 30 3b 20  messageIdx = 0; 
19e0: 6d 65 73 73 61 67 65 49 64 78 20 3c 20 63 61 63  messageIdx < cac
19f0: 6b 65 79 4d 65 73 73 61 67 65 73 54 6f 52 65 74  keyMessagesToRet
1a00: 72 79 2e 6c 65 6e 67 74 68 3b 20 6d 65 73 73 61  ry.length; messa
1a10: 67 65 49 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09  geIdx++) {......
1a20: 09 76 61 72 20 74 6d 70 4d 65 73 73 61 67 65 45  .var tmpMessageE
1a30: 76 65 6e 74 3b 0a 0a 09 09 09 09 09 09 74 6d 70  vent;........tmp
1a40: 4d 65 73 73 61 67 65 45 76 65 6e 74 20 3d 20 63  MessageEvent = c
1a50: 61 63 6b 65 79 4d 65 73 73 61 67 65 73 54 6f 52  ackeyMessagesToR
1a60: 65 74 72 79 5b 6d 65 73 73 61 67 65 49 64 78 5d  etry[messageIdx]
1a70: 3b 0a 0a 09 09 09 09 09 09 69 66 20 28 70 69 6e  ;........if (pin
1a80: 57 69 6e 64 6f 77 50 49 4e 56 61 6c 75 65 20 3d  WindowPINValue =
1a90: 3d 20 22 22 29 20 7b 0a 09 09 09 09 09 09 09 69  = "") {........i
1aa0: 66 20 28 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b  f (goog.DEBUG) {
1ab0: 0a 09 09 09 09 09 09 09 09 63 6f 6e 73 6f 6c 65  .........console
1ac0: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 54  .log("[cackey] T
1ad0: 68 65 20 50 49 4e 20 64 69 61 6c 6f 67 20 77 61  he PIN dialog wa
1ae0: 73 20 63 6c 6f 73 65 64 20 77 69 74 68 6f 75 74  s closed without
1af0: 20 67 61 74 68 65 72 69 6e 67 20 61 20 50 49 4e   gathering a PIN
1b00: 2c 20 74 72 65 61 74 69 6e 67 20 69 74 20 61 73  , treating it as
1b10: 20 61 20 66 61 69 6c 75 72 65 2e 22 29 3b 0a 09   a failure.");..
1b20: 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09  ......}.........
1b30: 74 6d 70 4d 65 73 73 61 67 65 45 76 65 6e 74 2e  tmpMessageEvent.
1b40: 64 61 74 61 2e 73 74 61 74 75 73 20 3d 20 22 65  data.status = "e
1b50: 72 72 6f 72 22 3b 0a 09 09 09 09 09 09 09 74 6d  rror";........tm
1b60: 70 4d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61  pMessageEvent.da
1b70: 74 61 2e 65 72 72 6f 72 20 3d 20 22 50 49 4e 20  ta.error = "PIN 
1b80: 77 69 6e 64 6f 77 20 63 6c 6f 73 65 64 20 77 69  window closed wi
1b90: 74 68 6f 75 74 20 61 20 50 49 4e 20 62 65 69 6e  thout a PIN bein
1ba0: 67 20 70 72 6f 76 69 64 65 64 22 3b 0a 0a 09 09  g provided";....
1bb0: 09 09 09 09 09 63 61 63 6b 65 79 4d 65 73 73 61  .....cackeyMessa
1bc0: 67 65 49 6e 63 6f 6d 69 6e 67 28 74 6d 70 4d 65  geIncoming(tmpMe
1bd0: 73 73 61 67 65 45 76 65 6e 74 29 3b 0a 09 09 09  ssageEvent);....
1be0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
1bf0: 09 09 09 74 6d 70 4d 65 73 73 61 67 65 45 76 65  ...tmpMessageEve
1c00: 6e 74 2e 64 61 74 61 2e 6f 72 69 67 69 6e 61 6c  nt.data.original
1c10: 72 65 71 75 65 73 74 2e 70 69 6e 20 3d 20 70 69  request.pin = pi
1c20: 6e 57 69 6e 64 6f 77 50 49 4e 56 61 6c 75 65 3b  nWindowPINValue;
1c30: 0a 0a 09 09 09 09 09 09 09 63 61 63 6b 65 79 43  .........cackeyC
1c40: 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e 4d  ertificateToPINM
1c50: 61 70 5b 63 61 63 6b 65 79 43 65 72 74 69 66 69  ap[cackeyCertifi
1c60: 63 61 74 65 54 6f 50 49 4e 49 44 28 74 6d 70 4d  cateToPINID(tmpM
1c70: 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61  essageEvent.data
1c80: 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75 65 73 74  .originalrequest
1c90: 2e 63 65 72 74 69 66 69 63 61 74 65 29 5d 20 3d  .certificate)] =
1ca0: 20 7b 7d 0a 09 09 09 09 09 09 09 63 61 63 6b 65   {}........cacke
1cb0: 79 43 65 72 74 69 66 69 63 61 74 65 54 6f 50 49  yCertificateToPI
1cc0: 4e 4d 61 70 5b 63 61 63 6b 65 79 43 65 72 74 69  NMap[cackeyCerti
1cd0: 66 69 63 61 74 65 54 6f 50 49 4e 49 44 28 74 6d  ficateToPINID(tm
1ce0: 70 4d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61  pMessageEvent.da
1cf0: 74 61 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75 65  ta.originalreque
1d00: 73 74 2e 63 65 72 74 69 66 69 63 61 74 65 29 5d  st.certificate)]
1d10: 2e 70 69 6e 20 3d 20 70 69 6e 57 69 6e 64 6f 77  .pin = pinWindow
1d20: 50 49 4e 56 61 6c 75 65 3b 0a 0a 09 09 09 09 09  PINValue;.......
1d30: 09 09 63 61 63 6b 65 79 43 65 72 74 69 66 69 63  ..cackeyCertific
1d40: 61 74 65 54 6f 50 49 4e 4d 61 70 55 70 64 61 74  ateToPINMapUpdat
1d50: 65 4c 61 73 74 55 73 65 64 28 63 61 63 6b 65 79  eLastUsed(cackey
1d60: 43 65 72 74 69 66 69 63 61 74 65 54 6f 50 49 4e  CertificateToPIN
1d70: 49 44 28 74 6d 70 4d 65 73 73 61 67 65 45 76 65  ID(tmpMessageEve
1d80: 6e 74 2e 64 61 74 61 2e 6f 72 69 67 69 6e 61 6c  nt.data.original
1d90: 72 65 71 75 65 73 74 2e 63 65 72 74 69 66 69 63  request.certific
1da0: 61 74 65 29 29 3b 0a 0a 09 09 09 09 09 09 09 63  ate));.........c
1db0: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 20 3d 20  hromeCallback = 
1dc0: 6e 75 6c 6c 3b 0a 09 09 09 09 09 09 09 69 66 20  null;........if 
1dd0: 28 74 6d 70 4d 65 73 73 61 67 65 45 76 65 6e 74  (tmpMessageEvent
1de0: 2e 64 61 74 61 2e 69 64 29 20 7b 0a 09 09 09 09  .data.id) {.....
1df0: 09 09 09 09 69 66 20 28 63 61 63 6b 65 79 4f 75  ....if (cackeyOu
1e00: 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63  tstandingCallbac
1e10: 6b 73 29 20 7b 0a 09 09 09 09 09 09 09 09 09 63  ks) {..........c
1e20: 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 20 3d 20  hromeCallback = 
1e30: 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e  cackeyOutstandin
1e40: 67 43 61 6c 6c 62 61 63 6b 73 5b 74 6d 70 4d 65  gCallbacks[tmpMe
1e50: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e  ssageEvent.data.
1e60: 69 64 5d 3b 0a 09 09 09 09 09 09 09 09 7d 0a 09  id];.........}..
1e70: 09 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 09 09  ......}.........
1e80: 63 61 63 6b 65 79 49 6e 69 74 50 43 53 43 28 66  cackeyInitPCSC(f
1e90: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 09 09  unction() {.....
1ea0: 09 09 09 09 63 61 63 6b 65 79 48 61 6e 64 6c 65  ....cackeyHandle
1eb0: 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 74 6d 70  .postMessage(tmp
1ec0: 4d 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74  MessageEvent.dat
1ed0: 61 2e 6f 72 69 67 69 6e 61 6c 72 65 71 75 65 73  a.originalreques
1ee0: 74 29 3b 0a 09 09 09 09 09 09 09 7d 2c 20 66 75  t);........}, fu
1ef0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 09 09 09  nction() {......
1f00: 09 09 09 69 66 20 28 63 68 72 6f 6d 65 43 61 6c  ...if (chromeCal
1f10: 6c 62 61 63 6b 29 20 7b 0a 09 09 09 09 09 09 09  lback) {........
1f20: 09 09 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b  ..chromeCallback
1f30: 28 29 3b 0a 09 09 09 09 09 09 09 09 7d 0a 0a 09  ();.........}...
1f40: 09 09 09 09 09 09 09 69 66 20 28 74 6d 70 4d 65  .......if (tmpMe
1f50: 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 2e  ssageEvent.data.
1f60: 69 64 20 26 26 20 63 61 63 6b 65 79 4f 75 74 73  id && cackeyOuts
1f70: 74 61 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 73  tandingCallbacks
1f80: 5b 74 6d 70 4d 65 73 73 61 67 65 45 76 65 6e 74  [tmpMessageEvent
1f90: 2e 64 61 74 61 2e 69 64 5d 29 20 7b 0a 09 09 09  .data.id]) {....
1fa0: 09 09 09 09 09 09 64 65 6c 65 74 65 20 63 61 63  ......delete cac
1fb0: 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67 43 61  keyOutstandingCa
1fc0: 6c 6c 62 61 63 6b 73 5b 74 6d 70 4d 65 73 73 61  llbacks[tmpMessa
1fd0: 67 65 45 76 65 6e 74 2e 64 61 74 61 2e 69 64 5d  geEvent.data.id]
1fe0: 3b 0a 09 09 09 09 09 09 09 09 7d 0a 09 09 09 09  ;.........}.....
1ff0: 09 09 09 7d 29 3b 0a 09 09 09 09 09 09 7d 0a 09  ...});.......}..
2000: 09 09 09 09 7d 0a 0a 0a 09 09 09 09 09 2f 2a 0a  ....}......../*.
2010: 09 09 09 09 09 20 2a 20 44 65 6c 65 74 65 20 74  ..... * Delete t
2020: 68 65 20 65 78 69 73 74 69 6e 67 20 68 61 6e 64  he existing hand
2030: 6c 65 20 61 6e 64 20 63 72 65 61 74 65 20 61 20  le and create a 
2040: 6e 65 77 20 6f 6e 65 0a 09 09 09 09 09 20 2a 2f  new one...... */
2050: 0a 09 09 09 09 09 64 65 6c 65 74 65 20 63 61 63  ......delete cac
2060: 6b 65 79 4d 65 73 73 61 67 65 73 54 6f 52 65 74  keyMessagesToRet
2070: 72 79 3b 0a 0a 09 09 09 09 09 63 61 63 6b 65 79  ry;.......cackey
2080: 4d 65 73 73 61 67 65 73 54 6f 52 65 74 72 79 20  MessagesToRetry 
2090: 3d 20 5b 5d 3b 0a 0a 09 09 09 09 09 2f 2a 0a 09  = [];......./*..
20a0: 09 09 09 09 20 2a 20 57 65 20 61 72 65 20 64 6f  .... * We are do
20b0: 6e 65 20 66 65 74 63 68 69 6e 67 20 74 68 65 20  ne fetching the 
20c0: 75 73 65 72 20 50 49 4e 2c 20 63 6c 65 61 72 20  user PIN, clear 
20d0: 74 68 65 20 76 61 6c 75 65 0a 09 09 09 09 09 20  the value...... 
20e0: 2a 2f 0a 09 09 09 09 09 70 69 6e 57 69 6e 64 6f  */......pinWindo
20f0: 77 50 49 4e 56 61 6c 75 65 20 3d 20 22 22 3b 0a  wPINValue = "";.
2100: 0a 09 09 09 09 09 72 65 74 75 72 6e 3b 0a 09 09  ......return;...
2110: 09 09 7d 29 0a 0a 09 09 09 09 2f 2a 0a 09 09 09  ..})....../*....
2120: 09 20 2a 20 50 61 73 73 20 74 68 69 73 20 6d 65  . * Pass this me
2130: 73 73 61 67 65 20 6f 66 66 20 74 6f 20 74 68 65  ssage off to the
2140: 20 6f 74 68 65 72 20 77 69 6e 64 6f 77 20 73 6f   other window so
2150: 20 74 68 61 74 20 69 74 20 6d 61 79 20 72 65 73   that it may res
2160: 75 62 6d 69 74 20 74 68 65 20 72 65 71 75 65 73  ubmit the reques
2170: 74 2e 0a 09 09 09 09 20 2a 2f 0a 09 09 09 09 70  t...... */.....p
2180: 69 6e 57 69 6e 64 6f 77 2e 63 6f 6e 74 65 6e 74  inWindow.content
2190: 57 69 6e 64 6f 77 2e 70 61 72 65 6e 74 57 69 6e  Window.parentWin
21a0: 64 6f 77 20 3d 20 77 69 6e 64 6f 77 3b 0a 09 09  dow = window;...
21b0: 09 09 70 69 6e 57 69 6e 64 6f 77 2e 63 6f 6e 74  ..pinWindow.cont
21c0: 65 6e 74 57 69 6e 64 6f 77 2e 6d 65 73 73 61 67  entWindow.messag
21d0: 65 45 76 65 6e 74 20 3d 20 6d 65 73 73 61 67 65  eEvent = message
21e0: 45 76 65 6e 74 3b 0a 0a 09 09 09 09 72 65 74 75  Event;......retu
21f0: 72 6e 3b 0a 09 09 09 7d 29 3b 0a 0a 09 09 09 2f  rn;....});...../
2200: 2a 0a 09 09 09 20 2a 20 57 65 20 72 65 74 75 72  *.... * We retur
2210: 6e 20 68 65 72 65 20 69 6e 73 74 65 61 64 20 6f  n here instead o
2220: 66 20 62 72 65 61 6b 20 74 6f 20 61 76 6f 69 64  f break to avoid
2230: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 63 61   deleting the ca
2240: 6c 6c 62 61 63 6b 0a 09 09 09 20 2a 20 65 6e 74  llback.... * ent
2250: 72 79 2e 0a 09 09 09 20 2a 2f 0a 09 09 09 72 65  ry..... */....re
2260: 74 75 72 6e 3b 0a 09 09 63 61 73 65 20 22 73 75  turn;...case "su
2270: 63 63 65 73 73 22 3a 0a 09 09 09 73 77 69 74 63  ccess":....switc
2280: 68 20 28 6d 65 73 73 61 67 65 45 76 65 6e 74 2e  h (messageEvent.
2290: 64 61 74 61 2e 63 6f 6d 6d 61 6e 64 29 20 7b 0a  data.command) {.
22a0: 09 09 09 09 63 61 73 65 20 22 6c 69 73 74 63 65  ....case "listce
22b0: 72 74 69 66 69 63 61 74 65 73 22 3a 0a 09 09 09  rtificates":....
22c0: 09 09 6e 65 78 74 46 75 6e 63 74 69 6f 6e 20 3d  ..nextFunction =
22d0: 20 63 61 63 6b 65 79 4d 65 73 73 61 67 65 49 6e   cackeyMessageIn
22e0: 63 6f 6d 69 6e 67 4c 69 73 74 43 65 72 74 69 66  comingListCertif
22f0: 69 63 61 74 65 73 3b 0a 0a 09 09 09 09 09 62 72  icates;.......br
2300: 65 61 6b 3b 0a 09 09 09 09 63 61 73 65 20 22 6c  eak;.....case "l
2310: 69 73 74 72 65 61 64 65 72 73 22 3a 0a 09 09 09  istreaders":....
2320: 09 09 6e 65 78 74 46 75 6e 63 74 69 6f 6e 20 3d  ..nextFunction =
2330: 20 63 61 63 6b 65 79 4d 65 73 73 61 67 65 49 6e   cackeyMessageIn
2340: 63 6f 6d 69 6e 67 4c 69 73 74 52 65 61 64 65 72  comingListReader
2350: 73 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  s;.......break;.
2360: 09 09 09 09 63 61 73 65 20 22 73 69 67 6e 22 3a  ....case "sign":
2370: 0a 09 09 09 09 09 6e 65 78 74 46 75 6e 63 74 69  ......nextFuncti
2380: 6f 6e 20 3d 20 63 61 63 6b 65 79 4d 65 73 73 61  on = cackeyMessa
2390: 67 65 49 6e 63 6f 6d 69 6e 67 53 69 67 6e 4d 65  geIncomingSignMe
23a0: 73 73 61 67 65 3b 0a 0a 09 09 09 09 09 62 72 65  ssage;.......bre
23b0: 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65  ak;....}.....bre
23c0: 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e 65 78  ak;..}...if (nex
23d0: 74 46 75 6e 63 74 69 6f 6e 20 21 3d 20 6e 75 6c  tFunction != nul
23e0: 6c 29 20 7b 0a 09 09 6e 65 78 74 46 75 6e 63 74  l) {...nextFunct
23f0: 69 6f 6e 28 6d 65 73 73 61 67 65 45 76 65 6e 74  ion(messageEvent
2400: 2e 64 61 74 61 2c 20 63 68 72 6f 6d 65 43 61 6c  .data, chromeCal
2410: 6c 62 61 63 6b 29 3b 0a 09 7d 0a 0a 09 64 65 6c  lback);..}...del
2420: 65 74 65 20 63 61 63 6b 65 79 4f 75 74 73 74 61  ete cackeyOutsta
2430: 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 73 5b 6d  ndingCallbacks[m
2440: 65 73 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61  essageEvent.data
2450: 2e 69 64 5d 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a  .id];...return;.
2460: 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 72  }../*. * Handler
2470: 20 66 6f 72 20 6d 65 73 73 61 67 65 73 20 66 72   for messages fr
2480: 6f 6d 20 43 68 72 6f 6d 65 20 72 65 6c 61 74 65  om Chrome relate
2490: 64 20 74 6f 20 6c 69 73 74 69 6e 67 20 63 65 72  d to listing cer
24a0: 74 69 66 69 63 61 74 65 73 0a 20 2a 2f 0a 66 75  tificates. */.fu
24b0: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 4c 69 73  nction cackeyLis
24c0: 74 43 65 72 74 69 66 69 63 61 74 65 73 28 63 68  tCertificates(ch
24d0: 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b 0a  romeCallback) {.
24e0: 09 76 61 72 20 63 61 6c 6c 62 61 63 6b 49 64 3b  .var callbackId;
24f0: 0a 0a 09 69 66 20 28 67 6f 6f 67 2e 44 45 42 55  ...if (goog.DEBU
2500: 47 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c  G) {...console.l
2510: 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 41 73 6b  og("[cackey] Ask
2520: 65 64 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  ed to provide a 
2530: 6c 69 73 74 20 6f 66 20 63 65 72 74 69 66 69 63  list of certific
2540: 61 74 65 73 20 2d 2d 20 74 68 72 6f 77 69 6e 67  ates -- throwing
2550: 20 74 68 61 74 20 72 65 71 75 65 73 74 20 6f 76   that request ov
2560: 65 72 20 74 6f 20 74 68 65 20 4e 61 43 6c 20 73  er to the NaCl s
2570: 69 64 65 2e 2e 2e 20 22 29 3b 0a 09 7d 0a 0a 09  ide... ");..}...
2580: 63 61 6c 6c 62 61 63 6b 49 64 20 3d 20 2b 2b 63  callbackId = ++c
2590: 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67  ackeyOutstanding
25a0: 43 61 6c 6c 62 61 63 6b 43 6f 75 6e 74 65 72 3b  CallbackCounter;
25b0: 0a 0a 09 63 61 63 6b 65 79 49 6e 69 74 50 43 53  ...cackeyInitPCS
25c0: 43 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09  C(function() {..
25d0: 09 63 61 63 6b 65 79 48 61 6e 64 6c 65 2e 70 6f  .cackeyHandle.po
25e0: 73 74 4d 65 73 73 61 67 65 28 0a 09 09 09 7b 0a  stMessage(....{.
25f0: 09 09 09 09 27 74 61 72 67 65 74 27 3a 20 22 63  ....'target': "c
2600: 61 63 6b 65 79 22 2c 0a 09 09 09 09 27 63 6f 6d  ackey",.....'com
2610: 6d 61 6e 64 27 3a 20 22 6c 69 73 74 63 65 72 74  mand': "listcert
2620: 69 66 69 63 61 74 65 73 22 2c 0a 09 09 09 09 27  ificates",.....'
2630: 69 64 27 3a 20 63 61 6c 6c 62 61 63 6b 49 64 0a  id': callbackId.
2640: 09 09 09 7d 0a 09 09 29 3b 0a 0a 09 09 63 61 63  ...}...);....cac
2650: 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67 43 61  keyOutstandingCa
2660: 6c 6c 62 61 63 6b 73 5b 63 61 6c 6c 62 61 63 6b  llbacks[callback
2670: 49 64 5d 20 3d 20 63 68 72 6f 6d 65 43 61 6c 6c  Id] = chromeCall
2680: 62 61 63 6b 3b 0a 0a 09 09 69 66 20 28 67 6f 6f  back;....if (goo
2690: 67 2e 44 45 42 55 47 29 20 7b 0a 09 09 09 63 6f  g.DEBUG) {....co
26a0: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b  nsole.log("[cack
26b0: 65 79 5d 20 54 68 72 6f 77 6e 2e 22 29 3b 0a 09  ey] Thrown.");..
26c0: 09 7d 0a 09 7d 2c 20 63 68 72 6f 6d 65 43 61 6c  .}..}, chromeCal
26d0: 6c 62 61 63 6b 29 3b 0a 0a 09 72 65 74 75 72 6e  lback);...return
26e0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c  ;.}../*. * Handl
26f0: 65 72 20 66 6f 72 20 6d 65 73 73 61 67 65 73 20  er for messages 
2700: 66 72 6f 6d 20 43 68 72 6f 6d 65 20 72 65 6c 61  from Chrome rela
2710: 74 65 64 20 74 6f 20 6c 69 73 74 69 6e 67 20 72  ted to listing r
2720: 65 61 64 65 72 73 0a 20 2a 2f 0a 66 75 6e 63 74  eaders. */.funct
2730: 69 6f 6e 20 63 61 63 6b 65 79 4c 69 73 74 52 65  ion cackeyListRe
2740: 61 64 65 72 73 28 63 68 72 6f 6d 65 43 61 6c 6c  aders(chromeCall
2750: 62 61 63 6b 29 20 7b 0a 09 76 61 72 20 63 61 6c  back) {..var cal
2760: 6c 62 61 63 6b 49 64 3b 0a 0a 09 69 66 20 28 67  lbackId;...if (g
2770: 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a 09 09 63  oog.DEBUG) {...c
2780: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63  onsole.log("[cac
2790: 6b 65 79 5d 20 41 73 6b 65 64 20 74 6f 20 70 72  key] Asked to pr
27a0: 6f 76 69 64 65 20 61 20 6c 69 73 74 20 6f 66 20  ovide a list of 
27b0: 72 65 61 64 65 72 73 20 2d 2d 20 74 68 72 6f 77  readers -- throw
27c0: 69 6e 67 20 74 68 61 74 20 72 65 71 75 65 73 74  ing that request
27d0: 20 6f 76 65 72 20 74 6f 20 74 68 65 20 4e 61 43   over to the NaC
27e0: 6c 20 73 69 64 65 2e 2e 2e 20 22 29 3b 0a 09 7d  l side... ");..}
27f0: 0a 0a 09 63 61 6c 6c 62 61 63 6b 49 64 20 3d 20  ...callbackId = 
2800: 2b 2b 63 61 63 6b 65 79 4f 75 74 73 74 61 6e 64  ++cackeyOutstand
2810: 69 6e 67 43 61 6c 6c 62 61 63 6b 43 6f 75 6e 74  ingCallbackCount
2820: 65 72 3b 0a 0a 09 63 61 63 6b 65 79 49 6e 69 74  er;...cackeyInit
2830: 50 43 53 43 28 66 75 6e 63 74 69 6f 6e 28 29 20  PCSC(function() 
2840: 7b 0a 09 09 63 61 63 6b 65 79 48 61 6e 64 6c 65  {...cackeyHandle
2850: 2e 70 6f 73 74 4d 65 73 73 61 67 65 28 0a 09 09  .postMessage(...
2860: 09 7b 0a 09 09 09 09 27 74 61 72 67 65 74 27 3a  .{.....'target':
2870: 20 22 63 61 63 6b 65 79 22 2c 0a 09 09 09 09 27   "cackey",.....'
2880: 63 6f 6d 6d 61 6e 64 27 3a 20 22 6c 69 73 74 72  command': "listr
2890: 65 61 64 65 72 73 22 2c 0a 09 09 09 09 27 69 64  eaders",.....'id
28a0: 27 3a 20 63 61 6c 6c 62 61 63 6b 49 64 0a 09 09  ': callbackId...
28b0: 09 7d 0a 09 09 29 3b 0a 0a 09 09 63 61 63 6b 65  .}...);....cacke
28c0: 79 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c  yOutstandingCall
28d0: 62 61 63 6b 73 5b 63 61 6c 6c 62 61 63 6b 49 64  backs[callbackId
28e0: 5d 20 3d 20 63 68 72 6f 6d 65 43 61 6c 6c 62 61  ] = chromeCallba
28f0: 63 6b 3b 0a 0a 09 09 69 66 20 28 67 6f 6f 67 2e  ck;....if (goog.
2900: 44 45 42 55 47 29 20 7b 0a 09 09 09 63 6f 6e 73  DEBUG) {....cons
2910: 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79  ole.log("[cackey
2920: 5d 20 54 68 72 6f 77 6e 2e 22 29 3b 0a 09 09 7d  ] Thrown.");...}
2930: 0a 09 7d 2c 20 63 68 72 6f 6d 65 43 61 6c 6c 62  ..}, chromeCallb
2940: 61 63 6b 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a  ack);...return;.
2950: 7d 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65 72  }../*. * Handler
2960: 20 66 6f 72 20 6d 65 73 73 61 67 65 73 20 66 72   for messages fr
2970: 6f 6d 20 43 68 72 6f 6d 65 20 72 65 6c 61 74 65  om Chrome relate
2980: 64 20 74 6f 20 73 69 67 6e 69 6e 67 20 61 20 68  d to signing a h
2990: 61 73 68 20 6f 66 20 73 6f 6d 65 20 73 6f 72 74  ash of some sort
29a0: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61  . */.function ca
29b0: 63 6b 65 79 53 69 67 6e 4d 65 73 73 61 67 65 28  ckeySignMessage(
29c0: 73 69 67 6e 52 65 71 75 65 73 74 2c 20 63 68 72  signRequest, chr
29d0: 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 20 7b 0a 09  omeCallback) {..
29e0: 76 61 72 20 63 61 6c 6c 62 61 63 6b 49 64 3b 0a  var callbackId;.
29f0: 09 76 61 72 20 63 6f 6d 6d 61 6e 64 3b 0a 09 76  .var command;..v
2a00: 61 72 20 63 65 72 74 69 66 69 63 61 74 65 49 64  ar certificateId
2a10: 3b 0a 09 76 61 72 20 64 69 67 65 73 74 2c 20 64  ;..var digest, d
2a20: 69 67 65 73 74 48 65 61 64 65 72 3b 0a 0a 09 2f  igestHeader;.../
2a30: 2a 0a 09 20 2a 20 50 72 65 66 69 78 20 74 68 65  *.. * Prefix the
2a40: 20 64 69 67 65 73 74 20 77 69 74 68 20 74 68 65   digest with the
2a50: 20 41 53 4e 2e 31 20 68 65 61 64 65 72 20 72 65   ASN.1 header re
2a60: 71 75 69 72 65 64 20 6f 66 20 69 74 0a 09 20 2a  quired of it.. *
2a70: 2f 0a 09 73 77 69 74 63 68 20 28 73 69 67 6e 52  /..switch (signR
2a80: 65 71 75 65 73 74 2e 68 61 73 68 29 20 7b 0a 09  equest.hash) {..
2a90: 09 63 61 73 65 20 22 53 48 41 31 22 3a 0a 09 09  .case "SHA1":...
2aa0: 09 64 69 67 65 73 74 48 65 61 64 65 72 20 3d 20  .digestHeader = 
2ab0: 6e 65 77 20 55 69 6e 74 38 41 72 72 61 79 28 5b  new Uint8Array([
2ac0: 30 78 33 30 2c 20 30 78 32 31 2c 20 30 78 33 30  0x30, 0x21, 0x30
2ad0: 2c 20 30 78 30 39 2c 20 30 78 30 36 2c 20 30 78  , 0x09, 0x06, 0x
2ae0: 30 35 2c 20 30 78 32 62 2c 20 30 78 30 65 2c 20  05, 0x2b, 0x0e, 
2af0: 30 78 30 33 2c 20 30 78 30 32 2c 20 30 78 31 61  0x03, 0x02, 0x1a
2b00: 2c 20 30 78 30 35 2c 20 30 78 30 30 2c 20 30 78  , 0x05, 0x00, 0x
2b10: 30 34 2c 20 30 78 31 34 5d 29 3b 0a 09 09 09 62  04, 0x14]);....b
2b20: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 22 53 48  reak;...case "SH
2b30: 41 32 35 36 22 3a 0a 09 09 09 64 69 67 65 73 74  A256":....digest
2b40: 48 65 61 64 65 72 20 3d 20 6e 65 77 20 55 69 6e  Header = new Uin
2b50: 74 38 41 72 72 61 79 28 5b 30 78 33 30 2c 20 30  t8Array([0x30, 0
2b60: 78 33 31 2c 20 30 78 33 30 2c 20 30 78 30 64 2c  x31, 0x30, 0x0d,
2b70: 20 30 78 30 36 2c 20 30 78 30 39 2c 20 30 78 36   0x06, 0x09, 0x6
2b80: 30 2c 20 30 78 38 36 2c 20 30 78 34 38 2c 20 30  0, 0x86, 0x48, 0
2b90: 78 30 31 2c 20 30 78 36 35 2c 20 30 78 30 33 2c  x01, 0x65, 0x03,
2ba0: 20 30 78 30 34 2c 20 30 78 30 32 2c 20 30 78 30   0x04, 0x02, 0x0
2bb0: 31 2c 20 30 78 30 35 2c 20 30 78 30 30 2c 20 30  1, 0x05, 0x00, 0
2bc0: 78 30 34 2c 20 30 78 32 30 5d 29 3b 0a 09 09 09  x04, 0x20]);....
2bd0: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 22 4d  break;...case "M
2be0: 44 35 5f 53 48 41 31 22 3a 0a 09 09 09 64 69 67  D5_SHA1":....dig
2bf0: 65 73 74 48 65 61 64 65 72 20 3d 20 6e 65 77 20  estHeader = new 
2c00: 55 69 6e 74 38 41 72 72 61 79 28 29 3b 0a 09 09  Uint8Array();...
2c10: 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c  .break;...defaul
2c20: 74 3a 0a 09 09 09 63 6f 6e 73 6f 6c 65 2e 65 72  t:....console.er
2c30: 72 6f 72 28 22 5b 63 61 63 6b 65 79 5d 20 41 73  ror("[cackey] As
2c40: 6b 65 64 20 74 6f 20 73 69 67 6e 20 61 20 6d 65  ked to sign a me
2c50: 73 73 61 67 65 20 77 69 74 68 20 61 20 68 61 73  ssage with a has
2c60: 68 20 77 65 20 64 6f 20 6e 6f 74 20 73 75 70 70  h we do not supp
2c70: 6f 72 74 3a 20 22 20 2b 20 73 69 67 6e 52 65 71  ort: " + signReq
2c80: 75 65 73 74 2e 68 61 73 68 29 3b 0a 0a 09 09 09  uest.hash);.....
2c90: 63 68 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 28 29  chromeCallback()
2ca0: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 3b 0a 09 7d  ;.....return;..}
2cb0: 0a 0a 09 64 69 67 65 73 74 20 3d 20 6e 65 77 20  ...digest = new 
2cc0: 55 69 6e 74 38 41 72 72 61 79 28 64 69 67 65 73  Uint8Array(diges
2cd0: 74 48 65 61 64 65 72 2e 6c 65 6e 67 74 68 20 2b  tHeader.length +
2ce0: 20 73 69 67 6e 52 65 71 75 65 73 74 2e 64 69 67   signRequest.dig
2cf0: 65 73 74 2e 62 79 74 65 4c 65 6e 67 74 68 29 3b  est.byteLength);
2d00: 0a 09 64 69 67 65 73 74 2e 73 65 74 28 64 69 67  ..digest.set(dig
2d10: 65 73 74 48 65 61 64 65 72 2c 20 30 29 3b 0a 09  estHeader, 0);..
2d20: 64 69 67 65 73 74 2e 73 65 74 28 6e 65 77 20 55  digest.set(new U
2d30: 69 6e 74 38 41 72 72 61 79 28 73 69 67 6e 52 65  int8Array(signRe
2d40: 71 75 65 73 74 2e 64 69 67 65 73 74 29 2c 20 64  quest.digest), d
2d50: 69 67 65 73 74 48 65 61 64 65 72 2e 6c 65 6e 67  igestHeader.leng
2d60: 74 68 29 3b 0a 0a 09 64 65 6c 65 74 65 20 64 69  th);...delete di
2d70: 67 65 73 74 48 65 61 64 65 72 3b 0a 0a 09 69 66  gestHeader;...if
2d80: 20 28 67 6f 6f 67 2e 44 45 42 55 47 29 20 7b 0a   (goog.DEBUG) {.
2d90: 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b  ..console.log("[
2da0: 63 61 63 6b 65 79 5d 20 41 73 6b 65 64 20 74 6f  cackey] Asked to
2db0: 20 73 69 67 6e 20 61 20 6d 65 73 73 61 67 65 20   sign a message 
2dc0: 2d 2d 20 74 68 72 6f 77 69 6e 67 20 74 68 61 74  -- throwing that
2dd0: 20 72 65 71 75 65 73 74 20 6f 76 65 72 20 74 6f   request over to
2de0: 20 74 68 65 20 4e 61 43 6c 20 73 69 64 65 2e 2e   the NaCl side..
2df0: 2e 20 22 29 3b 0a 09 7d 0a 0a 09 63 61 6c 6c 62  . ");..}...callb
2e00: 61 63 6b 49 64 20 3d 20 2b 2b 63 61 63 6b 65 79  ackId = ++cackey
2e10: 4f 75 74 73 74 61 6e 64 69 6e 67 43 61 6c 6c 62  OutstandingCallb
2e20: 61 63 6b 43 6f 75 6e 74 65 72 3b 0a 0a 09 63 6f  ackCounter;...co
2e30: 6d 6d 61 6e 64 20 3d 20 7b 0a 09 09 27 74 61 72  mmand = {...'tar
2e40: 67 65 74 27 3a 20 22 63 61 63 6b 65 79 22 2c 0a  get': "cackey",.
2e50: 09 09 27 63 6f 6d 6d 61 6e 64 27 3a 20 22 73 69  ..'command': "si
2e60: 67 6e 22 2c 0a 09 09 27 69 64 27 3a 20 63 61 6c  gn",...'id': cal
2e70: 6c 62 61 63 6b 49 64 2c 0a 09 09 27 63 65 72 74  lbackId,...'cert
2e80: 69 66 69 63 61 74 65 27 3a 20 73 69 67 6e 52 65  ificate': signRe
2e90: 71 75 65 73 74 2e 63 65 72 74 69 66 69 63 61 74  quest.certificat
2ea0: 65 2c 0a 09 09 27 64 61 74 61 27 3a 20 64 69 67  e,...'data': dig
2eb0: 65 73 74 2e 62 75 66 66 65 72 0a 09 7d 3b 0a 0a  est.buffer..};..
2ec0: 09 63 65 72 74 69 66 69 63 61 74 65 49 64 20 3d  .certificateId =
2ed0: 20 63 61 63 6b 65 79 43 65 72 74 69 66 69 63 61   cackeyCertifica
2ee0: 74 65 54 6f 50 49 4e 49 44 28 63 6f 6d 6d 61 6e  teToPINID(comman
2ef0: 64 2e 63 65 72 74 69 66 69 63 61 74 65 29 3b 0a  d.certificate);.
2f00: 0a 09 69 66 20 28 63 61 63 6b 65 79 43 65 72 74  ..if (cackeyCert
2f10: 69 66 69 63 61 74 65 54 6f 50 49 4e 4d 61 70 5b  ificateToPINMap[
2f20: 63 65 72 74 69 66 69 63 61 74 65 49 64 5d 20 26  certificateId] &
2f30: 26 20 63 61 63 6b 65 79 43 65 72 74 69 66 69 63  & cackeyCertific
2f40: 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 65 72 74  ateToPINMap[cert
2f50: 69 66 69 63 61 74 65 49 64 5d 2e 70 69 6e 29 20  ificateId].pin) 
2f60: 7b 0a 09 09 63 6f 6d 6d 61 6e 64 2e 70 69 6e 20  {...command.pin 
2f70: 3d 20 63 61 63 6b 65 79 43 65 72 74 69 66 69 63  = cackeyCertific
2f80: 61 74 65 54 6f 50 49 4e 4d 61 70 5b 63 65 72 74  ateToPINMap[cert
2f90: 69 66 69 63 61 74 65 49 64 5d 2e 70 69 6e 3b 0a  ificateId].pin;.
2fa0: 0a 09 09 63 61 63 6b 65 79 43 65 72 74 69 66 69  ...cackeyCertifi
2fb0: 63 61 74 65 54 6f 50 49 4e 4d 61 70 55 70 64 61  cateToPINMapUpda
2fc0: 74 65 4c 61 73 74 55 73 65 64 28 63 65 72 74 69  teLastUsed(certi
2fd0: 66 69 63 61 74 65 49 64 29 3b 0a 09 7d 0a 0a 09  ficateId);..}...
2fe0: 63 61 63 6b 65 79 49 6e 69 74 50 43 53 43 28 66  cackeyInitPCSC(f
2ff0: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 63 61  unction() {...ca
3000: 63 6b 65 79 48 61 6e 64 6c 65 2e 70 6f 73 74 4d  ckeyHandle.postM
3010: 65 73 73 61 67 65 28 63 6f 6d 6d 61 6e 64 29 3b  essage(command);
3020: 0a 0a 09 09 63 61 63 6b 65 79 4f 75 74 73 74 61  ....cackeyOutsta
3030: 6e 64 69 6e 67 43 61 6c 6c 62 61 63 6b 73 5b 63  ndingCallbacks[c
3040: 61 6c 6c 62 61 63 6b 49 64 5d 20 3d 20 63 68 72  allbackId] = chr
3050: 6f 6d 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 09 09  omeCallback;....
3060: 69 66 20 28 67 6f 6f 67 2e 44 45 42 55 47 29 20  if (goog.DEBUG) 
3070: 7b 0a 09 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67  {....console.log
3080: 28 22 5b 63 61 63 6b 65 79 5d 20 54 68 72 6f 77  ("[cackey] Throw
3090: 6e 2e 22 29 3b 0a 09 09 7d 0a 09 7d 2c 20 63 68  n.");...}..}, ch
30a0: 72 6f 6d 65 43 61 6c 6c 62 61 63 6b 29 3b 0a 0a  romeCallback);..
30b0: 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20  .return;.}../*. 
30c0: 2a 20 55 6e 69 74 69 74 61 6c 69 7a 65 73 20 74  * Unititalizes t
30d0: 68 65 20 43 41 43 4b 65 79 20 50 43 53 43 20 63  he CACKey PCSC c
30e0: 6f 6e 6e 65 63 74 69 6f 6e 0a 20 2a 2f 0a 66 75  onnection. */.fu
30f0: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 55 6e 69  nction cackeyUni
3100: 6e 69 74 50 43 53 43 28 29 20 7b 0a 09 63 6f 6e  nitPCSC() {..con
3110: 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65  sole.log("[cacke
3120: 79 5d 20 63 61 63 6b 65 79 55 6e 69 6e 69 74 50  y] cackeyUninitP
3130: 43 53 43 28 29 20 63 61 6c 6c 65 64 22 29 3b 0a  CSC() called");.
3140: 0a 09 69 66 20 28 63 61 63 6b 65 79 50 43 53 43  ..if (cackeyPCSC
3150: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 20  Handle != null) 
3160: 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28  {...console.log(
3170: 22 5b 63 61 63 6b 65 79 5d 20 44 65 6c 65 74 69  "[cackey] Deleti
3180: 6e 67 20 50 43 53 43 20 68 61 6e 64 6c 65 22 29  ng PCSC handle")
3190: 3b 0a 0a 09 09 63 61 63 6b 65 79 50 43 53 43 48  ;....cackeyPCSCH
31a0: 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c 3b 0a 09 7d  andle = null;..}
31b0: 0a 0a 09 63 61 63 6b 65 79 50 43 53 43 48 61 6e  ...cackeyPCSCHan
31c0: 64 6c 65 55 73 61 62 6c 65 20 3d 20 66 61 6c 73  dleUsable = fals
31d0: 65 3b 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67  e;...console.log
31e0: 28 22 5b 63 61 63 6b 65 79 5d 20 63 61 63 6b 65  ("[cackey] cacke
31f0: 79 55 6e 69 6e 69 74 50 43 53 43 28 29 20 72 65  yUninitPCSC() re
3200: 74 75 72 6e 69 6e 67 22 29 3b 0a 0a 09 72 65 74  turning");...ret
3210: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 55 6e  urn;.}../*. * Un
3220: 69 6e 69 74 69 61 6c 69 7a 65 73 20 43 41 43 4b  initializes CACK
3230: 65 79 20 28 70 72 6f 62 61 62 6c 79 20 64 75 65  ey (probably due
3240: 20 74 6f 20 61 20 63 72 61 73 68 29 0a 20 2a 2f   to a crash). */
3250: 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79  .function cackey
3260: 55 6e 69 6e 69 74 28 29 20 7b 0a 09 63 6f 6e 73  Uninit() {..cons
3270: 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79  ole.log("[cackey
3280: 5d 20 63 61 63 6b 65 79 55 6e 69 6e 69 74 28 29  ] cackeyUninit()
3290: 20 63 61 6c 6c 65 64 22 29 3b 0a 0a 09 69 66 20   called");...if 
32a0: 28 63 68 72 6f 6d 65 2e 63 65 72 74 69 66 69 63  (chrome.certific
32b0: 61 74 65 50 72 6f 76 69 64 65 72 29 20 7b 0a 09  ateProvider) {..
32c0: 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63  .console.log("[c
32d0: 61 63 6b 65 79 5d 20 55 6e 72 65 67 69 73 74 65  ackey] Unregiste
32e0: 72 65 64 20 43 68 72 6f 6d 65 20 63 65 72 74 69  red Chrome certi
32f0: 66 69 63 61 74 65 20 68 61 6e 64 6c 65 72 73 22  ficate handlers"
3300: 29 3b 0a 0a 09 09 63 68 72 6f 6d 65 2e 63 65 72  );....chrome.cer
3310: 74 69 66 69 63 61 74 65 50 72 6f 76 69 64 65 72  tificateProvider
3320: 2e 6f 6e 43 65 72 74 69 66 69 63 61 74 65 73 52  .onCertificatesR
3330: 65 71 75 65 73 74 65 64 2e 72 65 6d 6f 76 65 4c  equested.removeL
3340: 69 73 74 65 6e 65 72 28 63 61 63 6b 65 79 4c 69  istener(cackeyLi
3350: 73 74 43 65 72 74 69 66 69 63 61 74 65 73 29 3b  stCertificates);
3360: 0a 09 09 63 68 72 6f 6d 65 2e 63 65 72 74 69 66  ...chrome.certif
3370: 69 63 61 74 65 50 72 6f 76 69 64 65 72 2e 6f 6e  icateProvider.on
3380: 53 69 67 6e 44 69 67 65 73 74 52 65 71 75 65 73  SignDigestReques
3390: 74 65 64 2e 72 65 6d 6f 76 65 4c 69 73 74 65 6e  ted.removeListen
33a0: 65 72 28 63 61 63 6b 65 79 53 69 67 6e 4d 65 73  er(cackeySignMes
33b0: 73 61 67 65 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b  sage);..}...cack
33c0: 65 79 55 6e 69 6e 69 74 50 43 53 43 28 29 3b 0a  eyUninitPCSC();.
33d0: 0a 09 69 66 20 28 63 61 63 6b 65 79 48 61 6e 64  ..if (cackeyHand
33e0: 6c 65 20 21 3d 20 6e 75 6c 6c 29 20 7b 0a 09 09  le != null) {...
33f0: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61  console.log("[ca
3400: 63 6b 65 79 5d 20 44 65 6c 65 74 69 6e 67 20 50  ckey] Deleting P
3410: 4e 61 43 6c 20 6d 6f 64 75 6c 65 22 29 3b 0a 0a  NaCl module");..
3420: 09 09 74 72 79 20 7b 0a 09 09 09 64 6f 63 75 6d  ..try {....docum
3430: 65 6e 74 2e 62 6f 64 79 2e 72 65 6d 6f 76 65 43  ent.body.removeC
3440: 68 69 6c 64 28 63 61 63 6b 65 79 48 61 6e 64 6c  hild(cackeyHandl
3450: 65 29 3b 0a 09 09 7d 20 63 61 74 63 68 20 28 65  e);...} catch (e
3460: 29 20 7b 20 7d 0a 0a 09 09 64 65 6c 65 74 65 20  ) { }....delete 
3470: 63 61 63 6b 65 79 48 61 6e 64 6c 65 3b 0a 0a 09  cackeyHandle;...
3480: 09 63 61 63 6b 65 79 48 61 6e 64 6c 65 20 3d 20  .cackeyHandle = 
3490: 6e 75 6c 6c 3b 0a 09 7d 0a 0a 09 63 6f 6e 73 6f  null;..}...conso
34a0: 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d  le.log("[cackey]
34b0: 20 63 61 63 6b 65 79 55 6e 69 6e 69 74 28 29 20   cackeyUninit() 
34c0: 63 6f 6d 70 6c 65 74 65 22 29 3b 0a 0a 09 72 65  complete");...re
34d0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52  turn;.}../*. * R
34e0: 65 73 74 61 72 74 73 20 43 41 43 4b 65 79 0a 20  estarts CACKey. 
34f0: 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63 6b  */.function cack
3500: 65 79 52 65 73 74 61 72 74 28 29 20 7b 0a 09 63  eyRestart() {..c
3510: 61 63 6b 65 79 55 6e 69 6e 69 74 28 29 3b 0a 09  ackeyUninit();..
3520: 63 61 63 6b 65 79 49 6e 69 74 28 29 3b 0a 0a 09  cackeyInit();...
3530: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 66 75 6e 63 74  return;.}..funct
3540: 69 6f 6e 20 63 61 63 6b 65 79 49 6e 69 74 47 6c  ion cackeyInitGl
3550: 6f 62 61 6c 53 74 61 74 65 28 29 20 7b 0a 09 63  obalState() {..c
3560: 61 63 6b 65 79 4f 75 74 73 74 61 6e 64 69 6e 67  ackeyOutstanding
3570: 43 61 6c 6c 62 61 63 6b 73 20 3d 20 7b 7d 3b 0a  Callbacks = {};.
3580: 7d 3b 0a 0a 2f 2a 0a 20 2a 20 48 61 6e 64 6c 65  };../*. * Handle
3590: 20 61 20 43 41 43 4b 65 79 20 63 72 61 73 68 20   a CACKey crash 
35a0: 28 70 72 6f 62 61 62 6c 79 20 64 75 65 20 74 6f  (probably due to
35b0: 20 6c 6f 73 73 20 6f 66 20 63 6f 6e 6e 65 63 74   loss of connect
35c0: 69 76 69 74 79 20 74 6f 20 74 68 65 20 50 43 53  ivity to the PCS
35d0: 43 20 64 61 65 6d 6f 6e 29 0a 20 2a 2f 0a 66 75  C daemon). */.fu
35e0: 6e 63 74 69 6f 6e 20 63 61 63 6b 65 79 43 72 61  nction cackeyCra
35f0: 73 68 28 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20 44  sh() {../*.. * D
3600: 65 2d 69 6e 69 74 69 61 6c 69 7a 65 20 43 41 43  e-initialize CAC
3610: 4b 65 79 0a 09 20 2a 2f 0a 09 63 61 63 6b 65 79  Key.. */..cackey
3620: 55 6e 69 6e 69 74 28 29 3b 0a 0a 09 2f 2a 0a 09  Uninit();.../*..
3630: 20 2a 20 52 65 69 6e 69 74 69 61 6c 69 7a 65 20   * Reinitialize 
3640: 67 6c 6f 62 61 6c 20 73 74 61 74 65 0a 09 20 2a  global state.. *
3650: 2f 0a 09 63 61 63 6b 65 79 49 6e 69 74 47 6c 6f  /..cackeyInitGlo
3660: 62 61 6c 53 74 61 74 65 28 29 3b 0a 0a 09 2f 2a  balState();.../*
3670: 0a 09 20 2a 20 53 63 68 65 64 75 6c 65 20 74 68  .. * Schedule th
3680: 65 20 72 65 73 74 61 72 74 20 74 6f 20 6f 63 63  e restart to occ
3690: 75 72 20 69 6e 20 33 30 20 73 65 63 6f 6e 64 73  ur in 30 seconds
36a0: 20 69 6e 20 63 61 73 65 20 77 65 20 72 65 61 6c   in case we real
36b0: 6c 79 20 61 72 65 0a 09 20 2a 20 6e 6f 74 20 77  ly are.. * not w
36c0: 6f 72 6b 69 6e 67 2e 0a 09 20 2a 2f 0a 09 73 65  orking... */..se
36d0: 74 54 69 6d 65 6f 75 74 28 63 61 63 6b 65 79 49  tTimeout(cackeyI
36e0: 6e 69 74 2c 20 33 30 30 30 30 29 3b 0a 0a 09 72  nit, 30000);...r
36f0: 65 74 75 72 6e 3b 0a 7d 0a 0a 66 75 6e 63 74 69  eturn;.}..functi
3700: 6f 6e 20 63 61 63 6b 65 79 49 6e 69 74 50 43 53  on cackeyInitPCS
3710: 43 43 6f 6d 70 6c 65 74 65 64 28 73 74 61 74 65  CCompleted(state
3720: 29 20 7b 0a 09 76 61 72 20 69 64 78 3b 0a 0a 09  ) {..var idx;...
3730: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61  console.log("[ca
3740: 63 6b 65 79 5d 20 43 6f 6e 6e 65 63 74 69 6f 6e  ckey] Connection
3750: 20 63 6f 6d 70 6c 65 74 65 64 20 28 73 74 61 74   completed (stat
3760: 65 20 3d 20 5c 22 22 20 2b 20 73 74 61 74 65 20  e = \"" + state 
3770: 2b 20 22 5c 22 29 2c 20 73 65 6e 64 69 6e 67 20  + "\"), sending 
3780: 71 75 65 75 65 64 20 65 76 65 6e 74 73 3a 20 22  queued events: "
3790: 20 2b 20 63 61 63 6b 65 79 43 61 6c 6c 62 61 63   + cackeyCallbac
37a0: 6b 41 66 74 65 72 49 6e 69 74 2e 6c 65 6e 67 74  kAfterInit.lengt
37b0: 68 29 3b 0a 0a 09 73 77 69 74 63 68 20 28 73 74  h);...switch (st
37c0: 61 74 65 29 20 7b 0a 09 09 63 61 73 65 20 22 73  ate) {...case "s
37d0: 75 63 63 65 73 73 22 3a 0a 09 09 09 63 61 63 6b  uccess":....cack
37e0: 65 79 50 43 53 43 48 61 6e 64 6c 65 55 73 61 62  eyPCSCHandleUsab
37f0: 6c 65 20 3d 20 74 72 75 65 3b 0a 0a 09 09 09 62  le = true;.....b
3800: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 22 66 61  reak;...case "fa
3810: 69 6c 75 72 65 22 3a 0a 09 09 09 63 61 63 6b 65  ilure":....cacke
3820: 79 50 43 53 43 48 61 6e 64 6c 65 55 73 61 62 6c  yPCSCHandleUsabl
3830: 65 20 3d 20 66 61 6c 73 65 3b 0a 0a 09 09 09 62  e = false;.....b
3840: 72 65 61 6b 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28  reak;..}...for (
3850: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 63  idx = 0; idx < c
3860: 61 63 6b 65 79 43 61 6c 6c 62 61 63 6b 41 66 74  ackeyCallbackAft
3870: 65 72 49 6e 69 74 2e 6c 65 6e 67 74 68 3b 20 69  erInit.length; i
3880: 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 21 63  dx++) {...if (!c
3890: 61 63 6b 65 79 43 61 6c 6c 62 61 63 6b 41 66 74  ackeyCallbackAft
38a0: 65 72 49 6e 69 74 5b 69 64 78 5d 29 20 7b 0a 09  erInit[idx]) {..
38b0: 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a  ..continue;...}.
38c0: 0a 09 09 73 77 69 74 63 68 20 28 73 74 61 74 65  ...switch (state
38d0: 29 20 7b 0a 09 09 09 63 61 73 65 20 22 73 75 63  ) {....case "suc
38e0: 63 65 73 73 22 3a 0a 09 09 09 09 28 63 61 63 6b  cess":.....(cack
38f0: 65 79 43 61 6c 6c 62 61 63 6b 41 66 74 65 72 49  eyCallbackAfterI
3900: 6e 69 74 5b 69 64 78 5d 2e 73 75 63 63 65 73 73  nit[idx].success
3910: 43 61 6c 6c 62 61 63 6b 29 28 29 3b 0a 0a 09 09  Callback)();....
3920: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
3930: 20 22 66 61 69 6c 75 72 65 22 3a 0a 09 09 09 09   "failure":.....
3940: 28 63 61 63 6b 65 79 43 61 6c 6c 62 61 63 6b 41  (cackeyCallbackA
3950: 66 74 65 72 49 6e 69 74 5b 69 64 78 5d 2e 66 61  fterInit[idx].fa
3960: 69 6c 75 72 65 43 61 6c 6c 62 61 63 6b 29 28 29  ilureCallback)()
3970: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ;......break;...
3980: 7d 0a 09 7d 0a 0a 09 64 65 6c 65 74 65 20 63 61  }..}...delete ca
3990: 63 6b 65 79 43 61 6c 6c 62 61 63 6b 41 66 74 65  ckeyCallbackAfte
39a0: 72 49 6e 69 74 3b 0a 0a 09 63 61 63 6b 65 79 43  rInit;...cackeyC
39b0: 61 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74  allbackAfterInit
39c0: 20 3d 20 5b 5d 3b 0a 0a 09 63 6f 6e 73 6f 6c 65   = [];...console
39d0: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 41  .log("[cackey] A
39e0: 6c 6c 20 71 75 65 75 65 64 20 65 76 65 6e 74 73  ll queued events
39f0: 20 70 72 6f 63 65 73 73 65 64 22 29 3b 0a 0a 09   processed");...
3a00: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a  return;.}../*. *
3a10: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
3a20: 50 43 53 43 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  PCSC connection.
3a30: 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61 63   */.function cac
3a40: 6b 65 79 49 6e 69 74 50 43 53 43 28 63 61 6c 6c  keyInitPCSC(call
3a50: 62 61 63 6b 41 66 74 65 72 49 6e 69 74 2c 20 63  backAfterInit, c
3a60: 61 6c 6c 62 61 63 6b 49 6e 69 74 46 61 69 6c 65  allbackInitFaile
3a70: 64 29 20 7b 0a 09 2f 2a 0a 09 20 2a 20 53 74 61  d) {../*.. * Sta
3a80: 72 74 20 74 68 65 20 47 6f 6f 67 6c 65 20 50 43  rt the Google PC
3a90: 53 43 20 49 6e 74 65 72 66 61 63 65 0a 09 20 2a  SC Interface.. *
3aa0: 2f 0a 09 76 61 72 20 6e 6f 77 2c 20 6c 61 73 74  /..var now, last
3ab0: 55 73 65 64 4d 69 6c 6c 69 73 65 63 6f 6e 64 73  UsedMilliseconds
3ac0: 41 67 6f 3b 0a 0a 09 63 6f 6e 73 6f 6c 65 2e 6c  Ago;...console.l
3ad0: 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63 61 63  og("[cackey] cac
3ae0: 6b 65 79 49 6e 69 74 50 43 53 43 28 29 20 63 61  keyInitPCSC() ca
3af0: 6c 6c 65 64 22 29 3b 0a 0a 09 6e 6f 77 20 3d 20  lled");...now = 
3b00: 28 6e 65 77 20 44 61 74 65 28 29 29 2e 67 65 74  (new Date()).get
3b10: 54 69 6d 65 28 29 3b 0a 09 6c 61 73 74 55 73 65  Time();..lastUse
3b20: 64 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 41 67 6f  dMillisecondsAgo
3b30: 20 3d 20 6e 6f 77 20 2d 20 63 61 63 6b 65 79 50   = now - cackeyP
3b40: 43 53 43 48 61 6e 64 6c 65 4c 61 73 74 55 73 65  CSCHandleLastUse
3b50: 64 3b 0a 0a 09 69 66 20 28 6c 61 73 74 55 73 65  d;...if (lastUse
3b60: 64 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 41 67 6f  dMillisecondsAgo
3b70: 20 3e 20 33 30 30 30 30 29 20 7b 0a 09 09 63 6f   > 30000) {...co
3b80: 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b  nsole.log("[cack
3b90: 65 79 5d 20 50 43 53 43 20 68 61 6e 64 6c 65 20  ey] PCSC handle 
3ba0: 77 61 73 20 6c 61 73 74 20 75 73 65 64 20 22 20  was last used " 
3bb0: 2b 20 6c 61 73 74 55 73 65 64 4d 69 6c 6c 69 73  + lastUsedMillis
3bc0: 65 63 6f 6e 64 73 41 67 6f 20 2b 20 22 6d 73 20  econdsAgo + "ms 
3bd0: 61 67 6f 2c 20 72 65 73 74 61 72 74 69 6e 67 20  ago, restarting 
3be0: 74 6f 20 67 65 74 20 61 20 6e 65 77 20 68 61 6e  to get a new han
3bf0: 64 6c 65 22 29 3b 0a 09 09 63 61 63 6b 65 79 52  dle");...cackeyR
3c00: 65 73 74 61 72 74 28 29 3b 0a 09 7d 0a 0a 09 63  estart();..}...c
3c10: 61 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65 4c  ackeyPCSCHandleL
3c20: 61 73 74 55 73 65 64 20 3d 20 6e 6f 77 3b 0a 0a  astUsed = now;..
3c30: 09 2f 2a 0a 09 20 2a 20 51 75 65 75 65 20 74 68  ./*.. * Queue th
3c40: 69 73 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62  is callback to b
3c50: 65 20 63 6f 6d 70 6c 65 74 65 64 20 77 68 65 6e  e completed when
3c60: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
3c70: 69 73 20 63 6f 6d 70 6c 65 74 65 0a 09 20 2a 2f  is complete.. */
3c80: 0a 09 69 66 20 28 63 61 6c 6c 62 61 63 6b 41 66  ..if (callbackAf
3c90: 74 65 72 49 6e 69 74 29 20 7b 0a 09 09 63 61 63  terInit) {...cac
3ca0: 6b 65 79 43 61 6c 6c 62 61 63 6b 41 66 74 65 72  keyCallbackAfter
3cb0: 49 6e 69 74 2e 70 75 73 68 28 7b 22 73 75 63 63  Init.push({"succ
3cc0: 65 73 73 43 61 6c 6c 62 61 63 6b 22 3a 20 63 61  essCallback": ca
3cd0: 6c 6c 62 61 63 6b 41 66 74 65 72 49 6e 69 74 2c  llbackAfterInit,
3ce0: 20 22 66 61 69 6c 75 72 65 43 61 6c 6c 62 61 63   "failureCallbac
3cf0: 6b 22 3a 20 63 61 6c 6c 62 61 63 6b 49 6e 69 74  k": callbackInit
3d00: 46 61 69 6c 65 64 7d 29 3b 0a 09 7d 0a 0a 09 2f  Failed});..}.../
3d10: 2a 0a 09 20 2a 20 4e 6f 20 61 64 64 69 74 69 6f  *.. * No additio
3d20: 6e 61 6c 20 77 6f 72 6b 20 69 73 20 72 65 71 75  nal work is requ
3d30: 69 72 65 64 0a 09 20 2a 2f 0a 0a 09 69 66 20 28  ired.. */...if (
3d40: 63 61 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65  cackeyPCSCHandle
3d50: 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f  ) {...console.lo
3d60: 67 28 22 5b 63 61 63 6b 65 79 5d 20 50 43 53 43  g("[cackey] PCSC
3d70: 20 68 61 6e 64 6c 65 20 69 73 20 61 6c 72 65 61   handle is alrea
3d80: 64 79 20 76 61 6c 69 64 2c 20 6e 6f 74 68 69 6e  dy valid, nothin
3d90: 67 20 74 6f 20 64 6f 2e 22 29 3b 0a 0a 09 09 69  g to do.");....i
3da0: 66 20 28 63 61 63 6b 65 79 50 43 53 43 48 61 6e  f (cackeyPCSCHan
3db0: 64 6c 65 55 73 61 62 6c 65 29 20 7b 0a 09 09 09  dleUsable) {....
3dc0: 63 61 63 6b 65 79 49 6e 69 74 50 43 53 43 43 6f  cackeyInitPCSCCo
3dd0: 6d 70 6c 65 74 65 64 28 22 73 75 63 63 65 73 73  mpleted("success
3de0: 22 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 75 72  ");...}....retur
3df0: 6e 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20 53  n;..}.../*.. * S
3e00: 61 6e 65 6c 79 20 69 6e 69 74 69 61 6c 69 7a 65  anely initialize
3e10: 20 74 68 69 73 0a 09 20 2a 2f 0a 09 63 61 63 6b   this.. */..cack
3e20: 65 79 50 43 53 43 48 61 6e 64 6c 65 55 73 61 62  eyPCSCHandleUsab
3e30: 6c 65 20 3d 20 66 61 6c 73 65 3b 0a 0a 09 2f 2a  le = false;.../*
3e40: 0a 09 20 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  .. * Initialize 
3e50: 74 68 65 20 43 41 43 4b 65 79 20 50 4e 61 43 6c  the CACKey PNaCl
3e60: 20 6d 6f 64 75 6c 65 20 69 66 20 6e 65 65 64 65   module if neede
3e70: 64 0a 09 20 2a 2f 0a 09 69 66 20 28 63 61 63 6b  d.. */..if (cack
3e80: 65 79 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c  eyHandle == null
3e90: 29 20 7b 0a 09 09 63 61 63 6b 65 79 49 6e 69 74  ) {...cackeyInit
3ea0: 28 29 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a 20  ();..}.../*.. * 
3eb0: 49 6e 69 74 69 61 6c 69 7a 65 20 43 41 43 4b 65  Initialize CACKe
3ec0: 79 20 77 69 74 68 20 74 68 65 20 63 6f 72 72 65  y with the corre
3ed0: 63 74 20 68 61 6e 64 6c 65 20 74 6f 20 74 61 6c  ct handle to tal
3ee0: 6b 20 74 6f 20 74 68 65 20 47 6f 6f 67 6c 65 20  k to the Google 
3ef0: 53 6d 61 72 74 63 61 72 64 20 4d 61 6e 61 67 65  Smartcard Manage
3f00: 72 20 41 70 70 0a 09 20 2a 2f 0a 09 63 61 63 6b  r App.. */..cack
3f10: 65 79 48 61 6e 64 6c 65 2e 70 6f 73 74 4d 65 73  eyHandle.postMes
3f20: 73 61 67 65 28 0a 09 09 7b 0a 09 09 09 22 74 61  sage(...{...."ta
3f30: 72 67 65 74 22 3a 20 22 63 61 63 6b 65 79 22 2c  rget": "cackey",
3f40: 0a 09 09 09 22 63 6f 6d 6d 61 6e 64 22 3a 20 22  ...."command": "
3f50: 69 6e 69 74 22 0a 09 09 7d 0a 09 29 3b 0a 0a 09  init"...}..);...
3f60: 2f 2a 0a 09 20 2a 20 49 6e 69 74 69 61 6c 69 7a  /*.. * Initializ
3f70: 65 20 74 68 65 20 50 43 53 43 20 4e 61 43 6c 20  e the PCSC NaCl 
3f80: 69 6e 74 65 72 66 61 63 65 0a 09 20 2a 2f 0a 09  interface.. */..
3f90: 63 61 63 6b 65 79 50 43 53 43 48 61 6e 64 6c 65  cackeyPCSCHandle
3fa0: 20 3d 20 6e 65 77 20 47 6f 6f 67 6c 65 53 6d 61   = new GoogleSma
3fb0: 72 74 43 61 72 64 2e 50 63 73 63 4c 69 74 65 43  rtCard.PcscLiteC
3fc0: 6c 69 65 6e 74 2e 4e 61 63 6c 43 6c 69 65 6e 74  lient.NaclClient
3fd0: 42 61 63 6b 65 6e 64 28 0a 09 09 6e 75 6c 6c 2c  Backend(...null,
3fe0: 0a 09 09 22 43 41 43 4b 65 79 22 2c 0a 09 09 22  ..."CACKey",..."
3ff0: 6b 68 70 66 65 61 61 6e 6a 6e 67 6d 63 6e 70 6c  khpfeaanjngmcnpl
4000: 62 64 6c 70 65 67 69 69 66 67 70 66 67 64 63 6f  bdlpegiifgpfgdco
4010: 22 2c 0a 09 09 63 61 63 6b 65 79 48 61 6e 64 6c  ",...cackeyHandl
4020: 65 0a 09 29 3b 20 0a 0a 09 63 6f 6e 73 6f 6c 65  e..); ...console
4030: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63  .log("[cackey] c
4040: 61 63 6b 65 79 49 6e 69 74 50 43 53 43 28 29 20  ackeyInitPCSC() 
4050: 63 6f 6d 70 6c 65 74 65 22 29 3b 0a 0a 09 72 65  complete");...re
4060: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 46  turn;.}../*. * F
4070: 69 6e 69 73 68 20 70 65 72 66 6f 72 6d 69 6e 67  inish performing
4080: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
4090: 74 68 61 74 20 6d 75 73 74 20 77 61 69 74 20 75  that must wait u
40a0: 6e 74 69 6c 20 77 65 20 68 61 76 65 20 6c 6f 61  ntil we have loa
40b0: 64 65 64 20 74 68 65 20 43 41 43 4b 65 79 20 6d  ded the CACKey m
40c0: 6f 64 75 6c 65 0a 20 2a 2f 0a 66 75 6e 63 74 69  odule. */.functi
40d0: 6f 6e 20 63 61 63 6b 65 79 49 6e 69 74 4c 6f 61  on cackeyInitLoa
40e0: 64 65 64 28 6d 65 73 73 61 67 65 45 76 65 6e 74  ded(messageEvent
40f0: 29 20 7b 0a 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67  ) {..console.log
4100: 28 22 5b 63 61 63 6b 65 79 5d 20 4c 6f 61 64 65  ("[cackey] Loade
4110: 64 20 43 41 43 4b 65 79 20 50 4e 61 43 6c 20 4d  d CACKey PNaCl M
4120: 6f 64 75 6c 65 22 29 3b 0a 0a 09 2f 2a 20 52 65  odule");.../* Re
4130: 67 69 73 74 65 72 20 6c 69 73 74 65 6e 65 72 73  gister listeners
4140: 20 77 69 74 68 20 43 68 72 6f 6d 65 20 2a 2f 0a   with Chrome */.
4150: 09 69 66 20 28 63 68 72 6f 6d 65 2e 63 65 72 74  .if (chrome.cert
4160: 69 66 69 63 61 74 65 50 72 6f 76 69 64 65 72 29  ificateProvider)
4170: 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67   {...console.log
4180: 28 22 5b 63 61 63 6b 65 79 5d 20 52 65 67 69 73  ("[cackey] Regis
4190: 74 65 72 65 64 20 43 65 72 74 69 66 69 63 61 74  tered Certificat
41a0: 65 20 68 61 6e 64 6c 65 72 73 20 77 69 74 68 20  e handlers with 
41b0: 43 68 72 6f 6d 65 22 29 3b 0a 0a 09 09 63 68 72  Chrome");....chr
41c0: 6f 6d 65 2e 63 65 72 74 69 66 69 63 61 74 65 50  ome.certificateP
41d0: 72 6f 76 69 64 65 72 2e 6f 6e 43 65 72 74 69 66  rovider.onCertif
41e0: 69 63 61 74 65 73 52 65 71 75 65 73 74 65 64 2e  icatesRequested.
41f0: 61 64 64 4c 69 73 74 65 6e 65 72 28 63 61 63 6b  addListener(cack
4200: 65 79 4c 69 73 74 43 65 72 74 69 66 69 63 61 74  eyListCertificat
4210: 65 73 29 3b 0a 09 09 63 68 72 6f 6d 65 2e 63 65  es);...chrome.ce
4220: 72 74 69 66 69 63 61 74 65 50 72 6f 76 69 64 65  rtificateProvide
4230: 72 2e 6f 6e 53 69 67 6e 44 69 67 65 73 74 52 65  r.onSignDigestRe
4240: 71 75 65 73 74 65 64 2e 61 64 64 4c 69 73 74 65  quested.addListe
4250: 6e 65 72 28 63 61 63 6b 65 79 53 69 67 6e 4d 65  ner(cackeySignMe
4260: 73 73 61 67 65 29 3b 0a 09 7d 0a 0a 09 72 65 74  ssage);..}...ret
4270: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 49 6e  urn;.}../*. * In
4280: 69 74 69 61 6c 69 7a 65 20 43 41 43 4b 65 79 20  itialize CACKey 
4290: 61 6e 64 20 74 68 65 20 50 43 53 43 20 6c 69 62  and the PCSC lib
42a0: 72 61 72 79 20 66 72 6f 6d 20 47 6f 6f 67 6c 65  rary from Google
42b0: 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 63 61  . */.function ca
42c0: 63 6b 65 79 49 6e 69 74 28 29 20 7b 0a 09 76 61  ckeyInit() {..va
42d0: 72 20 65 6c 65 6d 65 6e 74 45 6d 62 65 64 3b 0a  r elementEmbed;.
42e0: 09 76 61 72 20 66 6f 72 63 65 4c 6f 61 64 45 6c  .var forceLoadEl
42f0: 65 6d 65 6e 74 3b 0a 0a 09 2f 2a 20 4c 6f 67 20  ement;.../* Log 
4300: 74 68 61 74 20 77 65 20 61 72 65 20 6f 70 65 72  that we are oper
4310: 61 74 69 6f 6e 61 6c 20 2a 2f 0a 09 63 6f 6e 73  ational */..cons
4320: 6f 6c 65 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79  ole.log("[cackey
4330: 5d 20 63 61 63 6b 65 79 49 6e 69 74 28 29 3a 20  ] cackeyInit(): 
4340: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 2f 2a 0a  Called.");.../*.
4350: 09 20 2a 20 44 6f 20 6e 6f 74 20 69 6e 69 74 69  . * Do not initi
4360: 61 6c 69 7a 65 20 6d 75 6c 74 69 70 6c 65 20 74  alize multiple t
4370: 69 6d 65 73 0a 09 20 2a 2f 0a 09 69 66 20 28 63  imes.. */..if (c
4380: 61 63 6b 65 79 48 61 6e 64 6c 65 20 21 3d 20 6e  ackeyHandle != n
4390: 75 6c 6c 29 20 7b 0a 09 09 63 6f 6e 73 6f 6c 65  ull) {...console
43a0: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63  .log("[cackey] c
43b0: 61 63 6b 65 79 49 6e 69 74 28 29 3a 20 41 6c 72  ackeyInit(): Alr
43c0: 65 61 64 79 20 69 6e 69 74 69 61 6c 69 7a 65 64  eady initialized
43d0: 2e 20 20 52 65 74 75 72 6e 69 6e 67 2e 22 29 3b  .  Returning.");
43e0: 0a 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a  ....return;..}..
43f0: 09 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20  ./* Verify that 
4400: 77 65 20 63 61 6e 20 72 65 67 69 73 74 65 72 20  we can register 
4410: 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 09 69 66  callbacks */..if
4420: 20 28 21 63 68 72 6f 6d 65 2e 63 65 72 74 69 66   (!chrome.certif
4430: 69 63 61 74 65 50 72 6f 76 69 64 65 72 29 20 7b  icateProvider) {
4440: 0a 09 09 69 66 20 28 21 67 6f 6f 67 2e 44 45 42  ...if (!goog.DEB
4450: 55 47 29 20 7b 0a 09 09 09 63 6f 6e 73 6f 6c 65  UG) {....console
4460: 2e 69 6e 66 6f 28 22 5b 63 61 63 6b 65 79 5d 20  .info("[cackey] 
4470: 54 68 69 73 20 65 78 74 65 6e 73 69 6f 6e 27 73  This extension's
4480: 20 70 72 69 6d 61 72 79 20 66 75 6e 63 74 69 6f   primary functio
4490: 6e 61 6c 69 74 79 20 6f 6e 6c 79 20 77 6f 72 6b  nality only work
44a0: 73 20 6f 6e 20 43 68 72 6f 6d 65 4f 53 21 20 20  s on ChromeOS!  
44b0: 59 6f 75 20 77 6f 6e 27 74 20 62 65 20 61 62 6c  You won't be abl
44c0: 65 20 74 6f 20 64 6f 20 6d 75 63 68 20 77 69 74  e to do much wit
44d0: 68 20 69 74 2e 22 29 3b 0a 09 09 7d 0a 09 7d 0a  h it.");...}..}.
44e0: 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 20 3d  ..elementEmbed =
44f0: 20 64 6f 63 75 6d 65 6e 74 2e 63 72 65 61 74 65   document.create
4500: 45 6c 65 6d 65 6e 74 28 27 65 6d 62 65 64 27 29  Element('embed')
4510: 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 2e  ;..elementEmbed.
4520: 74 79 70 65 20 3d 20 22 61 70 70 6c 69 63 61 74  type = "applicat
4530: 69 6f 6e 2f 78 2d 70 6e 61 63 6c 22 3b 0a 09 65  ion/x-pnacl";..e
4540: 6c 65 6d 65 6e 74 45 6d 62 65 64 2e 77 69 64 74  lementEmbed.widt
4550: 68 20 3d 20 30 3b 0a 09 65 6c 65 6d 65 6e 74 45  h = 0;..elementE
4560: 6d 62 65 64 2e 68 65 69 67 68 74 20 3d 20 30 3b  mbed.height = 0;
4570: 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64 2e 73  ..elementEmbed.s
4580: 72 63 20 3d 20 22 63 61 63 6b 65 79 2e 6e 6d 66  rc = "cackey.nmf
4590: 22 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d 62 65 64  ";..elementEmbed
45a0: 2e 69 64 20 3d 20 22 63 61 63 6b 65 79 4d 6f 64  .id = "cackeyMod
45b0: 75 6c 65 22 3b 0a 09 65 6c 65 6d 65 6e 74 45 6d  ule";..elementEm
45c0: 62 65 64 2e 61 64 64 45 76 65 6e 74 4c 69 73 74  bed.addEventList
45d0: 65 6e 65 72 28 27 65 72 72 6f 72 27 2c 20 66 75  ener('error', fu
45e0: 6e 63 74 69 6f 6e 28 6d 65 73 73 61 67 65 45 76  nction(messageEv
45f0: 65 6e 74 29 20 7b 20 63 6f 6e 73 6f 6c 65 2e 65  ent) { console.e
4600: 72 72 6f 72 28 22 45 72 72 6f 72 20 6c 6f 61 64  rror("Error load
4610: 69 6e 67 20 43 41 43 4b 65 79 20 50 4e 61 43 6c  ing CACKey PNaCl
4620: 20 4d 6f 64 75 6c 65 3a 20 22 20 2b 20 6d 65 73   Module: " + mes
4630: 73 61 67 65 45 76 65 6e 74 2e 64 61 74 61 29 3b  sageEvent.data);
4640: 20 7d 2c 20 74 72 75 65 29 3b 0a 09 65 6c 65 6d   }, true);..elem
4650: 65 6e 74 45 6d 62 65 64 2e 61 64 64 45 76 65 6e  entEmbed.addEven
4660: 74 4c 69 73 74 65 6e 65 72 28 27 6c 6f 61 64 27  tListener('load'
4670: 2c 20 63 61 63 6b 65 79 49 6e 69 74 4c 6f 61 64  , cackeyInitLoad
4680: 65 64 2c 20 74 72 75 65 29 3b 0a 09 65 6c 65 6d  ed, true);..elem
4690: 65 6e 74 45 6d 62 65 64 2e 61 64 64 45 76 65 6e  entEmbed.addEven
46a0: 74 4c 69 73 74 65 6e 65 72 28 27 63 72 61 73 68  tListener('crash
46b0: 27 2c 20 63 61 63 6b 65 79 43 72 61 73 68 2c 20  ', cackeyCrash, 
46c0: 74 72 75 65 29 3b 0a 09 65 6c 65 6d 65 6e 74 45  true);..elementE
46d0: 6d 62 65 64 2e 61 64 64 45 76 65 6e 74 4c 69 73  mbed.addEventLis
46e0: 74 65 6e 65 72 28 27 6d 65 73 73 61 67 65 27 2c  tener('message',
46f0: 20 63 61 63 6b 65 79 4d 65 73 73 61 67 65 49 6e   cackeyMessageIn
4700: 63 6f 6d 69 6e 67 2c 20 74 72 75 65 29 3b 0a 0a  coming, true);..
4710: 09 63 61 63 6b 65 79 48 61 6e 64 6c 65 20 3d 20  .cackeyHandle = 
4720: 65 6c 65 6d 65 6e 74 45 6d 62 65 64 3b 0a 0a 09  elementEmbed;...
4730: 64 6f 63 75 6d 65 6e 74 2e 62 6f 64 79 2e 61 70  document.body.ap
4740: 70 65 6e 64 43 68 69 6c 64 28 63 61 63 6b 65 79  pendChild(cackey
4750: 48 61 6e 64 6c 65 29 0a 0a 09 2f 2a 0a 09 20 2a  Handle).../*.. *
4760: 20 46 6f 72 63 65 20 74 68 65 20 62 72 6f 77 73   Force the brows
4770: 65 72 20 74 6f 20 6c 6f 61 64 20 74 68 65 20 65  er to load the e
4780: 6c 65 6d 65 6e 74 0a 09 20 2a 20 62 79 20 72 65  lement.. * by re
4790: 71 75 65 73 74 69 6e 67 20 69 74 73 20 70 6f 73  questing its pos
47a0: 69 74 69 6f 6e 0a 09 20 2a 2f 0a 09 66 6f 72 63  ition.. */..forc
47b0: 65 4c 6f 61 64 45 6c 65 6d 65 6e 74 20 3d 20 63  eLoadElement = c
47c0: 61 63 6b 65 79 48 61 6e 64 6c 65 2e 6f 66 66 73  ackeyHandle.offs
47d0: 65 74 54 6f 70 3b 0a 0a 09 63 6f 6e 73 6f 6c 65  etTop;...console
47e0: 2e 6c 6f 67 28 22 5b 63 61 63 6b 65 79 5d 20 63  .log("[cackey] c
47f0: 61 63 6b 65 79 49 6e 69 74 28 29 3a 20 43 6f 6d  ackeyInit(): Com
4800: 70 6c 65 74 65 64 2e 20 20 52 65 74 75 72 6e 69  pleted.  Returni
4810: 6e 67 2e 22 29 3b 0a 0a 09 72 65 74 75 72 6e 3b  ng.");...return;
4820: 0a 7d 0a 0a 2f 2a 0a 20 2a 20 49 6e 69 74 69 61  .}../*. * Initia
4830: 6c 69 7a 65 20 74 68 65 20 43 41 43 4b 65 79 20  lize the CACKey 
4840: 43 68 72 6f 6d 65 20 41 70 70 6c 69 63 61 74 69  Chrome Applicati
4850: 6f 6e 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20  on. */.function 
4860: 63 61 63 6b 65 79 41 70 70 49 6e 69 74 28 29 20  cackeyAppInit() 
4870: 7b 0a 09 76 61 72 20 6f 6c 64 4f 6e 50 6f 72 74  {..var oldOnPort
4880: 44 69 73 63 6f 6e 6e 65 63 74 65 64 46 75 6e 63  DisconnectedFunc
4890: 74 69 6f 6e 3b 0a 09 76 61 72 20 6f 6c 64 50 43  tion;..var oldPC
48a0: 53 43 49 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  SCInitialization
48b0: 43 61 6c 6c 62 61 63 6b 3b 0a 0a 09 2f 2a 0a 09  Callback;.../*..
48c0: 20 2a 20 43 72 65 61 74 65 20 61 20 68 61 6e 64   * Create a hand
48d0: 6c 65 72 20 66 6f 72 20 73 74 61 72 74 69 6e 67  ler for starting
48e0: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
48f0: 20 55 49 0a 09 20 2a 2f 0a 09 63 68 72 6f 6d 65   UI.. */..chrome
4900: 2e 61 70 70 2e 72 75 6e 74 69 6d 65 2e 6f 6e 4c  .app.runtime.onL
4910: 61 75 6e 63 68 65 64 2e 61 64 64 4c 69 73 74 65  aunched.addListe
4920: 6e 65 72 28 66 75 6e 63 74 69 6f 6e 28 29 20 7b  ner(function() {
4930: 0a 09 09 63 68 72 6f 6d 65 2e 61 70 70 2e 77 69  ...chrome.app.wi
4940: 6e 64 6f 77 2e 63 72 65 61 74 65 28 27 75 69 2e  ndow.create('ui.
4950: 68 74 6d 6c 27 2c 20 7b 0a 09 09 09 22 69 64 22  html', {...."id"
4960: 3a 20 22 63 61 63 6b 65 79 55 49 22 2c 0a 09 09  : "cackeyUI",...
4970: 09 22 66 6f 63 75 73 65 64 22 3a 20 74 72 75 65  ."focused": true
4980: 2c 0a 09 09 09 22 69 6e 6e 65 72 42 6f 75 6e 64  ,...."innerBound
4990: 73 22 3a 20 7b 0a 09 09 09 09 22 77 69 64 74 68  s": {....."width
49a0: 22 3a 20 33 35 30 2c 0a 09 09 09 09 22 6d 69 6e  ": 350,....."min
49b0: 57 69 64 74 68 22 3a 20 33 35 30 2c 0a 09 09 09  Width": 350,....
49c0: 09 22 68 65 69 67 68 74 22 3a 20 31 33 36 2c 0a  ."height": 136,.
49d0: 09 09 09 09 22 6d 69 6e 48 65 69 67 68 74 22 3a  ...."minHeight":
49e0: 20 31 33 35 0a 09 09 09 7d 0a 09 09 7d 2c 20 66   135....}...}, f
49f0: 75 6e 63 74 69 6f 6e 28 75 69 57 69 6e 64 6f 77  unction(uiWindow
4a00: 29 20 7b 0a 09 09 09 69 66 20 28 21 75 69 57 69  ) {....if (!uiWi
4a10: 6e 64 6f 77 29 20 7b 0a 09 09 09 09 72 65 74 75  ndow) {.....retu
4a20: 72 6e 3b 0a 09 09 09 7d 0a 0a 09 09 09 75 69 57  rn;....}.....uiW
4a30: 69 6e 64 6f 77 2e 63 6f 6e 74 65 6e 74 57 69 6e  indow.contentWin
4a40: 64 6f 77 2e 70 61 72 65 6e 74 57 69 6e 64 6f 77  dow.parentWindow
4a50: 20 3d 20 77 69 6e 64 6f 77 3b 0a 09 09 7d 29 3b   = window;...});
4a60: 0a 09 7d 29 3b 0a 0a 2f 2f 20 47 6f 6f 67 6c 65  ..});..// Google
4a70: 20 67 6f 74 20 72 69 64 20 6f 66 20 61 6c 6c 20   got rid of all 
4a80: 6f 66 20 74 68 65 20 63 6f 64 65 20 77 65 20 77  of the code we w
4a90: 65 72 65 20 75 73 69 6e 67 20 74 6f 20 69 6e 74  ere using to int
4aa0: 65 72 66 61 63 65 20 77 69 74 68 20 50 43 53 43  erface with PCSC
4ab0: 2e 2e 2e 20 0a 2f 2f 20 54 68 69 73 20 6e 65 65  ... .// This nee
4ac0: 64 73 20 74 6f 20 62 65 20 72 65 77 72 69 74 74  ds to be rewritt
4ad0: 65 6e 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  en to use the ne
4ae0: 77 20 69 6e 74 65 72 66 61 63 65 0a 2f 2f 0a 2f  w interface.//./
4af0: 2f 09 2f 2a 0a 2f 2f 09 20 2a 20 52 65 67 69 73  /./*.//. * Regis
4b00: 74 65 72 20 61 20 68 61 6e 64 6c 65 72 20 66 6f  ter a handler fo
4b10: 72 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 74  r dealing with t
4b20: 68 65 20 50 43 53 43 20 70 6f 72 74 20 62 65 69  he PCSC port bei
4b30: 6e 67 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a  ng disconnected.
4b40: 2f 2f 09 20 2a 2f 0a 2f 2f 09 6f 6c 64 4f 6e 50  //. */.//.oldOnP
4b50: 6f 72 74 44 69 73 63 6f 6e 6e 65 63 74 65 64 46  ortDisconnectedF
4b60: 75 6e 63 74 69 6f 6e 20 3d 20 47 6f 6f 67 6c 65  unction = Google
4b70: 53 6d 61 72 74 43 61 72 64 2e 50 63 73 63 2e 70  SmartCard.Pcsc.p
4b80: 72 6f 74 6f 74 79 70 65 2e 6f 6e 50 6f 72 74 44  rototype.onPortD
4b90: 69 73 63 6f 6e 6e 65 63 74 65 64 5f 3b 0a 2f 2f  isconnected_;.//
4ba0: 09 47 6f 6f 67 6c 65 53 6d 61 72 74 43 61 72 64  .GoogleSmartCard
4bb0: 2e 50 63 73 63 2e 70 72 6f 74 6f 74 79 70 65 2e  .Pcsc.prototype.
4bc0: 6f 6e 50 6f 72 74 44 69 73 63 6f 6e 6e 65 63 74  onPortDisconnect
4bd0: 65 64 5f 20 3d 20 66 75 6e 63 74 69 6f 6e 28 29  ed_ = function()
4be0: 20 7b 0a 2f 2f 09 09 6f 6c 64 4f 6e 50 6f 72 74   {.//..oldOnPort
4bf0: 44 69 73 63 6f 6e 6e 65 63 74 65 64 46 75 6e 63  DisconnectedFunc
4c00: 74 69 6f 6e 2e 61 70 70 6c 79 28 74 68 69 73 29  tion.apply(this)
4c10: 3b 0a 2f 2f 0a 2f 2f 09 09 63 61 63 6b 65 79 49  ;.//.//..cackeyI
4c20: 6e 69 74 50 43 53 43 43 6f 6d 70 6c 65 74 65 64  nitPCSCCompleted
4c30: 28 22 66 61 69 6c 75 72 65 22 29 3b 0a 2f 2f 0a  ("failure");.//.
4c40: 2f 2f 09 09 63 61 63 6b 65 79 52 65 73 74 61 72  //..cackeyRestar
4c50: 74 28 29 3b 0a 2f 2f 0a 2f 2f 09 09 72 65 74 75  t();.//.//..retu
4c60: 72 6e 3b 0a 2f 2f 09 7d 3b 0a 2f 2f 0a 2f 2f 09  rn;.//.};.//.//.
4c70: 2f 2a 0a 2f 2f 09 20 2a 20 52 65 67 69 73 74 65  /*.//. * Registe
4c80: 72 20 61 20 68 61 6e 64 6c 65 72 20 66 6f 72 20  r a handler for 
4c90: 64 65 61 6c 69 6e 67 20 77 69 74 68 20 74 68 65  dealing with the
4ca0: 20 50 43 53 43 20 70 6f 72 74 20 62 65 69 6e 67   PCSC port being
4cb0: 20 61 76 61 69 6c 61 62 6c 65 0a 2f 2f 09 20 2a   available.//. *
4cc0: 2f 0a 2f 2f 09 6f 6c 64 50 43 53 43 49 6e 69 74  /.//.oldPCSCInit
4cd0: 69 61 6c 69 7a 61 74 69 6f 6e 43 61 6c 6c 62 61  ializationCallba
4ce0: 63 6b 20 3d 20 47 6f 6f 67 6c 65 53 6d 61 72 74  ck = GoogleSmart
4cf0: 43 61 72 64 2e 50 63 73 63 4e 61 63 6c 2e 70 72  Card.PcscNacl.pr
4d00: 6f 74 6f 74 79 70 65 2e 70 63 73 63 49 6e 69 74  ototype.pcscInit
4d10: 69 61 6c 69 7a 61 74 69 6f 6e 43 61 6c 6c 62 61  ializationCallba
4d20: 63 6b 5f 3b 0a 2f 2f 09 47 6f 6f 67 6c 65 53 6d  ck_;.//.GoogleSm
4d30: 61 72 74 43 61 72 64 2e 50 63 73 63 4e 61 63 6c  artCard.PcscNacl
4d40: 2e 70 72 6f 74 6f 74 79 70 65 2e 70 63 73 63 49  .prototype.pcscI
4d50: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 43 61 6c  nitializationCal
4d60: 6c 62 61 63 6b 5f 20 3d 20 66 75 6e 63 74 69 6f  lback_ = functio
4d70: 6e 28 72 65 71 75 65 73 74 49 64 2c 20 69 6e 73  n(requestId, ins
4d80: 74 61 6e 63 65 49 64 2c 20 69 6e 73 74 61 6e 63  tanceId, instanc
4d90: 65 2c 20 65 72 72 6f 72 29 20 7b 0a 2f 2f 09 09  e, error) {.//..
4da0: 6f 6c 64 50 43 53 43 49 6e 69 74 69 61 6c 69 7a  oldPCSCInitializ
4db0: 61 74 69 6f 6e 43 61 6c 6c 62 61 63 6b 2e 61 70  ationCallback.ap
4dc0: 70 6c 79 28 74 68 69 73 2c 20 5b 72 65 71 75 65  ply(this, [reque
4dd0: 73 74 49 64 2c 20 69 6e 73 74 61 6e 63 65 49 64  stId, instanceId
4de0: 2c 20 69 6e 73 74 61 6e 63 65 2c 20 65 72 72 6f  , instance, erro
4df0: 72 5d 29 3b 0a 2f 2f 0a 2f 2f 09 09 72 65 74 75  r]);.//.//..retu
4e00: 72 6e 3b 0a 2f 2f 09 7d 3b 0a 2f 2f 0a 09 2f 2a  rn;.//.};.//../*
4e10: 0a 09 20 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  .. * Initialize 
4e20: 67 6c 6f 62 61 6c 20 73 74 61 74 65 0a 09 20 2a  global state.. *
4e30: 2f 0a 09 63 61 63 6b 65 79 49 6e 69 74 47 6c 6f  /..cackeyInitGlo
4e40: 62 61 6c 53 74 61 74 65 28 29 3b 0a 0a 09 72 65  balState();...re
4e50: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 49 6e 69 74  turn;.}../* Init
4e60: 69 61 6c 69 7a 65 20 43 41 43 4b 65 79 20 2a 2f  ialize CACKey */
4e70: 0a 63 61 63 6b 65 79 41 70 70 49 6e 69 74 28 29  .cackeyAppInit()
4e80: 3b 0a 63 61 63 6b 65 79 49 6e 69 74 28 29 3b 0a  ;.cackeyInit();.