package pbkd

import "xdx.jelly/xgcl/mac"

type prfer interface {
	prf(data []byte) ([]byte, error)
	hLen() int64
}

const hmacSm3TagSize = 32

type hmacSm3 struct {
	m mac.MAC
}

func newPrfHmacSm3(key []byte) prfer {
	for i := len(key); i < 16; i++ {
		key = append(key, 0)
	}
	m, _ := mac.NewHMacSm3(key, hmacSm3TagSize)
	return &hmacSm3{
		m: m,
	}
}

func (h *hmacSm3) prf(data []byte) ([]byte, error) {
	return h.m.ComputeMAC(data)
}

func (h *hmacSm3) hLen() int64 {
	return hmacSm3TagSize
}
