1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/manager/ssl/tests/unit/test_datasignatureverifier.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,193 @@ 1.4 +const DSV = Ci.nsIDataSignatureVerifier; 1.5 + 1.6 +var keys = [ 1.7 +// RSA key 1.8 +"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" + 1.9 +"Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" + 1.10 +"NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" + 1.11 +"awB/zH4KaPiY3vnrzQIDAQAB", 1.12 + 1.13 +// RSA key 1.14 +"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHe69VsjNCwnGF9YGZLgnobp3D" + 1.15 +"c1KgWzpbT+f12vVKkV3YBpA9KMVMy6wpxlDjvLJjfp/0HvaH7aaz/7kgxZw70Y60" + 1.16 +"LaJtkAcl1ZVAxS2lQKRTAzZ0RhoTSI1xVqGTjiQakgVdUeghtnqqwp5o1inZv3Qh" + 1.17 +"nUOMNPyAV8zGt+ZQHQIDAQAB", 1.18 + 1.19 +// Invalid key data ("foobar" base 64 encoded) 1.20 +"Zm9vYmFy" 1.21 +]; 1.22 + 1.23 +var data = [ 1.24 +"Test data for data signature verifier", 1.25 +"The quick brown fox jumps over the lazy dog..." 1.26 +]; 1.27 + 1.28 +var signatures = [ 1.29 +// Key 0, Data 0, MD2 hash algorithm 1.30 +"MIGTMA0GCSqGSIb3DQEBAgUAA4GBALe3hO76UCpI8b1/oJUCIPmC6AbnMAMlAqo7" + 1.31 +"pc3TaWmU9wISWmXSrwNmr/QQNjWDn4nzQn8/K/Ac+tszaXib6fVLKA1a6e+/E0qE" + 1.32 +"OIKFwUiDWCkGDgxM8aYiTgoSZub/5rokgse+ivuCRSVTv9mSxRzKwj+Cvp1EjKCT" + 1.33 +"iIl3nnTh", 1.34 + 1.35 +// Key 0, Data 0, MD5 hash algorithm 1.36 +"MIGTMA0GCSqGSIb3DQEBBAUAA4GBAGGb2QkA8LcA+QZj1SoVFmMpVTd9P5Ac0Rjb" + 1.37 +"ldouMmngztMV/dxymVKCpknqelhsxTQ/zaqGZ4KKzcIffJa9jXi5XUD8XzDIKcFE" + 1.38 +"dQvti8oUNDPb6l1ybETI8LKh2ywyBCSZ/Q5BwUeS9nfx+4cAnu9YZf29SGljit+Y" + 1.39 +"XLPKZ+of", 1.40 + 1.41 +// Key 0, Data 0, SHA1 hash algorithm 1.42 +"MIGTMA0GCSqGSIb3DQEBBQUAA4GBAHcl6tqR5yjTDUJ5NiLOdIB4I6/C/rS2WW5a" + 1.43 +"7MVhYYhBgaZyGaem4LLT/REloOOLwPNMcmSEpwexqMSATbl9AAoJPq/wO3l4cZpO" + 1.44 +"tDkLlafsiwnqK156YvHp50zUq5Os28d6Bq/Nl2qjH1yizwlIEo0o9qo8Cq6QK3j2" + 1.45 +"MdFCopgk", 1.46 + 1.47 +// Key 0, Data 0, SHA256 hash algorithm 1.48 +"MIGTMA0GCSqGSIb3DQEBCwUAA4GBAAOtDvzWwbYK7zLUz0F3e3wmkL1YWXuD/GzQ" + 1.49 +"LgwOg6VWtn9v54M9nfv/+iX+m4udzIwHZU7utYM31vtwqRC36l0QKo2VMbiLySX+" + 1.50 +"uHnSK40Kk4SfBvMF1wuz6BQ8ia8uTjPPfC764dB1N7gQdgdRevLTrh2EU6+DLmSS" + 1.51 +"Sm1QJm9/", 1.52 + 1.53 +// Key 0, Data 0, SHA384 hash algorithm 1.54 +"MIGTMA0GCSqGSIb3DQEBDAUAA4GBAMWB3DskcGuGXpi3TO2Pm0g915EIvm5aOeXQ" + 1.55 +"sbs0ZGOwPyzYN1kKOmEpGHMeRhcIIBcF80ZC5N6dsTxeMGkFGOqhvB/HNl7gXMqF" + 1.56 +"OA8mG9vAcwfMeJlY4H5WbYD8bUn72UbIuS+sURLvWVhuIFBYPHHU7KVUaGAWl0rp" + 1.57 +"hCa4Dk37", 1.58 + 1.59 +// Key 0, Data 0, SHA512 hash algorithm 1.60 +"MIGTMA0GCSqGSIb3DQEBDQUAA4GBAFkm61zH8Y0J5PA4GtOvoZA6w/SzHg5jFP11" + 1.61 +"gmXki81VgKwLF7Gyj4wRBX7Q9c8cNrNeoGZb12NUUxlR+u6J6VxcosVPKrCz7Xfj" + 1.62 +"LPi6+A1dNV5eH2B6tZR6wIiEatAWNIXxQZEJbj9BWefRFq6NnKhR5A/MEPnrZyoR" + 1.63 +"Da3YsDV3", 1.64 + 1.65 +// Key 0, Data 1, MD2 hash algorithm 1.66 +"MIGTMA0GCSqGSIb3DQEBAgUAA4GBAJjwosJK6jV9Bt6HhrFn7+48LRhamjWjzs7a" + 1.67 +"cf5D/GTuul6aQQvQJ4Lt26KTyh3VglaQJFToH0Ik/fR1lOJS3tCPr1RRH06cKZgK" + 1.68 +"haoUaGR8rmtn678wX067q7ACmKPeqmgj71pHm7O5YgN3z45iAazbUHP4erdbFUf9" + 1.69 +"4rOr3L2f", 1.70 + 1.71 +// Key 0, Data 1, MD5 hash algorithm 1.72 +"MIGTMA0GCSqGSIb3DQEBBAUAA4GBAC0EAoHWTb4CC+gw7fs5zMaZw7PWoDH1rXMD" + 1.73 +"dKoMBDmAW1EXZTfUGUTv0ga3VzuPJKuHHZOFVyFDnt4qFrefzzWs17LiPpN+yVgo" + 1.74 +"6vBnpXLeIp7D9n94bz56gv9NZZmy02XQVKDaRc3E4JBC7Ze7RAHuKtWuZRTUKF86" + 1.75 +"VXakwW3a", 1.76 + 1.77 +// Key 0, Data 1, SHA1 hash algorithm 1.78 +"MIGTMA0GCSqGSIb3DQEBBQUAA4GBABkClr0Ot3aXBKYIiARdwpX8etDQO/Eqjxe8" + 1.79 +"pJyaqwj/P+x8j9/CbtJKJJTxvYmV9AhdgLPgoWjcTkfvqKdb1vpKKbV30QC/TEnu" + 1.80 +"ON+66MJgkwrZw6NCDyBRgMTjf4FWR75Ot1DLuu3+7uCswKCJe8la0HMm/AcqUzu1" + 1.81 +"SKOPMseI", 1.82 + 1.83 +// Key 0, Data 1, SHA256 hash algorithm 1.84 +"MIGTMA0GCSqGSIb3DQEBCwUAA4GBAE2cIr6Uzo7RISkGgCA5m4K8s9+0iHwzr2u/" + 1.85 +"3ICUrTPe4RY2g9RLd6qkwaHD101LW5TQw71fhePIxfWHEhWtTCLS5DnGiucxfGKW" + 1.86 +"47gOBJIYf0DG7o5N4lA99j2Zuj+V+yjAcLfq7Su5FwASbD30KqCue1/F03qdXUxj" + 1.87 +"ciJeGo2b", 1.88 + 1.89 +// Key 0, Data 1, SHA384 hash algorithm 1.90 +"MIGTMA0GCSqGSIb3DQEBDAUAA4GBAK+JfKJNBjw2d2iXT/pe9xMXPkLSkf+gjG2i" + 1.91 +"F7B0kBvMGyOVxuvQ4TCx+NFhAUevQugDHgBMkmAieg8mApcWWFWQ+8rbdUFv/hD7" + 1.92 +"fHW+QukMgcfLMquh0GtDuoM8ZKFBBvwnPGLLUh+ZMy8fEOjjH+s6bQQSpf072SSJ" + 1.93 +"K+Uo8DG2", 1.94 + 1.95 +// Key 0, Data 1, SHA512 hash algorithm 1.96 +"MIGTMA0GCSqGSIb3DQEBDQUAA4GBAEEvDpyBssG0qFfRamNwkwSjhqYRVFdIa6+E" + 1.97 +"xfxdRqW/nxN5HuzFA8aajgSMXX0YFWPXV7OuVjCCJfZWhq7kQpTy96AmI/04rVdr" + 1.98 +"9gc5mc2tdLl3Yk/Qd+Xq8WYcQIZ5Ewyo7sr8eKtVhtEM8OtPR54FO2s1pkZwJdVf" + 1.99 +"ymMzHBoE", 1.100 + 1.101 +// Key 1, Data 0, MD5 hash algorithm 1.102 +"MIGTMA0GCSqGSIb3DQEBBAUAA4GBAAIzLho2i5jfJ5SPPV/u2gUuefzhjEAsUhlL" + 1.103 +"Nir4FKhNzB2DZNbME9DtgNvdmZd00IjydYlaJ0dnLiMigXIaRJsyncYazULZdY6i" + 1.104 +"i7oP6llbXbszSTbHGolr5kQ+6cZPBBATOkJ+wekDdlvh5cZ+B0Lux4LevUDlGWAy" + 1.105 +"uR7bqrc5", 1.106 + 1.107 +// Key 1, Data 0, SHA512 hash algorithm 1.108 +"MIGTMA0GCSqGSIb3DQEBDQUAA4GBABsjF8K/SIaY3KTeIGpPEwl1+ZXLKBaHxlRT" + 1.109 +"b37PhorSfqW1KFjquCEASUUeFwCQ14uUIBaRQV2haRGA0dRpuWr4zrWZMcDKOsmX" + 1.110 +"r5XRvcti9/lNqoIID/Mq0tKtS6aVFZpoHIrwbXpV4hV+BRGhaPxV3RBzEIzM7bWJ" + 1.111 +"tN3JY9+1", 1.112 + 1.113 +// Key 1, Data 1, MD5 hash algorithm 1.114 +"MIGTMA0GCSqGSIb3DQEBBAUAA4GBAIAxRPXDAT2LBcOo7yTNr5uIZbPW9rkSX0Ba" + 1.115 +"h4sq6YRcxlnohaE2VO0CLGXFNwaBihhkkp+2dA76EvbMo/+O9XTWwroqtWWwvmxs" + 1.116 +"tWK6HvwYKnGFKOOZMOjNjmXjk446UVvxYCbU+NPM1LZTewT1/UpPWWRowF/lwX7m" + 1.117 +"SnT8d2ds", 1.118 + 1.119 +// Key 1, Data 1, SHA512 hash algorithm 1.120 +"MIGTMA0GCSqGSIb3DQEBDQUAA4GBAF0+XYD/r0Annz1GJ24GTkAlWY/OixCSV6Ix" + 1.121 +"OMM7P2d/jgOP+ICKIpxqaSE0CbkLiegUiidIOWvFqDxQJWlAAukDUWISGFfJMFxX" + 1.122 +"3jzJ0bBfeNY/1Qo8jMQopcNco/NlNgoSKAUOBtk31aFgNoVC3kWUk6pO97KEiJ+e" + 1.123 +"bQp9Z2/M", 1.124 + 1.125 +// Invalid signature data ("foobar" base 64 encoded) 1.126 +"Zm9vYmFy" 1.127 +]; 1.128 + 1.129 +var tests = [ 1.130 +// Data Signature Key Expected Throws 1.131 +// Pass cases 1.132 + [0, 0, 0, true, false], //0 1.133 + [0, 1, 0, true, false], //1 1.134 + [0, 2, 0, true, false], //2 1.135 + [0, 3, 0, true, false], //3 1.136 + [0, 4, 0, true, false], //4 1.137 + [0, 5, 0, true, false], //5 1.138 + [1, 6, 0, true, false], //6 1.139 + [1, 7, 0, true, false], //7 1.140 + [1, 8, 0, true, false], //8 1.141 + [1, 9, 0, true, false], //9 1.142 + [1, 10, 0, true, false], //10 1.143 + [1, 11, 0, true, false], //11 1.144 + [0, 12, 1, true, false], //12 1.145 + [0, 13, 1, true, false], //13 1.146 + [1, 14, 1, true, false], //14 1.147 + [1, 15, 1, true, false], //15 1.148 +// Incorrect data cases 1.149 + [1, 0, 0, false, false], //16 1.150 + [1, 1, 0, false, false], //17 1.151 + [1, 2, 0, false, false], //18 1.152 + [1, 3, 0, false, false], //19 1.153 + [1, 4, 0, false, false], //20 1.154 + [1, 5, 0, false, false], //21 1.155 + [0, 6, 0, false, false], //22 1.156 + [0, 7, 0, false, false], //23 1.157 + [0, 8, 0, false, false], //24 1.158 + [0, 9, 0, false, false], //25 1.159 + [0, 10, 0, false, false], //26 1.160 + [0, 11, 0, false, false], //27 1.161 +// Incorrect key cases 1.162 + [0, 1, 1, false, false], //28 1.163 + [0, 5, 1, false, false], //29 1.164 + [1, 7, 1, false, false], //30 1.165 + [1, 11, 1, false, false], //31 1.166 + [0, 12, 0, false, false], //32 1.167 + [0, 13, 0, false, false], //33 1.168 + [1, 14, 0, false, false], //34 1.169 + [1, 15, 0, false, false], //35 1.170 +// Invalid data cases 1.171 + [0, 0, 2, false, true], //36 1.172 + [0, 1, 2, false, true], //37 1.173 + [0, 16, 0, false, true], //38 1.174 + [1, 16, 0, false, true], //39 1.175 +]; 1.176 + 1.177 +function run_test() { 1.178 + var verifier = Cc["@mozilla.org/security/datasignatureverifier;1"]. 1.179 + createInstance(Ci.nsIDataSignatureVerifier); 1.180 + 1.181 + for (var t = 0; t < tests.length; t++) { 1.182 + try { 1.183 + var result = verifier.verifyData(data[tests[t][0]], 1.184 + signatures[tests[t][1]], 1.185 + keys[tests[t][2]]); 1.186 + if (tests[t][4]) 1.187 + do_throw("Test " + t + " didn't throw"); 1.188 + if (result != tests[t][3]) 1.189 + do_throw("Test " + t + " was " + result + " but should have been " + tests[t][3]); 1.190 + } 1.191 + catch (e) { 1.192 + if (!tests[t][4]) 1.193 + do_throw("Test " + t + " threw " + e); 1.194 + } 1.195 + } 1.196 +}