[gs-cvs] rev 8032 - trunk/gs/src

giles at ghostscript.com giles at ghostscript.com
Fri Jun 8 11:02:05 PDT 2007


Author: giles
Date: 2007-06-08 11:02:05 -0700 (Fri, 08 Jun 2007)
New Revision: 8032

Modified:
   trunk/gs/src/gdevpdf.c
   trunk/gs/src/gdevpdfu.c
   trunk/gs/src/md5.c
   trunk/gs/src/md5.h
   trunk/gs/src/md5main.c
   trunk/gs/src/smd5.c
   trunk/gs/src/smd5.h
Log:
Namespace the interface calls of our md5 implementation to avoid conflict
with other implementations, for example the one exported by libcups on
MacOS X, or one used by a client which also links to gs as a library.


Modified: trunk/gs/src/gdevpdf.c
===================================================================
--- trunk/gs/src/gdevpdf.c	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/gdevpdf.c	2007-06-08 18:02:05 UTC (rev 8032)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2006 Artifex Software, Inc.
+/* Copyright (C) 2001-2007 Artifex Software, Inc.
    All Rights Reserved.
   
    This software is provided AS-IS with no warranty, either express or
@@ -346,13 +346,13 @@
 private void
 Adobe_magic_loop_50(byte digest[16], int key_length)
 {
-    md5_state_t md5;
+    gs_md5_state_t md5;
     int i;
 
     for (i = 0; i < 50; i++) {
-	md5_init(&md5);
-	md5_append(&md5, digest, key_length);
-	md5_finish(&md5, digest);
+	gs_md5_init(&md5);
+	gs_md5_append(&md5, digest, key_length);
+	gs_md5_finish(&md5, digest);
     }
 }
 
@@ -374,7 +374,7 @@
 private int
 pdf_compute_encryption_data(gx_device_pdf * pdev)
 {
-    md5_state_t md5;
+    gs_md5_state_t md5;
     byte digest[16], buf[32], t;
     stream_arcfour_state sarc4;
 
@@ -420,10 +420,10 @@
 	return_error(gs_error_rangecheck);
     }
     /* Compute O : */
-    md5_init(&md5);
+    gs_md5_init(&md5);
     copy_padded(buf, &pdev->OwnerPassword);
-    md5_append(&md5, buf, sizeof(buf));
-    md5_finish(&md5, digest);
+    gs_md5_append(&md5, buf, sizeof(buf));
+    gs_md5_finish(&md5, digest);
     if (pdev->EncryptionR == 3)
 	Adobe_magic_loop_50(digest, pdev->KeyLength / 8);
     copy_padded(buf, &pdev->UserPassword);
@@ -433,31 +433,31 @@
 	Adobe_magic_loop_19(buf, sizeof(buf), digest, pdev->KeyLength / 8);
     memcpy(pdev->EncryptionO, buf, sizeof(pdev->EncryptionO));
     /* Compute Key : */
-    md5_init(&md5);
+    gs_md5_init(&md5);
     copy_padded(buf, &pdev->UserPassword);
-    md5_append(&md5, buf, sizeof(buf));
-    md5_append(&md5, pdev->EncryptionO, sizeof(pdev->EncryptionO));
-    t = (byte)(pdev->Permissions >>  0);  md5_append(&md5, &t, 1);
-    t = (byte)(pdev->Permissions >>  8);  md5_append(&md5, &t, 1);
-    t = (byte)(pdev->Permissions >> 16);  md5_append(&md5, &t, 1);
-    t = (byte)(pdev->Permissions >> 24);  md5_append(&md5, &t, 1);
-    md5_append(&md5, pdev->fileID, sizeof(pdev->fileID));
+    gs_md5_append(&md5, buf, sizeof(buf));
+    gs_md5_append(&md5, pdev->EncryptionO, sizeof(pdev->EncryptionO));
+    t = (byte)(pdev->Permissions >>  0);  gs_md5_append(&md5, &t, 1);
+    t = (byte)(pdev->Permissions >>  8);  gs_md5_append(&md5, &t, 1);
+    t = (byte)(pdev->Permissions >> 16);  gs_md5_append(&md5, &t, 1);
+    t = (byte)(pdev->Permissions >> 24);  gs_md5_append(&md5, &t, 1);
+    gs_md5_append(&md5, pdev->fileID, sizeof(pdev->fileID));
     if (pdev->EncryptionR == 3)
 	if (!pdev->EncryptMetadata) {
 	    const byte v[4] = {0xFF, 0xFF, 0xFF, 0xFF};
 
-	    md5_append(&md5, v, 4);
+	    gs_md5_append(&md5, v, 4);
 	}
-    md5_finish(&md5, digest);
+    gs_md5_finish(&md5, digest);
     if (pdev->EncryptionR == 3)
 	Adobe_magic_loop_50(digest, pdev->KeyLength / 8);
     memcpy(pdev->EncryptionKey, digest, pdev->KeyLength / 8);
     /* Compute U : */
     if (pdev->EncryptionR == 3) {
-	md5_init(&md5);
-	md5_append(&md5, pad, sizeof(pad));
-	md5_append(&md5, pdev->fileID, sizeof(pdev->fileID));
-	md5_finish(&md5, digest);
+	gs_md5_init(&md5);
+	gs_md5_append(&md5, pad, sizeof(pad));
+	gs_md5_append(&md5, pdev->fileID, sizeof(pdev->fileID));
+	gs_md5_finish(&md5, digest);
 	s_arcfour_set_key(&sarc4, pdev->EncryptionKey, pdev->KeyLength / 8);
 	s_arcfour_process_buffer(&sarc4, digest, sizeof(digest));
 	Adobe_magic_loop_19(digest, sizeof(digest), pdev->EncryptionKey, pdev->KeyLength / 8);

Modified: trunk/gs/src/gdevpdfu.c
===================================================================
--- trunk/gs/src/gdevpdfu.c	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/gdevpdfu.c	2007-06-08 18:02:05 UTC (rev 8032)
@@ -440,17 +440,17 @@
 private int
 pdf_object_key(const gx_device_pdf * pdev, gs_id object_id, byte key[16])
 {
-    md5_state_t md5;
-    md5_byte_t zero[2] = {0, 0}, t;
+    gs_md5_state_t md5;
+    gs_md5_byte_t zero[2] = {0, 0}, t;
     int KeySize = pdev->KeyLength / 8;
 
-    md5_init(&md5);
-    md5_append(&md5, pdev->EncryptionKey, KeySize);
-    t = (byte)(object_id >>  0);  md5_append(&md5, &t, 1);
-    t = (byte)(object_id >>  8);  md5_append(&md5, &t, 1);
-    t = (byte)(object_id >> 16);  md5_append(&md5, &t, 1);
-    md5_append(&md5, zero, 2);
-    md5_finish(&md5, key);
+    gs_md5_init(&md5);
+    gs_md5_append(&md5, pdev->EncryptionKey, KeySize);
+    t = (byte)(object_id >>  0);  gs_md5_append(&md5, &t, 1);
+    t = (byte)(object_id >>  8);  gs_md5_append(&md5, &t, 1);
+    t = (byte)(object_id >> 16);  gs_md5_append(&md5, &t, 1);
+    gs_md5_append(&md5, zero, 2);
+    gs_md5_finish(&md5, key);
     return min(KeySize + 5, 16);
 }
 
@@ -470,7 +470,7 @@
 {
     gs_memory_t *mem = pdev->v_memory;
     stream_arcfour_state *ss;
-    md5_byte_t key[16];
+    gs_md5_byte_t key[16];
     int code, keylength;
 
     if (!pdev->KeyLength)

Modified: trunk/gs/src/md5.c
===================================================================
--- trunk/gs/src/md5.c	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/md5.c	2007-06-08 18:02:05 UTC (rev 8032)
@@ -1,5 +1,6 @@
 /*
-  Copyright (C) 1999, 2000 Artifex Software, Inc.  All rights reserved.
+  Copyright (C) 1999-2007 Artifex Software, Inc.
+  All rights reserved.
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -37,6 +38,8 @@
   <ghost at aladdin.com>.  Other authors are noted in the change history
   that follows (in reverse chronological order):
 
+  2007-06-08 RG  Namespaced the api calls to avoid conflict with other
+	implementations when linking gs as a library.
   2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
 	either statically or dynamically; added missing #include <string.h>
 	in library.
@@ -61,7 +64,7 @@
 #  define BYTE_ORDER 0
 #endif
 
-#define T_MASK ((md5_word_t)~0)
+#define T_MASK ((gs_md5_word_t)~0)
 #define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
 #define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
 #define T3    0x242070db
@@ -129,19 +132,19 @@
 
 
 static void
-md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
+gs_md5_process(gs_md5_state_t *pms, const gs_md5_byte_t *data /*[64]*/)
 {
-    md5_word_t
+    gs_md5_word_t
 	a = pms->abcd[0], b = pms->abcd[1],
 	c = pms->abcd[2], d = pms->abcd[3];
-    md5_word_t t;
+    gs_md5_word_t t;
 #if BYTE_ORDER > 0
     /* Define storage only for big-endian CPUs. */
-    md5_word_t X[16];
+    gs_md5_word_t X[16];
 #else
     /* Define storage for little-endian or both types of CPUs. */
-    md5_word_t xbuf[16];
-    const md5_word_t *X;
+    gs_md5_word_t xbuf[16];
+    const gs_md5_word_t *X;
 #endif
 
     {
@@ -153,7 +156,7 @@
 	 */
 	static const int w = 1;
 
-	if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
+	if (*((const gs_md5_byte_t *)&w)) /* dynamic little-endian */
 #endif
 #if BYTE_ORDER <= 0		/* little-endian */
 	{
@@ -161,9 +164,9 @@
 	     * On little-endian machines, we can process properly aligned
 	     * data without copying it.
 	     */
-	    if (!((data - (const md5_byte_t *)0) & 3)) {
+	    if (!((data - (const gs_md5_byte_t *)0) & 3)) {
 		/* data are properly aligned */
-		X = (const md5_word_t *)data;
+		X = (const gs_md5_word_t *)data;
 	    } else {
 		/* not aligned */
 		memcpy(xbuf, data, 64);
@@ -180,7 +183,7 @@
 	     * On big-endian machines, we must arrange the bytes in the
 	     * right order.
 	     */
-	    const md5_byte_t *xp = data;
+	    const gs_md5_byte_t *xp = data;
 	    int i;
 
 #  if BYTE_ORDER == 0
@@ -310,7 +313,7 @@
 }
 
 void
-md5_init(md5_state_t *pms)
+gs_md5_init(gs_md5_state_t *pms)
 {
     pms->count[0] = pms->count[1] = 0;
     pms->abcd[0] = 0x67452301;
@@ -320,12 +323,12 @@
 }
 
 void
-md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
+gs_md5_append(gs_md5_state_t *pms, const gs_md5_byte_t *data, int nbytes)
 {
-    const md5_byte_t *p = data;
+    const gs_md5_byte_t *p = data;
     int left = nbytes;
     int offset = (pms->count[0] >> 3) & 63;
-    md5_word_t nbits = (md5_word_t)(nbytes << 3);
+    gs_md5_word_t nbits = (gs_md5_word_t)(nbytes << 3);
 
     if (nbytes <= 0)
 	return;
@@ -345,12 +348,12 @@
 	    return;
 	p += copy;
 	left -= copy;
-	md5_process(pms, pms->buf);
+	gs_md5_process(pms, pms->buf);
     }
 
     /* Process full blocks. */
     for (; left >= 64; p += 64, left -= 64)
-	md5_process(pms, p);
+	gs_md5_process(pms, p);
 
     /* Process a final partial block. */
     if (left)
@@ -358,24 +361,24 @@
 }
 
 void
-md5_finish(md5_state_t *pms, md5_byte_t digest[16])
+gs_md5_finish(gs_md5_state_t *pms, gs_md5_byte_t digest[16])
 {
-    static const md5_byte_t pad[64] = {
+    static const gs_md5_byte_t pad[64] = {
 	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     };
-    md5_byte_t data[8];
+    gs_md5_byte_t data[8];
     int i;
 
     /* Save the length before padding. */
     for (i = 0; i < 8; ++i)
-	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
+	data[i] = (gs_md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
     /* Pad to 56 bytes mod 64. */
-    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
+    gs_md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
     /* Append the length. */
-    md5_append(pms, data, 8);
+    gs_md5_append(pms, data, 8);
     for (i = 0; i < 16; ++i)
-	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
+	digest[i] = (gs_md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
 }

Modified: trunk/gs/src/md5.h
===================================================================
--- trunk/gs/src/md5.h	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/md5.h	2007-06-08 18:02:05 UTC (rev 8032)
@@ -1,5 +1,6 @@
 /*
-  Copyright (C) 1999 Artifex Software, Inc.  All rights reserved.
+  Copyright (C) 1999-2007 Artifex Software, Inc.
+  All rights reserved.
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -60,15 +61,15 @@
  * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
  */
 
-typedef unsigned char md5_byte_t; /* 8-bit byte */
-typedef unsigned int md5_word_t; /* 32-bit word */
+typedef unsigned char gs_md5_byte_t; /* 8-bit byte */
+typedef unsigned int gs_md5_word_t; /* 32-bit word */
 
 /* Define the state of the MD5 Algorithm. */
-typedef struct md5_state_s {
-    md5_word_t count[2];	/* message length in bits, lsw first */
-    md5_word_t abcd[4];		/* digest buffer */
-    md5_byte_t buf[64];		/* accumulate block */
-} md5_state_t;
+typedef struct gs_md5_state_s {
+    gs_md5_word_t count[2];	/* message length in bits, lsw first */
+    gs_md5_word_t abcd[4];		/* digest buffer */
+    gs_md5_byte_t buf[64];		/* accumulate block */
+} gs_md5_state_t;
 
 #ifdef __cplusplus
 extern "C" 
@@ -76,13 +77,13 @@
 #endif
 
 /* Initialize the algorithm. */
-void md5_init(md5_state_t *pms);
+void gs_md5_init(gs_md5_state_t *pms);
 
 /* Append a string to the message. */
-void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
+void gs_md5_append(gs_md5_state_t *pms, const gs_md5_byte_t *data, int nbytes);
 
 /* Finish the message and return the digest. */
-void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
+void gs_md5_finish(gs_md5_state_t *pms, gs_md5_byte_t digest[16]);
 
 #ifdef __cplusplus
 }  /* end extern "C" */

Modified: trunk/gs/src/md5main.c
===================================================================
--- trunk/gs/src/md5main.c	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/md5main.c	2007-06-08 18:02:05 UTC (rev 8032)
@@ -1,5 +1,6 @@
 /*
-  Copyright (C) 2002 Aladdin Enterprises.  All rights reserved.
+  Copyright (C) 2002-2007 Artifex Software, Inc.
+  All rights reserved.
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -37,6 +38,8 @@
   <ghost at aladdin.com>.  Other authors are noted in the change history
   that follows (in reverse chronological order):
 
+  2007-06-08 RG  Namespaced the api calls to avoid conflict with other
+	implementations when linking gs as a library.
   2002-04-13 lpd Splits off main program into a separate file, md5main.c.
  */
 
@@ -76,14 +79,14 @@
     int status = 0;
 
     for (i = 0; i < 7*2; i += 2) {
-	md5_state_t state;
-	md5_byte_t digest[16];
+	gs_md5_state_t state;
+	gs_md5_byte_t digest[16];
 	char hex_output[16*2 + 1];
 	int di;
 
-	md5_init(&state);
-	md5_append(&state, (const md5_byte_t *)test[i], strlen(test[i]));
-	md5_finish(&state, digest);
+	gs_md5_init(&state);
+	gs_md5_append(&state, (const gs_md5_byte_t *)test[i], strlen(test[i]));
+	gs_md5_finish(&state, digest);
 	for (di = 0; di < 16; ++di)
 	    sprintf(hex_output + di * 2, "%02x", digest[di]);
 	if (strcmp(hex_output, test[i + 1])) {

Modified: trunk/gs/src/smd5.c
===================================================================
--- trunk/gs/src/smd5.c	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/smd5.c	2007-06-08 18:02:05 UTC (rev 8032)
@@ -28,7 +28,7 @@
 {
     stream_MD5E_state *const ss = (stream_MD5E_state *) st;
 
-    md5_init(&ss->md5);
+    gs_md5_init(&ss->md5);
     return 0;
 }
 
@@ -41,12 +41,12 @@
     int status = 0;
 
     if (pr->ptr < pr->limit) {
-	md5_append(&ss->md5, pr->ptr + 1, pr->limit - pr->ptr);
+	gs_md5_append(&ss->md5, pr->ptr + 1, pr->limit - pr->ptr);
 	pr->ptr = pr->limit;
     }
     if (last) {
 	if (pw->limit - pw->ptr >= 16) {
-	    md5_finish(&ss->md5, pw->ptr + 1);
+	    gs_md5_finish(&ss->md5, pw->ptr + 1);
 	    pw->ptr += 16;
 	    status = EOFC;
 	} else
@@ -89,7 +89,7 @@
     int nw = pw->limit - pw->ptr;
     int n = min(nr, nw);
 
-    md5_append(&ss->md5, pr->ptr + 1, n);
+    gs_md5_append(&ss->md5, pr->ptr + 1, n);
     memcpy(pw->ptr + 1, pr->ptr + 1, n);
     pr->ptr += n;
     pw->ptr += n;
@@ -130,14 +130,14 @@
 s_MD5C_get_digest(stream *s, byte *buf, int buf_length)
 {
     stream_MD5E_state *const ss = (stream_MD5E_state *)s->state;
-    md5_state_t md5;
+    gs_md5_state_t md5;
     byte b[16], *p;
     int l = min(16, buf_length), k;
 
     if (s->procs.process != s_MD5C_process)
 	return 0; /* Must not happen. */
     md5 = ss->md5;
-    md5_finish(&md5, b);
+    gs_md5_finish(&md5, b);
     memcpy(buf, b, l);
     for (p = b + l; p < b + sizeof(b); p += l) {
 	for (k = 0; k < l && p + k < b + sizeof(b); k++)

Modified: trunk/gs/src/smd5.h
===================================================================
--- trunk/gs/src/smd5.h	2007-06-07 04:52:46 UTC (rev 8031)
+++ trunk/gs/src/smd5.h	2007-06-08 18:02:05 UTC (rev 8032)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2006 Artifex Software, Inc.
+/* Copyright (C) 2001-2007 Artifex Software, Inc.
    All Rights Reserved.
   
    This software is provided AS-IS with no warranty, either express or
@@ -26,7 +26,7 @@
  */
 typedef struct stream_MD5E_state_s {
     stream_state_common;
-    md5_state_t md5;
+    gs_md5_state_t md5;
 } stream_MD5E_state;
 
 #define private_st_MD5E_state()	/* in smd5.c */\



More information about the gs-cvs mailing list