You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
2.2 KiB

  1. pragma circom 2.0.0;
  2. include "../node_modules/circomlib/circuits/gates.circom";
  3. include "../node_modules/circomlib/circuits/sha256/xor3.circom";
  4. include "../node_modules/circomlib/circuits/sha256/shift.circom"; // contains ShiftRight
  5. template Xor5(n) {
  6. signal input a[n];
  7. signal input b[n];
  8. signal input c[n];
  9. signal input d[n];
  10. signal input e[n];
  11. signal output out[n];
  12. var i;
  13. component xor3 = Xor3(n);
  14. for (i=0; i<n; i++) {
  15. xor3.a[i] <== a[i];
  16. xor3.b[i] <== b[i];
  17. xor3.c[i] <== c[i];
  18. }
  19. component xor4 = XorArray(n);
  20. for (i=0; i<n; i++) {
  21. xor4.a[i] <== xor3.out[i];
  22. xor4.b[i] <== d[i];
  23. }
  24. component xor5 = XorArray(n);
  25. for (i=0; i<n; i++) {
  26. xor5.a[i] <== xor4.out[i];
  27. xor5.b[i] <== e[i];
  28. }
  29. for (i=0; i<n; i++) {
  30. out[i] <== xor5.out[i];
  31. }
  32. }
  33. template XorArray(n) {
  34. signal input a[n];
  35. signal input b[n];
  36. signal output out[n];
  37. var i;
  38. component aux[n];
  39. for (i=0; i<n; i++) {
  40. aux[i] = XOR();
  41. aux[i].a <== a[i];
  42. aux[i].b <== b[i];
  43. }
  44. for (i=0; i<n; i++) {
  45. out[i] <== aux[i].out;
  46. }
  47. }
  48. template XorArraySingle(n) {
  49. signal input a[n];
  50. signal output out[n];
  51. var i;
  52. component aux[n];
  53. for (i=0; i<n; i++) {
  54. aux[i] = XOR();
  55. aux[i].a <== a[i];
  56. aux[i].b <== 1;
  57. }
  58. for (i=0; i<n; i++) {
  59. out[i] <== aux[i].out;
  60. }
  61. }
  62. template OrArray(n) {
  63. signal input a[n];
  64. signal input b[n];
  65. signal output out[n];
  66. var i;
  67. component aux[n];
  68. for (i=0; i<n; i++) {
  69. aux[i] = OR();
  70. aux[i].a <== a[i];
  71. aux[i].b <== b[i];
  72. }
  73. for (i=0; i<n; i++) {
  74. out[i] <== aux[i].out;
  75. }
  76. }
  77. template AndArray(n) {
  78. signal input a[n];
  79. signal input b[n];
  80. signal output out[n];
  81. var i;
  82. component aux[n];
  83. for (i=0; i<n; i++) {
  84. aux[i] = AND();
  85. aux[i].a <== a[i];
  86. aux[i].b <== b[i];
  87. }
  88. for (i=0; i<n; i++) {
  89. out[i] <== aux[i].out;
  90. }
  91. }
  92. template ShL(n, r) {
  93. signal input in[n];
  94. signal output out[n];
  95. for (var i=0; i<n; i++) {
  96. if (i < r) {
  97. out[i] <== 0;
  98. } else {
  99. out[i] <== in[ i-r ];
  100. }
  101. }
  102. }