sshmac.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Centralised parts of the SSH-2 MAC API, which don't need to vary
  3. * with the MAC implementation.
  4. */
  5. #include <assert.h>
  6. #include "ssh.h"
  7. int ssh2_mac_verresult(ssh2_mac *mac, const void *candidate)
  8. {
  9. unsigned char correct[64]; /* at least as big as all known MACs */
  10. int toret;
  11. assert(mac->vt->len <= sizeof(correct));
  12. ssh2_mac_genresult(mac, correct);
  13. toret = smemeq(correct, candidate, mac->vt->len);
  14. smemclr(correct, sizeof(correct));
  15. return toret;
  16. }
  17. static void ssh2_mac_prepare(ssh2_mac *mac, const void *blk, int len,
  18. unsigned long seq)
  19. {
  20. ssh2_mac_start(mac);
  21. put_uint32(mac, seq);
  22. put_data(mac, blk, len);
  23. }
  24. void ssh2_mac_generate(ssh2_mac *mac, void *blk, int len, unsigned long seq)
  25. {
  26. ssh2_mac_prepare(mac, blk, len, seq);
  27. /*MPEXT return*/ ssh2_mac_genresult(mac, (unsigned char *)blk + len);
  28. }
  29. int ssh2_mac_verify(ssh2_mac *mac, const void *blk, int len, unsigned long seq)
  30. {
  31. ssh2_mac_prepare(mac, blk, len, seq);
  32. return ssh2_mac_verresult(mac, (const unsigned char *)blk + len);
  33. }