xref: /aosp_15_r20/external/libcups/cups/md5passwd.c (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * MD5 password support for CUPS (deprecated).
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2017 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2005 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker  */
9*5e7646d2SAndroid Build Coastguard Worker 
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker  * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker  */
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker #include <cups/cups.h>
15*5e7646d2SAndroid Build Coastguard Worker #include "http-private.h"
16*5e7646d2SAndroid Build Coastguard Worker #include "string-private.h"
17*5e7646d2SAndroid Build Coastguard Worker 
18*5e7646d2SAndroid Build Coastguard Worker 
19*5e7646d2SAndroid Build Coastguard Worker /*
20*5e7646d2SAndroid Build Coastguard Worker  * 'httpMD5()' - Compute the MD5 sum of the username:group:password.
21*5e7646d2SAndroid Build Coastguard Worker  *
22*5e7646d2SAndroid Build Coastguard Worker  * @deprecated@
23*5e7646d2SAndroid Build Coastguard Worker  */
24*5e7646d2SAndroid Build Coastguard Worker 
25*5e7646d2SAndroid Build Coastguard Worker char *					/* O - MD5 sum */
httpMD5(const char * username,const char * realm,const char * passwd,char md5[33])26*5e7646d2SAndroid Build Coastguard Worker httpMD5(const char *username,		/* I - User name */
27*5e7646d2SAndroid Build Coastguard Worker         const char *realm,		/* I - Realm name */
28*5e7646d2SAndroid Build Coastguard Worker         const char *passwd,		/* I - Password string */
29*5e7646d2SAndroid Build Coastguard Worker 	char       md5[33])		/* O - MD5 string */
30*5e7646d2SAndroid Build Coastguard Worker {
31*5e7646d2SAndroid Build Coastguard Worker   unsigned char		sum[16];	/* Sum data */
32*5e7646d2SAndroid Build Coastguard Worker   char			line[256];	/* Line to sum */
33*5e7646d2SAndroid Build Coastguard Worker 
34*5e7646d2SAndroid Build Coastguard Worker 
35*5e7646d2SAndroid Build Coastguard Worker  /*
36*5e7646d2SAndroid Build Coastguard Worker   * Compute the MD5 sum of the user name, group name, and password.
37*5e7646d2SAndroid Build Coastguard Worker   */
38*5e7646d2SAndroid Build Coastguard Worker 
39*5e7646d2SAndroid Build Coastguard Worker   snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
40*5e7646d2SAndroid Build Coastguard Worker   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
41*5e7646d2SAndroid Build Coastguard Worker 
42*5e7646d2SAndroid Build Coastguard Worker  /*
43*5e7646d2SAndroid Build Coastguard Worker   * Return the sum...
44*5e7646d2SAndroid Build Coastguard Worker   */
45*5e7646d2SAndroid Build Coastguard Worker 
46*5e7646d2SAndroid Build Coastguard Worker   return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
47*5e7646d2SAndroid Build Coastguard Worker }
48*5e7646d2SAndroid Build Coastguard Worker 
49*5e7646d2SAndroid Build Coastguard Worker 
50*5e7646d2SAndroid Build Coastguard Worker /*
51*5e7646d2SAndroid Build Coastguard Worker  * 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password
52*5e7646d2SAndroid Build Coastguard Worker  *                    with the server-supplied nonce value, method, and
53*5e7646d2SAndroid Build Coastguard Worker  *                    request-uri.
54*5e7646d2SAndroid Build Coastguard Worker  *
55*5e7646d2SAndroid Build Coastguard Worker  * @deprecated@
56*5e7646d2SAndroid Build Coastguard Worker  */
57*5e7646d2SAndroid Build Coastguard Worker 
58*5e7646d2SAndroid Build Coastguard Worker char *					/* O - New sum */
httpMD5Final(const char * nonce,const char * method,const char * resource,char md5[33])59*5e7646d2SAndroid Build Coastguard Worker httpMD5Final(const char *nonce,		/* I - Server nonce value */
60*5e7646d2SAndroid Build Coastguard Worker              const char *method,	/* I - METHOD (GET, POST, etc.) */
61*5e7646d2SAndroid Build Coastguard Worker 	     const char *resource,	/* I - Resource path */
62*5e7646d2SAndroid Build Coastguard Worker              char       md5[33])	/* IO - MD5 sum */
63*5e7646d2SAndroid Build Coastguard Worker {
64*5e7646d2SAndroid Build Coastguard Worker   unsigned char		sum[16];	/* Sum data */
65*5e7646d2SAndroid Build Coastguard Worker   char			line[1024];	/* Line of data */
66*5e7646d2SAndroid Build Coastguard Worker   char			a2[33];		/* Hash of method and resource */
67*5e7646d2SAndroid Build Coastguard Worker 
68*5e7646d2SAndroid Build Coastguard Worker 
69*5e7646d2SAndroid Build Coastguard Worker  /*
70*5e7646d2SAndroid Build Coastguard Worker   * First compute the MD5 sum of the method and resource...
71*5e7646d2SAndroid Build Coastguard Worker   */
72*5e7646d2SAndroid Build Coastguard Worker 
73*5e7646d2SAndroid Build Coastguard Worker   snprintf(line, sizeof(line), "%s:%s", method, resource);
74*5e7646d2SAndroid Build Coastguard Worker   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
75*5e7646d2SAndroid Build Coastguard Worker   cupsHashString(sum, sizeof(sum), a2, sizeof(a2));
76*5e7646d2SAndroid Build Coastguard Worker 
77*5e7646d2SAndroid Build Coastguard Worker  /*
78*5e7646d2SAndroid Build Coastguard Worker   * Then combine A1 (MD5 of username, realm, and password) with the nonce
79*5e7646d2SAndroid Build Coastguard Worker   * and A2 (method + resource) values to get the final MD5 sum for the
80*5e7646d2SAndroid Build Coastguard Worker   * request...
81*5e7646d2SAndroid Build Coastguard Worker   */
82*5e7646d2SAndroid Build Coastguard Worker 
83*5e7646d2SAndroid Build Coastguard Worker   snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
84*5e7646d2SAndroid Build Coastguard Worker   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
85*5e7646d2SAndroid Build Coastguard Worker 
86*5e7646d2SAndroid Build Coastguard Worker   return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
87*5e7646d2SAndroid Build Coastguard Worker }
88*5e7646d2SAndroid Build Coastguard Worker 
89*5e7646d2SAndroid Build Coastguard Worker 
90*5e7646d2SAndroid Build Coastguard Worker /*
91*5e7646d2SAndroid Build Coastguard Worker  * 'httpMD5String()' - Convert an MD5 sum to a character string.
92*5e7646d2SAndroid Build Coastguard Worker  *
93*5e7646d2SAndroid Build Coastguard Worker  * @deprecated@
94*5e7646d2SAndroid Build Coastguard Worker  */
95*5e7646d2SAndroid Build Coastguard Worker 
96*5e7646d2SAndroid Build Coastguard Worker char *					/* O - MD5 sum in hex */
httpMD5String(const unsigned char * sum,char md5[33])97*5e7646d2SAndroid Build Coastguard Worker httpMD5String(const unsigned char *sum,	/* I - MD5 sum data */
98*5e7646d2SAndroid Build Coastguard Worker               char                md5[33])
99*5e7646d2SAndroid Build Coastguard Worker 					/* O - MD5 sum in hex */
100*5e7646d2SAndroid Build Coastguard Worker {
101*5e7646d2SAndroid Build Coastguard Worker   return ((char *)cupsHashString(sum, 16, md5, 33));
102*5e7646d2SAndroid Build Coastguard Worker }
103