Reduce from 157 to 123 bytes

This commit is contained in:
Michael Brown
2006-11-21 16:01:12 +00:00
parent c5428303e4
commit a9415d3da2

View File

@@ -18,6 +18,7 @@
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
#include <malloc.h> #include <malloc.h>
@@ -43,24 +44,24 @@
*/ */
int chap_init ( struct chap_challenge *chap, int chap_init ( struct chap_challenge *chap,
struct digest_algorithm *digest ) { struct digest_algorithm *digest ) {
size_t state_len;
void *state;
assert ( chap->digest == NULL ); assert ( chap->digest == NULL );
assert ( chap->digest_context == NULL ); assert ( chap->digest_context == NULL );
assert ( chap->response == NULL ); assert ( chap->response == NULL );
state_len = ( digest->context_len + digest->digest_len );
state = malloc ( state_len );
if ( ! state )
return -ENOMEM;
chap->digest = digest; chap->digest = digest;
chap->digest_context = malloc ( digest->context_len ); chap->digest_context = state;
if ( ! chap->digest_context ) chap->response = ( state + digest->context_len );
goto err;
chap->response = malloc ( digest->digest_len );
if ( ! chap->response )
goto err;
chap->response_len = digest->digest_len; chap->response_len = digest->digest_len;
chap->digest->init ( chap->digest_context ); chap->digest->init ( chap->digest_context );
return 0; return 0;
err:
chap_finish ( chap );
return -ENOMEM;
} }
/** /**
@@ -100,9 +101,8 @@ void chap_respond ( struct chap_challenge *chap ) {
* @v chap CHAP challenge/response * @v chap CHAP challenge/response
*/ */
void chap_finish ( struct chap_challenge *chap ) { void chap_finish ( struct chap_challenge *chap ) {
free ( chap->digest_context ); void *state = chap->digest_context;
chap->digest_context = NULL;
free ( chap->response ); free ( state );
chap->response = NULL; memset ( chap, 0, sizeof ( *chap ) );
chap->digest = NULL;
} }