crypto_desc.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "includes.h"
  2. #include "dbutil.h"
  3. #include "crypto_desc.h"
  4. #include "ltc_prng.h"
  5. #include "ecc.h"
  6. #include "dbrandom.h"
  7. #if DROPBEAR_LTC_PRNG
  8. int dropbear_ltc_prng = -1;
  9. #endif
  10. /* Wrapper for libtommath */
  11. static mp_err dropbear_rand_source(void* out, size_t size) {
  12. genrandom((unsigned char*)out, (unsigned int)size);
  13. return MP_OKAY;
  14. }
  15. /* Register the compiled in ciphers.
  16. * This should be run before using any of the ciphers/hashes */
  17. void crypto_init() {
  18. const struct ltc_cipher_descriptor *regciphers[] = {
  19. #if DROPBEAR_AES
  20. &aes_desc,
  21. #endif
  22. #if DROPBEAR_3DES
  23. &des3_desc,
  24. #endif
  25. NULL
  26. };
  27. const struct ltc_hash_descriptor *reghashes[] = {
  28. #if DROPBEAR_SHA1_HMAC
  29. &sha1_desc,
  30. #endif
  31. #if DROPBEAR_MD5_HMAC
  32. &md5_desc,
  33. #endif
  34. #if DROPBEAR_SHA256
  35. &sha256_desc,
  36. #endif
  37. #if DROPBEAR_SHA384
  38. &sha384_desc,
  39. #endif
  40. #if DROPBEAR_SHA512
  41. &sha512_desc,
  42. #endif
  43. NULL
  44. };
  45. int i;
  46. for (i = 0; regciphers[i] != NULL; i++) {
  47. if (register_cipher(regciphers[i]) == -1) {
  48. dropbear_exit("Error registering crypto");
  49. }
  50. }
  51. for (i = 0; reghashes[i] != NULL; i++) {
  52. if (register_hash(reghashes[i]) == -1) {
  53. dropbear_exit("Error registering crypto");
  54. }
  55. }
  56. #if DROPBEAR_LTC_PRNG
  57. dropbear_ltc_prng = register_prng(&dropbear_prng_desc);
  58. if (dropbear_ltc_prng == -1) {
  59. dropbear_exit("Error registering crypto");
  60. }
  61. #endif
  62. mp_rand_source(dropbear_rand_source);
  63. #if DROPBEAR_ECC
  64. ltc_mp = ltm_desc;
  65. dropbear_ecc_fill_dp();
  66. #endif
  67. }