security/manager/ssl/tests/unit/test_datasignatureverifier.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

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 }

mercurial