From: Dan Harkins Date: Mon, 5 Mar 2012 09:52:42 +0000 (+0100) Subject: 32/64 bit portability fixes X-Git-Tag: release_3_0_0_beta0~265 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd49cf21ada651a45e71d8d7dc09ff50a2e32712;p=thirdparty%2Ffreeradius-server.git 32/64 bit portability fixes --- diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c index 521d73f6b39..c1f786312d1 100644 --- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c +++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c @@ -41,23 +41,6 @@ RCSID("$Id$") #include #include -#ifdef PRINT_BUF -void -print_buf (char *str, unsigned char *buf, int len) -{ - int i; - - printf("%s\n", str); - for (i = 0; i < len; i++) { - if (i && (i % 16 == 0)) { - printf("\n"); - } - printf("%02x ", buf[i]); - } - printf("\n"); -} -#endif /* PRINT_BUF */ - /* The random function H(x) = HMAC-SHA256(0^32, x) */ static void H_Init(HMAC_CTX *ctx) @@ -105,7 +88,7 @@ eap_pwd_kdf(unsigned char *key, int keylen, const char *label, int labellen, HMAC_Update(&hctx, digest, mdlen); } HMAC_Update(&hctx, (unsigned char *) &i, sizeof(unsigned short)); - HMAC_Update(&hctx, label, labellen); + HMAC_Update(&hctx, (const unsigned char *)label, labellen); HMAC_Update(&hctx, (unsigned char *) &L, sizeof(unsigned short)); HMAC_Final(&hctx, digest, &mdlen); if ((len + (int) mdlen) > resultbytelen) { @@ -129,7 +112,7 @@ compute_password_element (pwd_session_t *sess, unsigned short grp_num, char *password, int password_len, char *id_server, int id_server_len, char *id_peer, int id_peer_len, - unsigned long *token) + uint32_t *token) { BIGNUM *x_candidate = NULL, *rnd = NULL, *cofactor = NULL; HMAC_CTX ctx; @@ -210,7 +193,7 @@ compute_password_element (pwd_session_t *sess, unsigned short grp_num, * counter) */ H_Init(&ctx); - H_Update(&ctx, (unsigned char *)token, sizeof(unsigned long)); + H_Update(&ctx, (unsigned char *)token, sizeof(*token)); H_Update(&ctx, (unsigned char *)id_peer, id_peer_len); H_Update(&ctx, (unsigned char *)id_server, id_server_len); H_Update(&ctx, (unsigned char *)password, password_len); @@ -476,10 +459,6 @@ compute_server_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(sess->k); BN_bn2bin(sess->k, cruft + offset); -#ifdef PRINTBUF - printf("computing server confirm\n"); - print_buf("k", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -494,17 +473,11 @@ compute_server_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(x); BN_bn2bin(x, cruft + offset); -#ifdef PRINTBUF - print_buf("server x", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(y); BN_bn2bin(y, cruft + offset); -#ifdef PRINTBUF - print_buf("server y", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -513,9 +486,6 @@ compute_server_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->order) - BN_num_bytes(sess->my_scalar); BN_bn2bin(sess->my_scalar, cruft + offset); -#ifdef PRINTBUF - print_buf("server scalar", cruft, BN_num_bytes(sess->order)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->order)); /* @@ -531,17 +501,11 @@ compute_server_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(x); BN_bn2bin(x, cruft + offset); -#ifdef PRINTBUF - print_buf("peer x", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(y); BN_bn2bin(y, cruft + offset); -#ifdef PRINTBUF - print_buf("peer y", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -550,23 +514,14 @@ compute_server_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->order) - BN_num_bytes(sess->peer_scalar); BN_bn2bin(sess->peer_scalar, cruft + offset); -#ifdef PRINTBUF - print_buf("peer scalar", cruft, BN_num_bytes(sess->order)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->order)); -#ifdef PRINTBUF - print_buf("ciphersuite", (char *)&sess->ciphersuite, sizeof(unsigned long)); -#endif /* PRINTBUF */ /* * finally, ciphersuite */ - H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(unsigned long)); + H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(sess->ciphersuite)); H_Final(&ctx, buf); -#ifdef PRINTBUF - print_buf("confirm", buf, SHA256_DIGEST_LENGTH); -#endif /* PRINTBUF */ req = 0; fin: @@ -611,10 +566,6 @@ compute_peer_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(sess->k); BN_bn2bin(sess->k, cruft + offset); -#ifdef PRINTBUF - printf("computing peer confirm\n"); - print_buf("k", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -630,17 +581,11 @@ compute_peer_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(x); BN_bn2bin(x, cruft + offset); -#ifdef PRINTBUF - print_buf("peer x", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(y); BN_bn2bin(y, cruft + offset); -#ifdef PRINTBUF - print_buf("peer x", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -649,9 +594,6 @@ compute_peer_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->order) - BN_num_bytes(sess->peer_scalar); BN_bn2bin(sess->peer_scalar, cruft + offset); -#ifdef PRINTBUF - print_buf("peer scalar", cruft, BN_num_bytes(sess->order)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->order)); /* @@ -666,17 +608,11 @@ compute_peer_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(x); BN_bn2bin(x, cruft + offset); -#ifdef PRINTBUF - print_buf("server x", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->prime) - BN_num_bytes(y); BN_bn2bin(y, cruft + offset); -#ifdef PRINTBUF - print_buf("server y", cruft, BN_num_bytes(sess->prime)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->prime)); /* @@ -685,18 +621,12 @@ compute_peer_confirm (pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx) memset(cruft, 0, BN_num_bytes(sess->prime)); offset = BN_num_bytes(sess->order) - BN_num_bytes(sess->my_scalar); BN_bn2bin(sess->my_scalar, cruft + offset); -#ifdef PRINTBUF - print_buf("server scalar", cruft, BN_num_bytes(sess->order)); -#endif /* PRINTBUF */ H_Update(&ctx, cruft, BN_num_bytes(sess->order)); -#ifdef PRINTBUF - print_buf("ciphersuite", (char *)&sess->ciphersuite, sizeof(unsigned long)); -#endif /* PRINTBUF */ /* * finally, ciphersuite */ - H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(unsigned long)); + H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(sess->ciphersuite)); H_Final(&ctx, buf); @@ -731,7 +661,7 @@ compute_keys (pwd_session_t *sess, unsigned char *peer_confirm, */ session_id[0] = PW_EAP_PWD; H_Init(&ctx); - H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(unsigned long)); + H_Update(&ctx, (unsigned char *)&sess->ciphersuite, sizeof(sess->ciphersuite)); offset = BN_num_bytes(sess->order) - BN_num_bytes(sess->peer_scalar); memset(cruft, 0, BN_num_bytes(sess->prime)); BN_bn2bin(sess->peer_scalar, cruft + offset); @@ -740,7 +670,7 @@ compute_keys (pwd_session_t *sess, unsigned char *peer_confirm, memset(cruft, 0, BN_num_bytes(sess->prime)); BN_bn2bin(sess->my_scalar, cruft + offset); H_Update(&ctx, cruft, BN_num_bytes(sess->order)); - H_Final(&ctx, &session_id[1]); + H_Final(&ctx, (unsigned char *)&session_id[1]); /* then compute MK = H(k | commit-peer | commit-server) */ H_Init(&ctx); @@ -758,7 +688,7 @@ compute_keys (pwd_session_t *sess, unsigned char *peer_confirm, /* stretch the mk with the session-id to get MSK | EMSK */ eap_pwd_kdf(mk, SHA256_DIGEST_LENGTH, - session_id, SHA256_DIGEST_LENGTH+1, + (const char *)session_id, SHA256_DIGEST_LENGTH+1, msk_emsk, 1024); /* it's bits, ((64 + 64) * 8) */ memcpy(msk, msk_emsk, 64); diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.h b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.h index d2e81a27fa8..20391c202d5 100644 --- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.h +++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.h @@ -36,12 +36,12 @@ #include RCSIDH(eap_pwd_h, "$Id$") +#include "eap.h" #include #include #include #include #include -#include "eap.h" typedef struct _pwd_hdr { unsigned char lm_exchange; @@ -79,8 +79,8 @@ typedef struct _pwd_session_t { #define PWD_STATE_COMMIT 2 #define PWD_STATE_CONFIRM 3 unsigned short group_num; - unsigned long ciphersuite; - unsigned long token; + uint32_t ciphersuite; + uint32_t token; char peer_id[MAX_STRING_LEN]; int peer_id_len; int mtu; @@ -107,7 +107,7 @@ int compute_password_element(pwd_session_t *sess, unsigned short grp_num, char *password, int password_len, char *id_server, int id_server_len, char *id_peer, int id_peer_len, - unsigned long *token); + uint32_t *token); int compute_scalar_element(pwd_session_t *sess, BN_CTX *bnctx); int process_peer_commit (pwd_session_t *sess, unsigned char *commit, BN_CTX *bnctx); int compute_server_confirm(pwd_session_t *sess, unsigned char *buf, BN_CTX *bnctx); diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/rlm_eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/rlm_eap_pwd.c index 1143a1a5745..e8c1d60797b 100644 --- a/src/modules/rlm_eap/types/rlm_eap_pwd/rlm_eap_pwd.c +++ b/src/modules/rlm_eap/types/rlm_eap_pwd/rlm_eap_pwd.c @@ -195,7 +195,7 @@ send_pwd_request (pwd_session_t *sess, EAP_DS *eap_ds) */ EAP_PWD_SET_LENGTH_BIT(hdr); totlen = ntohs(sess->out_buf_len); - memcpy(hdr->data, (char *)&totlen, sizeof(unsigned short)); + memcpy(hdr->data, (char *)&totlen, sizeof(totlen)); memcpy(hdr->data + sizeof(unsigned short), sess->out_buf, sess->mtu - sizeof(pwd_hdr) - sizeof(unsigned short));