You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: cast5.go
    path of file: ./repos/goldfish/vendor/github.com/keybase/go-crypto/cast5
    
    the code of the file until where you have to start completion: // Copyright 2010 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.

// Package cast5 implements CAST5, as defined in RFC 2144. CAST5 is a common
// OpenPGP cipher.
package cast5

import "errors"

const BlockSize = 8
const KeySize = 16

type Cipher struct {
	masking [16]uint32
	rotate  [16]uint8
}

func NewCipher(key []byte) (c *Cipher, err error) {
	if len(key) != KeySize {
		return nil, errors.New("CAST5: keys must be 16 bytes")
	}

	c = new(Cipher)
	c.keySchedule(key)
	return
}

func (c *Cipher) BlockSize() int {
	return BlockSize
}

func (c *Cipher) Encrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[
    
func (c *Cipher) Decrypt(dst, src []byte) {
	l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])
	r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])

	l, r = r, l^f1(r, c.masking[15], c.rotate[15])
	l, r = r, l^f3(r, c.masking[14], c.rotate[14])
	l, r = r, l^f2(r, c.masking[13], c.rotate[13])
	l, r = r, l^f1(r, c.masking[12], c.rotate[12])

	l, r = r, l^f3(r, c.masking[11], c.rotate[11])
	l, r = r, l^f2(r, c.masking[10], c.rotate[10])
	l, r = r, l^f1(r, c.masking[9], c.rotate[9])
	l, r = r, l^f3(r, c.masking[8], c.rotate[8])

	l, r = r, l^f2(r, c.masking[7], c.rotate[7])
	l, r = r, l^f1(r, c.masking[6], c.rotate[6])
	l, r = r, l^f3(r, c.masking[5], c.rotate[5])
	l, r = r, l^f2(r, c.masking[4], c.rotate[4])

	l, r = r, l^f1(r, c.masking[3], c.rotate[3])
	l, r = r, l^f3(r, c.masking[2], c.rotate[2])
	l, r = r, l^f2(r, c.masking[1], c.rotate[1])
	l, r = r, l^f1(r, c.masking[0], c.rotate[0])

	dst[0] = uint8(r >> 24)
	dst[1] = uint8(r >> 16)
	dst[2] = uint8(r >> 8)
	dst[3] = uint8(r)
	dst[4] = uint8(l >> 24)
	dst[5] = uint8(l >> 16)
	dst[6] = uint8(l >> 8)
	dst[7] = uint8(l)
}