diff --git a/src/lib/Make.deps b/src/lib/Make.deps
index aae1fcd115098dce75dba69ccc5eef50f7d08217..d75dbf22e58d4070ccf0fa6dba08db9838f88bba 100644
--- a/src/lib/Make.deps
+++ b/src/lib/Make.deps
@@ -2,6 +2,7 @@ bignum.install: fmt.install
 bufio.install: io.install os.install utf8.install
 container/vector.install:
 crypto/aes.install: os.install
+crypto/block.install: fmt.install io.install os.install
 exec.install: os.install strings.install
 exvar.install: fmt.install http.install io.install log.install strconv.install sync.install
 flag.install: fmt.install os.install strconv.install
diff --git a/src/lib/Makefile b/src/lib/Makefile
index 1a9e77a59ecbec507d28475fd8b9d451360e9771..75c6758d36abb1c5d8b92134d514e1976717940b 100644
--- a/src/lib/Makefile
+++ b/src/lib/Makefile
@@ -2,6 +2,13 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
+# After editing the DIRS= list or adding imports to any Go files
+# in any of those directories, run:
+#
+#	p4 edit Make.deps; ./deps.bash
+#
+# to rebuild the dependency information in Make.deps.
+
 all: install
 
 GC=6g
@@ -11,6 +18,7 @@ DIRS=\
 	bufio\
 	container/vector\
 	crypto/aes\
+	crypto/block\
 	exec\
 	exvar\
 	flag\
diff --git a/src/lib/crypto/block/Makefile b/src/lib/crypto/block/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d80954beff5ca06fa70bdd1beedd144b730d533d
--- /dev/null
+++ b/src/lib/crypto/block/Makefile
@@ -0,0 +1,90 @@
+# Copyright 2009 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# DO NOT EDIT.  Automatically generated by gobuild.
+# gobuild -m >Makefile
+
+D=/crypto/
+
+O_arm=5
+O_amd64=6
+O_386=8
+OS=568vq
+
+O=$(O_$(GOARCH))
+GC=$(O)g -I_obj
+CC=$(O)c -FVw
+AS=$(O)a
+AR=6ar
+
+default: packages
+
+clean:
+	rm -rf *.[$(OS)] *.a [$(OS)].out _obj
+
+test: packages
+	gotest
+
+coverage: packages
+	gotest
+	6cov -g `pwd` | grep -v '_test\.go:'
+
+%.$O: %.go
+	$(GC) $*.go
+
+%.$O: %.c
+	$(CC) $*.c
+
+%.$O: %.s
+	$(AS) $*.s
+
+O1=\
+	cipher.$O\
+	xor.$O\
+
+O2=\
+	cmac.$O\
+	ctr.$O\
+	ecb.$O\
+	ofb.$O\
+
+O3=\
+	cbc.$O\
+	cfb.$O\
+	eax.$O\
+
+
+phases: a1 a2 a3
+_obj$D/block.a: phases
+
+a1: $(O1)
+	$(AR) grc _obj$D/block.a cipher.$O xor.$O
+	rm -f $(O1)
+
+a2: $(O2)
+	$(AR) grc _obj$D/block.a cmac.$O ctr.$O ecb.$O ofb.$O
+	rm -f $(O2)
+
+a3: $(O3)
+	$(AR) grc _obj$D/block.a cbc.$O cfb.$O eax.$O
+	rm -f $(O3)
+
+
+newpkg: clean
+	mkdir -p _obj$D
+	$(AR) grc _obj$D/block.a
+
+$(O1): newpkg
+$(O2): a1
+$(O3): a2
+$(O4): a3
+
+nuke: clean
+	rm -f $(GOROOT)/pkg$D/block.a
+
+packages: _obj$D/block.a
+
+install: packages
+	test -d $(GOROOT)/pkg && mkdir -p $(GOROOT)/pkg$D
+	cp _obj$D/block.a $(GOROOT)/pkg$D/block.a