mirror of
https://github.com/MopriaAlliance/CUPS-for-Android.git
synced 2025-08-03 19:04:37 +08:00
143 lines
3.7 KiB
C
143 lines
3.7 KiB
C
/*
|
|
* "$Id: md5passwd.c 6649 2007-07-11 21:46:42Z mike $"
|
|
*
|
|
* MD5 password support for CUPS.
|
|
*
|
|
* Copyright 2007-2010 by Apple Inc.
|
|
* Copyright 1997-2005 by Easy Software Products.
|
|
*
|
|
* These coded instructions, statements, and computer programs are the
|
|
* property of Apple Inc. and are protected by Federal copyright
|
|
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
|
* which should have been included with this file. If this file is
|
|
* file is missing or damaged, see the license at "http://www.cups.org/".
|
|
*
|
|
* This file is subject to the Apple OS-Developed Software exception.
|
|
*
|
|
* Contents:
|
|
*
|
|
* httpMD5() - Compute the MD5 sum of the username:group:password.
|
|
* httpMD5Nonce() - Combine the MD5 sum of the username, group, and password
|
|
* with the server-supplied nonce value.
|
|
* httpMD5String() - Convert an MD5 sum to a character string.
|
|
*/
|
|
|
|
/*
|
|
* Include necessary headers...
|
|
*/
|
|
|
|
#include "http-private.h"
|
|
#include "string-private.h"
|
|
|
|
|
|
/*
|
|
* 'httpMD5()' - Compute the MD5 sum of the username:group:password.
|
|
*/
|
|
|
|
char * /* O - MD5 sum */
|
|
httpMD5(const char *username, /* I - User name */
|
|
const char *realm, /* I - Realm name */
|
|
const char *passwd, /* I - Password string */
|
|
char md5[33]) /* O - MD5 string */
|
|
{
|
|
_cups_md5_state_t state; /* MD5 state info */
|
|
unsigned char sum[16]; /* Sum data */
|
|
char line[256]; /* Line to sum */
|
|
|
|
|
|
/*
|
|
* Compute the MD5 sum of the user name, group name, and password.
|
|
*/
|
|
|
|
snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
|
|
_cupsMD5Init(&state);
|
|
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
|
_cupsMD5Finish(&state, sum);
|
|
|
|
/*
|
|
* Return the sum...
|
|
*/
|
|
|
|
return (httpMD5String(sum, md5));
|
|
}
|
|
|
|
|
|
/*
|
|
* 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password
|
|
* with the server-supplied nonce value, method, and
|
|
* request-uri.
|
|
*/
|
|
|
|
char * /* O - New sum */
|
|
httpMD5Final(const char *nonce, /* I - Server nonce value */
|
|
const char *method, /* I - METHOD (GET, POST, etc.) */
|
|
const char *resource, /* I - Resource path */
|
|
char md5[33]) /* IO - MD5 sum */
|
|
{
|
|
_cups_md5_state_t state; /* MD5 state info */
|
|
unsigned char sum[16]; /* Sum data */
|
|
char line[1024]; /* Line of data */
|
|
char a2[33]; /* Hash of method and resource */
|
|
|
|
|
|
/*
|
|
* First compute the MD5 sum of the method and resource...
|
|
*/
|
|
|
|
snprintf(line, sizeof(line), "%s:%s", method, resource);
|
|
_cupsMD5Init(&state);
|
|
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
|
_cupsMD5Finish(&state, sum);
|
|
httpMD5String(sum, a2);
|
|
|
|
/*
|
|
* Then combine A1 (MD5 of username, realm, and password) with the nonce
|
|
* and A2 (method + resource) values to get the final MD5 sum for the
|
|
* request...
|
|
*/
|
|
|
|
snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
|
|
|
|
_cupsMD5Init(&state);
|
|
_cupsMD5Append(&state, (unsigned char *)line, (int)strlen(line));
|
|
_cupsMD5Finish(&state, sum);
|
|
|
|
return (httpMD5String(sum, md5));
|
|
}
|
|
|
|
|
|
/*
|
|
* 'httpMD5String()' - Convert an MD5 sum to a character string.
|
|
*/
|
|
|
|
char * /* O - MD5 sum in hex */
|
|
httpMD5String(const unsigned char *sum, /* I - MD5 sum data */
|
|
char md5[33])
|
|
/* O - MD5 sum in hex */
|
|
{
|
|
int i; /* Looping var */
|
|
char *md5ptr; /* Pointer into MD5 string */
|
|
static const char hex[] = "0123456789abcdef";
|
|
/* Hex digits */
|
|
|
|
|
|
/*
|
|
* Convert the MD5 sum to hexadecimal...
|
|
*/
|
|
|
|
for (i = 16, md5ptr = md5; i > 0; i --, sum ++)
|
|
{
|
|
*md5ptr++ = hex[*sum >> 4];
|
|
*md5ptr++ = hex[*sum & 15];
|
|
}
|
|
|
|
*md5ptr = '\0';
|
|
|
|
return (md5);
|
|
}
|
|
|
|
|
|
/*
|
|
* End of "$Id: md5passwd.c 6649 2007-07-11 21:46:42Z mike $".
|
|
*/
|