| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 /** | 5 /** | 
| 6  * Check the validity of the policy extension manifest. | 6  * Check the validity of the policy extension manifest. | 
| 7  * | 7  * | 
| 8  * This function is invoked by entd before the policy is loaded in order to | 8  * This function is invoked by entd before the policy is loaded in order to | 
| 9  * check the validity of the extension manifest.  If this function returns | 9  * check the validity of the extension manifest.  If this function returns | 
| 10  * false, entd exits and does not restart until the next user logs in. | 10  * false, entd exits and does not restart until the next user logs in. | 
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 487     } | 487     } | 
| 488     return true; | 488     return true; | 
| 489   } | 489   } | 
| 490 | 490 | 
| 491   try { | 491   try { | 
| 492     session = this.loginToken(token, userType, oldPin); | 492     session = this.loginToken(token, userType, oldPin); | 
| 493     if (!session) | 493     if (!session) | 
| 494       this.stop(token, 'error', 'Failed to login to token'); | 494       this.stop(token, 'error', 'Failed to login to token'); | 
| 495   } catch (ex) { | 495   } catch (ex) { | 
| 496     this.stop(token, 'error', 'Exception initializing PIN: ' + ex); | 496     this.stop(token, 'error', 'Exception initializing PIN: ' + ex); | 
| 497     session.close(); | 497     session.logoutAndClose(); | 
| 498     return false; | 498     return false; | 
| 499   } | 499   } | 
| 500 | 500 | 
| 501   this.info('PIN Reset for: ' + pinType); | 501   this.info('PIN Reset for: ' + pinType); | 
| 502 | 502 | 
| 503   try { | 503   try { | 
| 504     session.setPin(oldPin, newPin); | 504     session.setPin(oldPin, newPin); | 
| 505     this.info('PIN Reset complete.'); | 505     this.info('PIN Reset complete.'); | 
| 506   } catch (ex) { | 506   } catch (ex) { | 
| 507     this.stop(token, 'error', 'Exception changing PIN: ' + ex); | 507     this.stop(token, 'error', 'Exception changing PIN: ' + ex); | 
| 508     session.close(); | 508     session.logoutAndClose(); | 
| 509     return false; | 509     return false; | 
| 510   } | 510   } | 
| 511 | 511 | 
| 512   if (this.checkToken(token)) { | 512   if (this.checkToken(token)) { | 
| 513     this.stop(token, 'ready'); | 513     this.stop(token, 'ready'); | 
| 514   } else { | 514   } else { | 
| 515     this.stop(token, pinType); | 515     this.stop(token, pinType); | 
| 516   } | 516   } | 
| 517 | 517 | 
| 518   session.close(); | 518   session.logoutAndClose(); | 
| 519   return true; | 519   return true; | 
| 520 } | 520 } | 
| 521 | 521 | 
| 522 /** | 522 /** | 
| 523  * Generate a RSA key pair on the PKCS#11 token. | 523  * Generate a RSA key pair on the PKCS#11 token. | 
| 524  * | 524  * | 
| 525  * 'label' and 'id' parameters are user-friendly values that will be applied | 525  * 'label' and 'id' parameters are user-friendly values that will be applied | 
| 526  * to the generated keys.  They can be used later for documentation and/or | 526  * to the generated keys.  They can be used later for documentation and/or | 
| 527  * key search/match. | 527  * key search/match. | 
| 528  * | 528  * | 
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 806         pin = Policy.PKCS11_SO_PIN; | 806         pin = Policy.PKCS11_SO_PIN; | 
| 807         break; | 807         break; | 
| 808       default: | 808       default: | 
| 809         this.error('Unknown user type'); | 809         this.error('Unknown user type'); | 
| 810         return null; | 810         return null; | 
| 811     } | 811     } | 
| 812   } | 812   } | 
| 813 | 813 | 
| 814   var session = null; | 814   var session = null; | 
| 815 | 815 | 
|  | 816   this.info('Opening session and logging into token.'); | 
|  | 817 | 
| 816   try { | 818   try { | 
| 817     token.closeAllSessions(); | 819     token.closeAllSessions(); | 
| 818     session = token.openSession(Token.CKF_RW_SESSION); | 820     session = token.openSession(Token.CKF_RW_SESSION); | 
| 819   } catch (ex) { | 821   } catch (ex) { | 
| 820     this.error('Unable to open session: ' + ex); | 822     this.error('Unable to open session: ' + ex); | 
| 821     return null; | 823     return null; | 
| 822   } | 824   } | 
| 823 | 825 | 
| 824   try { | 826   try { | 
| 825     if (!session.login(sessionType, pin)) { | 827     if (!session.login(sessionType, pin)) { | 
| 826       this.error('Unable to log in user into token.'); | 828       this.error('Unable to log in user into token.'); | 
| 827       session.close(); | 829       session.logoutAndClose(); | 
| 828       return null; | 830       return null; | 
| 829     } | 831     } | 
| 830   } catch (ex) { | 832   } catch (ex) { | 
| 831     this.error('Failed to login user into token: ' + ex); | 833     this.error('Failed to login user into token: ' + ex); | 
| 832     session.close(); | 834     session.logoutAndClose(); | 
| 833     return null; | 835     return null; | 
| 834   } | 836   } | 
| 835 | 837 | 
| 836   return session; | 838   return session; | 
| 837 } | 839 } | 
| 838 | 840 | 
| 839 /** | 841 /** | 
| 840  * Determine if this certificate definition has been successfully installed. | 842  * Determine if this certificate definition has been successfully installed. | 
| 841  * | 843  * | 
| 842  * @return {boolean} A boolean indicating whether or not this certificate | 844  * @return {boolean} A boolean indicating whether or not this certificate | 
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 945 | 947 | 
| 946   var session = null; | 948   var session = null; | 
| 947   try { | 949   try { | 
| 948     session = this.policy.loginToken(token, Session.CKU_USER); | 950     session = this.policy.loginToken(token, Session.CKU_USER); | 
| 949     if (!session) | 951     if (!session) | 
| 950       return this.error('Cannot login to token.'); | 952       return this.error('Cannot login to token.'); | 
| 951 | 953 | 
| 952     var cert = policy.findCertificateById(session, this.id); | 954     var cert = policy.findCertificateById(session, this.id); | 
| 953     var key = policy.findPrivateKeyById(session, this.id); | 955     var key = policy.findPrivateKeyById(session, this.id); | 
| 954 | 956 | 
| 955     session.close(); | 957     session.logoutAndClose(); | 
| 956 | 958 | 
| 957     return (cert != null && key != null); | 959     return (cert != null && key != null); | 
| 958   } catch(ex) { | 960   } catch(ex) { | 
| 959     session.close(); | 961     session.logoutAndClose(); | 
| 960     this.error('Error checking certificate is installed: ', ex); | 962     this.error('Error checking certificate is installed: ', ex); | 
| 961   } | 963   } | 
| 962 | 964 | 
| 963   return false; | 965   return false; | 
| 964 }; | 966 }; | 
| 965 | 967 | 
| 966 /** | 968 /** | 
| 967  * Initiate the CSR process for this certificate definition. | 969  * Initiate the CSR process for this certificate definition. | 
| 968  */ | 970  */ | 
| 969 Policy.Certificate.prototype.initiateCSR = | 971 Policy.Certificate.prototype.initiateCSR = | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 995   if (!session) | 997   if (!session) | 
| 996     return this.stop('error', 'Cannot login to token.'); | 998     return this.stop('error', 'Cannot login to token.'); | 
| 997 | 999 | 
| 998   // Remove any existing entries matching this.id. | 1000   // Remove any existing entries matching this.id. | 
| 999   this.policy.removeObjectsById(session, this.id); | 1001   this.policy.removeObjectsById(session, this.id); | 
| 1000 | 1002 | 
| 1001   try { | 1003   try { | 
| 1002     // Generate a key pair. | 1004     // Generate a key pair. | 
| 1003     this.policy.generateKeyPair(session, this.id, this.label); | 1005     this.policy.generateKeyPair(session, this.id, this.label); | 
| 1004   } catch(e) { | 1006   } catch(e) { | 
| 1005     session.close(); | 1007     session.logoutAndClose(); | 
| 1006     return this.stop('error', 'Failed to create key on PKCS#11 device: ' + e); | 1008     return this.stop('error', 'Failed to create key on PKCS#11 device: ' + e); | 
| 1007   } | 1009   } | 
| 1008 | 1010 | 
| 1009   this.stop('key', 'Key generation complete'); | 1011   this.stop('key', 'Key generation complete'); | 
| 1010 | 1012 | 
| 1011   session.close(); | 1013   session.logoutAndClose(); | 
| 1012 | 1014 | 
| 1013   this.start('csr', 'Initiating Certificate Signing Request'); | 1015   this.start('csr', 'Initiating Certificate Signing Request'); | 
| 1014 | 1016 | 
| 1015   // create a CSR using the generated key pair. | 1017   // create a CSR using the generated key pair. | 
| 1016   var engine = this.policy.engine; | 1018   var engine = this.policy.engine; | 
| 1017   this.info('Generating CSR for id: ' + this.id + ' subject: ' + subject); | 1019   this.info('Generating CSR for id: ' + this.id + ' subject: ' + subject); | 
| 1018   var csr = engine.createCSR(this.id, subject); | 1020   var csr = engine.createCSR(this.id, subject); | 
| 1019 | 1021 | 
| 1020   // Copy the CSR as a string to the environment. | 1022   // Copy the CSR as a string to the environment. | 
| 1021   this.setVariable('csr', csr.toFormat(CSR.CSR_FORMAT_PEM_TEXT)); | 1023   this.setVariable('csr', csr.toFormat(CSR.CSR_FORMAT_PEM_TEXT)); | 
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1150 | 1152 | 
| 1151   // Convert response to DER. | 1153   // Convert response to DER. | 
| 1152   var x509 = new entd.crypto.OpenSSL.X509(cert, X509.X509_FORMAT_PEM_TEXT); | 1154   var x509 = new entd.crypto.OpenSSL.X509(cert, X509.X509_FORMAT_PEM_TEXT); | 
| 1153   var x509_der = x509.toFormat(X509.X509_FORMAT_DER); | 1155   var x509_der = x509.toFormat(X509.X509_FORMAT_DER); | 
| 1154 | 1156 | 
| 1155   // Store certificate in the PKCS#11 token. | 1157   // Store certificate in the PKCS#11 token. | 
| 1156   this.storeCertificate(session, this.id, this.label, this.subject, x509_der); | 1158   this.storeCertificate(session, this.id, this.label, this.subject, x509_der); | 
| 1157 | 1159 | 
| 1158   this.stop('cert'); | 1160   this.stop('cert'); | 
| 1159 | 1161 | 
| 1160   session.close(); | 1162   session.logoutAndClose(); | 
| 1161 }; | 1163 }; | 
| 1162 | 1164 | 
| 1163 Policy.prototype.setBrowserPolicy = | 1165 Policy.prototype.setBrowserPolicy = | 
| 1164 function setBrowserPolicy(type, sourcePolicy) { | 1166 function setBrowserPolicy(type, sourcePolicy) { | 
| 1165   var targetPolicy; | 1167   var targetPolicy; | 
| 1166   if (type == "managed") { | 1168   if (type == "managed") { | 
| 1167     targetPolicy = entd.browser.managedPolicy; | 1169     targetPolicy = entd.browser.managedPolicy; | 
| 1168   } else if (type == "recommended") { | 1170   } else if (type == "recommended") { | 
| 1169     targetPolicy = entd.browser.recommendedPolicy; | 1171     targetPolicy = entd.browser.recommendedPolicy; | 
| 1170   } else { | 1172   } else { | 
| (...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1971   var result = []; | 1973   var result = []; | 
| 1972   for (i = 0; i < str.length; i++) { | 1974   for (i = 0; i < str.length; i++) { | 
| 1973     var d = str.charCodeAt(i); | 1975     var d = str.charCodeAt(i); | 
| 1974     var h = d.toString(16); | 1976     var h = d.toString(16); | 
| 1975     if (h.length == 1) | 1977     if (h.length == 1) | 
| 1976       result.push('0'); | 1978       result.push('0'); | 
| 1977     result.push(h); | 1979     result.push(h); | 
| 1978   } | 1980   } | 
| 1979   return result.join(''); | 1981   return result.join(''); | 
| 1980 } | 1982 } | 
| OLD | NEW | 
|---|