in pkg/controller/common/license/verifier.go [150:213]
func (s *Signer) Sign(spec Signable) ([]byte, error) {
toSign, err := spec.SignableContentBytes()
if err != nil {
return nil, err
}
rng := rand.Reader
hashed := sha512.Sum512(toSign)
rsaSig, err := rsa.SignPKCS1v15(rng, s.privateKey, crypto.SHA512, hashed[:])
if err != nil {
return nil, err
}
const magicLen = 13
magic := make([]byte, magicLen)
_, err = rand.Read(magic)
if err != nil {
return nil, err
}
publicKeyBytes, err := x509.MarshalPKIXPublicKey(s.PublicKey)
if err != nil {
return nil, errors2.Wrap(err, "while marshalling public key")
}
encPubKeyBytes, err := encryptWithAESECB(publicKeyBytes)
if err != nil {
return nil, errors2.Wrap(err, "while encrypting public key")
}
hash := make([]byte, base64.StdEncoding.EncodedLen(len(encPubKeyBytes)))
base64.StdEncoding.Encode(hash, encPubKeyBytes)
// version (uint32) + magic length (uint32) + magic + hash length (uint32) + hash + sig length (uint32) + sig
sig := make([]byte, 0, 4+4+magicLen+4+len(hash)+4+len(rsaSig))
buf := bytes.NewBuffer(sig)
if err := writeInt(buf, spec.Version()); err != nil {
return nil, err
}
if err := writeInt(buf, len(magic)); err != nil {
return nil, err
}
_, err = buf.Write(magic)
if err != nil {
return nil, err
}
if err := writeInt(buf, len(hash)); err != nil {
return nil, err
}
_, err = buf.Write(hash)
if err != nil {
return nil, err
}
if err := writeInt(buf, len(rsaSig)); err != nil {
return nil, err
}
_, err = buf.Write(rsaSig)
if err != nil {
return nil, err
}
sigBytes := buf.Bytes()
out := make([]byte, base64.StdEncoding.EncodedLen(len(sigBytes)))
base64.StdEncoding.Encode(out, sigBytes)
return out, nil
}