summaryrefslogtreecommitdiff
path: root/util/ntp-keygen.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/ntp-keygen.c')
-rw-r--r--util/ntp-keygen.c89
1 files changed, 56 insertions, 33 deletions
diff --git a/util/ntp-keygen.c b/util/ntp-keygen.c
index d55a357..494bedb 100644
--- a/util/ntp-keygen.c
+++ b/util/ntp-keygen.c
@@ -108,6 +108,7 @@
#endif /* OPENSSL */
#include <ssl_applink.c>
+#define _UC(str) ((char *)(intptr_t)(str))
/*
* Cryptodefines
*/
@@ -131,19 +132,19 @@
* Prototypes
*/
FILE *fheader (const char *, const char *, const char *);
-int gen_md5 (char *);
+int gen_md5 (const char *);
void followlink (char *, size_t);
#ifdef AUTOKEY
-EVP_PKEY *gen_rsa (char *);
-EVP_PKEY *gen_dsa (char *);
-EVP_PKEY *gen_iffkey (char *);
-EVP_PKEY *gen_gqkey (char *);
-EVP_PKEY *gen_mvkey (char *, EVP_PKEY **);
+EVP_PKEY *gen_rsa (const char *);
+EVP_PKEY *gen_dsa (const char *);
+EVP_PKEY *gen_iffkey (const char *);
+EVP_PKEY *gen_gqkey (const char *);
+EVP_PKEY *gen_mvkey (const char *, EVP_PKEY **);
void gen_mvserv (char *, EVP_PKEY **);
-int x509 (EVP_PKEY *, const EVP_MD *, char *, char *,
+int x509 (EVP_PKEY *, const EVP_MD *, char *, const char *,
char *);
void cb (int, int, void *);
-EVP_PKEY *genkey (char *, char *);
+EVP_PKEY *genkey (const char *, const char *);
EVP_PKEY *readkey (char *, char *, u_int *, EVP_PKEY **);
void writekey (char *, char *, u_int *, EVP_PKEY **);
u_long asn2ntp (ASN1_TIME *);
@@ -311,7 +312,7 @@ main(
char pathbuf[MAXFILENAME + 1];
const char *scheme = NULL; /* digest/signature scheme */
const char *ciphername = NULL; /* to encrypt priv. key */
- char *exten = NULL; /* private extension */
+ const char *exten = NULL; /* private extension */
char *grpkey = NULL; /* identity extension */
int nid; /* X509 digest/signature scheme */
FILE *fstr = NULL; /* file handle */
@@ -336,6 +337,8 @@ main(
ssl_check_version();
#endif /* OPENSSL */
+ ntp_crypto_srandom();
+
/*
* Process options, initialize host name and timestamp.
* gethostname() won't null-terminate if hostname is exactly the
@@ -348,7 +351,6 @@ main(
passwd1 = hostbuf;
passwd2 = NULL;
GETTIMEOFDAY(&tv, NULL);
- ntp_srandom((u_long)(tv.tv_sec + tv.tv_usec));
epoch = tv.tv_sec;
fstamp = (u_int)(epoch + JAN_1970);
@@ -810,7 +812,7 @@ main(
*/
int
gen_md5(
- char *id /* file name id */
+ const char *id /* file name id */
)
{
u_char md5key[MD5SIZE + 1]; /* MD5 key */
@@ -825,17 +827,24 @@ gen_md5(
str = fheader("MD5key", id, groupname);
for (i = 1; i <= MD5KEYS; i++) {
for (j = 0; j < MD5SIZE; j++) {
- int temp;
+ u_char temp;
while (1) {
- temp = ntp_random() & 0xff;
+ int rc;
+
+ rc = ntp_crypto_random_buf(
+ &temp, sizeof(temp));
+ if (-1 == rc) {
+ fprintf(stderr, "ntp_crypto_random_buf() failed.\n");
+ exit (-1);
+ }
if (temp == '#')
continue;
if (temp > 0x20 && temp < 0x7f)
break;
}
- md5key[j] = (u_char)temp;
+ md5key[j] = temp;
}
md5key[j] = '\0';
fprintf(str, "%2d MD5 %s # MD5 key\n", i,
@@ -950,7 +959,7 @@ readkey(
*/
EVP_PKEY * /* public/private key pair */
gen_rsa(
- char *id /* file name id */
+ const char *id /* file name id */
)
{
EVP_PKEY *pkey; /* private key */
@@ -958,7 +967,7 @@ gen_rsa(
FILE *str;
fprintf(stderr, "Generating RSA keys (%d bits)...\n", modulus);
- rsa = RSA_generate_key(modulus, 3, cb, "RSA");
+ rsa = RSA_generate_key(modulus, 65537, cb, _UC("RSA"));
fprintf(stderr, "\n");
if (rsa == NULL) {
fprintf(stderr, "RSA generate keys fails\n%s\n",
@@ -1003,7 +1012,7 @@ gen_rsa(
*/
EVP_PKEY * /* public/private key pair */
gen_dsa(
- char *id /* file name id */
+ const char *id /* file name id */
)
{
EVP_PKEY *pkey; /* private key */
@@ -1018,7 +1027,7 @@ gen_dsa(
"Generating DSA parameters (%d bits)...\n", modulus);
RAND_bytes(seed, sizeof(seed));
dsa = DSA_generate_parameters(modulus, seed, sizeof(seed), NULL,
- NULL, cb, "DSA");
+ NULL, cb, _UC("DSA"));
fprintf(stderr, "\n");
if (dsa == NULL) {
fprintf(stderr, "DSA generate parameters fails\n%s\n",
@@ -1105,7 +1114,7 @@ gen_dsa(
*/
EVP_PKEY * /* DSA cuckoo nest */
gen_iffkey(
- char *id /* file name id */
+ const char *id /* file name id */
)
{
EVP_PKEY *pkey; /* private key */
@@ -1123,7 +1132,7 @@ gen_iffkey(
modulus2);
RAND_bytes(seed, sizeof(seed));
dsa = DSA_generate_parameters(modulus2, seed, sizeof(seed), NULL,
- NULL, cb, "IFF");
+ NULL, cb, _UC("IFF"));
fprintf(stderr, "\n");
if (dsa == NULL) {
fprintf(stderr, "DSA generate parameters fails\n%s\n",
@@ -1283,7 +1292,7 @@ gen_iffkey(
*/
EVP_PKEY * /* RSA cuckoo nest */
gen_gqkey(
- char *id /* file name id */
+ const char *id /* file name id */
)
{
EVP_PKEY *pkey; /* private key */
@@ -1299,7 +1308,7 @@ gen_gqkey(
fprintf(stderr,
"Generating GQ parameters (%d bits)...\n",
modulus2);
- rsa = RSA_generate_key(modulus2, 3, cb, "GQ");
+ rsa = RSA_generate_key(modulus2, 65537, cb, _UC("GQ"));
fprintf(stderr, "\n");
if (rsa == NULL) {
fprintf(stderr, "RSA generate keys fails\n%s\n",
@@ -1492,7 +1501,7 @@ gen_gqkey(
*/
EVP_PKEY * /* DSA cuckoo nest */
gen_mvkey(
- char *id, /* file name id */
+ const char *id, /* file name id */
EVP_PKEY **evpars /* parameter list pointer */
)
{
@@ -1917,7 +1926,7 @@ x509 (
EVP_PKEY *pkey, /* signing key */
const EVP_MD *md, /* signature/digest scheme */
char *gqpub, /* identity extension (hex string) */
- char *exten, /* private cert extension */
+ const char *exten, /* private cert extension */
char *name /* subject/issuer name */
)
{
@@ -1971,7 +1980,7 @@ x509 (
fprintf(stderr, "%s: %s\n", LN_basic_constraints,
BASIC_CONSTRAINTS);
ex = X509V3_EXT_conf_nid(NULL, NULL, NID_basic_constraints,
- BASIC_CONSTRAINTS);
+ _UC(BASIC_CONSTRAINTS));
if (!X509_add_ext(cert, ex, -1)) {
fprintf(stderr, "Add extension field fails\n%s\n",
ERR_error_string(ERR_get_error(), NULL));
@@ -1984,7 +1993,7 @@ x509 (
* be used for.
*/
fprintf(stderr, "%s: %s\n", LN_key_usage, KEY_USAGE);
- ex = X509V3_EXT_conf_nid(NULL, NULL, NID_key_usage, KEY_USAGE);
+ ex = X509V3_EXT_conf_nid(NULL, NULL, NID_key_usage, _UC(KEY_USAGE));
if (!X509_add_ext(cert, ex, -1)) {
fprintf(stderr, "Add extension field fails\n%s\n",
ERR_error_string(ERR_get_error(), NULL));
@@ -2019,7 +2028,7 @@ x509 (
if (exten != NULL) {
fprintf(stderr, "%s: %s\n", LN_ext_key_usage, exten);
ex = X509V3_EXT_conf_nid(NULL, NULL,
- NID_ext_key_usage, exten);
+ NID_ext_key_usage, _UC(exten));
if (!X509_add_ext(cert, ex, -1)) {
fprintf(stderr,
"Add extension field fails\n%s\n",
@@ -2130,8 +2139,8 @@ cb (
*/
EVP_PKEY * /* public/private key pair */
genkey(
- char *type, /* key type (RSA or DSA) */
- char *id /* file name id */
+ const char *type, /* key type (RSA or DSA) */
+ const char *id /* file name id */
)
{
if (type == NULL)
@@ -2161,15 +2170,29 @@ fheader (
FILE *str; /* file handle */
char linkname[MAXFILENAME]; /* link name */
int temp;
-
+#ifdef HAVE_UMASK
+ mode_t orig_umask;
+#endif
+
snprintf(filename, sizeof(filename), "ntpkey_%s_%s.%u", file,
owner, fstamp);
- if ((str = fopen(filename, "w")) == NULL) {
+#ifdef HAVE_UMASK
+ orig_umask = umask( S_IWGRP | S_IRWXO );
+ str = fopen(filename, "w");
+ (void) umask(orig_umask);
+#else
+ str = fopen(filename, "w");
+#endif
+ if (str == NULL) {
perror("Write");
exit (-1);
}
- snprintf(linkname, sizeof(linkname), "ntpkey_%s_%s", ulink,
- hostname);
+ if (strcmp(ulink, "md5") == 0) {
+ strcpy(linkname,"ntp.keys");
+ } else {
+ snprintf(linkname, sizeof(linkname), "ntpkey_%s_%s", ulink,
+ hostname);
+ }
(void)remove(linkname); /* The symlink() line below matters */
temp = symlink(filename, linkname);
if (temp < 0)