summaryrefslogtreecommitdiffstats
path: root/c/src/libnetworking/rtems_webserver/websda.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/libnetworking/rtems_webserver/websda.c')
-rw-r--r--c/src/libnetworking/rtems_webserver/websda.c244
1 files changed, 0 insertions, 244 deletions
diff --git a/c/src/libnetworking/rtems_webserver/websda.c b/c/src/libnetworking/rtems_webserver/websda.c
deleted file mode 100644
index a4a95775b8..0000000000
--- a/c/src/libnetworking/rtems_webserver/websda.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * websda.c -- Digest Access Authentication routines
- *
- * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
- *
- * See the file "license.txt" for usage and redistribution license requirements
- *
- * $Id$
- */
-
-/******************************** Description *********************************/
-
-/*
- * Routines for generating DAA data. The module uses the
- * "RSA Data Security, Inc. MD5 Message-Digest Algorithm" found in md5c.c
- */
-
-/********************************* Includes ***********************************/
-
-#ifndef CE
-#include <time.h>
-#endif
-#include "websda.h"
-#include "md5.h"
-
-/******************************** Local Data **********************************/
-
-#define RANDOMKEY T("onceuponatimeinparadise")
-#define NONCE_SIZE 34
-#define HASH_SIZE 16
-
-/*********************************** Code *************************************/
-/*
- * websMD5binary returns the MD5 hash
- */
-
-char *websMD5binary(unsigned char *buf, int length)
-{
- const char *hex = "0123456789abcdef";
- MD5_CONTEXT md5ctx;
- unsigned char hash[HASH_SIZE];
- char *r, *strReturn;
- char result[(HASH_SIZE * 2) + 1];
- int i;
-
-/*
- * Take the MD5 hash of the string argument.
- */
- MD5Init(&md5ctx);
- MD5Update(&md5ctx, buf, (unsigned int)length);
- MD5Final(hash, &md5ctx);
-
-/*
- * Prepare the resulting hash string
- */
- for (i = 0, r = result; i < 16; i++) {
- *r++ = hex[hash[i] >> 4];
- *r++ = hex[hash[i] & 0xF];
- }
-
-/*
- * Zero terminate the hash string
- */
- *r = '\0';
-
-/*
- * Allocate a new copy of the hash string
- */
- strReturn = balloc(B_L, sizeof(result));
- strcpy(strReturn, result);
-
- return strReturn;
-}
-
-/*****************************************************************************/
-/*
- * Convenience call to websMD5binary
- * (Performs char_t to char conversion and back)
- */
-
-char_t *websMD5(char_t *string)
-{
- char_t *strReturn;
-
- a_assert(string && *string);
-
- if (string && *string) {
- char *strTemp, *strHash;
- int nLen;
-/*
- * Convert input char_t string to char string
- */
- nLen = gstrlen(string);
- strTemp = ballocUniToAsc(string, nLen + 1);
-/*
- * Execute the digest calculation
- */
- strHash = websMD5binary((unsigned char *)strTemp, nLen);
-/*
- * Convert the returned char string digest to a char_t string
- */
- nLen = strlen(strHash);
- strReturn = ballocAscToUni(strHash, nLen);
-/*
- * Free up the temporary allocated resources
- */
- bfree(B_L, strTemp);
- bfree(B_L, strHash);
- } else {
- strReturn = NULL;
- }
-
- return strReturn;
-}
-
-/******************************************************************************/
-/*
- * Get a Nonce value for passing along to the client. This function
- * composes the string "RANDOMKEY:timestamp:myrealm" and
- * calculates the MD5 digest placing it in output.
- */
-
-char_t *websCalcNonce(webs_t wp)
-{
- char_t *nonce, *prenonce;
- struct tm *newtime;
- time_t longTime;
-
- a_assert(wp);
-/*
- * Get time as long integer.
- */
- time(&longTime);
-/*
- * Convert to local time.
- */
- newtime = localtime(&longTime);
-/*
- * Create prenonce string.
- */
- prenonce = NULL;
-#ifdef DIGEST_ACCESS_SUPPORT
- fmtAlloc(&prenonce, 256, T("%s:%s:%s"), RANDOMKEY, gasctime(newtime),
- wp->realm);
-#else
- fmtAlloc(&prenonce, 256, T("%s:%s:%s"), RANDOMKEY, gasctime(newtime),
- RANDOMKEY);
-#endif
- a_assert(prenonce);
-/*
- * Create the nonce
- */
- nonce = websMD5(prenonce);
-/*
- * Cleanup
- */
- bfreeSafe(B_L, prenonce);
-
- return nonce;
-}
-
-/******************************************************************************/
-/*
- * Get an Opaque value for passing along to the client
- */
-
-char_t *websCalcOpaque(webs_t wp)
-{
- char_t *opaque;
- a_assert(wp);
-/*
- * Temporary stub!
- */
- opaque = bstrdup(B_L, T("5ccc069c403ebaf9f0171e9517f40e41"));
-
- return opaque;
-}
-
-/******************************************************************************/
-/*
- * Get a Digest value using the MD5 algorithm
- */
-
-char_t *websCalcDigest(webs_t wp)
-{
-#ifdef DIGEST_ACCESS_SUPPORT
- char_t *digest, *a1, *a1prime, *a2, *a2prime, *preDigest, *method;
-
- a_assert(wp);
- digest = NULL;
-
-/*
- * Calculate first portion of digest H(A1)
- */
- a1 = NULL;
- fmtAlloc(&a1, 255, T("%s:%s:%s"), wp->userName, wp->realm, wp->password);
- a_assert(a1);
- a1prime = websMD5(a1);
- bfreeSafe(B_L, a1);
-/*
- * Calculate second portion of digest H(A2)
- */
- method = websGetVar(wp, T("REQUEST_METHOD"), NULL);
- a_assert(method);
- a2 = NULL;
- fmtAlloc(&a2, 255, T("%s:%s"), method, wp->uri);
- a_assert(a2);
- a2prime = websMD5(a2);
- bfreeSafe(B_L, a2);
-/*
- * Construct final digest KD(H(A1):nonce:H(A2))
- */
- a_assert(a1prime);
- a_assert(a2prime);
- a_assert(wp->nonce);
-
- preDigest = NULL;
- if (!wp->qop) {
- fmtAlloc(&preDigest, 255, T("%s:%s:%s"), a1prime, wp->nonce, a2prime);
- } else {
- fmtAlloc(&preDigest, 255, T("%s:%s:%s:%s:%s:%s"),
- a1prime,
- wp->nonce,
- wp->nc,
- wp->cnonce,
- wp->qop,
- a2prime);
- }
-
- a_assert(preDigest);
- digest = websMD5(preDigest);
-/*
- * Now clean up
- */
- bfreeSafe(B_L, a1prime);
- bfreeSafe(B_L, a2prime);
- bfreeSafe(B_L, preDigest);
- return digest;
-#else
- return NULL;
-#endif /* DIGEST_ACCESS_SUPPORT */
-}
-
-/******************************************************************************/