/security/nss/lib/freebl/mksp.c

http://github.com/zpao/v8monkey · C · 159 lines · 103 code · 7 blank · 49 comment · 6 complexity · 507be97a02aab34f78df211d74dff3d8 MD5 · raw file

  1. /*
  2. * mksp.c
  3. *
  4. * Generate SP tables for DES-150 library
  5. *
  6. * ***** BEGIN LICENSE BLOCK *****
  7. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  8. *
  9. * The contents of this file are subject to the Mozilla Public License Version
  10. * 1.1 (the "License"); you may not use this file except in compliance with
  11. * the License. You may obtain a copy of the License at
  12. * http://www.mozilla.org/MPL/
  13. *
  14. * Software distributed under the License is distributed on an "AS IS" basis,
  15. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  16. * for the specific language governing rights and limitations under the
  17. * License.
  18. *
  19. * The Original Code is the DES-150 library.
  20. *
  21. * The Initial Developer of the Original Code is
  22. * Nelson B. Bolyard, nelsonb@iname.com.
  23. * Portions created by the Initial Developer are Copyright (C) 1990
  24. * the Initial Developer. All Rights Reserved.
  25. *
  26. * Contributor(s):
  27. *
  28. * Alternatively, the contents of this file may be used under the terms of
  29. * either the GNU General Public License Version 2 or later (the "GPL"), or
  30. * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  31. * in which case the provisions of the GPL or the LGPL are applicable instead
  32. * of those above. If you wish to allow use of your version of this file only
  33. * under the terms of either the GPL or the LGPL, and not to allow others to
  34. * use your version of this file under the terms of the MPL, indicate your
  35. * decision by deleting the provisions above and replace them with the notice
  36. * and other provisions required by the GPL or the LGPL. If you do not delete
  37. * the provisions above, a recipient may use your version of this file under
  38. * the terms of any one of the MPL, the GPL or the LGPL.
  39. *
  40. * ***** END LICENSE BLOCK ***** */
  41. #include <stdio.h>
  42. /*
  43. * sboxes - the tables for the s-box functions
  44. * from FIPS 46, pages 15-16.
  45. */
  46. unsigned char S[8][64] = {
  47. /* Func S1 = */ {
  48. 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
  49. 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
  50. 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
  51. 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
  52. },
  53. /* Func S2 = */ {
  54. 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
  55. 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
  56. 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
  57. 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
  58. },
  59. /* Func S3 = */ {
  60. 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
  61. 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
  62. 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
  63. 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12
  64. },
  65. /* Func S4 = */ {
  66. 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
  67. 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
  68. 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
  69. 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14
  70. },
  71. /* Func S5 = */ {
  72. 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
  73. 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
  74. 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
  75. 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3
  76. },
  77. /* Func S6 = */ {
  78. 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
  79. 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
  80. 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
  81. 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13
  82. },
  83. /* Func S7 = */ {
  84. 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
  85. 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
  86. 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
  87. 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12
  88. },
  89. /* Func S8 = */ {
  90. 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
  91. 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
  92. 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
  93. 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
  94. }
  95. };
  96. /*
  97. * Permutation function for results from s-boxes
  98. * from FIPS 46 pages 12 and 16.
  99. * P =
  100. */
  101. unsigned char P[32] = {
  102. 16, 7, 20, 21, 29, 12, 28, 17,
  103. 1, 15, 23, 26, 5, 18, 31, 10,
  104. 2, 8, 24, 14, 32, 27, 3, 9,
  105. 19, 13, 30, 6, 22, 11, 4, 25
  106. };
  107. unsigned int Pinv[32];
  108. unsigned int SP[8][64];
  109. void
  110. makePinv(void)
  111. {
  112. int i;
  113. unsigned int Pi = 0x80000000;
  114. for (i = 0; i < 32; ++i) {
  115. int j = 32 - P[i];
  116. Pinv[j] = Pi;
  117. Pi >>= 1;
  118. }
  119. }
  120. void
  121. makeSP(void)
  122. {
  123. int box;
  124. for (box = 0; box < 8; ++box) {
  125. int item;
  126. printf("/* box S%d */ {\n", box + 1);
  127. for (item = 0; item < 64; ++item ) {
  128. unsigned int s = S[box][item];
  129. unsigned int val = 0;
  130. unsigned int bitnum = (7-box) * 4;
  131. for (; s; s >>= 1, ++bitnum) {
  132. if (s & 1) {
  133. val |= Pinv[bitnum];
  134. }
  135. }
  136. val = (val << 3) | (val >> 29);
  137. SP[box][item] = val;
  138. }
  139. for (item = 0; item < 64; item += 4) {
  140. printf("\t0x%08x, 0x%08x, 0x%08x, 0x%08x,\n",
  141. SP[box][item], SP[box][item+1], SP[box][item+2], SP[box][item+3]);
  142. }
  143. printf(" },\n");
  144. }
  145. }
  146. int
  147. main()
  148. {
  149. makePinv();
  150. makeSP();
  151. return 0;
  152. }