func readFull(r io.Reader, buf []byte) (n int, err error) {
	n, err = io.ReadFull(r, buf)
	if err == io.EOF {
		err = io.ErrUnexpectedEOF
	}
	return
}
readFull is the same as io.ReadFull except that reading zero bytes returns
ErrUnexpectedEOF rather than EOF.
package packet  
import (
	"bufio"
	"crypto/aes"
	"crypto/cipher"
	"crypto/des"
	"crypto/rsa"
	"io"
	"math/big"
	"golang.org/x/crypto/cast5"
	"golang.org/x/crypto/openpgp/errors"
)