#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "ntp_fp.h"
#include "ntp_string.h"
#include "ntp_stdlib.h"
#undef OPENSSL
#include "ntp.h"
#include "global.h"
#include "ntp_md5.h"
int
MD5authencrypt(
u_char *key,
u_int32 *pkt,
int length
)
{
MD5_CTX md5;
u_char digest[16];
MD5Init(&md5);
MD5Update(&md5, key, (u_int)cache_keylen);
MD5Update(&md5, (u_char *)pkt, (u_int)length);
MD5Final(digest, &md5);
memmove((u_char *)pkt + length + 4, digest, 16);
return (16 + 4);
}
int
MD5authdecrypt(
u_char *key,
u_int32 *pkt,
int length,
int size
)
{
MD5_CTX md5;
u_char digest[16];
MD5Init(&md5);
MD5Update(&md5, key, (u_int)cache_keylen);
MD5Update(&md5, (u_char *)pkt, (u_int)length);
MD5Final(digest, &md5);
if (size != 16 + 4)
return (0);
return (!memcmp(digest, (char *)pkt + length + 4, 16));
}
u_int32
addr2refid(struct sockaddr_storage *addr)
{
MD5_CTX md5;
u_char digest[16];
u_int32 addr_refid;
if (addr->ss_family == AF_INET)
return (GET_INADDR(*addr));
MD5Init(&md5);
MD5Update(&md5, (u_char *)&GET_INADDR6(*addr),
sizeof(struct in6_addr));
MD5Final(digest, &md5);
memcpy(&addr_refid, digest, 4);
return (addr_refid);
}