michael@0: const DSV = Ci.nsIDataSignatureVerifier; michael@0: michael@0: var keys = [ michael@0: // RSA key michael@0: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" + michael@0: "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" + michael@0: "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" + michael@0: "awB/zH4KaPiY3vnrzQIDAQAB", michael@0: michael@0: // RSA key michael@0: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHe69VsjNCwnGF9YGZLgnobp3D" + michael@0: "c1KgWzpbT+f12vVKkV3YBpA9KMVMy6wpxlDjvLJjfp/0HvaH7aaz/7kgxZw70Y60" + michael@0: "LaJtkAcl1ZVAxS2lQKRTAzZ0RhoTSI1xVqGTjiQakgVdUeghtnqqwp5o1inZv3Qh" + michael@0: "nUOMNPyAV8zGt+ZQHQIDAQAB", michael@0: michael@0: // Invalid key data ("foobar" base 64 encoded) michael@0: "Zm9vYmFy" michael@0: ]; michael@0: michael@0: var data = [ michael@0: "Test data for data signature verifier", michael@0: "The quick brown fox jumps over the lazy dog..." michael@0: ]; michael@0: michael@0: var signatures = [ michael@0: // Key 0, Data 0, MD2 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBAgUAA4GBALe3hO76UCpI8b1/oJUCIPmC6AbnMAMlAqo7" + michael@0: "pc3TaWmU9wISWmXSrwNmr/QQNjWDn4nzQn8/K/Ac+tszaXib6fVLKA1a6e+/E0qE" + michael@0: "OIKFwUiDWCkGDgxM8aYiTgoSZub/5rokgse+ivuCRSVTv9mSxRzKwj+Cvp1EjKCT" + michael@0: "iIl3nnTh", michael@0: michael@0: // Key 0, Data 0, MD5 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAGGb2QkA8LcA+QZj1SoVFmMpVTd9P5Ac0Rjb" + michael@0: "ldouMmngztMV/dxymVKCpknqelhsxTQ/zaqGZ4KKzcIffJa9jXi5XUD8XzDIKcFE" + michael@0: "dQvti8oUNDPb6l1ybETI8LKh2ywyBCSZ/Q5BwUeS9nfx+4cAnu9YZf29SGljit+Y" + michael@0: "XLPKZ+of", michael@0: michael@0: // Key 0, Data 0, SHA1 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBQUAA4GBAHcl6tqR5yjTDUJ5NiLOdIB4I6/C/rS2WW5a" + michael@0: "7MVhYYhBgaZyGaem4LLT/REloOOLwPNMcmSEpwexqMSATbl9AAoJPq/wO3l4cZpO" + michael@0: "tDkLlafsiwnqK156YvHp50zUq5Os28d6Bq/Nl2qjH1yizwlIEo0o9qo8Cq6QK3j2" + michael@0: "MdFCopgk", michael@0: michael@0: // Key 0, Data 0, SHA256 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBCwUAA4GBAAOtDvzWwbYK7zLUz0F3e3wmkL1YWXuD/GzQ" + michael@0: "LgwOg6VWtn9v54M9nfv/+iX+m4udzIwHZU7utYM31vtwqRC36l0QKo2VMbiLySX+" + michael@0: "uHnSK40Kk4SfBvMF1wuz6BQ8ia8uTjPPfC764dB1N7gQdgdRevLTrh2EU6+DLmSS" + michael@0: "Sm1QJm9/", michael@0: michael@0: // Key 0, Data 0, SHA384 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDAUAA4GBAMWB3DskcGuGXpi3TO2Pm0g915EIvm5aOeXQ" + michael@0: "sbs0ZGOwPyzYN1kKOmEpGHMeRhcIIBcF80ZC5N6dsTxeMGkFGOqhvB/HNl7gXMqF" + michael@0: "OA8mG9vAcwfMeJlY4H5WbYD8bUn72UbIuS+sURLvWVhuIFBYPHHU7KVUaGAWl0rp" + michael@0: "hCa4Dk37", michael@0: michael@0: // Key 0, Data 0, SHA512 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAFkm61zH8Y0J5PA4GtOvoZA6w/SzHg5jFP11" + michael@0: "gmXki81VgKwLF7Gyj4wRBX7Q9c8cNrNeoGZb12NUUxlR+u6J6VxcosVPKrCz7Xfj" + michael@0: "LPi6+A1dNV5eH2B6tZR6wIiEatAWNIXxQZEJbj9BWefRFq6NnKhR5A/MEPnrZyoR" + michael@0: "Da3YsDV3", michael@0: michael@0: // Key 0, Data 1, MD2 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBAgUAA4GBAJjwosJK6jV9Bt6HhrFn7+48LRhamjWjzs7a" + michael@0: "cf5D/GTuul6aQQvQJ4Lt26KTyh3VglaQJFToH0Ik/fR1lOJS3tCPr1RRH06cKZgK" + michael@0: "haoUaGR8rmtn678wX067q7ACmKPeqmgj71pHm7O5YgN3z45iAazbUHP4erdbFUf9" + michael@0: "4rOr3L2f", michael@0: michael@0: // Key 0, Data 1, MD5 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAC0EAoHWTb4CC+gw7fs5zMaZw7PWoDH1rXMD" + michael@0: "dKoMBDmAW1EXZTfUGUTv0ga3VzuPJKuHHZOFVyFDnt4qFrefzzWs17LiPpN+yVgo" + michael@0: "6vBnpXLeIp7D9n94bz56gv9NZZmy02XQVKDaRc3E4JBC7Ze7RAHuKtWuZRTUKF86" + michael@0: "VXakwW3a", michael@0: michael@0: // Key 0, Data 1, SHA1 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBQUAA4GBABkClr0Ot3aXBKYIiARdwpX8etDQO/Eqjxe8" + michael@0: "pJyaqwj/P+x8j9/CbtJKJJTxvYmV9AhdgLPgoWjcTkfvqKdb1vpKKbV30QC/TEnu" + michael@0: "ON+66MJgkwrZw6NCDyBRgMTjf4FWR75Ot1DLuu3+7uCswKCJe8la0HMm/AcqUzu1" + michael@0: "SKOPMseI", michael@0: michael@0: // Key 0, Data 1, SHA256 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBCwUAA4GBAE2cIr6Uzo7RISkGgCA5m4K8s9+0iHwzr2u/" + michael@0: "3ICUrTPe4RY2g9RLd6qkwaHD101LW5TQw71fhePIxfWHEhWtTCLS5DnGiucxfGKW" + michael@0: "47gOBJIYf0DG7o5N4lA99j2Zuj+V+yjAcLfq7Su5FwASbD30KqCue1/F03qdXUxj" + michael@0: "ciJeGo2b", michael@0: michael@0: // Key 0, Data 1, SHA384 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDAUAA4GBAK+JfKJNBjw2d2iXT/pe9xMXPkLSkf+gjG2i" + michael@0: "F7B0kBvMGyOVxuvQ4TCx+NFhAUevQugDHgBMkmAieg8mApcWWFWQ+8rbdUFv/hD7" + michael@0: "fHW+QukMgcfLMquh0GtDuoM8ZKFBBvwnPGLLUh+ZMy8fEOjjH+s6bQQSpf072SSJ" + michael@0: "K+Uo8DG2", michael@0: michael@0: // Key 0, Data 1, SHA512 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAEEvDpyBssG0qFfRamNwkwSjhqYRVFdIa6+E" + michael@0: "xfxdRqW/nxN5HuzFA8aajgSMXX0YFWPXV7OuVjCCJfZWhq7kQpTy96AmI/04rVdr" + michael@0: "9gc5mc2tdLl3Yk/Qd+Xq8WYcQIZ5Ewyo7sr8eKtVhtEM8OtPR54FO2s1pkZwJdVf" + michael@0: "ymMzHBoE", michael@0: michael@0: // Key 1, Data 0, MD5 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAAIzLho2i5jfJ5SPPV/u2gUuefzhjEAsUhlL" + michael@0: "Nir4FKhNzB2DZNbME9DtgNvdmZd00IjydYlaJ0dnLiMigXIaRJsyncYazULZdY6i" + michael@0: "i7oP6llbXbszSTbHGolr5kQ+6cZPBBATOkJ+wekDdlvh5cZ+B0Lux4LevUDlGWAy" + michael@0: "uR7bqrc5", michael@0: michael@0: // Key 1, Data 0, SHA512 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDQUAA4GBABsjF8K/SIaY3KTeIGpPEwl1+ZXLKBaHxlRT" + michael@0: "b37PhorSfqW1KFjquCEASUUeFwCQ14uUIBaRQV2haRGA0dRpuWr4zrWZMcDKOsmX" + michael@0: "r5XRvcti9/lNqoIID/Mq0tKtS6aVFZpoHIrwbXpV4hV+BRGhaPxV3RBzEIzM7bWJ" + michael@0: "tN3JY9+1", michael@0: michael@0: // Key 1, Data 1, MD5 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAIAxRPXDAT2LBcOo7yTNr5uIZbPW9rkSX0Ba" + michael@0: "h4sq6YRcxlnohaE2VO0CLGXFNwaBihhkkp+2dA76EvbMo/+O9XTWwroqtWWwvmxs" + michael@0: "tWK6HvwYKnGFKOOZMOjNjmXjk446UVvxYCbU+NPM1LZTewT1/UpPWWRowF/lwX7m" + michael@0: "SnT8d2ds", michael@0: michael@0: // Key 1, Data 1, SHA512 hash algorithm michael@0: "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAF0+XYD/r0Annz1GJ24GTkAlWY/OixCSV6Ix" + michael@0: "OMM7P2d/jgOP+ICKIpxqaSE0CbkLiegUiidIOWvFqDxQJWlAAukDUWISGFfJMFxX" + michael@0: "3jzJ0bBfeNY/1Qo8jMQopcNco/NlNgoSKAUOBtk31aFgNoVC3kWUk6pO97KEiJ+e" + michael@0: "bQp9Z2/M", michael@0: michael@0: // Invalid signature data ("foobar" base 64 encoded) michael@0: "Zm9vYmFy" michael@0: ]; michael@0: michael@0: var tests = [ michael@0: // Data Signature Key Expected Throws michael@0: // Pass cases michael@0: [0, 0, 0, true, false], //0 michael@0: [0, 1, 0, true, false], //1 michael@0: [0, 2, 0, true, false], //2 michael@0: [0, 3, 0, true, false], //3 michael@0: [0, 4, 0, true, false], //4 michael@0: [0, 5, 0, true, false], //5 michael@0: [1, 6, 0, true, false], //6 michael@0: [1, 7, 0, true, false], //7 michael@0: [1, 8, 0, true, false], //8 michael@0: [1, 9, 0, true, false], //9 michael@0: [1, 10, 0, true, false], //10 michael@0: [1, 11, 0, true, false], //11 michael@0: [0, 12, 1, true, false], //12 michael@0: [0, 13, 1, true, false], //13 michael@0: [1, 14, 1, true, false], //14 michael@0: [1, 15, 1, true, false], //15 michael@0: // Incorrect data cases michael@0: [1, 0, 0, false, false], //16 michael@0: [1, 1, 0, false, false], //17 michael@0: [1, 2, 0, false, false], //18 michael@0: [1, 3, 0, false, false], //19 michael@0: [1, 4, 0, false, false], //20 michael@0: [1, 5, 0, false, false], //21 michael@0: [0, 6, 0, false, false], //22 michael@0: [0, 7, 0, false, false], //23 michael@0: [0, 8, 0, false, false], //24 michael@0: [0, 9, 0, false, false], //25 michael@0: [0, 10, 0, false, false], //26 michael@0: [0, 11, 0, false, false], //27 michael@0: // Incorrect key cases michael@0: [0, 1, 1, false, false], //28 michael@0: [0, 5, 1, false, false], //29 michael@0: [1, 7, 1, false, false], //30 michael@0: [1, 11, 1, false, false], //31 michael@0: [0, 12, 0, false, false], //32 michael@0: [0, 13, 0, false, false], //33 michael@0: [1, 14, 0, false, false], //34 michael@0: [1, 15, 0, false, false], //35 michael@0: // Invalid data cases michael@0: [0, 0, 2, false, true], //36 michael@0: [0, 1, 2, false, true], //37 michael@0: [0, 16, 0, false, true], //38 michael@0: [1, 16, 0, false, true], //39 michael@0: ]; michael@0: michael@0: function run_test() { michael@0: var verifier = Cc["@mozilla.org/security/datasignatureverifier;1"]. michael@0: createInstance(Ci.nsIDataSignatureVerifier); michael@0: michael@0: for (var t = 0; t < tests.length; t++) { michael@0: try { michael@0: var result = verifier.verifyData(data[tests[t][0]], michael@0: signatures[tests[t][1]], michael@0: keys[tests[t][2]]); michael@0: if (tests[t][4]) michael@0: do_throw("Test " + t + " didn't throw"); michael@0: if (result != tests[t][3]) michael@0: do_throw("Test " + t + " was " + result + " but should have been " + tests[t][3]); michael@0: } michael@0: catch (e) { michael@0: if (!tests[t][4]) michael@0: do_throw("Test " + t + " threw " + e); michael@0: } michael@0: } michael@0: }