challenge.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * challenge.h
  3. * ptunnel is licensed under the BSD license:
  4. *
  5. * Copyright (c) 2004-2011, Daniel Stoedle <daniels@cs.uit.no>,
  6. * Yellow Lemon Software. All rights reserved.
  7. *
  8. * Copyright (c) 2017-2019, Toni Uhlig <matzeton@googlemail.com>
  9. *
  10. * Redistribution and use in source and binary forms, with or without
  11. * modification, are permitted provided that the following conditions are met:
  12. *
  13. * - Redistributions of source code must retain the above copyright notice,
  14. * this list of conditions and the following disclaimer.
  15. *
  16. * - Redistributions in binary form must reproduce the above copyright notice,
  17. * this list of conditions and the following disclaimer in the documentation
  18. * and/or other materials provided with the distribution.
  19. *
  20. * - Neither the name of the Yellow Lemon Software nor the names of its
  21. * contributors may be used to endorse or promote products derived from this
  22. * software without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  28. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  32. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  33. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  34. * POSSIBILITY OF SUCH DAMAGE.
  35. *
  36. * Contacting the author:
  37. * You can get in touch with me, Daniel Stødle (that's the Norwegian letter oe,
  38. * in case your text editor didn't realize), here: <daniels@cs.uit.no>
  39. *
  40. * The official ptunnel website is here:
  41. * <http://www.cs.uit.no/~daniels/PingTunnel/>
  42. *
  43. * Note that the source code is best viewed with tabs set to 4 spaces.
  44. */
  45. #ifndef CHALLENGE_H
  46. #define CHALLENGE_H 1
  47. #include "pconfig.h"
  48. #include <stdint.h>
  49. #ifdef ENABLE_SHA512
  50. #include <openssl/sha.h>
  51. #endif
  52. #define HT_MD5 0x1
  53. #define HT_SHA512 0x2
  54. typedef struct challenge_plain_t {
  55. /** tv_sec as returned by gettimeofday */
  56. uint32_t sec;
  57. /** tv_usec as returned by gettimeofday + random value */
  58. uint32_t usec_rnd;
  59. /** random values */
  60. uint32_t random[6];
  61. } __attribute__ ((packed)) challenge_plain_t;
  62. typedef struct challenge_digest_t {
  63. uint8_t hash_type;
  64. union {
  65. unsigned char md5[kMD5_digest_size];
  66. unsigned char sha512[kSHA512_digest_size];
  67. };
  68. } __attribute__ ((packed)) challenge_digest_t;
  69. /** challenge_t: This structure contains the pseudo-random challenge used for
  70. * authentication. If OpenSSL is available SHA512 will be used per default.
  71. */
  72. typedef struct challenge_t {
  73. challenge_plain_t plain;
  74. challenge_digest_t digest;
  75. } __attribute__ ((packed)) challenge_t;
  76. challenge_t *generate_challenge(void);
  77. void generate_response_md5(challenge_plain_t *plain, challenge_digest_t *digest);
  78. int validate_challenge_md5(challenge_t *local, challenge_digest_t *remote);
  79. #ifdef ENABLE_SHA512
  80. void generate_response_sha512(challenge_plain_t *plain, challenge_digest_t *digest);
  81. int validate_challenge_sha512(challenge_t *local, challenge_digest_t *remote);
  82. #endif
  83. #endif