bign.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # *****************************************************************************
  2. # \file bign.py
  3. # \project bee2evp [EVP-interfaces over bee2 / engine of OpenSSL]
  4. # \brief A python wrapper over bign 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 bignStdParams(name, out_filename, specified=False, cofactor=False):
  14. options = '-pkeyopt params:{}'.format(name)
  15. if specified:
  16. options += ' -pkeyopt enc_params:specified'
  17. if cofactor:
  18. options += ' -pkeyopt enc_params:cofactor'
  19. cmd = 'genpkey -genparam -algorithm bign {} -out {}'.format(
  20. options, out_filename)
  21. retcode, out, er__ = openssl(cmd)
  22. return out
  23. def bignGenKeypair(params_file, out_filename):
  24. cmd = 'genpkey -paramfile {} -out {}'.format(params_file, out_filename)
  25. retcode, out, er__ = openssl(cmd)
  26. return out
  27. def bignCalcPubkey(private_key_file, out_filename):
  28. cmd = 'pkey -in {} -pubout -out {}'.format(private_key_file, out_filename)
  29. retcode, public_key, er__ = openssl(cmd)
  30. return public_key
  31. def bignSign(prkey, hashname, src , dest):
  32. plain = b64_encoder(src)[0].decode()
  33. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  34. cmd = 'dgst -{} -sign {} -out {}'.format(hashname, prkey, dest)
  35. retcode, out, er__ = openssl(cmd, prefix=prefix, echo=False)
  36. return retcode
  37. def bignSign2(prkey, hashname, src, dest):
  38. plain = b64_encoder(src)[0].decode()
  39. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  40. cmd = 'dgst -{} -sign {} -sigopt sig:deterministic -out {}'.format(
  41. hashname, prkey, dest)
  42. retcode, out, er__ = openssl(cmd, prefix=prefix, echo=False)
  43. return retcode
  44. def bignVerify(prkey, hashname, src, sign_file):
  45. plain = b64_encoder(src)[0].decode()
  46. prefix = 'echo ' + plain[:-1] + ' | python -m base64 -d |'
  47. cmd = 'dgst -{} -prverify {} -hex -signature {}'.format(
  48. hashname, prkey, sign_file)
  49. retcode, out, er__ = openssl(cmd, prefix=prefix, echo=False)
  50. return out.decode()[:-1].strip()