From 9033253ba8a2fa1a26b2f4e4796bc2e574129840 Mon Sep 17 00:00:00 2001 From: Atul Varma Date: Mon, 30 Jun 2008 14:29:26 -0700 Subject: [PATCH] test_passphrase_checking now actually tests real code and shows that it works. Still have to move isPassphraseValid() into a different place though, probably crypto. --- .../tests/unit/test_passphrase_checking.js | 50 ++++++++++++++----- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/services/sync/tests/unit/test_passphrase_checking.js b/services/sync/tests/unit/test_passphrase_checking.js index 327e597e701d..db4e9a2ccc88 100644 --- a/services/sync/tests/unit/test_passphrase_checking.js +++ b/services/sync/tests/unit/test_passphrase_checking.js @@ -6,47 +6,71 @@ Function.prototype.async = Async.sugar; let __fakeCryptoID = { keypairAlg: "RSA", + // This private key is encrypted with the passphrase 'passphrase', + // contained in our testing infrastructure. privkey: "3ytj94K6Wo0mBjAVsiIwjm5x2+ENvpKTDUqLCz19iXbESf8RT6O8PmY7Pqcndpn+adqaQdvmr0T1JQ5bfLEHev0WBfo8oWJb+OS4rKoCWxDNzGwrOlW5hCfxSekw0KrKjqZyDZ0hT1Qt9vn6thlV2v9YWfmyn0OIxNC9hUqGwU3Wb2F2ejM0Tw40+IIW4eLEvFxLGv0vnEXpZvesPt413proL6FGQJe6vyapBg+sdX1JMYGaKZY84PUGIiDPxTbQg7yIWTSe3WlDhJ001khFiyEoTZvPhiAGXfML9ycrCRZUWkHp/cfS7QiusJXs6co0tLjrIk/rTk8h4mHBnyPkFIxh4YrfC7Bwf9npwomhaZCEQ32VK+a8grTDsGYHPZexDm3TcD2+d+hZ/u4lUOHFscQKX4w83tq942yqFtElCD2yQoqEDr1Z9zge5XBnLcYiH9hL0ozfpxBlTtpR1kSH663JHqlYim0qhuk0zrGAPkHna07UMFufxvgQBSd/YUqWCimJFGi+5QeOOFO20Skj882Bh1QDYsmbxZ/JED5ocGNHWSqpaOL2ML1F9nD5rdtffI0BsTe+j9h+HV4GlvzUz0Jd6RRf9xN4RyxqfENb8iGH5Pwbry7Qyk16rfm0s6JgG8pNb/8quKD+87RAtQFybZtdQ9NfGg+gyRiU9pbb6FPuPnGp+KpktaHu/K3HnomrVUoyLQALfCSbPXg2D9ta6dRV0JRqOZz4w52hlHIa62iJO6QecbdBzPYGT0QfOy/vp6ndRDR+2xMD/BmlaQwm3+58cqhIw9SVV5h/Z5PVaXxAOqg5vpU1NjrbF4uIFo5rmR0PyA/6qtxZaBY6w3I4sUWdDkIer8QsyrFrO7MIEdxksvDoFIeIM5eN8BufLu3ymS5ZXBiFr/iRxlYcQVHK2hz0/7syWUYsrz5/l1mj+qbWGx+6daWOk3xt4SH+p0hUpMC4FbJ9m/xr4im+X5m5ZYiajaF1QPOXTTny2plE0vfqMVlwX1HFFTJrAP+E85sZI8LPHAYO80qhSi3tV/LHjxCnC1LHJXaRkG202pQFWF1yVT/o82HBt9OC1xY6TVcy4Uh+6piNIQ9FxXGWrzjz0AUkxwkSN3Foqlfiq+mqJmNwzIdEQTmNAcBBsN3vWngU4elHjYI5qFZBzxJIkH8tfvivOshrOZIZB9TD9GIRhQwIBWc6i4fnqE9GUK2Jle6werdFATiMU4msQg7ClURaMn/p3MOLoxTmsPd1iBYPQkqnJgEAdNfKj3KRqSc6M/x09hGDSzK2d9Y03pyDGPh2sopcMFdCQbMy8VOld2/hEGakMJv6BPoRfhKmJbgGVf5x4B9dWZNa8WCmlcxaZ7KG43UA0zLm1VgfTcDW5qazDFoxIcfhmO5KoRI3q8vNs+Wh+smLC6yFODdF9HzrPimEYSc6OWHWgUcuiIBRjKeo5gBTbExWmri2VG+cn005vQNxK+0s7JVyFB8TzZ96pV3nFjkYy9OUkaiJxGd6OVGcvhbbrcNsKkaZff7OsLqczf6x0bhwh+y8+bLjLkuusGYUdBvdeiuv12IfeRupvwD8Z3aZOgcD7d+8VTyTyd/KX9fu8P7tD5SojJ5joRPjcv4Q8/mhRgtwx1McMIL3YnKHG+U=", privkeyWrapIV: "fZ7CB/KQAUjEhkmrEkns4Q==", passphraseSalt: "JFs5h2RKX9m0Op9DlQIcCOSfOH1MuDrrrHxCx+CpCUU=", pubkey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxxwObnXIoYeQKMG9RbvLkgsu/idDo25qOX87jIEiXkgW1wLKp/1D/DBLUEW303tVszNGVt6bTyAXOIj6skpmYoDs9Z48kvU3+g7Vi4QXEw5moSS4fr+yFpKiYd2Kx1+jCFGvGZjBzAAvnjsWmWrSA+LHJSrFlKY6SM3kNg8KrE8dxUi3wztlZnhZgo1ZYe7/VeBOXUfThtoadIl1VdREw2e79eiMQpPa0XLv4grCaMd/wLRs0be1/nPt7li4NyT0fnYFWg75SU3ni/xSaq/zR4NmW/of5vB2EcKyUG+/mvNplQ0CX+v3hRBCdhpCyPmcbHKUluyKzj7Ms9pKyCkwxwIDAQAB" }; -function checkpassphrase_coroutine() { +function isPassphraseValid(identity) { var self = yield; - var idRSA = ID.get("WeaveCryptoID"); - var idTemp = new Identity("temp", "temp", null); // Generate a random symmetric key. Crypto.randomKeyGen.async(Crypto, self.cb, idTemp); yield; // Encrypt the symmetric key with the user's public key. - Crypto.wrapKey.async(Crypto, self.cb, idTemp.bulkKey, idRSA); + Crypto.wrapKey.async(Crypto, self.cb, idTemp.bulkKey, identity); let wrappedKey = yield; + let unwrappedKey; // Decrypt the symmetric key with the user's private key. - Crypto.unwrapKey.async(Crypto, self.cb, wrappedKey, idRSA); - let unwrappedKey = yield; + try { + Crypto.unwrapKey.async(Crypto, self.cb, wrappedKey, identity); + unwrappedKey = yield; + } catch (e) { + self.done(false); + return; + } // Ensure that the original symmetric key is identical to // the decrypted version. - do_check_eq(unwrappedKey, idTemp.bulkKey); + if (unwrappedKey != idTemp.bulkKey) + throw new Error("Unwrapped key is not identical to original key."); self.done(true); } -function test_passphrase_checking() { - let syncTesting = new SyncTestingInfrastructure(); +function testGenerator() { + let self = yield; let id = ID.get("WeaveCryptoID"); for (name in __fakeCryptoID) id[name] = __fakeCryptoID[name]; - function checkpassphrase(cb) { - checkpassphrase_coroutine.async({}, cb); - } + isPassphraseValid.async({}, self.cb, id); + let result = yield; - syncTesting.runAsyncFunc("Checking passphrase", checkpassphrase); + do_check_eq(result, true); + + id.setTempPassword("incorrect passphrase"); + + isPassphraseValid.async({}, self.cb, id); + result = yield; + + do_check_eq(result, false); + + self.done(); +} + +function run_test() { + let syncTesting = new SyncTestingInfrastructure(); + + syncTesting.runAsyncFunc( + "Ensuring isPassphraseValid() works", + function runTest(cb) { testGenerator.async({}, cb); } + ); }