11
#include "ntp_machine.h"
13
11
#ifdef HAVE_CONFIG_H
14
12
#include <config.h>
19
#include "ntp_types.h"
20
16
#include "ntp_string.h"
17
#include "ntp_stdlib.h"
19
/* Disable the openssl md5 includes, because they'd clash with ours. */
21
/* #define OPENSSL_NO_MD5 */
21
25
#include "global.h"
23
#include "ntp_stdlib.h"
25
#define BLOCK_OCTETS 16 /* message digest size */
29
29
* MD5authencrypt - generate MD5 message authenticator
37
37
int length /* packet length */
41
u_char digest[BLOCK_OCTETS];
45
44
* MD5 with key identifier concatenated with packet.
48
MD5Update(&ctx, key, (u_int)cache_keylen);
49
MD5Update(&ctx, (u_char *)pkt, (u_int)length);
50
MD5Final(digest, &ctx);
52
memmove((char *)&pkt[i + 1], (char *)digest, BLOCK_OCTETS);
53
return (BLOCK_OCTETS + 4);
47
MD5Update(&md5, key, (u_int)cache_keylen);
48
MD5Update(&md5, (u_char *)pkt, (u_int)length);
49
MD5Final(digest, &md5);
50
memmove((u_char *)pkt + length + 4, digest, 16);
64
62
u_char *key, /* key pointer */
65
63
u_int32 *pkt, /* packet pointer */
66
int length, /* packet length */
64
int length, /* packet length */
67
65
int size /* MAC size */
71
u_char digest[BLOCK_OCTETS];
74
72
* MD5 with key identifier concatenated with packet.
76
if (size != BLOCK_OCTETS + 4)
75
MD5Update(&md5, key, (u_int)cache_keylen);
76
MD5Update(&md5, (u_char *)pkt, (u_int)length);
77
MD5Final(digest, &md5);
79
MD5Update(&ctx, key, (u_int)cache_keylen);
80
MD5Update(&ctx, (u_char *)pkt, (u_int)length);
81
MD5Final(digest, &ctx);
82
return (!memcmp((char *)digest, (char *)pkt + length + 4,
80
return (!memcmp(digest, (char *)pkt + length + 4, 16));
84
* Calculate the reference id from the address. If it is an IPv4
85
* address, use it as is. If it is an IPv6 address, do a md5 on
86
* it and use the bottom 4 bytes.
89
addr2refid(struct sockaddr_storage *addr)
95
if (addr->ss_family == AF_INET)
96
return (GET_INADDR(*addr));
99
MD5Update(&md5, (u_char *)&GET_INADDR6(*addr),
100
sizeof(struct in6_addr));
101
MD5Final(digest, &md5);
102
memcpy(&addr_refid, digest, 4);
103
return (htonl(addr_refid));