derivecert: fix ecdsa code to be deterministic (#3989)

* derivecert: fix ecdsa code to be deterministic

* lint
This commit is contained in:
Caleb Doxsey 2023-02-17 16:57:15 -07:00 committed by GitHub
parent 6b3e34c39f
commit b13afc7b0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 246 additions and 46 deletions

40
pkg/derivecert/notrand.go Normal file
View file

@ -0,0 +1,40 @@
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)
}