security/nss/lib/freebl/mksp.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  *  mksp.c
     3  *
     4  *  Generate SP tables for DES-150 library
     5  *
     6  * This Source Code Form is subject to the terms of the Mozilla Public
     7  * License, v. 2.0. If a copy of the MPL was not distributed with this
     8  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
    10 #include <stdio.h>
    12 /*
    13  * sboxes - the tables for the s-box functions
    14  *        from FIPS 46, pages 15-16.
    15  */
    16 unsigned char S[8][64] = {
    17 /* Func S1 = */ {
    18 	14,  0,  4, 15, 13,  7,  1,  4,  2, 14, 15,  2, 11, 13,  8,  1,
    19 	 3, 10, 10,  6,  6, 12, 12, 11,  5,  9,  9,  5,  0,  3,  7,  8,
    20 	 4, 15,  1, 12, 14,  8,  8,  2, 13,  4,  6,  9,  2,  1, 11,  7,
    21 	15,  5, 12, 11,  9,  3,  7, 14,  3, 10, 10,  0,  5,  6,  0, 13
    22     },
    23 /* Func S2 = */ {
    24 	15,  3,  1, 13,  8,  4, 14,  7,  6, 15, 11,  2,  3,  8,  4, 14,
    25 	 9, 12,  7,  0,  2,  1, 13, 10, 12,  6,  0,  9,  5, 11, 10,  5,
    26 	 0, 13, 14,  8,  7, 10, 11,  1, 10,  3,  4, 15, 13,  4,  1,  2,
    27 	 5, 11,  8,  6, 12,  7,  6, 12,  9,  0,  3,  5,  2, 14, 15,  9
    28     },
    29 /* Func S3 = */ {
    30 	10, 13,  0,  7,  9,  0, 14,  9,  6,  3,  3,  4, 15,  6,  5, 10,
    31 	 1,  2, 13,  8, 12,  5,  7, 14, 11, 12,  4, 11,  2, 15,  8,  1,
    32 	13,  1,  6, 10,  4, 13,  9,  0,  8,  6, 15,  9,  3,  8,  0,  7,
    33 	11,  4,  1, 15,  2, 14, 12,  3,  5, 11, 10,  5, 14,  2,  7, 12
    34     },
    35 /* Func S4 = */ {
    36 	 7, 13, 13,  8, 14, 11,  3,  5,  0,  6,  6, 15,  9,  0, 10,  3,
    37 	 1,  4,  2,  7,  8,  2,  5, 12, 11,  1, 12, 10,  4, 14, 15,  9,
    38 	10,  3,  6, 15,  9,  0,  0,  6, 12, 10, 11,  1,  7, 13, 13,  8,
    39 	15,  9,  1,  4,  3,  5, 14, 11,  5, 12,  2,  7,  8,  2,  4, 14
    40     },
    41 /* Func S5 = */ {
    42 	 2, 14, 12, 11,  4,  2,  1, 12,  7,  4, 10,  7, 11, 13,  6,  1,
    43 	 8,  5,  5,  0,  3, 15, 15, 10, 13,  3,  0,  9, 14,  8,  9,  6,
    44 	 4, 11,  2,  8,  1, 12, 11,  7, 10,  1, 13, 14,  7,  2,  8, 13,
    45 	15,  6,  9, 15, 12,  0,  5,  9,  6, 10,  3,  4,  0,  5, 14,  3
    46     },
    47 /* Func S6 = */ {
    48 	12, 10,  1, 15, 10,  4, 15,  2,  9,  7,  2, 12,  6,  9,  8,  5,
    49 	 0,  6, 13,  1,  3, 13,  4, 14, 14,  0,  7, 11,  5,  3, 11,  8,
    50 	 9,  4, 14,  3, 15,  2,  5, 12,  2,  9,  8,  5, 12, 15,  3, 10,
    51 	 7, 11,  0, 14,  4,  1, 10,  7,  1,  6, 13,  0, 11,  8,  6, 13
    52     },
    53 /* Func S7 = */ {
    54 	 4, 13, 11,  0,  2, 11, 14,  7, 15,  4,  0,  9,  8,  1, 13, 10,
    55 	 3, 14, 12,  3,  9,  5,  7, 12,  5,  2, 10, 15,  6,  8,  1,  6,
    56 	 1,  6,  4, 11, 11, 13, 13,  8, 12,  1,  3,  4,  7, 10, 14,  7,
    57 	10,  9, 15,  5,  6,  0,  8, 15,  0, 14,  5,  2,  9,  3,  2, 12
    58     },
    59 /* Func S8 = */ {
    60 	13,  1,  2, 15,  8, 13,  4,  8,  6, 10, 15,  3, 11,  7,  1,  4,
    61 	10, 12,  9,  5,  3,  6, 14, 11,  5,  0,  0, 14, 12,  9,  7,  2,
    62 	 7,  2, 11,  1,  4, 14,  1,  7,  9,  4, 12, 10, 14,  8,  2, 13,
    63 	 0, 15,  6, 12, 10,  9, 13,  0, 15,  3,  3,  5,  5,  6,  8, 11
    64     }
    65 };
    67 /*
    68  * Permutation function for results from s-boxes
    69  *   from FIPS 46 pages 12 and 16.
    70  * P = 
    71  */
    72 unsigned char P[32] = {
    73 	16,   7,  20,  21,  29,  12,  28,  17,
    74 	 1,  15,  23,  26,   5,  18,  31,  10,
    75 	 2,   8,  24,  14,  32,  27,   3,   9,
    76 	19,  13,  30,   6,  22,  11,   4,  25
    77 };
    79 unsigned int Pinv[32];
    80 unsigned int SP[8][64];
    82 void
    83 makePinv(void)
    84 {
    85     int i;
    86     unsigned int Pi = 0x80000000;
    87     for (i = 0; i < 32; ++i) {
    88     	int j = 32 - P[i];
    89 	Pinv[j] = Pi;
    90 	Pi >>= 1;
    91     }
    92 }
    94 void
    95 makeSP(void)
    96 {
    97     int box;
    98     for (box = 0; box < 8; ++box) {
    99 	int item;
   100 	printf("/* box S%d */ {\n", box + 1);
   101     	for (item = 0; item < 64; ++item ) {
   102 	    unsigned int s = S[box][item];
   103 	    unsigned int val = 0;
   104 	    unsigned int bitnum = (7-box) * 4;
   105 	    for (; s; s >>= 1, ++bitnum) {
   106 		if (s & 1) {
   107 		    val |= Pinv[bitnum];
   108 		}
   109 	    }
   110 	    val = (val << 3) | (val >> 29);
   111 	    SP[box][item] = val;
   112 	}
   113 	for (item = 0; item < 64; item += 4) {
   114 	    printf("\t0x%08x, 0x%08x, 0x%08x, 0x%08x,\n",
   115 	    SP[box][item], SP[box][item+1], SP[box][item+2], SP[box][item+3]);
   116 	}
   117 	printf("    },\n");
   118     }
   119 }
   121 int
   122 main()
   123 {
   124     makePinv();
   125     makeSP();
   126     return 0;
   127 }

mercurial