From a34fbb64e27b5075a4207318ba356349669b4f08 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Sun, 25 Feb 2007 15:38:32 +0000 Subject: Updated VS8 and EVC4 project with new STUN files and added SHA1, HMAC-MD5, and HMAC-SHA1 encryption git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1001 74dad513-b988-da41-8d7b-12977e46ad98 --- pjlib-util/include/pjlib-util.h | 17 ++++++- pjlib-util/include/pjlib-util/hmac_md5.h | 68 ++++++++++++++++++++++++++ pjlib-util/include/pjlib-util/hmac_sha1.h | 64 +++++++++++++++++++++++++ pjlib-util/include/pjlib-util/md5.h | 4 +- pjlib-util/include/pjlib-util/sha1.h | 79 +++++++++++++++++++++++++++++++ pjlib-util/include/pjlib-util/stun_msg.h | 27 +++++++++-- 6 files changed, 251 insertions(+), 8 deletions(-) create mode 100644 pjlib-util/include/pjlib-util/hmac_md5.h create mode 100644 pjlib-util/include/pjlib-util/hmac_sha1.h create mode 100644 pjlib-util/include/pjlib-util/sha1.h (limited to 'pjlib-util/include') diff --git a/pjlib-util/include/pjlib-util.h b/pjlib-util/include/pjlib-util.h index 0f7848a8..0cf5a90d 100644 --- a/pjlib-util/include/pjlib-util.h +++ b/pjlib-util/include/pjlib-util.h @@ -24,12 +24,27 @@ * @brief pjlib-util.h */ -#include +/* Base */ #include +#include + +/* Getopt */ #include + +/* Crypto */ +#include +#include #include +#include + +/* DNS and resolver */ +#include #include + +/* Text scanner */ #include + +/* XML */ #include /* New STUN */ diff --git a/pjlib-util/include/pjlib-util/hmac_md5.h b/pjlib-util/include/pjlib-util/hmac_md5.h new file mode 100644 index 00000000..5fefab51 --- /dev/null +++ b/pjlib-util/include/pjlib-util/hmac_md5.h @@ -0,0 +1,68 @@ +/* $Id$ */ +/* + * Copyright (C) 2003-2005 Benny Prijono + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __PJLIB_UTIL_HMAC_MD5_H__ +#define __PJLIB_UTIL_HMAC_MD5_H__ + +/** + * @file hmac_md5.h + * @brief HMAC MD5 Message Authentication + */ + +/** + * @defgroup PJLIB_UTIL_ENCRYPTION Encryption Algorithms + */ + +#include + +PJ_BEGIN_DECL + +/** + * @defgroup PJLIB_UTIL_HMAC_MD5 HMAC MD5 Message Authentication + * @ingroup PJLIB_UTIL_ENCRYPTION + * @{ + * + * This module contains the implementation of HMAC: Keyed-Hashing + * for Message Authentication, as described in RFC 2104 + */ + + +/** + * Calculate HMAC MD5 digest for the specified input and key. + * + * @param input Pointer to the input stream. + * @param input_len Length of input stream in bytes. + * @param key Pointer to the authentication key. + * @param key_len Length of the authentication key. + * @param digest Buffer to be filled with HMAC MD5 digest. + */ +PJ_DECL(void) pj_hmac_md5(const pj_uint8_t *input, unsigned input_len, + const pj_uint8_t *key, unsigned key_len, + pj_uint8_t digest[16]); + + +/** + * @} + */ + +PJ_END_DECL + + +#endif /* __PJLIB_UTIL_HMAC_MD5_H__ */ + + diff --git a/pjlib-util/include/pjlib-util/hmac_sha1.h b/pjlib-util/include/pjlib-util/hmac_sha1.h new file mode 100644 index 00000000..6fe4b6ad --- /dev/null +++ b/pjlib-util/include/pjlib-util/hmac_sha1.h @@ -0,0 +1,64 @@ +/* $Id$ */ +/* + * Copyright (C) 2003-2005 Benny Prijono + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __PJLIB_UTIL_HMAC_SHA1_H__ +#define __PJLIB_UTIL_HMAC_SHA1_H__ + +/** + * @file hmac_sha1.h + * @brief HMAC SHA1 Message Authentication + */ + +#include + +PJ_BEGIN_DECL + +/** + * @defgroup PJLIB_UTIL_HMAC_SHA1 HMAC SHA1 Message Authentication + * @ingroup PJLIB_UTIL_ENCRYPTION + * @{ + * + * This module contains the implementation of HMAC: Keyed-Hashing + * for Message Authentication, as described in RFC 2104 + */ + + +/** + * Calculate HMAC SHA1 digest for the specified input and key. + * + * @param input Pointer to the input stream. + * @param input_len Length of input stream in bytes. + * @param key Pointer to the authentication key. + * @param key_len Length of the authentication key. + * @param digest Buffer to be filled with HMAC SHA1 digest. + */ +PJ_DECL(void) pj_hmac_sha1(const pj_uint8_t *input, unsigned input_len, + const pj_uint8_t *key, unsigned key_len, + pj_uint8_t digest[20]); + + +/** + * @} + */ + +PJ_END_DECL + + +#endif /* __PJLIB_UTIL_HMAC_SHA1_H__ */ + + diff --git a/pjlib-util/include/pjlib-util/md5.h b/pjlib-util/include/pjlib-util/md5.h index 39e22d62..7a908245 100644 --- a/pjlib-util/include/pjlib-util/md5.h +++ b/pjlib-util/include/pjlib-util/md5.h @@ -29,8 +29,8 @@ PJ_BEGIN_DECL /** - * @defgroup PJLIB_UTIL_MD5 MD5 Functions - * @ingroup PJLIB_UTIL + * @defgroup PJLIB_UTIL_MD5 MD5 + * @ingroup PJLIB_UTIL_ENCRYPTION * @{ */ diff --git a/pjlib-util/include/pjlib-util/sha1.h b/pjlib-util/include/pjlib-util/sha1.h new file mode 100644 index 00000000..7458727d --- /dev/null +++ b/pjlib-util/include/pjlib-util/sha1.h @@ -0,0 +1,79 @@ +/* $Id$ */ +/* + * Copyright (C) 2003-2005 Benny Prijono + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __PJLIB_UTIL_SHA1_H__ +#define __PJLIB_UTIL_SHA1_H__ + +/** + * @file sha1.h + * @brief SHA1 encryption implementation + */ + +#include + +PJ_BEGIN_DECL + +/** + * @defgroup PJLIB_UTIL_SHA1 SHA1 + * @ingroup PJLIB_UTIL_ENCRYPTION + * @{ + */ + +/** SHA1 context */ +typedef struct pj_sha1_context +{ + pj_uint32_t state[5]; + pj_uint32_t count[2]; + pj_uint8_t buffer[64]; +} pj_sha1_context; + +/** SHA1 digest size is 20 bytes */ +#define PJ_SHA1_DIGEST_SIZE 20 + + +/** Initialize the algorithm. + * @param ctx SHA1 context. + */ +PJ_DECL(void) pj_sha1_init(pj_sha1_context *ctx); + +/** Append a stream to the message. + * @param ctx SHA1 context. + * @param data Data. + * @param nbytes Length of data. + */ +PJ_DECL(void) pj_sha1_update(pj_sha1_context *ctx, + const pj_uint8_t *data, + const pj_size_t nbytes); + +/** Finish the message and return the digest. + * @param ctx SHA1 context. + * @param digest 16 byte digest. + */ +PJ_DECL(void) pj_sha1_final(pj_sha1_context *ctx, + pj_uint8_t digest[PJ_SHA1_DIGEST_SIZE]); + + +/** + * @} + */ + +PJ_END_DECL + + +#endif /* __PJLIB_UTIL_SHA1_H__ */ + diff --git a/pjlib-util/include/pjlib-util/stun_msg.h b/pjlib-util/include/pjlib-util/stun_msg.h index b0f80d6b..b15b11f9 100644 --- a/pjlib-util/include/pjlib-util/stun_msg.h +++ b/pjlib-util/include/pjlib-util/stun_msg.h @@ -1171,21 +1171,38 @@ PJ_DECL(pj_status_t) pj_stun_msg_decode(pj_pool_t *pool, pj_uint16_t uattr[]); /** - * Print the message structure to a buffer. + * Print the STUN message structure to a packet buffer, ready to be + * sent to remote destination. This function will take care about + * calculating the MESSAGE-INTEGRITY digest as well as FINGERPRINT + * value. * - * @param msg The message to be printed to a contiguous buffer. - * @param pkt_buf The buffer. + * If MESSAGE-INTEGRITY attribute is present, the function assumes + * that application wants to include credential (short or long term) + * in the message, and this function will calculate the HMAC digest + * from the message using the supplied password in the parameter. + * If REALM attribute is present, the HMAC digest is calculated as + * long term credential, otherwise as short term credential. + * + * If FINGERPRINT attribute is present, this function will calculate + * the FINGERPRINT CRC attribute for the message. + * + * @param msg The STUN message to be printed. + * @param pkt_buf The buffer to be filled with the packet. * @param buf_size Size of the buffer. - * @param options Options. + * @param options Options, which currently must be zero. + * @param password Password to be used when credential is to be + * included. This parameter MUST be specified when + * the message contains MESSAGE-INTEGRITY attribute. * @param p_msg_len Upon return, it will be filed with the size of * the packet in bytes, or negative value on error. * - * @return PJ_SUCCESS on success. + * @return PJ_SUCCESS on success or the appropriate error code. */ PJ_DECL(pj_status_t) pj_stun_msg_encode(const pj_stun_msg *msg, pj_uint8_t *pkt_buf, unsigned buf_size, unsigned options, + const pj_str_t *password, unsigned *p_msg_len); -- cgit v1.2.3