• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * These coded instructions, statements, and computer programs are the
8  * property of Apple Inc. and are protected by Federal copyright
9  * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
10  * which should have been included with this file.  If this file is
11  * missing or damaged, see the license at "http://www.cups.org/".
12  *
13  * This file is subject to the Apple OS-Developed Software exception.
14  */
15 
16 /*
17  * Include necessary headers...
18  */
19 
20 #include <cups/cups.h>
21 #include "http-private.h"
22 #include "string-private.h"
23 
24 
25 /*
26  * 'httpMD5()' - Compute the MD5 sum of the username:group:password.
27  *
28  * @deprecated@
29  */
30 
31 char *					/* O - MD5 sum */
httpMD5(const char * username,const char * realm,const char * passwd,char md5[33])32 httpMD5(const char *username,		/* I - User name */
33         const char *realm,		/* I - Realm name */
34         const char *passwd,		/* I - Password string */
35 	char       md5[33])		/* O - MD5 string */
36 {
37   unsigned char		sum[16];	/* Sum data */
38   char			line[256];	/* Line to sum */
39 
40 
41  /*
42   * Compute the MD5 sum of the user name, group name, and password.
43   */
44 
45   snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
46   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
47 
48  /*
49   * Return the sum...
50   */
51 
52   return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
53 }
54 
55 
56 /*
57  * 'httpMD5Final()' - Combine the MD5 sum of the username, group, and password
58  *                    with the server-supplied nonce value, method, and
59  *                    request-uri.
60  *
61  * @deprecated@
62  */
63 
64 char *					/* O - New sum */
httpMD5Final(const char * nonce,const char * method,const char * resource,char md5[33])65 httpMD5Final(const char *nonce,		/* I - Server nonce value */
66              const char *method,	/* I - METHOD (GET, POST, etc.) */
67 	     const char *resource,	/* I - Resource path */
68              char       md5[33])	/* IO - MD5 sum */
69 {
70   unsigned char		sum[16];	/* Sum data */
71   char			line[1024];	/* Line of data */
72   char			a2[33];		/* Hash of method and resource */
73 
74 
75  /*
76   * First compute the MD5 sum of the method and resource...
77   */
78 
79   snprintf(line, sizeof(line), "%s:%s", method, resource);
80   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
81   cupsHashString(sum, sizeof(sum), a2, sizeof(a2));
82 
83  /*
84   * Then combine A1 (MD5 of username, realm, and password) with the nonce
85   * and A2 (method + resource) values to get the final MD5 sum for the
86   * request...
87   */
88 
89   snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
90   cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
91 
92   return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
93 }
94 
95 
96 /*
97  * 'httpMD5String()' - Convert an MD5 sum to a character string.
98  *
99  * @deprecated@
100  */
101 
102 char *					/* O - MD5 sum in hex */
httpMD5String(const unsigned char * sum,char md5[33])103 httpMD5String(const unsigned char *sum,	/* I - MD5 sum data */
104               char                md5[33])
105 					/* O - MD5 sum in hex */
106 {
107   return ((char *)cupsHashString(sum, 16, md5, 33));
108 }
109