Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
michael@0 | 1 | const DSV = Ci.nsIDataSignatureVerifier; |
michael@0 | 2 | |
michael@0 | 3 | var keys = [ |
michael@0 | 4 | // RSA key |
michael@0 | 5 | "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" + |
michael@0 | 6 | "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" + |
michael@0 | 7 | "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" + |
michael@0 | 8 | "awB/zH4KaPiY3vnrzQIDAQAB", |
michael@0 | 9 | |
michael@0 | 10 | // RSA key |
michael@0 | 11 | "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHe69VsjNCwnGF9YGZLgnobp3D" + |
michael@0 | 12 | "c1KgWzpbT+f12vVKkV3YBpA9KMVMy6wpxlDjvLJjfp/0HvaH7aaz/7kgxZw70Y60" + |
michael@0 | 13 | "LaJtkAcl1ZVAxS2lQKRTAzZ0RhoTSI1xVqGTjiQakgVdUeghtnqqwp5o1inZv3Qh" + |
michael@0 | 14 | "nUOMNPyAV8zGt+ZQHQIDAQAB", |
michael@0 | 15 | |
michael@0 | 16 | // Invalid key data ("foobar" base 64 encoded) |
michael@0 | 17 | "Zm9vYmFy" |
michael@0 | 18 | ]; |
michael@0 | 19 | |
michael@0 | 20 | var data = [ |
michael@0 | 21 | "Test data for data signature verifier", |
michael@0 | 22 | "The quick brown fox jumps over the lazy dog..." |
michael@0 | 23 | ]; |
michael@0 | 24 | |
michael@0 | 25 | var signatures = [ |
michael@0 | 26 | // Key 0, Data 0, MD2 hash algorithm |
michael@0 | 27 | "MIGTMA0GCSqGSIb3DQEBAgUAA4GBALe3hO76UCpI8b1/oJUCIPmC6AbnMAMlAqo7" + |
michael@0 | 28 | "pc3TaWmU9wISWmXSrwNmr/QQNjWDn4nzQn8/K/Ac+tszaXib6fVLKA1a6e+/E0qE" + |
michael@0 | 29 | "OIKFwUiDWCkGDgxM8aYiTgoSZub/5rokgse+ivuCRSVTv9mSxRzKwj+Cvp1EjKCT" + |
michael@0 | 30 | "iIl3nnTh", |
michael@0 | 31 | |
michael@0 | 32 | // Key 0, Data 0, MD5 hash algorithm |
michael@0 | 33 | "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAGGb2QkA8LcA+QZj1SoVFmMpVTd9P5Ac0Rjb" + |
michael@0 | 34 | "ldouMmngztMV/dxymVKCpknqelhsxTQ/zaqGZ4KKzcIffJa9jXi5XUD8XzDIKcFE" + |
michael@0 | 35 | "dQvti8oUNDPb6l1ybETI8LKh2ywyBCSZ/Q5BwUeS9nfx+4cAnu9YZf29SGljit+Y" + |
michael@0 | 36 | "XLPKZ+of", |
michael@0 | 37 | |
michael@0 | 38 | // Key 0, Data 0, SHA1 hash algorithm |
michael@0 | 39 | "MIGTMA0GCSqGSIb3DQEBBQUAA4GBAHcl6tqR5yjTDUJ5NiLOdIB4I6/C/rS2WW5a" + |
michael@0 | 40 | "7MVhYYhBgaZyGaem4LLT/REloOOLwPNMcmSEpwexqMSATbl9AAoJPq/wO3l4cZpO" + |
michael@0 | 41 | "tDkLlafsiwnqK156YvHp50zUq5Os28d6Bq/Nl2qjH1yizwlIEo0o9qo8Cq6QK3j2" + |
michael@0 | 42 | "MdFCopgk", |
michael@0 | 43 | |
michael@0 | 44 | // Key 0, Data 0, SHA256 hash algorithm |
michael@0 | 45 | "MIGTMA0GCSqGSIb3DQEBCwUAA4GBAAOtDvzWwbYK7zLUz0F3e3wmkL1YWXuD/GzQ" + |
michael@0 | 46 | "LgwOg6VWtn9v54M9nfv/+iX+m4udzIwHZU7utYM31vtwqRC36l0QKo2VMbiLySX+" + |
michael@0 | 47 | "uHnSK40Kk4SfBvMF1wuz6BQ8ia8uTjPPfC764dB1N7gQdgdRevLTrh2EU6+DLmSS" + |
michael@0 | 48 | "Sm1QJm9/", |
michael@0 | 49 | |
michael@0 | 50 | // Key 0, Data 0, SHA384 hash algorithm |
michael@0 | 51 | "MIGTMA0GCSqGSIb3DQEBDAUAA4GBAMWB3DskcGuGXpi3TO2Pm0g915EIvm5aOeXQ" + |
michael@0 | 52 | "sbs0ZGOwPyzYN1kKOmEpGHMeRhcIIBcF80ZC5N6dsTxeMGkFGOqhvB/HNl7gXMqF" + |
michael@0 | 53 | "OA8mG9vAcwfMeJlY4H5WbYD8bUn72UbIuS+sURLvWVhuIFBYPHHU7KVUaGAWl0rp" + |
michael@0 | 54 | "hCa4Dk37", |
michael@0 | 55 | |
michael@0 | 56 | // Key 0, Data 0, SHA512 hash algorithm |
michael@0 | 57 | "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAFkm61zH8Y0J5PA4GtOvoZA6w/SzHg5jFP11" + |
michael@0 | 58 | "gmXki81VgKwLF7Gyj4wRBX7Q9c8cNrNeoGZb12NUUxlR+u6J6VxcosVPKrCz7Xfj" + |
michael@0 | 59 | "LPi6+A1dNV5eH2B6tZR6wIiEatAWNIXxQZEJbj9BWefRFq6NnKhR5A/MEPnrZyoR" + |
michael@0 | 60 | "Da3YsDV3", |
michael@0 | 61 | |
michael@0 | 62 | // Key 0, Data 1, MD2 hash algorithm |
michael@0 | 63 | "MIGTMA0GCSqGSIb3DQEBAgUAA4GBAJjwosJK6jV9Bt6HhrFn7+48LRhamjWjzs7a" + |
michael@0 | 64 | "cf5D/GTuul6aQQvQJ4Lt26KTyh3VglaQJFToH0Ik/fR1lOJS3tCPr1RRH06cKZgK" + |
michael@0 | 65 | "haoUaGR8rmtn678wX067q7ACmKPeqmgj71pHm7O5YgN3z45iAazbUHP4erdbFUf9" + |
michael@0 | 66 | "4rOr3L2f", |
michael@0 | 67 | |
michael@0 | 68 | // Key 0, Data 1, MD5 hash algorithm |
michael@0 | 69 | "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAC0EAoHWTb4CC+gw7fs5zMaZw7PWoDH1rXMD" + |
michael@0 | 70 | "dKoMBDmAW1EXZTfUGUTv0ga3VzuPJKuHHZOFVyFDnt4qFrefzzWs17LiPpN+yVgo" + |
michael@0 | 71 | "6vBnpXLeIp7D9n94bz56gv9NZZmy02XQVKDaRc3E4JBC7Ze7RAHuKtWuZRTUKF86" + |
michael@0 | 72 | "VXakwW3a", |
michael@0 | 73 | |
michael@0 | 74 | // Key 0, Data 1, SHA1 hash algorithm |
michael@0 | 75 | "MIGTMA0GCSqGSIb3DQEBBQUAA4GBABkClr0Ot3aXBKYIiARdwpX8etDQO/Eqjxe8" + |
michael@0 | 76 | "pJyaqwj/P+x8j9/CbtJKJJTxvYmV9AhdgLPgoWjcTkfvqKdb1vpKKbV30QC/TEnu" + |
michael@0 | 77 | "ON+66MJgkwrZw6NCDyBRgMTjf4FWR75Ot1DLuu3+7uCswKCJe8la0HMm/AcqUzu1" + |
michael@0 | 78 | "SKOPMseI", |
michael@0 | 79 | |
michael@0 | 80 | // Key 0, Data 1, SHA256 hash algorithm |
michael@0 | 81 | "MIGTMA0GCSqGSIb3DQEBCwUAA4GBAE2cIr6Uzo7RISkGgCA5m4K8s9+0iHwzr2u/" + |
michael@0 | 82 | "3ICUrTPe4RY2g9RLd6qkwaHD101LW5TQw71fhePIxfWHEhWtTCLS5DnGiucxfGKW" + |
michael@0 | 83 | "47gOBJIYf0DG7o5N4lA99j2Zuj+V+yjAcLfq7Su5FwASbD30KqCue1/F03qdXUxj" + |
michael@0 | 84 | "ciJeGo2b", |
michael@0 | 85 | |
michael@0 | 86 | // Key 0, Data 1, SHA384 hash algorithm |
michael@0 | 87 | "MIGTMA0GCSqGSIb3DQEBDAUAA4GBAK+JfKJNBjw2d2iXT/pe9xMXPkLSkf+gjG2i" + |
michael@0 | 88 | "F7B0kBvMGyOVxuvQ4TCx+NFhAUevQugDHgBMkmAieg8mApcWWFWQ+8rbdUFv/hD7" + |
michael@0 | 89 | "fHW+QukMgcfLMquh0GtDuoM8ZKFBBvwnPGLLUh+ZMy8fEOjjH+s6bQQSpf072SSJ" + |
michael@0 | 90 | "K+Uo8DG2", |
michael@0 | 91 | |
michael@0 | 92 | // Key 0, Data 1, SHA512 hash algorithm |
michael@0 | 93 | "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAEEvDpyBssG0qFfRamNwkwSjhqYRVFdIa6+E" + |
michael@0 | 94 | "xfxdRqW/nxN5HuzFA8aajgSMXX0YFWPXV7OuVjCCJfZWhq7kQpTy96AmI/04rVdr" + |
michael@0 | 95 | "9gc5mc2tdLl3Yk/Qd+Xq8WYcQIZ5Ewyo7sr8eKtVhtEM8OtPR54FO2s1pkZwJdVf" + |
michael@0 | 96 | "ymMzHBoE", |
michael@0 | 97 | |
michael@0 | 98 | // Key 1, Data 0, MD5 hash algorithm |
michael@0 | 99 | "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAAIzLho2i5jfJ5SPPV/u2gUuefzhjEAsUhlL" + |
michael@0 | 100 | "Nir4FKhNzB2DZNbME9DtgNvdmZd00IjydYlaJ0dnLiMigXIaRJsyncYazULZdY6i" + |
michael@0 | 101 | "i7oP6llbXbszSTbHGolr5kQ+6cZPBBATOkJ+wekDdlvh5cZ+B0Lux4LevUDlGWAy" + |
michael@0 | 102 | "uR7bqrc5", |
michael@0 | 103 | |
michael@0 | 104 | // Key 1, Data 0, SHA512 hash algorithm |
michael@0 | 105 | "MIGTMA0GCSqGSIb3DQEBDQUAA4GBABsjF8K/SIaY3KTeIGpPEwl1+ZXLKBaHxlRT" + |
michael@0 | 106 | "b37PhorSfqW1KFjquCEASUUeFwCQ14uUIBaRQV2haRGA0dRpuWr4zrWZMcDKOsmX" + |
michael@0 | 107 | "r5XRvcti9/lNqoIID/Mq0tKtS6aVFZpoHIrwbXpV4hV+BRGhaPxV3RBzEIzM7bWJ" + |
michael@0 | 108 | "tN3JY9+1", |
michael@0 | 109 | |
michael@0 | 110 | // Key 1, Data 1, MD5 hash algorithm |
michael@0 | 111 | "MIGTMA0GCSqGSIb3DQEBBAUAA4GBAIAxRPXDAT2LBcOo7yTNr5uIZbPW9rkSX0Ba" + |
michael@0 | 112 | "h4sq6YRcxlnohaE2VO0CLGXFNwaBihhkkp+2dA76EvbMo/+O9XTWwroqtWWwvmxs" + |
michael@0 | 113 | "tWK6HvwYKnGFKOOZMOjNjmXjk446UVvxYCbU+NPM1LZTewT1/UpPWWRowF/lwX7m" + |
michael@0 | 114 | "SnT8d2ds", |
michael@0 | 115 | |
michael@0 | 116 | // Key 1, Data 1, SHA512 hash algorithm |
michael@0 | 117 | "MIGTMA0GCSqGSIb3DQEBDQUAA4GBAF0+XYD/r0Annz1GJ24GTkAlWY/OixCSV6Ix" + |
michael@0 | 118 | "OMM7P2d/jgOP+ICKIpxqaSE0CbkLiegUiidIOWvFqDxQJWlAAukDUWISGFfJMFxX" + |
michael@0 | 119 | "3jzJ0bBfeNY/1Qo8jMQopcNco/NlNgoSKAUOBtk31aFgNoVC3kWUk6pO97KEiJ+e" + |
michael@0 | 120 | "bQp9Z2/M", |
michael@0 | 121 | |
michael@0 | 122 | // Invalid signature data ("foobar" base 64 encoded) |
michael@0 | 123 | "Zm9vYmFy" |
michael@0 | 124 | ]; |
michael@0 | 125 | |
michael@0 | 126 | var tests = [ |
michael@0 | 127 | // Data Signature Key Expected Throws |
michael@0 | 128 | // Pass cases |
michael@0 | 129 | [0, 0, 0, true, false], //0 |
michael@0 | 130 | [0, 1, 0, true, false], //1 |
michael@0 | 131 | [0, 2, 0, true, false], //2 |
michael@0 | 132 | [0, 3, 0, true, false], //3 |
michael@0 | 133 | [0, 4, 0, true, false], //4 |
michael@0 | 134 | [0, 5, 0, true, false], //5 |
michael@0 | 135 | [1, 6, 0, true, false], //6 |
michael@0 | 136 | [1, 7, 0, true, false], //7 |
michael@0 | 137 | [1, 8, 0, true, false], //8 |
michael@0 | 138 | [1, 9, 0, true, false], //9 |
michael@0 | 139 | [1, 10, 0, true, false], //10 |
michael@0 | 140 | [1, 11, 0, true, false], //11 |
michael@0 | 141 | [0, 12, 1, true, false], //12 |
michael@0 | 142 | [0, 13, 1, true, false], //13 |
michael@0 | 143 | [1, 14, 1, true, false], //14 |
michael@0 | 144 | [1, 15, 1, true, false], //15 |
michael@0 | 145 | // Incorrect data cases |
michael@0 | 146 | [1, 0, 0, false, false], //16 |
michael@0 | 147 | [1, 1, 0, false, false], //17 |
michael@0 | 148 | [1, 2, 0, false, false], //18 |
michael@0 | 149 | [1, 3, 0, false, false], //19 |
michael@0 | 150 | [1, 4, 0, false, false], //20 |
michael@0 | 151 | [1, 5, 0, false, false], //21 |
michael@0 | 152 | [0, 6, 0, false, false], //22 |
michael@0 | 153 | [0, 7, 0, false, false], //23 |
michael@0 | 154 | [0, 8, 0, false, false], //24 |
michael@0 | 155 | [0, 9, 0, false, false], //25 |
michael@0 | 156 | [0, 10, 0, false, false], //26 |
michael@0 | 157 | [0, 11, 0, false, false], //27 |
michael@0 | 158 | // Incorrect key cases |
michael@0 | 159 | [0, 1, 1, false, false], //28 |
michael@0 | 160 | [0, 5, 1, false, false], //29 |
michael@0 | 161 | [1, 7, 1, false, false], //30 |
michael@0 | 162 | [1, 11, 1, false, false], //31 |
michael@0 | 163 | [0, 12, 0, false, false], //32 |
michael@0 | 164 | [0, 13, 0, false, false], //33 |
michael@0 | 165 | [1, 14, 0, false, false], //34 |
michael@0 | 166 | [1, 15, 0, false, false], //35 |
michael@0 | 167 | // Invalid data cases |
michael@0 | 168 | [0, 0, 2, false, true], //36 |
michael@0 | 169 | [0, 1, 2, false, true], //37 |
michael@0 | 170 | [0, 16, 0, false, true], //38 |
michael@0 | 171 | [1, 16, 0, false, true], //39 |
michael@0 | 172 | ]; |
michael@0 | 173 | |
michael@0 | 174 | function run_test() { |
michael@0 | 175 | var verifier = Cc["@mozilla.org/security/datasignatureverifier;1"]. |
michael@0 | 176 | createInstance(Ci.nsIDataSignatureVerifier); |
michael@0 | 177 | |
michael@0 | 178 | for (var t = 0; t < tests.length; t++) { |
michael@0 | 179 | try { |
michael@0 | 180 | var result = verifier.verifyData(data[tests[t][0]], |
michael@0 | 181 | signatures[tests[t][1]], |
michael@0 | 182 | keys[tests[t][2]]); |
michael@0 | 183 | if (tests[t][4]) |
michael@0 | 184 | do_throw("Test " + t + " didn't throw"); |
michael@0 | 185 | if (result != tests[t][3]) |
michael@0 | 186 | do_throw("Test " + t + " was " + result + " but should have been " + tests[t][3]); |
michael@0 | 187 | } |
michael@0 | 188 | catch (e) { |
michael@0 | 189 | if (!tests[t][4]) |
michael@0 | 190 | do_throw("Test " + t + " threw " + e); |
michael@0 | 191 | } |
michael@0 | 192 | } |
michael@0 | 193 | } |