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

changeset 0
6474c204b198
     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 +}

mercurial