Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

convert signature library to implement crypto.Signer interface #69

Merged
merged 14 commits into from Jul 1, 2021
Merged
48 changes: 20 additions & 28 deletions cmd/sign.go
Expand Up @@ -16,17 +16,18 @@
package cmd

import (
"context"
"crypto/x509"
"encoding/pem"
"bytes"
"errors"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"

"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/sigstore/sigstore/pkg/cryptoutils"
"github.com/sigstore/sigstore/pkg/generated/client/operations"
"github.com/sigstore/sigstore/pkg/httpclients"
"github.com/sigstore/sigstore/pkg/oauthflow"
Expand All @@ -46,8 +47,6 @@ var signCmd = &cobra.Command{
}
},
RunE: func(cmd *cobra.Command, args []string) error {
ctx := context.Background()

payload, err := ioutil.ReadFile(viper.GetString("artifact"))
if err != nil {
return err
Expand Down Expand Up @@ -76,23 +75,21 @@ var signCmd = &cobra.Command{
}
fmt.Println("\nReceived OpenID Scope retrieved for account:", idToken.Subject)

signer, err := signature.NewDefaultECDSASignerVerifier()
signer, _, err := signature.NewDefaultECDSASignerVerifier()
if err != nil {
return err
}

pub, err := signer.PublicKey(ctx)
pub, err := signer.PublicKey()
if err != nil {
return err
}

pubBytes, err := x509.MarshalPKIXPublicKey(pub)

pubBytes, err := cryptoutils.MarshalPublicKeyToDER(pub)
if err != nil {
return err
}

proof, _, err := signer.Sign(ctx, []byte(idToken.Subject))
proof, err := signer.SignMessage(strings.NewReader(idToken.Subject))
if err != nil {
return err
}
Expand All @@ -110,44 +107,39 @@ var signCmd = &cobra.Command{
os.Exit(1)
}

clientPEM, rootPEM := pem.Decode([]byte(certResp.Payload))
certPEM := pem.EncodeToMemory(clientPEM)

rootBlock, _ := pem.Decode([]byte(rootPEM))
if rootBlock == nil {
return err
}

certBlock, _ := pem.Decode([]byte(certPEM))
if certBlock == nil {
certs, err := cryptoutils.UnmarshalCertificatesFromPEM([]byte(certResp.Payload))
if err != nil {
return err
} else if len(certs) == 0 {
return errors.New("no certificates were found in response")
}

cert, err := x509.ParseCertificate(certBlock.Bytes)
signingCert := certs[0]
signingCertPEM, err := cryptoutils.MarshalCertificateToPEM(signingCert)
if err != nil {
return err
}

fmt.Println("Received signing cerificate with serial number: ", cert.SerialNumber)
fmt.Println("Received signing cerificate with serial number: ", signingCert.SerialNumber)

fmt.Printf("Received signing Cerificate: %+v\n", signingCert.Subject)

signature, signedVal, err := signer.Sign(ctx, payload)
signature, err := signer.SignMessage(bytes.NewReader(payload))
if err != nil {
panic(fmt.Sprintf("Error occurred while during artifact signing: %s", err))
}

// Send to rekor
fmt.Println("Sending entry to transparency log")
tlogEntry, err := tlog.UploadToRekor(
certPEM,
signedVal,
signingCertPEM,
signature,
viper.GetString("rekor-server"),
payload,
)
if err != nil {
return err
}
fmt.Println("Rekor entry successful. Index number: :", tlogEntry)
fmt.Println("Rekor entry successful. URL: ", tlogEntry)
return nil
},
}
Expand Down
19 changes: 9 additions & 10 deletions go.mod
Expand Up @@ -4,17 +4,16 @@ go 1.16

require (
cloud.google.com/go v0.81.0
github.com/ReneKroon/ttlcache/v2 v2.5.0
github.com/coreos/go-oidc/v3 v3.0.0
github.com/gabriel-vasile/mimetype v1.2.0
github.com/go-openapi/errors v0.20.0
github.com/go-openapi/runtime v0.19.28
github.com/go-openapi/runtime v0.19.29
github.com/go-openapi/strfmt v0.20.1
github.com/go-openapi/swag v0.19.15
github.com/go-openapi/validate v0.20.2
github.com/go-test/deep v1.0.7
github.com/golang/snappy v0.0.3 // indirect
github.com/google/go-containerregistry v0.4.1
github.com/google/trillian v1.3.14-0.20210413093047-5e12fb368c8f
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
Expand All @@ -25,16 +24,16 @@ require (
github.com/pierrec/lz4 v2.6.0+incompatible // indirect
github.com/pkg/errors v0.9.1
github.com/segmentio/ksuid v1.0.3
github.com/sigstore/rekor v0.1.2-0.20210514231425-7e3d950f34c6
github.com/sigstore/rekor v0.2.0
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
github.com/spf13/cobra v1.1.3
github.com/spf13/viper v1.7.1
github.com/spf13/viper v1.8.0
github.com/stretchr/testify v1.7.0
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
golang.org/x/net v0.0.0-20210421230115-4e50805a0758 // indirect
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1
github.com/theupdateframework/go-tuf v0.0.0-20201230183259-aee6270feb55
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf
golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c
google.golang.org/protobuf v1.26.0
gopkg.in/square/go-jose.v2 v2.5.1
)