pomerium/pkg/derivecert/notrand.go
Caleb Doxsey b13afc7b0c
derivecert: fix ecdsa code to be deterministic (#3989)
* derivecert: fix ecdsa code to be deterministic

* lint
2023-02-17 16:57:15 -07:00

40 lines
796 B
Go

package derivecert
import (
"bytes"
"crypto/ecdsa"
"crypto/elliptic"
"crypto/sha256"
"io"
"golang.org/x/crypto/hkdf"
"github.com/pomerium/pomerium/internal/deterministicecdsa"
)
type readerType byte
const (
readerTypeCAPrivateKey readerType = iota
readerTypeCACertificate
readerTypeServerPrivateKey
readerTypeServerCertificate
readerTypeSerialNumber
)
func newReader(readerType readerType, psk []byte, domains ...string) io.Reader {
var buf bytes.Buffer
buf.WriteByte(byte(readerType))
buf.Write(psk)
buf.WriteByte(0)
for _, domain := range domains {
buf.WriteString(domain)
buf.WriteByte(0)
}
return hkdf.New(sha256.New, buf.Bytes(), nil, nil)
}
func deriveKey(r io.Reader) (*ecdsa.PrivateKey, error) {
return deterministicecdsa.GenerateKey(elliptic.P256(), r)
}