[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