xref: /freebsd/contrib/ntp/libntp/authusekey.c (revision a466cc55373fc3cf86837f09da729535b57e69a1)
1c0b746e5SOllivier Robert /*
2c0b746e5SOllivier Robert  * authusekey - decode a key from ascii and use it
3c0b746e5SOllivier Robert  */
42b15cb3dSCy Schubert #include <config.h>
5c0b746e5SOllivier Robert #include <stdio.h>
6c0b746e5SOllivier Robert #include <ctype.h>
7c0b746e5SOllivier Robert 
8c0b746e5SOllivier Robert #include "ntp_types.h"
9c0b746e5SOllivier Robert #include "ntp_string.h"
10c0b746e5SOllivier Robert #include "ntp_stdlib.h"
11c0b746e5SOllivier Robert 
12c0b746e5SOllivier Robert /*
13*a466cc55SCy Schubert  * Only used by ntp{q,dc} to set the key/algo/secret triple to use.
14*a466cc55SCy Schubert  * Uses the same decoding scheme ntpd uses for keys in the key file.
15c0b746e5SOllivier Robert  */
16c0b746e5SOllivier Robert int
authusekey(keyid_t keyno,int keytype,const u_char * str)17c0b746e5SOllivier Robert authusekey(
18224ba2bdSOllivier Robert 	keyid_t keyno,
19c0b746e5SOllivier Robert 	int keytype,
20c0b746e5SOllivier Robert 	const u_char *str
21c0b746e5SOllivier Robert 	)
22c0b746e5SOllivier Robert {
233311ff84SXin LI 	size_t	len;
24*a466cc55SCy Schubert 	u_char	buf[AUTHPWD_MAXSECLEN];
25c0b746e5SOllivier Robert 
26*a466cc55SCy Schubert 	len = authdecodepw(buf, sizeof(buf), (const char*)str,
27*a466cc55SCy Schubert 			   AUTHPWD_UNSPEC);
28*a466cc55SCy Schubert 	if (len < 1 || len > sizeof(buf))
29c0b746e5SOllivier Robert 		return 0;
30c0b746e5SOllivier Robert 
31*a466cc55SCy Schubert 	MD5auth_setkey(keyno, keytype, buf, len, NULL);
32*a466cc55SCy Schubert 	memset(buf, 0, sizeof(buf));
33c0b746e5SOllivier Robert 	return 1;
34c0b746e5SOllivier Robert }
35