owned this note
owned this note
Published
Linked with GitHub
# Signature Samples from Prototypes
###### tags: `notary`
The prototype is being actively developed in [github.com/shizhMSFT/notary#dev](https://github.com/shizhMSFT/notary/tree/dev).
## JWS JSON Serialization
### Signing with Raw Keys
The following program driver is used for demo.
```go
package main
import (
"context"
"crypto/rand"
"crypto/rsa"
"fmt"
"time"
"github.com/notaryproject/notary/v2"
"github.com/notaryproject/notary/v2/signature/jws"
"github.com/opencontainers/go-digest"
oci "github.com/opencontainers/image-spec/specs-go/v1"
)
func main() {
ctx := context.Background()
// Generate a RSA key pair for this demo
key, err := rsa.GenerateKey(rand.Reader, 2048)
panicOnError(err)
keyID := "test key"
s, err := jws.NewSigner(keyID, key)
panicOnError(err)
s.TimeStampAuthority = "http://timestamp.sectigo.com"
content := "hello world"
desc := oci.Descriptor{
MediaType: "test media type",
Digest: digest.Canonical.FromString(content),
Size: int64(len(content)),
Annotations: map[string]string{
"mode": "debug",
},
}
signature, err := s.Sign(ctx, desc, ¬ary.SignOptions{
Expiry: time.Now().UTC().Add(time.Hour),
Identity: "test.registry.io/test:example",
Attributes: map[string]interface{}{
"foo": "bar",
}})
panicOnError(err)
fmt.Println(string(signature))
vk, err := jws.NewVerificationKey(keyID, &key.PublicKey)
panicOnError(err)
v := jws.NewVerifier([]*jws.VerificationKey{vk}, nil)
var vOpts notary.VerifyOptions
err = v.Verify(ctx, desc, signature, &vOpts)
panicOnError(err)
}
func panicOnError(err error) {
if err != nil {
panic(err)
}
}
```
Here is a sample signature envelope output by the above program.
```json
{"payload":"eyJub3RhcnkudjIiOnsic3ViamVjdE1hbmlmZXN0Ijp7Im1lZGlhVHlwZSI6InRlc3QgbWVkaWEgdHlwZSIsImRpZ2VzdCI6InNoYTI1NjpiOTRkMjdiOTkzNGQzZTA4YTUyZTUyZDdkYTdkYWJmYWM0ODRlZmUzN2E1MzgwZWU5MDg4ZjdhY2UyZWZjZGU5Iiwic2l6ZSI6MTEsImFubm90YXRpb25zIjp7Im1vZGUiOiJkZWJ1ZyJ9fSwic2lnbmVkQXR0cnMiOnsicmVzZXJ2ZWQiOnsiaWRlbnRpdHkiOiJ0ZXN0LnJlZ2lzdHJ5LmlvL3Rlc3Q6ZXhhbXBsZSJ9LCJjdXN0b20iOnsiZm9vIjoiYmFyIn19fSwiZXhwIjoxNjI3OTc2Mzg4LCJpYXQiOjE2Mjc5NzI3ODh9","protected":"eyJhbGciOiJSUzI1NiIsImNyaXQiOlsiY3R5Il0sImN0eSI6ImFwcGxpY2F0aW9uL3ZuZC5jbmNmLm5vdGFyeS5zaWduYXR1cmUudjIucGF5bG9hZCtqc29uIn0","header":{"timestamp":"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","kid":"test key"},"signature":"NCXxp9zPcSPufwNX3cEjNe4mA1BPoxLGqHK7M7ITd5GxCXH66tVA9dWQP9WpEFdF6i7Bi_Iqm9y69SeVsFsmIQ9Ew82lx0M3DICnbaBp5uaqeDh-COvitkJ_6tLXIs9IeDgdlCkNaonrgq8SICR0NTZbvH0n0QwXgNhdwlGirL3cYdhQKBdfRPyX9Xhg-dAGuRA18ZPcfFc6xZsAlhpyooN2Zx1wCzjjKJVsNcHqoiDn0zDevJlCEzxW_QbMB4iWVR8qySHs-PCXobjgeq9R_JxEB7KkVUCIjDsmFtqC8gGB-28c0QYBLBkSwoSx7O_5ytj8U7_Iob2o4xL9Dgpj-w"}
```
For readability, here is the pretty printed signature envelope.
Note that `timestamp` is for demonstration purpose only, it does not make too much sense if raw key is used.
```json
{
"payload": "eyJub3RhcnkudjIiOnsic3ViamVjdE1hbmlmZXN0Ijp7Im1lZGlhVHlwZSI6InRlc3QgbWVkaWEgdHlwZSIsImRpZ2VzdCI6InNoYTI1NjpiOTRkMjdiOTkzNGQzZTA4YTUyZTUyZDdkYTdkYWJmYWM0ODRlZmUzN2E1MzgwZWU5MDg4ZjdhY2UyZWZjZGU5Iiwic2l6ZSI6MTEsImFubm90YXRpb25zIjp7Im1vZGUiOiJkZWJ1ZyJ9fSwic2lnbmVkQXR0cnMiOnsicmVzZXJ2ZWQiOnsiaWRlbnRpdHkiOiJ0ZXN0LnJlZ2lzdHJ5LmlvL3Rlc3Q6ZXhhbXBsZSJ9LCJjdXN0b20iOnsiZm9vIjoiYmFyIn19fSwiZXhwIjoxNjI3OTc2Mzg4LCJpYXQiOjE2Mjc5NzI3ODh9",
"protected": "eyJhbGciOiJSUzI1NiIsImNyaXQiOlsiY3R5Il0sImN0eSI6ImFwcGxpY2F0aW9uL3ZuZC5jbmNmLm5vdGFyeS5zaWduYXR1cmUudjIucGF5bG9hZCtqc29uIn0",
"header": {
"timestamp": "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",
"kid": "test key"
},
"signature": "NCXxp9zPcSPufwNX3cEjNe4mA1BPoxLGqHK7M7ITd5GxCXH66tVA9dWQP9WpEFdF6i7Bi_Iqm9y69SeVsFsmIQ9Ew82lx0M3DICnbaBp5uaqeDh-COvitkJ_6tLXIs9IeDgdlCkNaonrgq8SICR0NTZbvH0n0QwXgNhdwlGirL3cYdhQKBdfRPyX9Xhg-dAGuRA18ZPcfFc6xZsAlhpyooN2Zx1wCzjjKJVsNcHqoiDn0zDevJlCEzxW_QbMB4iWVR8qySHs-PCXobjgeq9R_JxEB7KkVUCIjDsmFtqC8gGB-28c0QYBLBkSwoSx7O_5ytj8U7_Iob2o4xL9Dgpj-w"
}
```
The `payload` in the signature envelope can be decoded and pretty printed as follows.
```json
{
"notary.v2": {
"subjectManifest": {
"mediaType": "test media type",
"digest": "sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
"size": 11,
"annotations": {
"mode": "debug"
}
},
"signedAttrs": {
"reserved": {
"identity": "test.registry.io/test:example"
},
"custom": {
"foo": "bar"
}
}
},
"exp": 1627976388,
"iat": 1627972788
}
```
The `protected` headers in the signature envelope can be decoded and pretty printed as follows.
```json
{
"alg": "RS256",
"crit": [
"cty"
],
"cty": "application/vnd.cncf.notary.signature.v2.payload+json"
}
```
### Signing with Certificates
The following program driver is used for demo.
```go
package main
import (
"context"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"crypto/x509/pkix"
"fmt"
"math/big"
"time"
"github.com/notaryproject/notary/v2"
"github.com/notaryproject/notary/v2/signature/jws"
"github.com/opencontainers/go-digest"
oci "github.com/opencontainers/image-spec/specs-go/v1"
)
func main() {
ctx := context.Background()
// Generate a RSA key pair for this demo
key, err := rsa.GenerateKey(rand.Reader, 2048)
panicOnError(err)
// Generate a self signed cert
certTemplate := &x509.Certificate{
SerialNumber: big.NewInt(42),
Subject: pkix.Name{
CommonName: "test.example.com",
},
NotBefore: time.Now(),
NotAfter: time.Now().Add(time.Second * 5),
KeyUsage: x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageCodeSigning},
BasicConstraintsValid: true,
}
certBytes, err := x509.CreateCertificate(rand.Reader, certTemplate, certTemplate, &key.PublicKey, key)
panicOnError(err)
certs, err := x509.ParseCertificates(certBytes)
panicOnError(err)
// Sign content
s, err := jws.NewSignerFromCerts(certs, key)
panicOnError(err)
s.TimeStampAuthority = "http://timestamp.sectigo.com"
content := "hello world"
desc := oci.Descriptor{
MediaType: "test media type",
Digest: digest.Canonical.FromString(content),
Size: int64(len(content)),
Annotations: map[string]string{
"mode": "debug",
},
}
signature, err := s.Sign(ctx, desc, ¬ary.SignOptions{
Expiry: time.Now().UTC().Add(time.Hour),
Identity: "test.registry.io/test:example",
Attributes: map[string]interface{}{
"foo": "bar",
}})
panicOnError(err)
fmt.Println(string(signature))
// Verify content
roots := x509.NewCertPool()
for _, cert := range certs {
roots.AddCert(cert)
}
v := jws.NewVerifier(nil, roots)
var vOpts notary.VerifyOptions
err = v.Verify(ctx, desc, signature, &vOpts)
panicOnError(err)
fmt.Println("Content verified")
// Verify content with the cert is expired
fmt.Println("Waiting cert to be expired...")
time.Sleep(time.Second * 10)
err = v.Verify(ctx, desc, signature, &vOpts)
panicOnError(err)
fmt.Println("Content verified with TSA")
}
func panicOnError(err error) {
if err != nil {
panic(err)
}
}
```
Here is a sample signature envelope output by the above program.
```json
{"payload":"eyJub3RhcnkudjIiOnsic3ViamVjdE1hbmlmZXN0Ijp7Im1lZGlhVHlwZSI6InRlc3QgbWVkaWEgdHlwZSIsImRpZ2VzdCI6InNoYTI1NjpiOTRkMjdiOTkzNGQzZTA4YTUyZTUyZDdkYTdkYWJmYWM0ODRlZmUzN2E1MzgwZWU5MDg4ZjdhY2UyZWZjZGU5Iiwic2l6ZSI6MTEsImFubm90YXRpb25zIjp7Im1vZGUiOiJkZWJ1ZyJ9fSwic2lnbmVkQXR0cnMiOnsicmVzZXJ2ZWQiOnsiaWRlbnRpdHkiOiJ0ZXN0LnJlZ2lzdHJ5LmlvL3Rlc3Q6ZXhhbXBsZSJ9LCJjdXN0b20iOnsiZm9vIjoiYmFyIn19fSwiZXhwIjoxNjI3OTgxNTU4LCJpYXQiOjE2Mjc5Nzc5NTh9","protected":"eyJhbGciOiJSUzI1NiIsImNyaXQiOlsiY3R5Il0sImN0eSI6ImFwcGxpY2F0aW9uL3ZuZC5jbmNmLm5vdGFyeS5zaWduYXR1cmUudjIucGF5bG9hZCtqc29uIn0","header":{"timestamp":"MIITZQYJKoZIhvcNAQcCoIITVjCCE1ICAQMxDzANBglghkgBZQMEAgIFADCCAQoGCyqGSIb3DQEJEAEEoIH6BIH3MIH0AgEBBgorBgEEAbIxAgEBMC8wCwYJYIZIAWUDBAIBBCAVmq/q2TvfzowYleLWo3oodnwRSMztwOg9wjF1S0bLLgIUS4+4KOexgEPHezn4D05RP3F6t5IYDzIwMjEwODAzMDgwNTU5WqCBiqSBhzCBhDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDDCNTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIFNpZ25lciAjMqCCDfswggcHMIIE76ADAgECAhEAjHegAI/00bDGPZ86SIONazANBgkqhkiG9w0BAQwFADB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgQ0EwHhcNMjAxMDIzMDAwMDAwWhcNMzIwMTIyMjM1OTU5WjCBhDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDDCNTZWN0aWdvIFJTQSBUaW1lIFN0YW1waW5nIFNpZ25lciAjMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJGHSyyLwfEeoJ7TB8YBylKwvnl5XQlmBi0vNX27wPsn2kJqWRslTOrvQNaafjLIaoF9tFw+VhCBNToiNoz7+CAph6x00BtivD9khwJf78WA7wYc3F5Ok4e4mt5MB06FzHDFDXvsw9njl+nLGdtWRWzuSyBsyT5s/fCb8Sj4kZmq/FrBmoIgOrfv59a4JUnCORuHgTnLw7c6zZ9QBB8amaSAAk0dBahV021SgIPmbkilX8GJWGCK7/GszYdjGI50y4SHQWljgbz2H6p818FBzq2rdosggNQtlQeNx/ULFx6a5daZaVHHTqadKW/neZMNMmNTrszGKYogwWDG8gIsxPnIIt/5J4Khg1HCvMmCGiGEspe81K9EHJaCIpUqhVSu8f0+SXR0/I6uP6Vy9MNaAapQpYt2lRtm6+/a35Qu2RrrTCd9TAX3+CNdxFfIJgV6/IEjX1QJOCpi1arK3+3PU6sf9kSc1ZlZxVZkW/eOUg9m/Jg/RAYTZG7p4RVgUKWx7M+46MkLvsWE990Kndq8KWw9Vu2/eGe2W8heFBy5r4Qtd6L3OZU3b05/HMY8BNYxxX7vPehRfnGtJHQbLNz5fKrvwnZJaGLVi/UD3759jg82dUZbk3bEg+6CviyuNxLxvFbD5K1Dw7dmll6UMvqg9quJUPrOoPMIgRrRRKfM97gxAgMBAAGjggF4MIIBdDAfBgNVHSMEGDAWgBQaofhhGSAPw0F3RSiO0TVfBhIEVTAdBgNVHQ4EFgQUaXU3e7udNUJOv1fTmtufAdGu3tAwDgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwQAYDVR0gBDkwNzA1BgwrBgEEAbIxAQIBAwgwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3JsMHQGCCsGAQUFBwEBBGgwZjA/BggrBgEFBQcwAoYzaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBVGltZVN0YW1waW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEASgN4kEIz7Hsagwk2M5hVu51ABjBrRWrxlA4ZUP9bJV474TnEW7rplZA3N73f+2Ts5YK3lcxXVXBLTvSoh90ihaZXu7ghJ9SgKjGUigchnoq9pxr1AhXLRFCZjOw+ugN3poICkMIuk6m+ITR1Y7ngLQ/PATfLjaL6uFqarqF6nhOTGVWPCZAu3+qIFxbradbhJb1FCJeA11QgKE/Ke7OzpdIAsGA0ZcTjxcOl5LqFqnpp23WkPnlomjaLQ6421GFyPA6FYg2gXnDbZC8Bx8GhxySUo7I8brJeotD6qNG4JRwW5sDVf2gaxGUpNSotiLzqrnTWgufAiLjhT3jwXMrAQFzCn9UyHCzaPKw29wZSmqNAMBewKRaZyaq3iEn36AslM7U/ba+fXwpW3xKxw+7OkXfoIBPpXCTH6kQLSuYThBxN6w21uIagMKeLoZ+0LMzAFiPJkeVCA0uAzuRN5ioBPsBehaAkoRdA1dvb55gQpPHqGRuAVPpHieiYgal1wA7f0GiUeaGgno62t0Jmy9nZay9N2N4+Mh4g5OycTUKNncczmYI3RNQmKSZAjngvue76L/Hxj/5QuHjdFJbeHA5wsCqFarFsaOkq5BArbiH903ydN+QqBtbD8ddo408HeYEIE/6yZF7psTzm0Hgjsgks4iZivzupl1HMx0QygbKvz98wggbsMIIE1KADAgECAhAwD2+s3WaYdHypRjaneC25MA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xOTA1MDIwMDAwMDBaFw0zODAxMTgyMzU5NTlaMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMgbAa/ZLH6ImX0BmD8gkL2cgCFUk7nPoD5T77NawHbWGgSlzkeDtevEzEk0y/NFZbn5p2QWJgn71TJSeS7JY8ITm7aGPwEFkmZvIavVcRB5h/RGKs3EWsnb111JTXJWD9zJ41OYOioe/M5YSdO/8zm7uaQjQqzQFcN/nqJc1zjxFrJw06PE37PFcqwuCnf8DZRSt/wflXMkPQEovA8NT7ORAY5unSd1VdEXOzQhe5cBlK9/gM/REQpXhMl/VuC9RpyCvpSdv7QgsGB+uE31DT/b0OqFjIpWcdEtlEzIjDzTFKKcvSb/01Mgx2Bpm1gKVPQF5/0xrPnIhRfHuCkZpCkvRuPd25Ffnz82Pg4wZytGtzWvlr7aTGDMqLufDRTUGMQwmHSCIc9iVrUhcxIe/arKCFiHd6QV6xlV/9A5VC0m7kUaOm/N14Tw1/AoxU9kgwLU++Le8bwCKPRt2ieKBtKWh97oaw7wW33pdmmTIBxKlyx3GSuTlZicl57rjsF4VsZEJd8GEpoGLZ8DXv2DolNnyrH6jaFkyYiSWcuoRsDJ8qb/fVfbEnb6ikEk1Bv8cqUUotStQxykSYtBORQDHin6G6UirqXDTYLQjdprt9v3GEBXc/Bxo/tKfUU2wfeNgvq5yQ1TgH36tjlYMu9vGFCJ10+dM70atZ2h3pVBeqeDAgMBAAGjggFaMIIBVjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUGqH4YRkgD8NBd0UojtE1XwYSBFUwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAbVSBpTNdFuG1U4GRdd8DejILLSWEEbKw2yp9KgX1vDsn9FqguUlZkClsYcu1UNviffmfAO9Aw63T4uRW+VhBz/FC5RB9/7B0H4/GXAn5M17qoBwmWFzztBEP1dXD4rzVWHi/SHbhRGdtj7BDEA+N5Pk4Yr8TAcWFo0zFzLJTMJWk1vSWVgi4zVx/AZa+clJqO0I3fBZ4OZOTlJux3LJtQW1nzclvkD1/RXLBGyPWwlWEZuSzxWYG9vPWS16toytCiiGS/qhvWiVwYoFzY16gu9jc10rTPa+DBjgSHSSHLeT8AtY+dwS8BDa153fLnC6NIxi5o8JHHfBd1qFzVwVomqfJN2Udvuq82EKDQwWli6YJ/9GhlKZOqj0J9QVst9JkWtgqIsJLnfE5XkzeSD2bNJaaCV+O/fexUpHOP4n2HKG1qXUfcb9bQ11lPVCBbqvw0NP8srMftpmWJvQ8eYtcZMzN7iea5aDADHKHwW5NWtMe6vBE5jJvHOsXTpTDeGUgOw9Bqh/poUGd/rG4oGUqNODeqPk85sEwu8CgYyz8XBYAqNDEf+oRnR4GxqZtMl20OAkrSQeq/eww2vGnL8+3/frQo4TZJ577AWZ3uVYQ4SBuxq6x+ba6yDVdM3aO8XwgDCp3rrWiAoa6Ke60WgCxjKvj+QrJVF3UuWp0nr1IrpgxggQtMIIEKQIBATCBkjB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgQ0ECEQCMd6AAj/TRsMY9nzpIg41rMA0GCWCGSAFlAwQCAgUAoIIBazAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMDgwMzA4MDU1OVowPwYJKoZIhvcNAQkEMTIEMG684TJTrwdjhcxvoPEzuun9QdOmyRj9mSbKU2+P5WNJHjAwLlcWBmvUNus0EscZLDCB7QYLKoZIhvcNAQkQAgwxgd0wgdowgdcwFgQUlRE3EB2ILzG9UT+UmtpMaK2MCPUwgbwEFALWW5Xig3DBVwCV+oj5I92Tf62PMIGjMIGOpIGLMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQIQMA9vrN1mmHR8qUY2p3gtuTANBgkqhkiG9w0BAQEFAASCAgBFtEGaG1aG8hPsHB4OCLT7ImZI6M5uGEFkrMHzNtjH6SZLEgfdvo1TSv7w0fEFi03Z1RKvWFEelmnRINWi7In/x91C9NwPj61tr7u2Y2NWbiTjYngDV6ComSpirr/R7Gu/tlctCaAQNAXxY9XFVIv5Iz2DjEuSzoC1rH0UbdPr5PpL5QlzqCV9e3/KfZN4igHzW+flgkg+tr1G82l2Bt1HUmy04RmsBTtfcgiU+NpuMi6iiox4rqCQ7K4KlMSEOQFd+NaKFwxT6iBS/LLUhmTADXRn2nRpVFg9poRVQGDPjlZ/uoLM2JH3dlhSiJ6whmqxZ1b0dYdzwmpRgPwlDJq40uLezT+EDVlaHPiEZgZa4JSmANuT+3H+XFWlEhHe+5wzchHXDz72aVsF8wOxqKXeFaip/0Z9yxTQg/1k24QudoUyPMFU7oeUo8yWsmYSOnHcsWzrkXB5liGNQ8b+54fI5IZsMLu9YR3if3fw3owmp4zMSOtFNCFVyJI3WJqigMeNdV1tW5Udgqpnu/Ss0uAK+BXsD1+XMuGXUYL18Q4raFxzSGIlsqJdddsjaxVQb9lVM5RJRwNc42gu0yOblnh79uNkRGDcOkNoVaxHIhJ/28IEvBnbu7j0pivCd/2QaqFQR3o3oGG6EY6rPXVg3QC+laygwnBGR4uioiRzLlss8A==","x5c":["MIIC5jCCAc6gAwIBAgIBKjANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExB0ZXN0LmV4YW1wbGUuY29tMB4XDTIxMDgwMzA4MDU1OFoXDTIxMDgwMzA4MDYwM1owGzEZMBcGA1UEAxMQdGVzdC5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOLGi+Buc3NKVNDubYOhF+adTxH0UNC0Fb3MPGij05hAyKnJwYcbKi7MwD29bJk0nr4wpyDRC2qgZbcD6X3PkDBkGgduqho31IE4THvwH4W76GnEd7ESmCzgIZNWPNfPBMz0WSjYpO9IaWRxLu5dl+XYZFqW72dJEoMJ/8vyvKc1CsglCXyMyT7sRDbzxBVhRBkyQgVNJ3ZHEAAtTldSg2yCXbIGh1OrdEkIjUqpV2nETeo3hB4TYCnEzpN9XgOqQ7JhSj2BTaRm7x8mFGjAfV4KtdL170W38THuNCPc1Jg/hy5GBpw/CL7G7UVEsejJ8zX7ognkgxb/ofmZ5xwQd5cCAwEAAaM1MDMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBAAZyy283bOT4WmXy/KZtAzmV6Kssdecp5Oxer5Dvr3CE7hoIirWSlL+/duKL6DmYHaT4xF2ZZBBvp3i7zxKufItHwmLtqnti443TaFJsAUAXCmi0mVfDFzdJtZHnN/SmBpuLtaeI+kreMtvEe6649E04fNmvtutc4laUHrpFIHJa1dqAuvSj4k0MBt7swNDrjXXSHWn/FPNhWMUuut1gx7BpJX05UawWc1tSXwIo2Tq7MZqOWiVYVLpLV4WKTTQI1WNQw+Bx42K6hZvRdOMRpNvKEp0/U42LMSfKD8ibFDeubsBhu5zdegTlpzUPnc1Ygy7kpkzqIqfy+OCaJXfdXtU="]},"signature":"HQDHCoakwusWw_16m_BG4wvajciSuXyVTcOMqwFxnykxNYjVGDoqJg_JnT1xM-r4cp_b0f_BSlLReLsnvcqP_U4bUU72wCX3K-9tyZrdrZsp31pWIc9rCSJK6p54rusYIOC90hc7PvXDhgWvwTyPVemV0odqA5z8v76euwLwUYZPS9qWRy4os6BuXq0LDf_8MzX3PHScQfrHtq03YDQMUqJ2uaiFSA9Ws_rP9T6tthNIsVtahg9Kg5YvgsD5gj8qAqtCpFBdxBvGwWoqqgWy8nLXiCRE6vZMo6uKyJ3H1W3_snXMFURMNVVaO5YLrPkj0dgO9uLG2_d1xKPsLkNlBQ"}
```
For readability, here is the pretty printed signature envelope.
```json
{
"payload": "eyJub3RhcnkudjIiOnsic3ViamVjdE1hbmlmZXN0Ijp7Im1lZGlhVHlwZSI6InRlc3QgbWVkaWEgdHlwZSIsImRpZ2VzdCI6InNoYTI1NjpiOTRkMjdiOTkzNGQzZTA4YTUyZTUyZDdkYTdkYWJmYWM0ODRlZmUzN2E1MzgwZWU5MDg4ZjdhY2UyZWZjZGU5Iiwic2l6ZSI6MTEsImFubm90YXRpb25zIjp7Im1vZGUiOiJkZWJ1ZyJ9fSwic2lnbmVkQXR0cnMiOnsicmVzZXJ2ZWQiOnsiaWRlbnRpdHkiOiJ0ZXN0LnJlZ2lzdHJ5LmlvL3Rlc3Q6ZXhhbXBsZSJ9LCJjdXN0b20iOnsiZm9vIjoiYmFyIn19fSwiZXhwIjoxNjI3OTgxNTU4LCJpYXQiOjE2Mjc5Nzc5NTh9",
"protected": "eyJhbGciOiJSUzI1NiIsImNyaXQiOlsiY3R5Il0sImN0eSI6ImFwcGxpY2F0aW9uL3ZuZC5jbmNmLm5vdGFyeS5zaWduYXR1cmUudjIucGF5bG9hZCtqc29uIn0",
"header": {
"timestamp": "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",
"x5c": [
"MIIC5jCCAc6gAwIBAgIBKjANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExB0ZXN0LmV4YW1wbGUuY29tMB4XDTIxMDgwMzA4MDU1OFoXDTIxMDgwMzA4MDYwM1owGzEZMBcGA1UEAxMQdGVzdC5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOLGi+Buc3NKVNDubYOhF+adTxH0UNC0Fb3MPGij05hAyKnJwYcbKi7MwD29bJk0nr4wpyDRC2qgZbcD6X3PkDBkGgduqho31IE4THvwH4W76GnEd7ESmCzgIZNWPNfPBMz0WSjYpO9IaWRxLu5dl+XYZFqW72dJEoMJ/8vyvKc1CsglCXyMyT7sRDbzxBVhRBkyQgVNJ3ZHEAAtTldSg2yCXbIGh1OrdEkIjUqpV2nETeo3hB4TYCnEzpN9XgOqQ7JhSj2BTaRm7x8mFGjAfV4KtdL170W38THuNCPc1Jg/hy5GBpw/CL7G7UVEsejJ8zX7ognkgxb/ofmZ5xwQd5cCAwEAAaM1MDMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBAAZyy283bOT4WmXy/KZtAzmV6Kssdecp5Oxer5Dvr3CE7hoIirWSlL+/duKL6DmYHaT4xF2ZZBBvp3i7zxKufItHwmLtqnti443TaFJsAUAXCmi0mVfDFzdJtZHnN/SmBpuLtaeI+kreMtvEe6649E04fNmvtutc4laUHrpFIHJa1dqAuvSj4k0MBt7swNDrjXXSHWn/FPNhWMUuut1gx7BpJX05UawWc1tSXwIo2Tq7MZqOWiVYVLpLV4WKTTQI1WNQw+Bx42K6hZvRdOMRpNvKEp0/U42LMSfKD8ibFDeubsBhu5zdegTlpzUPnc1Ygy7kpkzqIqfy+OCaJXfdXtU="
]
},
"signature": "HQDHCoakwusWw_16m_BG4wvajciSuXyVTcOMqwFxnykxNYjVGDoqJg_JnT1xM-r4cp_b0f_BSlLReLsnvcqP_U4bUU72wCX3K-9tyZrdrZsp31pWIc9rCSJK6p54rusYIOC90hc7PvXDhgWvwTyPVemV0odqA5z8v76euwLwUYZPS9qWRy4os6BuXq0LDf_8MzX3PHScQfrHtq03YDQMUqJ2uaiFSA9Ws_rP9T6tthNIsVtahg9Kg5YvgsD5gj8qAqtCpFBdxBvGwWoqqgWy8nLXiCRE6vZMo6uKyJ3H1W3_snXMFURMNVVaO5YLrPkj0dgO9uLG2_d1xKPsLkNlBQ"
}
```
The `payload` in the signature envelope can be decoded and pretty printed as follows.
```json
{
"notary.v2": {
"subjectManifest": {
"mediaType": "test media type",
"digest": "sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
"size": 11,
"annotations": {
"mode": "debug"
}
},
"signedAttrs": {
"reserved": {
"identity": "test.registry.io/test:example"
},
"custom": {
"foo": "bar"
}
}
},
"exp": 1627981558,
"iat": 1627977958
}
```
The `protected` headers in the signature envelope can be decoded and pretty printed as follows.
```json
{
"alg": "RS256",
"crit": [
"cty"
],
"cty": "application/vnd.cncf.notary.signature.v2.payload+json"
}
```