Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. // WeakTea Block Cipher
  2. // Compile as
  3. // g++ -O2 weaktea.cpp -o weaktea
  4. // or
  5. // cl /O2 weaktea.cpp
  6. //
  7. // (c) Dr. Dimwit 2010
  8. //
  9.  
  10. #include <stdio.h>
  11.  
  12. using namespace std;
  13.  
  14. void encode(unsigned short* v, unsigned short* k) {
  15. unsigned short n=32, y=v[0],z=v[1], sum=0,
  16. delta=0x9e37; /* a key schedule constant */
  17. while (n-->0)
  18. {
  19. sum += delta ;
  20. y += ((z<<2)+k[0]) ^ (z+sum) ^ ((z>>3)+k[1]) ;
  21. z += ((y<<2)+k[0]) ^ (y+sum) ^ ((y>>3)+k[1]) ;
  22. }
  23. v[0]=y ; v[1]=z ; }
  24.  
  25.  
  26. void decode(unsigned short* v,unsigned short* k) {
  27. unsigned short n=32, sum, y=v[0], z=v[1],
  28. delta=0x9e37 ;
  29. sum=delta<<5;
  30. while (n-->0)
  31. {
  32. z-= ((y<<2)+k[0]) ^ (y+sum) ^ ((y>>3)+k[1]) ;
  33. y-= ((z<<2)+k[0]) ^ (z+sum) ^ ((z>>3)+k[1]) ;
  34. sum-=delta ;
  35. }
  36. v[0]=y ; v[1]=z ; }
  37.  
  38. int main(int argc, char *argv[])
  39. {
  40. unsigned short k1[2],k2[2];
  41. unsigned short p[2],c[2];
  42.  
  43. //k1[0]=0xXXXX;
  44. k1[0]=0;
  45. k1[1]=0;
  46. //k1[1]=0xXXXX;
  47.  
  48. //k2[0]=0xXXXX;
  49. //k2[1]=0xXXXX;
  50. k2[0]=0;
  51. k2[1]=0;
  52.  
  53. p[0]=0x0001;
  54. p[1]=0x0002;
  55.  
  56. printf("Plaintext (%4x,%4x)",p[0],p[1]);
  57.  
  58. /* double encrypt */
  59.  
  60. encode(p,k1);
  61. encode(p,k2);
  62.  
  63. printf(" Encoded= ");
  64. printf("(%4x,%4x)",p[0],p[1]);
  65.  
  66. /* double decrypt */
  67.  
  68. decode(p,k2);
  69. decode(p,k1);
  70.  
  71. printf(" Decoded= ");
  72. printf("(%4x,%4x)\n",p[0],p[1]);
  73.  
  74.  
  75. p[0]=0x1234;
  76. p[1]=0x5678;
  77.  
  78. printf("Plaintext (%4x,%4x)",p[0],p[1]);
  79.  
  80. encode(p,k1);
  81. encode(p,k2);
  82.  
  83. printf(" Encoded= ");
  84. printf("(%4x,%4x)",p[0],p[1]);
  85.  
  86. decode(p,k2);
  87. decode(p,k1);
  88.  
  89. printf(" Decoded= ");
  90. printf("(%4x,%4x)\n",p[0],p[1]);
  91.  
  92. p[0]=0x6789;
  93. p[1]=0xDABC;
  94.  
  95. printf("Plaintext (%4x,%4x)",p[0],p[1]);
  96.  
  97. encode(p,k1);
  98. encode(p,k2);
  99.  
  100. printf(" Encoded= ");
  101. printf("(%4x,%4x)",p[0],p[1]);
  102.  
  103. decode(p,k2);
  104. decode(p,k1);
  105.  
  106. printf(" Decoded= ");
  107. printf("(%4x,%4x)\n",p[0],p[1]);
  108.  
  109. p[0]=0x9ABC;
  110. p[1]=0xDEFF;
  111.  
  112. printf("Plaintext (%4x,%4x)",p[0],p[1]);
  113.  
  114. encode(p,k1);
  115. encode(p,k2);
  116.  
  117. printf(" Encoded= ");
  118. printf("(%4x,%4x)",p[0],p[1]);
  119.  
  120. decode(p,k2);
  121. decode(p,k1);
  122.  
  123. printf(" Decoded= ");
  124. printf("(%4x,%4x)\n",p[0],p[1]);
  125.  
  126. return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement