package padding

const (
	MIN_BLOCK_SIZE = 8
	MAX_BLOCK_SIZE = 128
)

type Padding interface {
	// Pad 补码，一般用法 data = Pad(data, sm4.ByteSize),
	// 但返回时dst和src可能内存地址相同,也可能不同。
	Pad(src []byte, blockSize int) (dst []byte)

	// Unpad 去补码，一般用法 data = Unpad(data, sm4.ByteSize),
	// 如出错，则dst = src，不改变src。
	Unpad(src []byte, blockSize int) (dst []byte, err error)
}

var P7 Padding = P7Padding{}
var P5 Padding = P5Padding{}
var None Padding = NonePadding{}

type NonePadding struct{}

func (NonePadding) Pad(src []byte, blockSize int) (dst []byte) {
	return src
}
func (NonePadding) Unpad(src []byte, blockSize int) (dst []byte, err error) {
	return src, nil
}
