diff --git a/usr/src/boot/sys/boot/common/crc32.c b/usr/src/boot/sys/boot/common/crc32.c
deleted file mode 100644
index 1a3e3a3..0000000
--- a/usr/src/boot/sys/boot/common/crc32.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*-
- *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
- *  code or tables extracted from it, as desired without restriction.
- */
-
-/*
- *  First, the polynomial itself and its table of feedback terms.  The
- *  polynomial is
- *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
- *
- *  Note that we take it "backwards" and put the highest-order term in
- *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
- *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
- *  the MSB being 1
- *
- *  Note that the usual hardware shift register implementation, which
- *  is what we're using (we're merely optimizing it by doing eight-bit
- *  chunks at a time) shifts bits into the lowest-order term.  In our
- *  implementation, that means shifting towards the right.  Why do we
- *  do it this way?  Because the calculated CRC must be transmitted in
- *  order from highest-order term to lowest-order term.  UARTs transmit
- *  characters in order from LSB to MSB.  By storing the CRC this way
- *  we hand it to the UART in the order low-byte to high-byte; the UART
- *  sends each low-bit to hight-bit; and the result is transmission bit
- *  by bit from highest- to lowest-order term without requiring any bit
- *  shuffling on our part.  Reception works similarly
- *
- *  The feedback terms table consists of 256, 32-bit entries.  Notes
- *
- *      The table can be generated at runtime if desired; code to do so
- *      is shown later.  It might not be obvious, but the feedback
- *      terms simply represent the results of eight shift/xor opera
- *      tions for all combinations of data and CRC register values
- *
- *      The values must be right-shifted by eight bits by the "updcrc
- *      logic; the shift must be unsigned (bring in zeroes).  On some
- *      hardware you could probably optimize the shift in assembler by
- *      using byte-swap instructions
- *      polynomial $edb88320
- *
- *
- * CRC32 code derived from work by Gary S. Brown.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-
-#include "crc32.h"
-
-static const uint32_t crc32_tab[] = {
-	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-	0xe963a535, 0x9e6495a3,	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-	0xf3b97148, 0x84be41de,	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,	0x14015c4f, 0x63066cd9,
-	0xfa0f3d63, 0x8d080df5,	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,	0x35b5a8fa, 0x42b2986c,
-	0xdbbbc9d6, 0xacbcf940,	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,	0x76dc4190, 0x01db7106,
-	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-	0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-	0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-	0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-	0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-	0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-	0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-	0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-	0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-	0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-	0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-uint32_t
-crc32(const void *buf, size_t size)
-{
-	const uint8_t *p = buf;
-	uint32_t crc;
-
-	crc = ~0U;
-	while (size--)
-		crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
-	return (crc ^ ~0U);
-}
diff --git a/usr/src/boot/sys/boot/common/crc32.h b/usr/src/boot/sys/boot/common/crc32.h
deleted file mode 100644
index adfd6286..0000000
--- a/usr/src/boot/sys/boot/common/crc32.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*-
- *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
- *  code or tables extracted from it, as desired without restriction.
- *
- * $FreeBSD$
- */
-
-#ifndef _CRC32_H_
-#define	_CRC32_H_
-
-uint32_t crc32(const void *buf, size_t size);
-
-#endif	/* !_CRC32_H_ */
diff --git a/usr/src/boot/sys/boot/common/gpt.c b/usr/src/boot/sys/boot/common/gpt.c
index 8baa64c..e63a541 100644
--- a/usr/src/boot/sys/boot/common/gpt.c
+++ b/usr/src/boot/sys/boot/common/gpt.c
@@ -1,4 +1,4 @@
-/*-
+/*
  * Copyright (c) 2010 Pawel Jakub Dawidek <pjd@FreeBSD.org>
  * All rights reserved.
  *
@@ -25,7 +25,6 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/gpt.h>
@@ -34,7 +33,7 @@
 #error gpt.c works only for little endian architectures
 #endif
 
-#include "crc32.h"
+#include "zlib.h"
 #include "drv.h"
 #include "util.h"
 #include "gpt.h"
@@ -78,9 +77,11 @@
 		    BOOTPROG, which);
 		return;
 	}
-	hdr->hdr_crc_table = crc32(table, hdr->hdr_entries * hdr->hdr_entsz);
-	hdr->hdr_crc_self = 0;
-	hdr->hdr_crc_self = crc32(hdr, hdr->hdr_size);
+	hdr->hdr_crc_table = crc32(0, Z_NULL, 0);
+	hdr->hdr_crc_table = crc32(hdr->hdr_crc_table, table,
+	    hdr->hdr_entries * hdr->hdr_entsz);
+	hdr->hdr_crc_self = crc32(0, Z_NULL, 0);
+	hdr->hdr_crc_self = crc32(hdr->hdr_crc_self, hdr, hdr->hdr_size);
 	bzero(secbuf, DEV_BSIZE);
 	bcopy(hdr, secbuf, hdr->hdr_size);
 	if (drvwrite(dskp, secbuf, hdr->hdr_lba_self, 1)) {
@@ -101,7 +102,7 @@
 			return (-1);
 		}
 		ent = &gpttable[part - 1];
-		if (bcmp(&ent->ent_type, uuid, sizeof(uuid_t)) != 0) {
+		if (bcmp(&ent->ent_type, uuid, sizeof (uuid_t)) != 0) {
 			printf("%s: specified partition is not UFS\n",
 			    BOOTPROG);
 			return (-1);
@@ -123,7 +124,7 @@
 		 */
 		for (; curent < gpthdr->hdr_entries; curent++) {
 			ent = &gpttable[curent];
-			if (bcmp(&ent->ent_type, uuid, sizeof(uuid_t)) != 0)
+			if (bcmp(&ent->ent_type, uuid, sizeof (uuid_t)) != 0)
 				continue;
 			if (!(ent->ent_attr & GPT_ENT_ATTR_BOOTME))
 				continue;
@@ -137,7 +138,7 @@
 	}
 	for (; curent < gpthdr->hdr_entries; curent++) {
 		ent = &gpttable[curent];
-		if (bcmp(&ent->ent_type, uuid, sizeof(uuid_t)) != 0)
+		if (bcmp(&ent->ent_type, uuid, sizeof (uuid_t)) != 0)
 			continue;
 		if (!(ent->ent_attr & GPT_ENT_ATTR_BOOTME))
 			continue;
@@ -153,7 +154,7 @@
 		 */
 		for (curent = 0; curent < gpthdr->hdr_entries; curent++) {
 			ent = &gpttable[curent];
-			if (bcmp(&ent->ent_type, uuid, sizeof(uuid_t)) != 0)
+			if (bcmp(&ent->ent_type, uuid, sizeof (uuid_t)) != 0)
 				continue;
 			/* Ok, found one. */
 			goto found;
@@ -191,17 +192,17 @@
 		printf("%s: unable to read %s GPT header\n", BOOTPROG, which);
 		return (-1);
 	}
-	bcopy(secbuf, hdr, sizeof(*hdr));
-	if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) != 0 ||
+	bcopy(secbuf, hdr, sizeof (*hdr));
+	if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof (hdr->hdr_sig)) != 0 ||
 	    hdr->hdr_lba_self != hdrlba || hdr->hdr_revision < 0x00010000 ||
-	    hdr->hdr_entsz < sizeof(struct gpt_ent) ||
+	    hdr->hdr_entsz < sizeof (struct gpt_ent) ||
 	    hdr->hdr_entries > MAXTBLENTS || DEV_BSIZE % hdr->hdr_entsz != 0) {
 		printf("%s: invalid %s GPT header\n", BOOTPROG, which);
 		return (-1);
 	}
 	crc = hdr->hdr_crc_self;
-	hdr->hdr_crc_self = 0;
-	if (crc32(hdr, hdr->hdr_size) != crc) {
+	hdr->hdr_crc_self = crc32(0, Z_NULL, 0);
+	if (crc32(hdr->hdr_crc_self, hdr, hdr->hdr_size) != crc) {
 		printf("%s: %s GPT header checksum mismatch\n", BOOTPROG,
 		    which);
 		return (-1);
@@ -241,8 +242,8 @@
 	table_updated = 0;
 	entries_per_sec = DEV_BSIZE / hdr->hdr_entsz;
 	for (nent = 0, slba = hdr->hdr_lba_table;
-	     slba < hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
-	     slba++, nent += entries_per_sec) {
+	    slba < hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
+	    slba++, nent += entries_per_sec) {
 		sector_updated = 0;
 		for (part = 0; part < entries_per_sec; part++) {
 			ent = &table[nent + part];
@@ -267,9 +268,11 @@
 	}
 	if (!table_updated)
 		return;
-	hdr->hdr_crc_table = crc32(table, hdr->hdr_entries * hdr->hdr_entsz);
-	hdr->hdr_crc_self = 0;
-	hdr->hdr_crc_self = crc32(hdr, hdr->hdr_size);
+	hdr->hdr_crc_table = crc32(0, Z_NULL, 0);
+	hdr->hdr_crc_table = crc32(hdr->hdr_crc_table, table,
+	    hdr->hdr_entries * hdr->hdr_entsz);
+	hdr->hdr_crc_self = crc32(0, Z_NULL, 0);
+	hdr->hdr_crc_self = crc32(hdr->hdr_crc_self, hdr, hdr->hdr_size);
 	bzero(secbuf, DEV_BSIZE);
 	bcopy(hdr, secbuf, hdr->hdr_size);
 	if (drvwrite(dskp, secbuf, hdr->hdr_lba_self, 1))
@@ -299,7 +302,7 @@
 		}
 		ent = (struct gpt_ent *)secbuf;
 		for (part = 0; part < entries_per_sec; part++, ent++) {
-			bcopy(ent, &table[nent], sizeof(table[nent]));
+			bcopy(ent, &table[nent], sizeof (table[nent]));
 			if (++nent >= hdr->hdr_entries)
 				break;
 		}
@@ -307,7 +310,7 @@
 			break;
 		slba++;
 	}
-	if (crc32(table, nent * hdr->hdr_entsz) != hdr->hdr_crc_table) {
+	if (crc32(0, table, nent * hdr->hdr_entsz) != hdr->hdr_crc_table) {
 		printf("%s: %s GPT table checksum mismatch\n", BOOTPROG, which);
 		return (-1);
 	}
diff --git a/usr/src/boot/sys/boot/common/gpt.h b/usr/src/boot/sys/boot/common/gpt.h
index c42b40d..afbc3a7 100644
--- a/usr/src/boot/sys/boot/common/gpt.h
+++ b/usr/src/boot/sys/boot/common/gpt.h
@@ -1,4 +1,4 @@
-/*-
+/*
  * Copyright (c) 2010 Pawel Jakub Dawidek <pjd@FreeBSD.org>
  * All rights reserved.
  *
@@ -22,8 +22,6 @@
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- * $FreeBSD$
  */
 
 #ifndef _GPT_H_
diff --git a/usr/src/boot/sys/boot/common/part.c b/usr/src/boot/sys/boot/common/part.c
index 37eb787..1e3d8bf 100644
--- a/usr/src/boot/sys/boot/common/part.c
+++ b/usr/src/boot/sys/boot/common/part.c
@@ -36,7 +36,7 @@
 #include <sys/queue.h>
 #include <sys/vtoc.h>
 
-#include <crc32.h>
+#include <zlib.h>
 #include <part.h>
 #include <uuid.h>
 
@@ -184,8 +184,8 @@
 		return (NULL);
 	}
 	crc = le32toh(hdr->hdr_crc_self);
-	hdr->hdr_crc_self = 0;
-	if (crc32(hdr, sz) != crc) {
+	hdr->hdr_crc_self = crc32(0, Z_NULL, 0);
+	if (crc32(hdr->hdr_crc_self, (const Bytef *)hdr, sz) != crc) {
 		DEBUG("GPT header's CRC doesn't match");
 		return (NULL);
 	}
@@ -233,7 +233,7 @@
 		cnt = hdr->hdr_entries;
 		/* Check CRC only when buffer size is enough for table. */
 		if (hdr->hdr_crc_table !=
-		    crc32(tbl, hdr->hdr_entries * hdr->hdr_entsz)) {
+		    crc32(0, tbl, hdr->hdr_entries * hdr->hdr_entsz)) {
 			DEBUG("GPT table's CRC doesn't match");
 			return (-1);
 		}
diff --git a/usr/src/boot/sys/boot/efi/loader/Makefile.com b/usr/src/boot/sys/boot/efi/loader/Makefile.com
index e9397e1..def4fba 100644
--- a/usr/src/boot/sys/boot/efi/loader/Makefile.com
+++ b/usr/src/boot/sys/boot/efi/loader/Makefile.com
@@ -33,6 +33,7 @@
 CFLAGS=	-O2
 CPPFLAGS= -nostdinc -I../../../../../include -I../../..../
 CPPFLAGS += -I../../../../../lib/libstand
+CPPFLAGS += -I../../../../../lib/libz
 
 include ../../Makefile.inc
 
diff --git a/usr/src/boot/sys/boot/efi/loader/Makefile.common b/usr/src/boot/sys/boot/efi/loader/Makefile.common
index 69fe054..884486c 100644
--- a/usr/src/boot/sys/boot/efi/loader/Makefile.common
+++ b/usr/src/boot/sys/boot/efi/loader/Makefile.common
@@ -17,8 +17,6 @@
 SRCS +=	disk.c part.c dev_net.c
 OBJS += disk.o part.o dev_net.o
 CFLAGS += -DLOADER_DISK_SUPPORT
-SRCS +=	crc32.c
-OBJS +=	crc32.o
 CFLAGS += -DLOADER_GPT_SUPPORT
 CFLAGS += -DLOADER_MBR_SUPPORT
 
diff --git a/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile b/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
index 892a9d7..3a07b58 100644
--- a/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
+++ b/usr/src/boot/sys/boot/i386/gptzfsboot/Makefile
@@ -46,6 +46,7 @@
 	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
 	-I../../../../include \
 	-I../../../../lib/libstand \
+	-I../../../../lib/libz \
 	-I../../common \
 	-I../common \
 	-I../../zfs \
@@ -76,7 +77,7 @@
 
 OBJS =	multiboot.o zfsboot.o sio.o cons.o panic.o devopen.o \
 	part.o biosmem.o smbios.o biosdisk.o devicename.o disk.o bcache.o \
-	time.o crc32.o
+	time.o
 
 CLEANFILES=	gptzfsboot $(OBJS)
 
diff --git a/usr/src/boot/sys/boot/i386/loader/Makefile b/usr/src/boot/sys/boot/i386/loader/Makefile
index ec9c612..ad6f293 100644
--- a/usr/src/boot/sys/boot/i386/loader/Makefile
+++ b/usr/src/boot/sys/boot/i386/loader/Makefile
@@ -20,6 +20,7 @@
 CFLAGS=		-O2 -fno-reorder-functions
 CPPFLAGS=	-D_STANDALONE -nostdinc -I../../../../include -I../../..
 CPPFLAGS +=	-I$(SRC)/uts/intel/sys/acpi
+CPPFLAGS +=	-I../../../../lib/libz
 LOADER=		loader
 NEWVERSWHAT=	"ZFS enabled bootstrap loader" x86
 
@@ -72,7 +73,6 @@
 
 SRCS +=	disk.c part.c
 CPPFLAGS += -DLOADER_DISK_SUPPORT
-SRCS +=	crc32.c
 CPPFLAGS += -DLOADER_GPT_SUPPORT
 CPPFLAGS += -DLOADER_MBR_SUPPORT
 
