belt.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. # *****************************************************************************
  2. # \file belt.py
  3. # \project bee2evp [EVP-interfaces over bee2 / engine of OpenSSL]
  4. # \brief A python wrapper over belt methods
  5. # \created 2019.12.09
  6. # \version 2020.02.27
  7. # \license This program is released under the GNU General Public License
  8. # version 3 with the additional exemption that compiling, linking,
  9. # and/or using OpenSSL is allowed. See Copyright Notices in bee2evp/info.h.
  10. # *****************************************************************************
  11. from openssl import openssl
  12. from settings import hex_encoder, b64_encoder, hex_decoder, b64_decoder
  13. def beltBlockEncr(block, key):
  14. assert len(block) * 8 == 128
  15. plain = b64_encoder(block)[0].decode()
  16. key = hex_encoder(key)[0].decode()
  17. key_bitlen = len(key) * 4
  18. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  19. cmd = 'enc -e -belt-ecb{} -nosalt -nopad -e -K {}'.format(key_bitlen, key)
  20. retcode, block, er__ = openssl(cmd, prefix)
  21. return block
  22. def beltBlockDecr(block, key):
  23. assert len(block) * 8 == 128
  24. plain = b64_encoder(block)[0].decode()
  25. key = hex_encoder(key)[0].decode()
  26. key_bitlen = len(key) * 4
  27. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  28. cmd = 'enc -d -belt-ecb{} -nosalt -nopad -K {}'.format(key_bitlen, key)
  29. retcode, block, er__ = openssl(cmd, prefix)
  30. return block
  31. def beltECBEncr(src, key):
  32. assert (len(src) * 8) % 128 == 0
  33. plain = b64_encoder(src)[0].decode()
  34. key = hex_encoder(key)[0].decode()
  35. key_bitlen = len(key) * 4
  36. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  37. cmd = 'enc -e -belt-ecb{} -nosalt -nopad -K {}'.format(key_bitlen, key)
  38. retcode, dest, er__ = openssl(cmd, prefix)
  39. return dest
  40. def beltECBDecr(src, key):
  41. assert (len(src) * 8) % 128 == 0
  42. plain = b64_encoder(src)[0].decode()
  43. key = hex_encoder(key)[0].decode()
  44. key_bitlen = len(key) * 4
  45. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  46. cmd = 'enc -d -belt-ecb{} -nosalt -nopad -K {}'.format(key_bitlen, key)
  47. retcode, dest, er__ = openssl(cmd, prefix)
  48. return dest
  49. def beltCBCEncr(src, key, iv):
  50. assert (len(src) * 8) % 128 == 0
  51. plain = b64_encoder(src)[0].decode()
  52. key = hex_encoder(key)[0].decode()
  53. iv = hex_encoder(iv)[0].decode()
  54. key_bitlen = len(key) * 4
  55. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  56. cmd = 'enc -e -belt-cbc{} -nosalt -nopad -K {} -iv {}'.format(
  57. key_bitlen, key, iv)
  58. retcode, dest, er__ = openssl(cmd, prefix)
  59. return dest
  60. def beltCBCDecr(src, key, iv):
  61. assert (len(src) * 8) % 128 == 0
  62. plain = b64_encoder(src)[0].decode()
  63. key = hex_encoder(key)[0].decode()
  64. iv = hex_encoder(iv)[0].decode()
  65. key_bitlen = len(key) * 4
  66. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  67. cmd = 'enc -d -belt-cbc{} -nosalt -nopad -K {} -iv {}'.format(
  68. key_bitlen, key, iv)
  69. retcode, dest, er__ = openssl(cmd, prefix)
  70. return dest
  71. def beltCFBEncr(src, key, iv):
  72. assert (len(src) * 8) % 128 == 0
  73. plain = b64_encoder(src)[0].decode()
  74. key = hex_encoder(key)[0].decode()
  75. iv = hex_encoder(iv)[0].decode()
  76. key_bitlen = len(key) * 4
  77. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  78. cmd = 'enc -e -belt-cfb{} -nosalt -nopad -K {} -iv {}'.format(
  79. key_bitlen, key, iv)
  80. retcode, dest, er__ = openssl(cmd, prefix)
  81. return dest
  82. def beltCFBDecr(src, key, iv):
  83. assert (len(src) * 8) % 128 == 0
  84. plain = b64_encoder(src)[0].decode()
  85. key = hex_encoder(key)[0].decode()
  86. iv = hex_encoder(iv)[0].decode()
  87. key_bitlen = len(key) * 4
  88. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  89. cmd = 'enc -d -belt-cfb{} -nosalt -nopad -K {} -iv {}'.format(
  90. key_bitlen, key, iv)
  91. retcode, dest, er__ = openssl(cmd, prefix)
  92. return dest
  93. def beltCTREncr(src, key, iv):
  94. assert (len(src) * 8) % 128 == 0
  95. plain = b64_encoder(src)[0].decode()
  96. key = hex_encoder(key)[0].decode()
  97. iv = hex_encoder(iv)[0].decode()
  98. key_bitlen = len(key) * 4
  99. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  100. cmd = 'enc -e -belt-ctr{} -nosalt -nopad -K {} -iv {}'.format(
  101. key_bitlen, key, iv)
  102. retcode, dest, er__ = openssl(cmd, prefix)
  103. return dest
  104. def beltCTRDecr(src, key, iv):
  105. assert (len(src) * 8) % 128 == 0
  106. plain = b64_encoder(src)[0].decode()
  107. key = hex_encoder(key)[0].decode()
  108. iv = hex_encoder(iv)[0].decode()
  109. key_bitlen = len(key) * 4
  110. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  111. cmd = 'enc -d -belt-ctr{} -nosalt -nopad -K {} -iv {}'.format(
  112. key_bitlen, key, iv)
  113. retcode, dest, er__ = openssl(cmd, prefix)
  114. return dest
  115. def beltMAC(src, key):
  116. plain = b64_encoder(src)[0].decode()
  117. key = hex_encoder(key)[0].decode()
  118. key_bitlen = len(key)*4
  119. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  120. cmd = 'dgst -mac belt-mac{} -macopt hexkey:{}'.format(key_bitlen, key)
  121. retcode, out, er__ = openssl(cmd, prefix)
  122. mac = out.decode().split(' ')[1][:-1]
  123. mac = mac.strip()
  124. return bytes(hex_decoder(mac)[0])
  125. def beltHMAC(src, key):
  126. plain = b64_encoder(src)[0].decode()
  127. key = hex_encoder(key)[0].decode()
  128. key_bitlen = len(key)*4
  129. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  130. cmd = 'dgst -mac belt-hmac -macopt hexkey:{}'.format(256, key)
  131. retcode, out, er__ = openssl(cmd, prefix)
  132. mac = out.decode().split(' ')[1][:-1]
  133. mac = mac.strip()
  134. return bytes(hex_decoder(mac)[0])
  135. def beltHash(src):
  136. plain = b64_encoder(src)[0].decode()
  137. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  138. cmd = 'dgst -belt-hash'.format()
  139. retcode, out, er__ = openssl(cmd, prefix)
  140. hash_ = out.decode().split(' ')[1][:-1]
  141. hash_ = hash_.strip()
  142. return bytes(hex_decoder(hash_)[0])
  143. def bash256Hash(src):
  144. plain = b64_encoder(src)[0].decode()
  145. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  146. cmd = 'dgst -bash256'.format()
  147. retcode, out, er__ = openssl(cmd, prefix)
  148. hash_ = out.decode().split(' ')[1][:-1]
  149. hash_ = hash_.strip()
  150. return bytes(hex_decoder(hash_)[0])
  151. def bash384Hash(src):
  152. plain = b64_encoder(src)[0].decode()
  153. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  154. cmd = 'dgst -bash384'.format()
  155. retcode, out, er__ = openssl(cmd, prefix)
  156. hash_ = out.decode().split(' ')[1][:-1]
  157. hash_ = hash_.strip()
  158. return bytes(hex_decoder(hash_)[0])
  159. def bash512Hash(src):
  160. plain = b64_encoder(src)[0].decode()
  161. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  162. cmd = 'dgst -bash512'.format()
  163. retcode, out, er__ = openssl(cmd, prefix)
  164. hash_ = out.decode().split(' ')[1][:-1]
  165. hash_ = hash_.strip()
  166. return bytes(hex_decoder(hash_)[0])