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