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