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

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

mercurial